tools_ui_1c
tools_ui_1c copied to clipboard
Некорректно заполнение ограничений полей в "e1cib/app/Обработка.УИ_РедакторСКД"
Описание ошибки В обработке "УИ_РедакторСКД" при выключенном автозаполнении доступных полей, во время чтения СКД в данные формы, всё равно срабатывает автозаполнение доступных полей.
Воспроизведение ошибки 1
- Запустить e1cib/app/Обработка.УИ_РедакторСКД
- Вставить текст запроса
ВЫБРАТЬ
СпрНоменклатура.Ссылка КАК Номенклатура,
ШтрихкодыНоменклатуры.Штрихкод КАК КоличествоШК
{ВЫБРАТЬ
Номенклатура.*,
КоличествоШК}
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
ПО (СпрНоменклатура.Ссылка = ШтрихкодыНоменклатуры.Номенклатура)
ГДЕ
НЕ СпрНоменклатура.ЭтоГруппа
{ГДЕ
СпрНоменклатура.Ссылка.* КАК Номенклатура}
- Снять галочку "Автозаполнение"
- Запомнить (1), как установленные галочки ограничениях полей.
- Снять все ограничения. Запомнить(2), как установленные галочки ограничениях полей.
- Сохранить схему в файл
- Загрузить схему (только что сохраненную) из файла.
- Проверить состояние галочек в ограничении полей. Оно будет равно состоянию "Запомнить (1)".
Воспроизведение ошибки 2 Так же, проблема воспроизводится если открывать обработку "УИ_РедакторСКД" из отчета "УИ_КонсольОтчетов" и после П.5. (воспроизведения проблемы) выполнить: 6. нажать кнопку "Применить" 7. Повторно зайти в конструктор схемы компоновки данных, нажав соответствующую кнопку.
Ожидаемое поведение На этапе 8 воспроизведения ошибки, мы ожидаем увидеть состояние галочек в ограничениях полей таким же, как было в "Запомнить (2)"
Дополнительная информация Не знаю насколько корректное это решение, но для себя исправил так: В обработке "УИ_РедакторСКД", форме "Форма" изменил 1333 строку кода
вместо
ЗаполнятьОграничение=Истина;
использую
ЗаполнятьОграничение = СтрокаНабора.АвтоЗаполнениеДоступныхПолей;
Полный текст процедуры (тут строку не удалял, что бы наглядно было видно изменения, обернул в "//++" и "//--"):
&НаСервере
Процедура ДобавитьПолеНабора(СтрокаНабора, Колонка, ВидыПолейНаборовДанных, МассивПолей, КолонкаРодитель = Неопределено)
ОграничениеПоле=Ложь;
ОграничениеУсловие=Ложь;
ОграничениеГруппа=Ложь;
ОграничениеПорядок=Ложь;
ЗаполнятьОграничение=Ложь;
Если ТипЗнч(Колонка) = Тип("КолонкаВложеннаяТаблицаСхемыЗапроса") Тогда
Вид=ВидыПолейНаборовДанных.Набор;
ИмяКолонки=Колонка.Псевдоним;
ИначеЕсли ТипЗнч(Колонка) = Тип("КолонкаСхемыЗапроса") Тогда
Вид=ВидыПолейНаборовДанных.Поле;
ИмяКолонки=Колонка.Псевдоним;
ИначеЕсли ТипЗнч(Колонка) = Тип("ПолеНастройки") Тогда
Если Колонка.ТипЗначения = Новый ОписаниеТипов("ТаблицаЗначений") Тогда
Вид=ВидыПолейНаборовДанных.Набор;
ИмяКолонки=Колонка.Имя;
Иначе
Вид=ВидыПолейНаборовДанных.Поле;
ИмяКолонки=Колонка.Имя;
КонецЕсли;
//++бас
//ЗаполнятьОграничение=Истина;
ЗаполнятьОграничение = СтрокаНабора.АвтоЗаполнениеДоступныхПолей;
//--бас
ОграничениеПоле=Не Колонка.Поле;
ОграничениеУсловие=Не Колонка.Отбор;
ОграничениеГруппа=Не Колонка.Измерение;
ОграничениеПорядок=Не Колонка.Порядок;
КонецЕсли;
Если КолонкаРодитель = Неопределено Тогда
Поле=ИмяКолонки;
Иначе
Поле=КолонкаРодитель.Псевдоним + "." + ИмяКолонки;
КонецЕсли;
СтруктураПоиска=Новый Структура;
СтруктураПоиска.Вставить("Поле", Поле);
МассивСтрок=СтрокаНабора.Поля.НайтиСтроки(СтруктураПоиска);
Если МассивСтрок.Количество() = 0 Тогда
НовоеПоле=СтрокаНабора.Поля.Добавить();
НовоеПоле.Поле=Поле;
НовоеПоле.ПутьКДанным=Поле;
Иначе
НовоеПоле=МассивСтрок[0];
КонецЕсли;
НовоеПоле.Вид=Вид;
НовоеПоле.Картинка=КартинкаВидаПоляНабораДанных(НовоеПоле.Вид, ВидыПолейНаборовДанных);
Если ТипЗнч(Колонка) = Тип("КолонкаВложеннаяТаблицаСхемыЗапроса") Тогда
Для Каждого ТекКолонка Из Колонка.Колонки Цикл
ДобавитьПолеНабора(СтрокаНабора, ТекКолонка, ВидыПолейНаборовДанных, МассивПолей, Колонка);
КонецЦикла;
ИначеЕсли Вид = ВидыПолейНаборовДанных.Поле Тогда
НовоеПоле.ТипЗначенияЗапроса=Колонка.ТипЗначения;
КонецЕсли;
Если ЗаполнятьОграничение Тогда
НовоеПоле.ОграничениеИспользованияГруппировка=ОграничениеГруппа;
НовоеПоле.ОграничениеИспользованияПоле=ОграничениеПоле;
НовоеПоле.ОграничениеИспользованияПорядок=ОграничениеПорядок;
НовоеПоле.ОграничениеИспользованияУсловие=ОграничениеУсловие;
НовоеПоле.ОграничениеИспользованияРеквизитовГруппировка=ОграничениеГруппа;
НовоеПоле.ОграничениеИспользованияРеквизитовПоле=ОграничениеПоле;
НовоеПоле.ОграничениеИспользованияРеквизитовПорядок=ОграничениеПорядок;
НовоеПоле.ОграничениеИспользованияРеквизитовУсловие=ОграничениеУсловие;
КонецЕсли;
МассивПолей.Добавить(Поле);
КонецПроцедуры
Просьба - исправить данную проблему. И ответить: верен ли мой способ исправления?
А в конфигураторе, если загрузить сохраненный файл в СКД, все верно?
*везде где говорится обработка, имеется ввиду обработка "УИ_РедакторСКД"
В конфигураторе:
- Набросал с нуля в конфигураторе, сохранил как "Схема 1". Эталон
- Загрузил "схему 1" в новый макет, в конфигураторе - Совпадает с эталоном
В обработке, без доработок:
- Набросал с нуля схему в обработке, сохранил как "Схема 2". Не совпадает с эталоном
- по умолчанию "ограничения поля" встали не так, как в конфигураторе. Фиксируем как "Проблема 1".
- у некоторых "ограничения поля" в конфигураторе установлен "только просмотр". В обработке всё доступно. Фиксируем как "Проблема 2"
- в конфигураторе у поля "КоличествоШК" установлена роль "Измерение". В обработке - "Без роли". Фиксируем как "Проблема 3".
- не заполнилась колонка "Заголовок". Фиксируем как "Проблема 4" p.s. проблемы 1-4 далее мной игнорируются, т.к. топик был не о них
- Вручную расставляем "ограничения поля" в обработке, что бы совпадало с Эталоном
- Загрузил "Схему 2" в обработку. Не совпадает с эталоном
- слетели "ограничения поля". Фиксируем как "Проблема 5"
- Загрузил "Схему 1" в обработку. Не совпадает с эталоном
- слетели "ограничения поля". Опять фиксируем как "Проблема 5"
В обработке, после доработок:
- Загрузил "Схему 2" в обработку. Совпадает с эталоном
- "Проблема 5" - решена.
- Загрузил "Схему 1" в обработку. Не совпадает с эталоном
- слетали "ограничения поля" из "Проблема 2"
Дополнительно:
- Ответ на ваш вопрос. Загрузил "схему 2" в конфигуратор. "Проблемы 5" нет, но есть "Проблема 3"
- В пункте 8 не ожидал проблем. Предполагал, что файлы "Схема 1" и "Схема 2" идентичны. Проверяем через "сравнить файлы"
- файлы "Схема 1" и "Схема 2" отличаются. Фиксируем как "Проблема 6"
Итоги моей доработки: - Частично решена "Проблема 5". - Корректность доработки всё ещё под вопросом
В идеале, наверное решить сначала "Проблему 6", и после заняться остальными.
Скрины этапов 1-8
В конфигураторе Этап 1. Набросал с нуля в конфигураторе, сохранил как "Схема 1":
Этап 2. Загрузил "схему 1" в новый макет, в конфигураторе:
В обработке, без доработок Этап 3. Набросал с нуля схему в обработке, сохранил как "Схема 2":
Этап 4. Вручную расставляем "ограничения поля" в обработке, что бы совпадало с Эталоном:
Этап 5. Загрузил "Схему 2" в обработку:
Этап 6. Загрузил "Схему 1" в обработку:
В обработке, после доработок Этап 7. Загрузил "Схему 2" в обработку:
Этап 8. Загрузил "Схему 1" в обработку: