tools_ui_1c icon indicating copy to clipboard operation
tools_ui_1c copied to clipboard

Некорректно заполнение ограничений полей в "e1cib/app/Обработка.УИ_РедакторСКД"

Open worksable opened this issue 2 years ago • 2 comments

Описание ошибки В обработке "УИ_РедакторСКД" при выключенном автозаполнении доступных полей, во время чтения СКД в данные формы, всё равно срабатывает автозаполнение доступных полей.

Воспроизведение ошибки 1

  1. Запустить e1cib/app/Обработка.УИ_РедакторСКД
  2. Вставить текст запроса
ВЫБРАТЬ
        СпрНоменклатура.Ссылка КАК Номенклатура,
	ШтрихкодыНоменклатуры.Штрихкод КАК КоличествоШК
{ВЫБРАТЬ
	Номенклатура.*,
	КоличествоШК}
ИЗ
	Справочник.Номенклатура КАК СпрНоменклатура
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
		ПО (СпрНоменклатура.Ссылка = ШтрихкодыНоменклатуры.Номенклатура)
ГДЕ
	НЕ СпрНоменклатура.ЭтоГруппа
{ГДЕ
	СпрНоменклатура.Ссылка.* КАК Номенклатура}
  1. Снять галочку "Автозаполнение"
  2. Запомнить (1), как установленные галочки ограничениях полей.
  3. Снять все ограничения. Запомнить(2), как установленные галочки ограничениях полей.
  4. Сохранить схему в файл
  5. Загрузить схему (только что сохраненную) из файла.
  6. Проверить состояние галочек в ограничении полей. Оно будет равно состоянию "Запомнить (1)".

Воспроизведение ошибки 2 Так же, проблема воспроизводится если открывать обработку "УИ_РедакторСКД" из отчета "УИ_КонсольОтчетов" и после П.5. (воспроизведения проблемы) выполнить: 6. нажать кнопку "Применить" 7. Повторно зайти в конструктор схемы компоновки данных, нажав соответствующую кнопку.

Ожидаемое поведение На этапе 8 воспроизведения ошибки, мы ожидаем увидеть состояние галочек в ограничениях полей таким же, как было в "Запомнить (2)"

Дополнительная информация Не знаю насколько корректное это решение, но для себя исправил так: В обработке "УИ_РедакторСКД", форме "Форма" изменил 1333 строку кода

вместо

ЗаполнятьОграничение=Истина;

использую

ЗаполнятьОграничение = СтрокаНабора.АвтоЗаполнениеДоступныхПолей;

Полный текст процедуры (тут строку не удалял, что бы наглядно было видно изменения, обернул в "//++" и "//--"):

&НаСервере
Процедура ДобавитьПолеНабора(СтрокаНабора, Колонка, ВидыПолейНаборовДанных, МассивПолей, КолонкаРодитель = Неопределено)
	ОграничениеПоле=Ложь;
	ОграничениеУсловие=Ложь;
	ОграничениеГруппа=Ложь;
	ОграничениеПорядок=Ложь;
	ЗаполнятьОграничение=Ложь;
	Если ТипЗнч(Колонка) = Тип("КолонкаВложеннаяТаблицаСхемыЗапроса") Тогда
		Вид=ВидыПолейНаборовДанных.Набор;
		ИмяКолонки=Колонка.Псевдоним;
	ИначеЕсли ТипЗнч(Колонка) = Тип("КолонкаСхемыЗапроса") Тогда
		Вид=ВидыПолейНаборовДанных.Поле;
		ИмяКолонки=Колонка.Псевдоним;
	ИначеЕсли ТипЗнч(Колонка) = Тип("ПолеНастройки") Тогда
		Если Колонка.ТипЗначения = Новый ОписаниеТипов("ТаблицаЗначений") Тогда
			Вид=ВидыПолейНаборовДанных.Набор;
			ИмяКолонки=Колонка.Имя;
		Иначе
			Вид=ВидыПолейНаборовДанных.Поле;
			ИмяКолонки=Колонка.Имя;
		КонецЕсли;

		//++бас
		//ЗаполнятьОграничение=Истина;
		ЗаполнятьОграничение = СтрокаНабора.АвтоЗаполнениеДоступныхПолей;
		//--бас

		ОграничениеПоле=Не Колонка.Поле;
		ОграничениеУсловие=Не Колонка.Отбор;
		ОграничениеГруппа=Не Колонка.Измерение;
		ОграничениеПорядок=Не Колонка.Порядок;	

	КонецЕсли;

	Если КолонкаРодитель = Неопределено Тогда
		Поле=ИмяКолонки;
	Иначе
		Поле=КолонкаРодитель.Псевдоним + "." + ИмяКолонки;
	КонецЕсли;

	СтруктураПоиска=Новый Структура;
	СтруктураПоиска.Вставить("Поле", Поле);

	МассивСтрок=СтрокаНабора.Поля.НайтиСтроки(СтруктураПоиска);
	Если МассивСтрок.Количество() = 0 Тогда
		НовоеПоле=СтрокаНабора.Поля.Добавить();
		НовоеПоле.Поле=Поле;
		НовоеПоле.ПутьКДанным=Поле;
	Иначе
		НовоеПоле=МассивСтрок[0];
	КонецЕсли;
	НовоеПоле.Вид=Вид;
	НовоеПоле.Картинка=КартинкаВидаПоляНабораДанных(НовоеПоле.Вид, ВидыПолейНаборовДанных);

	Если ТипЗнч(Колонка) = Тип("КолонкаВложеннаяТаблицаСхемыЗапроса") Тогда
		Для Каждого ТекКолонка Из Колонка.Колонки Цикл
			ДобавитьПолеНабора(СтрокаНабора, ТекКолонка, ВидыПолейНаборовДанных, МассивПолей, Колонка);
		КонецЦикла;
	ИначеЕсли Вид = ВидыПолейНаборовДанных.Поле Тогда
		НовоеПоле.ТипЗначенияЗапроса=Колонка.ТипЗначения;
	КонецЕсли;

	Если ЗаполнятьОграничение Тогда
		НовоеПоле.ОграничениеИспользованияГруппировка=ОграничениеГруппа;
		НовоеПоле.ОграничениеИспользованияПоле=ОграничениеПоле;
		НовоеПоле.ОграничениеИспользованияПорядок=ОграничениеПорядок;
		НовоеПоле.ОграничениеИспользованияУсловие=ОграничениеУсловие;

		НовоеПоле.ОграничениеИспользованияРеквизитовГруппировка=ОграничениеГруппа;
		НовоеПоле.ОграничениеИспользованияРеквизитовПоле=ОграничениеПоле;
		НовоеПоле.ОграничениеИспользованияРеквизитовПорядок=ОграничениеПорядок;
		НовоеПоле.ОграничениеИспользованияРеквизитовУсловие=ОграничениеУсловие;
	КонецЕсли;

	МассивПолей.Добавить(Поле);
