Дополнительные свойства элемента управления ТабличноеПоле для полей настройки. Для данного расширения свойство ТекущаяСтрока возвращает значение типа ПолеНастройки.
Полное описание, параметры и ограничения
Расширение табличного поля полей настройки (Setting fields table box extension)
Расширение табличного поля полей настройки (Setting fields table box extension)
Доступен, начиная с версии 8.0.
Свойства:
ОтображатьИзмерения (ShowDimensions)
ОтображатьОтбор (ShowCondition)
ОтображатьПоля (ShowFields)
ОтображатьПорядок (ShowOrder)
Описание:
Дополнительные свойства элемента управления ТабличноеПоле для полей настройки.
Для данного расширения свойство ТекущаяСтрока возвращает значение типа ПолеНастройки.
Доступность:
Толстый клиент.
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Настроить реальный редактор построителя и отличить UI порядок от сортировки счета
Самостоятельный полный модуль своей обычной общей формы; настоящие native источники и полная проверка собственного счета.
Где и как запускать
Полный модуль ОбщаяФорма.НастройкиПостроителя85, обычная форма толстого клиента.
Подготовка
Вручную создайте НОВУЮ отдельную файловую ИБ по точному пути C:\1C85_OwnOrdinaryEditors\47a694a9-b495-4d06-9bcc-6d773cc319fd\Base. Это UUID-каталог учебного стенда, не идентификатор рабочей ИБ. Не используйте копию УТ/КА/УНФ/БП, клиент-серверную ИБ или рабочий сеанс. Здесь ничего не создавалось и 1С не запускалась.
Конфигурация Уч85ОбычныеРедакторыСчета: основное приложение Обычное приложение, Режим совместимости Не использовать; платформа8.5.1.1343. Нет BSP, расширений, общих модулей, прикладных объектов и хранилищ. Создайте только одну роль УчебныйАдминистратор85: Администрирование для ПолучитьПользователей, использование своих общих форм и перечисления. Единственный пользователь с тем же именем получает эту роль; нет гостя/другого пользователя.
Создайте Перечисление.ПозицияСчета85 и ровно3 значения В ЭТОМ ПОРЯДКЕ: Книга85 (синоним Книга), Бумага85 (синоним Бумага), Папка85 (синоним Папка). Форм перечисления нет. Это настоящие metadata enum-ссылки, не строки и не ранее существующие записи каталога.
Создайте три Общие формы, вид Обычная: ОписаниеКолонки85, НастройкиПостроителя85, РедакторСчета85. Они не являются формами отчета и не используют поле/табличное поле в качестве владельца. Данные у всех показанных полей ввода и табличных полей оставьте пустыми: модуль задает настоящий native Значение, а не строку произвольного имени переменной.
В выбранной форме добавьте реквизит Состояние85 Строка500 с полем только для просмотра. Все остальные источники существуют в переменных полного модуля и создаются заново ПриОткрытии. Источники не подгружаются из соседней карточки; общий модуль не нужен.
Свяжите обычное событие формы ПриОткрытии с ПриОткрытии() без параметров. Для каждой названной обычной кнопки свяжите Нажатие с одноименной процедурой(Кнопка), ровно один native параметр. Не вызывайте эти события вручную и не передавайте Неопределено вместо кнопки.
Вставьте полный основной модуль этой карточки в точную выбранную общую форму. Остальные две общие формы могут пока оставаться пустыми, если их уроки еще не установлены: они не вызываются и не предоставляют скрытых помощников. В модуле обычного приложения установите полный поддерживающий модуль этой карточки; он открывает только выбранную форму.
Запускайте только собственную новую ИБ в ТОЛСТОМ клиенте с ОБЫЧНЫМ приложением. Сначала вручную проверьте строку соединения и имя пользователя. Guard обязан отказать при другом пути, версии, режиме совместимости, metadata составе или пользователе; guard не является обещанием защиты рабочего окружения от произвольного другого кода.
Добавьте настоящие ТабличноеПоле Поля85 и Порядок85, ПолеТабличногоДокумента Документ85 и кнопки ПереключитьНастройки85, ОграничитьПорядок85. Документ85 только для просмотра; никакие отчеты/макеты не нужны.
Код строит ОписаниеИсточникаДанных из собственного TV: Код85 имеет настоящий тип ПеречислениеСсылка.ПозицияСчета85, Название85 содержит реальную Строка(Код85). Меняется лишь путь descriptor-колонки Название85 на Код85.Представление; это договор зависимости колонок, не попытка прочитать .Представление у произвольной строки.
Поля85.Значение получает именно Builder.ДоступныеПоля, Порядок85.Значение — именно Builder.Порядок. После этого СоздатьКолонки. НастройкаПорядка читается из настоящего Порядок85, а не заменяется Новый НастройкаПорядка.
Перем Начато85;
Перем СвоиСтроки85;
Перем СвоеОписание85;
Перем СвойПостроитель85;
Перем ИсходныйXML85;
Перем ПолитикаИзменена85;
Процедура ПриОткрытии()
ПроверитьСреду85();
Если Начато85 <> Неопределено Тогда
ВызватьИсключение "Нужен новый экземпляр собственной формы";
КонецЕсли;
Начато85 = Истина;
СвоиСтроки85 = СтрокиСчета85(ЧисловойТип85());
ПроверитьСтроки85(СвоиСтроки85, Ложь);
ИсходныйXML85 = XML85(СвоиСтроки85);
СвоеОписание85 = Новый ОписаниеИсточникаДанных(СвоиСтроки85);
Если СвоеОписание85.Колонки.Количество() <> 5 Тогда
ВызватьИсключение "Описание должно создаться из всех пяти колонок собственного источника";
КонецЕсли;
Представлений85 = 0;
Для Каждого ОписаниеКолонки85 Из СвоеОписание85.Колонки Цикл
Если СвоиСтроки85.Колонки.Найти(ОписаниеКолонки85.Имя) = Неопределено Тогда
ВызватьИсключение "Колонка описания не принадлежит своему источнику";
КонецЕсли;
ОписаниеКолонки85.Поле = Истина;
ОписаниеКолонки85.Порядок = Истина;
ОписаниеКолонки85.Измерение = ОписаниеКолонки85.Имя = "Код85";
Если ОписаниеКолонки85.Имя = "Название85" Тогда
ОписаниеКолонки85.ПутьКДанным = "Код85.Представление";
Представлений85 = Представлений85 + 1;
Иначе
ОписаниеКолонки85.ПутьКДанным = ОписаниеКолонки85.Имя;
КонецЕсли;
КонецЦикла;
Если Представлений85 <> 1 Тогда
ВызватьИсключение "Нет единственной зависимой колонки представления";
КонецЕсли;
СвойПостроитель85 = Новый ПостроительОтчета;
СвойПостроитель85.ИсточникДанных = СвоеОписание85;
СвойПостроитель85.ВыбранныеПоля.Добавить("Сумма85", "Сумма85");
СвойПостроитель85.Порядок.Добавить("Количество85", "Количество85", "Количество", НаправлениеСортировки.Убыв);
СвойПостроитель85.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
СвойПостроитель85.ВыводитьЗаголовокОтчета = Ложь;
СвойПостроитель85.ВыводитьПодвалОтчета = Ложь;
СвойПостроитель85.ВыводитьШапкуТаблицы = Ложь;
СвойПостроитель85.ВыводитьПодвалТаблицы = Ложь;
СвойПостроитель85.ВыводитьОбщиеИтоги = Ложь;
СвойПостроитель85.ВыводитьДетальныеЗаписи = Истина;
Поля85 = ТабличноеПоле85("Поля85");
Поля85.Значение = СвойПостроитель85.ДоступныеПоля;
Поля85.СоздатьКолонки();
Порядок85 = ТабличноеПоле85("Порядок85");
Порядок85.Значение = СвойПостроитель85.Порядок;
Порядок85.СоздатьКолонки();
УстановитьВид85(Истина);
ПолитикаИзменена85 = Ложь;
ПроверитьИВывести85();
КонецПроцедуры
Процедура УстановитьВид85(Подробно85)
Поля85 = ТабличноеПоле85("Поля85");
Если Поля85.Значение <> СвойПостроитель85.ДоступныеПоля Тогда
ВызватьИсключение "Табличное поле должно редактировать поля именно своего построителя";
КонецЕсли;
Поля85.ОтображатьПоля = Истина;
Поля85.ОтображатьИзмерения = Подробно85;
Поля85.ОтображатьОтбор = Подробно85;
Поля85.ОтображатьПорядок = Подробно85;
Если Не Поля85.ОтображатьПоля Или Поля85.ОтображатьИзмерения <> Подробно85
Или Поля85.ОтображатьОтбор <> Подробно85 Или Поля85.ОтображатьПорядок <> Подробно85 Тогда
ВызватьИсключение "Отображение собственного редактора не подтвердилось";
КонецЕсли;
КонецПроцедуры
Процедура ПереключитьНастройки85(Кнопка)
ПроверитьКнопку85(Кнопка, "ПереключитьНастройки85");
УстановитьВид85(Не ЭлементыФормы.Поля85.ОтображатьИзмерения);
ПроверитьИВывести85();
КонецПроцедуры
Процедура ОграничитьПорядок85(Кнопка)
ПроверитьКнопку85(Кнопка, "ОграничитьПорядок85");
Если ПолитикаИзменена85 Тогда
ВызватьИсключение "Политика уже проверена; для повтора откройте новую форму";
КонецЕсли;
Порядок85 = ТабличноеПоле85("Порядок85");
Если Порядок85.Значение <> СвойПостроитель85.Порядок Тогда
ВызватьИсключение "Чужой источник списка порядка";
КонецЕсли;
Управление85 = Порядок85.НастройкаПорядка;
Если ТипЗнч(Управление85) <> Тип("НастройкаПорядка") Тогда
ВызватьИсключение "Нужна реальная readonly коллекция управления своего элемента";
КонецЕсли;
Для Каждого Правило85 Из Управление85 Цикл
Если Правило85.Имя <> "Количество85" И Правило85.Имя <> "Сумма85" И Правило85.Имя <> "Код85" И Правило85.Имя <> "Цена85" Тогда
ВызватьИсключение "Неизвестная политика интерактивного порядка";
КонецЕсли;
КонецЦикла;
ПолитикаИзменена85 = Истина;
ПравилоСуммы85 = Управление85.Найти("Сумма85");
Если ПравилоСуммы85 = Неопределено Тогда
ПравилоСуммы85 = Управление85.Добавить("Сумма85", Истина);
КонецЕсли;
ПравилоСуммы85.Доступность = Ложь;
Если Управление85.Найти("Сумма85") <> ПравилоСуммы85 Или ПравилоСуммы85.Имя <> "Сумма85" Или ПравилоСуммы85.Доступность Тогда
ВызватьИсключение "Не сохранилась политика собственного интерактивного порядка";
КонецЕсли;
ПроверитьИВывести85();
КонецПроцедуры
Процедура ПроверитьИВывести85()
ПроверитьСтроки85(СвоиСтроки85, Ложь);
Если XML85(СвоиСтроки85) <> ИсходныйXML85 Или СвойПостроитель85.ИсточникДанных <> СвоеОписание85 Тогда
ВызватьИсключение "Изменился полный собственный источник";
КонецЕсли;
Для Каждого ОписаниеКолонки85 Из СвоеОписание85.Колонки Цикл
Если ОписаниеКолонки85.ПутьКДанным <> ?(ОписаниеКолонки85.Имя = "Название85", "Код85.Представление", ОписаниеКолонки85.Имя) Тогда
ВызватьИсключение "Не совпали все реальные пути описания источника";
КонецЕсли;
КонецЦикла;
КодПоля85 = СвойПостроитель85.ДоступныеПоля.Найти("Код85");
Если КодПоля85 = Неопределено Тогда
ВызватьИсключение "Нет родительского поля собственного кода";
КонецЕсли;
ЕстьПредставление85 = Ложь;
Для Каждого Дочернее85 Из КодПоля85.Поля Цикл
Если Дочернее85.ПутьКДанным = "Код85.Представление" Тогда
ЕстьПредставление85 = Истина;
КонецЕсли;
КонецЦикла;
Если Не ЕстьПредставление85 Или СвойПостроитель85.Порядок.Количество() <> 1 Тогда
ВызватьИсключение "Нет настоящей зависимости или изменился реальный порядок";
КонецЕсли;
РеальныйПорядок85 = СвойПостроитель85.Порядок.Получить(0);
Если РеальныйПорядок85.Имя <> "Количество85" Или РеальныйПорядок85.Направление <> НаправлениеСортировки.Убыв Тогда
ВызватьИсключение "UI политика не заменяет настоящий порядок построителя";
КонецЕсли;
Если СвойПостроитель85.ВыбранныеПоля.Количество() <> 1 Или СвойПостроитель85.ВыбранныеПоля.Получить(0).ПутьКДанным <> "Сумма85" Тогда
ВызватьИсключение "Изменился реальный состав вывода построителя";
КонецЕсли;
Документ85 = Новый ТабличныйДокумент;
СвойПостроитель85.Выполнить();
СвойПостроитель85.Вывести(Документ85);
Если Документ85.ВысотаТаблицы < 1 Или Документ85.ВысотаТаблицы > 12 Или Документ85.ШиринаТаблицы <> 1 Тогда
ВызватьИсключение "Нужна одна фактическая колонка суммы без неизвестного оформления";
КонецЕсли;
Числа85 = Новый Массив;
Для Ряд85 = 1 По Документ85.ВысотаТаблицы Цикл
Ячейка85 = Документ85.Область(Ряд85, 1);
Если Ячейка85.СодержитЗначение И ТипЗнч(Ячейка85.Значение) = Тип("Число") Тогда
Числа85.Добавить(Ячейка85.Значение);
КонецЕсли;
КонецЦикла;
Если Числа85.Количество() <> 3 Тогда
ВызватьИсключение "Нужны три реально выведенные суммы";
КонецЕсли;
Для Индекс85 = 0 По 2 Цикл
Если Числа85[Индекс85] <> СвоиСтроки85[2 - Индекс85].Сумма85 Тогда
ВызватьИсключение "Нативный вывод не совпал с независимым порядком4/3/2 и суммами200/300/500";
КонецЕсли;
КонецЦикла;
Если XML85(СвоиСтроки85) <> ИсходныйXML85 Тогда
ВызватьИсключение "Нативный построитель изменил полный исходный счет";
КонецЕсли;
ЭлементыФормы.Документ85.Значение = Документ85;
Состояние85 = "Native вывод200/300/500. Отображение и разрешение UI не заменили реальную сортировку. Полный исходный счет1000 сохранен.";
КонецПроцедуры
Процедура ПроверитьСреду85()
Если СтрокаСоединенияИнформационнойБазы() <> "File=""C:\1C85_OwnOrdinaryEditors\47a694a9-b495-4d06-9bcc-6d773cc319fd\Base"";" Тогда
ВызватьИсключение "Нужна собственная новая файловая учебная ИБ по точному пути";
КонецЕсли;
Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
ВызватьИсключение "Не совпали версия, конфигурация или режим совместимости";
КонецЕсли;
Если Метаданные.ОбщиеФормы.Количество() <> 3 Или Метаданные.Перечисления.Количество() <> 1
Или Метаданные.Роли.Количество() <> 1 Или Метаданные.Роли.Найти("УчебныйАдминистратор85") = Неопределено Тогда
ВызватьИсключение "Нужны только три собственные общие формы, перечисление и учебная роль";
КонецЕсли;
Для Каждого ИмяФормы85 Из СтрРазделить("ОписаниеКолонки85,НастройкиПостроителя85,РедакторСчета85", ",") Цикл
Если Метаданные.ОбщиеФормы.Найти(ИмяФормы85) = Неопределено Тогда
ВызватьИсключение "Нет собственной общей формы";
КонецЕсли;
КонецЦикла;
СвоеПеречисление85 = Метаданные.Перечисления.Найти("ПозицияСчета85");
Если СвоеПеречисление85 = Неопределено Тогда
ВызватьИсключение "Нет собственного перечисления";
КонецЕсли;
Имена85 = СтрРазделить("Книга85,Бумага85,Папка85", ",");
Если СвоеПеречисление85.ЗначенияПеречисления.Количество() <> 3 Тогда
ВызватьИсключение "Нужны ровно три собственных значения перечисления";
КонецЕсли;
Для Индекс85 = 0 По 2 Цикл
Если СвоеПеречисление85.ЗначенияПеречисления.Получить(Индекс85).Имя <> Имена85[Индекс85] Тогда
ВызватьИсключение "Изменился состав собственного перечисления";
КонецЕсли;
КонецЦикла;
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0
Или Метаданные.Отчеты.Количество() <> 0 Или Метаданные.Обработки.Количество() <> 0
Или Метаданные.ОбщиеМодули.Количество() <> 0 Или Метаданные.Константы.Количество() <> 0
Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0
Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0
Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0
Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0
Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0
Или Метаданные.ХранилищаНастроек.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Прикладные объекты и хранилища в этом стенде запрещены";
КонецЕсли;
Если РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.БазаДанных).Количество() <> 0
Или РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.СеансАктивные).Количество() <> 0
Или РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.СеансОтключенные).Количество() <> 0 Тогда
ВызватьИсключение "Расширения запрещены";
КонецЕсли;
Пользователь85 = ПользователиИнформационнойБазы.ТекущийПользователь();
Пользователи85 = ПользователиИнформационнойБазы.ПолучитьПользователей();
Если Пользователь85 = Неопределено Или Пользователи85.Количество() <> 1 Тогда
ВызватьИсключение "Нужен единственный реальный учебный пользователь";
КонецЕсли;
Если Пользователь85.Имя <> "УчебныйАдминистратор85"
Или Пользователи85[0].УникальныйИдентификатор <> Пользователь85.УникальныйИдентификатор Тогда
ВызватьИсключение "Не совпал собственный пользователь";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьКнопку85(Кнопка, Имя85)
ПроверитьСреду85();
Если ТипЗнч(Кнопка) <> Тип("Кнопка") Или Кнопка.Имя <> Имя85 Или Кнопка <> ЭлементыФормы[Имя85] Тогда
ВызватьИсключение "Команда должна прийти от собственной настоящей кнопки";
КонецЕсли;
КонецПроцедуры
Функция ТабличноеПоле85(Имя85)
ПолеТаблицы85 = ЭлементыФормы[Имя85];
Если ТипЗнч(ПолеТаблицы85) <> Тип("ТабличноеПоле") Или ПолеТаблицы85.Имя <> Имя85 Или ПолеТаблицы85.Данные <> "" Тогда
ВызватьИсключение "Нужно свое настоящее обычное табличное поле без связи Данные";
КонецЕсли;
Возврат ПолеТаблицы85;
КонецФункции
Функция СтрокиСчета85(ТипКоличества85)
Строки85 = Новый ТаблицаЗначений;
Строки85.Колонки.Добавить("Код85", Новый ОписаниеТипов("ПеречислениеСсылка.ПозицияСчета85"));
Строки85.Колонки.Добавить("Название85", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(20)));
Строки85.Колонки.Добавить("Количество85", ТипКоличества85);
Денежный85 = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(9, 0, ДопустимыйЗнак.Неотрицательный));
Строки85.Колонки.Добавить("Цена85", Денежный85);
Строки85.Колонки.Добавить("Сумма85", Денежный85);
Коды85 = Новый Массив;
Коды85.Добавить(Перечисления.ПозицияСчета85.Книга85);
Коды85.Добавить(Перечисления.ПозицияСчета85.Бумага85);
Коды85.Добавить(Перечисления.ПозицияСчета85.Папка85);
Для Индекс85 = 0 По 2 Цикл
Строка85 = Строки85.Добавить();
Строка85.Код85 = Коды85[Индекс85];
Строка85.Название85 = Строка(Строка85.Код85);
Строка85.Количество85 = Индекс85 + 2;
Строка85.Цена85 = ?(Индекс85 = 0, 250, ?(Индекс85 = 1, 100, 50));
Строка85.Сумма85 = Строка85.Количество85 * Строка85.Цена85;
КонецЦикла;
Возврат Строки85;
КонецФункции
Функция ЧисловойТип85()
Возврат Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(9, 0, ДопустимыйЗнак.Неотрицательный));
КонецФункции
Функция XML85(Объект85)
Писатель85 = Новый ЗаписьXML;
Писатель85.УстановитьСтроку();
СериализаторXDTO.ЗаписатьXML(Писатель85, Объект85);
Возврат Писатель85.Закрыть();
КонецФункции
Процедура ПроверитьСтроки85(Результат85, ТолькоКнига85)
Если ТипЗнч(Результат85) <> Тип("ТаблицаЗначений") Или Результат85.Колонки.Количество() <> 5
Или Результат85.Количество() <> ?(ТолькоКнига85, 1, 3) Тогда
ВызватьИсключение "Неверный тип или полный размер фактического счета";
КонецЕсли;
Для Каждого Имя85 Из СтрРазделить("Код85,Название85,Количество85,Цена85,Сумма85", ",") Цикл
Если Результат85.Колонки.Найти(Имя85) = Неопределено Тогда
ВызватьИсключение "Нет фактической колонки счета";
КонецЕсли;
КонецЦикла;
Эталон85 = СтрокиСчета85(ЧисловойТип85());
Увидено85 = Новый Соответствие;
Итог85 = 0;
Для Каждого Факт85 Из Результат85 Цикл
Если ТипЗнч(Факт85.Код85) <> Тип("ПеречислениеСсылка.ПозицияСчета85") Или Увидено85.Получить(Факт85.Код85) <> Неопределено Тогда
ВызватьИсключение "Чужой тип кода или повторенная строка";
КонецЕсли;
Исходная85 = Эталон85.Найти(Факт85.Код85, "Код85");
Если Исходная85 = Неопределено Тогда
ВызватьИсключение "Код не принадлежит собственным трем строкам";
КонецЕсли;
Если ТолькоКнига85 И Факт85.Код85 <> Перечисления.ПозицияСчета85.Книга85 Тогда
ВызватьИсключение "В фильтр попала другая позиция";
КонецЕсли;
Для Каждого Имя85 Из СтрРазделить("Название85,Количество85,Цена85,Сумма85", ",") Цикл
Если ТипЗнч(Факт85[Имя85]) <> ТипЗнч(Исходная85[Имя85]) Или Факт85[Имя85] <> Исходная85[Имя85] Тогда
ВызватьИсключение "Не совпала фактическая ячейка исходного счета";
КонецЕсли;
КонецЦикла;
Увидено85.Вставить(Факт85.Код85, Истина);
Итог85 = Итог85 + Факт85.Количество85 * Факт85.Цена85;
КонецЦикла;
Если Итог85 <> ?(ТолькоКнига85, 500, 1000) Или Результат85.Итог("Сумма85") <> Итог85 Тогда
ВызватьИсключение "Не совпали независимый пересчет и реальные суммы всех строк";
КонецЕсли;
КонецПроцедурыМодуль обычного приложения: открытие только НастройкиПостроителя85
Конфигурация → Модуль обычного приложения. Событие ПриНачалеРаботыСистемы; ровно0параметров.
Процедура ПриНачалеРаботыСистемы()
ПолучитьОбщуюФорму("НастройкиПостроителя85", , Новый УникальныйИдентификатор).Открыть();
КонецПроцедурыРазбор по шагам
Подготовьте только указанный собственный FileCF и настоящие controls.
Откройте форму настоящим application callback; initializer строит только собственные объекты в памяти.
Используйте только подготовленные native кнопки и сверяйте реальные source/owner/type/results до и после каждого действия.
Как проверить результат
Фактический построитель выводит200/300/500 в одну колонку: реальная сортировка количества по убыванию4/3/2. Нативные ячейки читаются, не заполняются контрольными числами.
Переключите компактный/подробный редактор: ОтображатьПоля остаетсяИстина, остальные три флага совместноFalse/True с readback; реальный вывод остается200/300/500 и полный источник1000.
ОграничитьПорядок85 отключает только интерактивное добавление собственной Сумма85 через реальное правило Доступность. Свой уже заданный native порядок Количество85 убыванием сохраняется и повторный native вывод подтверждает его; результат не подменяется сортировкой исходного TV.
Повтор ограничения отказывает. Чужой путь descriptor/поле/порядок или лишняя политика отказывает, неизвестные элементы не удаляются. Если нативное отображение имеет неожиданную ширину/числа, код честно отказывает — статический тест не доказывает формат actual UI.
Ожидаемый результат
Рабочая задача отделяет типизацию, настройки интерфейса и настоящее вычисление счета; все PRIMARY употреблены в основном модуле своей формы.
На что обратить внимание
Код только написан и проверяется статически: actual1С/UI/БД/сеть/печать/хранилища не выполнялись. Отрисовку и реальные callbacks проверяйте лично в подготовленной новой ИБ; резервные копии не создавались.
Это обычные ПолеВвода/ТабличноеПоле толстого клиента, НЕ управляемые ПолеФормы/ТаблицаФормы. ТипЗначения можно записать только у несвязанного контрола; для связанного Данные это readonly. Value/Data недоступны, если control сам назначен владельцем формы — поэтому владелец здесь только обычная форма.
Режимы дерева, отображения полей/именованных настроек, доступа к интерактивному порядку и ограничений доступных полей меняют интерфейс редактора. Это не фильтр счета, не security, не запрет использования поля в схеме; числа проверяются отдельным настоящим процессором.
После частичной ошибки настройки не обещаны атомарность или rollback. Закройте свой экземпляр и откройте новый; чужие UI настройки не очищаются. Sticky отказ этапов СКД нельзя сбросить повторным initializer.
Параметрические ограничения6937 НЕ используются и не кредитуются: хотя English alias совпадает с available-fields extension, их реальный тип другой; Add3445 имеет противоречивый native return. FIELD5998 берется только из своего настоящего ДоступныеПоляКомпоновкиДанных, Add3286 возвращает именно FieldRestriction.
Оформление в коллекционном выводе не объявляется видимым цветом: реальные данные результата проверяются независимо; пользователь видит политики и именованные элементы только в настоящем редакторе. Не создавайте новый control-extension/type из неизвестного конструктора.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.