Расширение табличного поля полей настройки

Типы · Setting fields table box extension

Дополнительные свойства элемента управления ТабличноеПоле для полей настройки. Для данного расширения свойство ТекущаяСтрока возвращает значение типа ПолеНастройки.

Полное описание, параметры и ограничения

Расширение табличного поля полей настройки (Setting fields table box extension)

Расширение табличного поля полей настройки (Setting fields table box extension)

Доступен, начиная с версии 8.0.

Свойства:
ОтображатьИзмерения (ShowDimensions)
ОтображатьОтбор (ShowCondition)
ОтображатьПоля (ShowFields)
ОтображатьПорядок (ShowOrder)

Описание:

Дополнительные свойства элемента управления ТабличноеПоле для полей настройки.
Для данного расширения свойство ТекущаяСтрока возвращает значение типа ПолеНастройки.

Доступность:

Толстый клиент.

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Настроить реальный редактор построителя и отличить UI порядок от сортировки счета

Самостоятельный полный модуль своей обычной общей формы; настоящие native источники и полная проверка собственного счета.

Где и как запускать

Полный модуль ОбщаяФорма.НастройкиПостроителя85, обычная форма толстого клиента.

Подготовка

  1. Вручную создайте НОВУЮ отдельную файловую ИБ по точному пути C:\1C85_OwnOrdinaryEditors\47a694a9-b495-4d06-9bcc-6d773cc319fd\Base. Это UUID-каталог учебного стенда, не идентификатор рабочей ИБ. Не используйте копию УТ/КА/УНФ/БП, клиент-серверную ИБ или рабочий сеанс. Здесь ничего не создавалось и 1С не запускалась.

  2. Конфигурация Уч85ОбычныеРедакторыСчета: основное приложение Обычное приложение, Режим совместимости Не использовать; платформа8.5.1.1343. Нет BSP, расширений, общих модулей, прикладных объектов и хранилищ. Создайте только одну роль УчебныйАдминистратор85: Администрирование для ПолучитьПользователей, использование своих общих форм и перечисления. Единственный пользователь с тем же именем получает эту роль; нет гостя/другого пользователя.

  3. Создайте Перечисление.ПозицияСчета85 и ровно3 значения В ЭТОМ ПОРЯДКЕ: Книга85 (синоним Книга), Бумага85 (синоним Бумага), Папка85 (синоним Папка). Форм перечисления нет. Это настоящие metadata enum-ссылки, не строки и не ранее существующие записи каталога.

  4. Создайте три Общие формы, вид Обычная: ОписаниеКолонки85, НастройкиПостроителя85, РедакторСчета85. Они не являются формами отчета и не используют поле/табличное поле в качестве владельца. Данные у всех показанных полей ввода и табличных полей оставьте пустыми: модуль задает настоящий native Значение, а не строку произвольного имени переменной.

  5. В выбранной форме добавьте реквизит Состояние85 Строка500 с полем только для просмотра. Все остальные источники существуют в переменных полного модуля и создаются заново ПриОткрытии. Источники не подгружаются из соседней карточки; общий модуль не нужен.

  6. Свяжите обычное событие формы ПриОткрытии с ПриОткрытии() без параметров. Для каждой названной обычной кнопки свяжите Нажатие с одноименной процедурой(Кнопка), ровно один native параметр. Не вызывайте эти события вручную и не передавайте Неопределено вместо кнопки.

  7. Вставьте полный основной модуль этой карточки в точную выбранную общую форму. Остальные две общие формы могут пока оставаться пустыми, если их уроки еще не установлены: они не вызываются и не предоставляют скрытых помощников. В модуле обычного приложения установите полный поддерживающий модуль этой карточки; он открывает только выбранную форму.

  8. Запускайте только собственную новую ИБ в ТОЛСТОМ клиенте с ОБЫЧНЫМ приложением. Сначала вручную проверьте строку соединения и имя пользователя. Guard обязан отказать при другом пути, версии, режиме совместимости, metadata составе или пользователе; guard не является обещанием защиты рабочего окружения от произвольного другого кода.

  9. Добавьте настоящие ТабличноеПоле Поля85 и Порядок85, ПолеТабличногоДокумента Документ85 и кнопки ПереключитьНастройки85, ОграничитьПорядок85. Документ85 только для просмотра; никакие отчеты/макеты не нужны.

  10. Код строит ОписаниеИсточникаДанных из собственного TV: Код85 имеет настоящий тип ПеречислениеСсылка.ПозицияСчета85, Название85 содержит реальную Строка(Код85). Меняется лишь путь descriptor-колонки Название85 на Код85.Представление; это договор зависимости колонок, не попытка прочитать .Представление у произвольной строки.

  11. Поля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", , Новый УникальныйИдентификатор).Открыть();