КонецПроцедуры

Просьба - исправить данную проблему. И ответить: верен ли мой способ исправления?

worksable avatar Mar 15 '22 02:03 worksable

А в конфигураторе, если загрузить сохраненный файл в СКД, все верно?

LevkinSergey avatar Mar 15 '22 09:03 LevkinSergey

*везде где говорится обработка, имеется ввиду обработка "УИ_РедакторСКД"

В конфигураторе:

  1. Набросал с нуля в конфигураторе, сохранил как "Схема 1". Эталон
  2. Загрузил "схему 1" в новый макет, в конфигураторе - Совпадает с эталоном

В обработке, без доработок:

  1. Набросал с нуля схему в обработке, сохранил как "Схема 2". Не совпадает с эталоном
    • по умолчанию "ограничения поля" встали не так, как в конфигураторе. Фиксируем как "Проблема 1".
    • у некоторых "ограничения поля" в конфигураторе установлен "только просмотр". В обработке всё доступно. Фиксируем как "Проблема 2"
    • в конфигураторе у поля "КоличествоШК" установлена роль "Измерение". В обработке - "Без роли". Фиксируем как "Проблема 3".
    • не заполнилась колонка "Заголовок". Фиксируем как "Проблема 4" p.s. проблемы 1-4 далее мной игнорируются, т.к. топик был не о них
  2. Вручную расставляем "ограничения поля" в обработке, что бы совпадало с Эталоном
  3. Загрузил "Схему 2" в обработку. Не совпадает с эталоном
    • слетели "ограничения поля". Фиксируем как "Проблема 5"
  4. Загрузил "Схему 1" в обработку. Не совпадает с эталоном
    • слетели "ограничения поля". Опять фиксируем как "Проблема 5"

В обработке, после доработок:

  1. Загрузил "Схему 2" в обработку. Совпадает с эталоном
    • "Проблема 5" - решена.
  2. Загрузил "Схему 1" в обработку. Не совпадает с эталоном
    • слетали "ограничения поля" из "Проблема 2"

Дополнительно:

  1. Ответ на ваш вопрос. Загрузил "схему 2" в конфигуратор. "Проблемы 5" нет, но есть "Проблема 3"
  2. В пункте 8 не ожидал проблем. Предполагал, что файлы "Схема 1" и "Схема 2" идентичны. Проверяем через "сравнить файлы"
    • файлы "Схема 1" и "Схема 2" отличаются. Фиксируем как "Проблема 6"

Итоги моей доработки: - Частично решена "Проблема 5". - Корректность доработки всё ещё под вопросом

В идеале, наверное решить сначала "Проблему 6", и после заняться остальными.

Скрины этапов 1-8

В конфигураторе Этап 1. Набросал с нуля в конфигураторе, сохранил как "Схема 1":

1  набросал в конфигураторе

Этап 2. Загрузил "схему 1" в новый макет, в конфигураторе:

2  Загрузил схему №1 в конфигуратор

В обработке, без доработок Этап 3. Набросал с нуля схему в обработке, сохранил как "Схема 2":

3  набросал в обработке 'редактор СКД'

Этап 4. Вручную расставляем "ограничения поля" в обработке, что бы совпадало с Эталоном:

4  в обработке привёл 'ограничения поля' к такому же виду, как по умаолчанию встает в конфигураторе

Этап 5. Загрузил "Схему 2" в обработку:

5  Загрузил схему №2 в обработку (без доработок)

Этап 6. Загрузил "Схему 1" в обработку:

6  Загрузил схему №1 в обработку (без доработок)

В обработке, после доработок Этап 7. Загрузил "Схему 2" в обработку:

7  Загрузил схему №2 в обработку (после доработок)

Этап 8. Загрузил "Схему 1" в обработку:

8  Загрузил схему №1 в обработку (после доработок)

worksable avatar Mar 16 '22 01:03 worksable