КонецПроцедуры

Разбор по шагам

  1. Подготовьте только указанный собственный FileCF и настоящие controls.

  2. Откройте форму настоящим application callback; initializer строит только собственные объекты в памяти.

  3. Используйте только подготовленные native кнопки и сверяйте реальные source/owner/type/results до и после каждого действия.

Как проверить результат

  1. Фактический построитель выводит200/300/500 в одну колонку: реальная сортировка количества по убыванию4/3/2. Нативные ячейки читаются, не заполняются контрольными числами.

  2. Переключите компактный/подробный редактор: ОтображатьПоля остаетсяИстина, остальные три флага совместноFalse/True с readback; реальный вывод остается200/300/500 и полный источник1000.

  3. ОграничитьПорядок85 отключает только интерактивное добавление собственной Сумма85 через реальное правило Доступность. Свой уже заданный native порядок Количество85 убыванием сохраняется и повторный native вывод подтверждает его; результат не подменяется сортировкой исходного TV.

  4. Повтор ограничения отказывает. Чужой путь descriptor/поле/порядок или лишняя политика отказывает, неизвестные элементы не удаляются. Если нативное отображение имеет неожиданную ширину/числа, код честно отказывает — статический тест не доказывает формат actual UI.

Ожидаемый результат

Рабочая задача отделяет типизацию, настройки интерфейса и настоящее вычисление счета; все PRIMARY употреблены в основном модуле своей формы.

На что обратить внимание

  1. Код только написан и проверяется статически: actual1С/UI/БД/сеть/печать/хранилища не выполнялись. Отрисовку и реальные callbacks проверяйте лично в подготовленной новой ИБ; резервные копии не создавались.

  2. Это обычные ПолеВвода/ТабличноеПоле толстого клиента, НЕ управляемые ПолеФормы/ТаблицаФормы. ТипЗначения можно записать только у несвязанного контрола; для связанного Данные это readonly. Value/Data недоступны, если control сам назначен владельцем формы — поэтому владелец здесь только обычная форма.

  3. Режимы дерева, отображения полей/именованных настроек, доступа к интерактивному порядку и ограничений доступных полей меняют интерфейс редактора. Это не фильтр счета, не security, не запрет использования поля в схеме; числа проверяются отдельным настоящим процессором.

  4. После частичной ошибки настройки не обещаны атомарность или rollback. Закройте свой экземпляр и откройте новый; чужие UI настройки не очищаются. Sticky отказ этапов СКД нельзя сбросить повторным initializer.

  5. Параметрические ограничения6937 НЕ используются и не кредитуются: хотя English alias совпадает с available-fields extension, их реальный тип другой; Add3445 имеет противоречивый native return. FIELD5998 берется только из своего настоящего ДоступныеПоляКомпоновкиДанных, Add3286 возвращает именно FieldRestriction.

  6. Оформление в коллекционном выводе не объявляется видимым цветом: реальные данные результата проверяются независимо; пользователь видит политики и именованные элементы только в настоящем редакторе. Не создавайте новый control-extension/type из неизвестного конструктора.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.