Расширение поля ввода цвета

Типы · Color text box extension

Расширение предоставляет возможность редактирования и хранения цвета в элементе управления ПолеВвода.

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

Расширение поля ввода цвета (Color text box extension)

Расширение поля ввода цвета (Color text box extension)

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

Описание:

Расширение предоставляет возможность редактирования и хранения цвета в элементе управления ПолеВвода.

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

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

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

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

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

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

Накладная в памяти: настоящий ввод Цвет/Шрифт → оформление6ячеек → проверенный сброс

На собственном ordinary отчете учимся различать bound значение Цвет/Шрифт и оформление контрола, оформляем6ячеек копии макета, сверяем real numeric5/1050 и полный scalarstyle, затем получаем новый baseline через metadata manager. Ни одного документа/регистра/записи БД или вызова печати.

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

Платформа8.5.1.1343 Windows, толстый клиент, обычное приложение, собственная новая File CF. Source и template описаны полностью; компиляция/1С/UI здесь не запускались.

Подготовка

  1. Задача: оформить свою учебную накладную, не меняя товары и сумму. В памяти BOOK3 по250 и TEA2 по150: количество5, сумма1050. Изменим цвет и шрифт всех шести ячеек preview, перечитаем настоящие значения native ячеек и затем вернем baseline. Это не универсальный getter пример.

  2. Вручную создайте НОВУЮ пустую File CF только в C:\1c-labs\OwnInvoiceAppearance85_29f78431-6f4c-4e86-9ac8-b23c4b6fce95\IB. UUID в имени каталога — собственный маркер стенда, не UUID базы. Код дополнительно создает actual UUID конкретной своей формы. Не используйте копию УТ/КА/УНФ/БП, не подключайте расширения базы/сеанса. Здесь никакой каталог, ИБ, CF или пользователь реально не создавались.

  3. Только Windows8.5.1.1343, толстый клиент и ОбычноеПриложение. Конфигурация Имя УчебноеОформлениеНакладной85; РежимСовместимостиНеИспользовать; режимы запускаУправляемоеПриложениеИОбычноеПриложение, основнойОбычноеПриложение. Единственный свой пользователь Оформление85Ученик с полной собственной ролью. Обе проверки требуют точную native строку File="C:\1c-labs\OwnInvoiceAppearance85_29f78431-6f4c-4e86-9ac8-b23c4b6fce95\IB"; и readonly metadataModeНеИспользовать. Иной формат регистрации/путь с тем же префиксом откажет, fuzzy fallback нет. Guard пути/metadata не является проверкой доверия произвольному внешнему CF; вы сами создаете только описанный source.

  4. Отчеты→Добавить→ПредпросмотрНакладной85. Добавьте реквизит объекта Метка85 типа Строка36. Не добавляйте СКД, документы/регистры или процедуры записи. Модуль объекта отчета оставьте пустым. Это новый ReportObject из native Отчеты.ПредпросмотрНакладной85.Создать(), а не неизвестный ИсходныйОбъект и не объект БД.

  5. В отчете Формы→Добавить обычную форму Форма85; ОсновнаяФорма=Форма85. Мастер создает главный реквизит Отчет типа ОтчетОбъект.ПредпросмотрНакладной85, ОсновнойРеквизитДа. Не создавайте форму списка/managed форму. FORM_MODULE целиком вставьте в Модуль формы. Цвет85 типЦвет, Шрифт85 типШрифт, Вывод85 типТабличныйДокумент, Состояние85 типСтрока2000 — дополнительные реквизиты формы. Private переменные из FORM_MODULE не создавайте как реквизиты.

  6. На Форма85 разместите native ПолеВвода ЦветНакладной85 с ДанныеЦвет85 и ОграничениеТипа ровноЦвет; ПолеВвода ШрифтНакладной85 с ДанныеШрифт85 и ОграничениеТипа ровноШрифт. Это два настоящих typed bound обычных controls. Native дополнение цвета/шрифта дается типом связанного значения; отдельного NewExtension и API Type("Расширение поля ввода цвета") здесь нет. ПриИзменении обоих→ОформлениеПриИзменении85(Элемент): native OnChange0 плюс ordinary firstElement по event104.

  7. Разместите ПолеТабличногоДокумента Вывод85 с ДанныеВывод85, ТолькоПросмотрДа; оно наследует свойства/методы TabDoc. Состояние85 — readonly поле. Кнопки Применить85/Сбросить85→одноименные процедуры(Элемент), native ButtonClick0 плюс ordinary firstElement. ПриОткрытии формы→ПриОткрытии() без параметров. Не вызывайте события вручную. Не назначайте input/tablecontrol владельцем формы: native bound extensionData/Value тогда недоступны.

  8. Отчет→Макеты→Добавить Накладная85 типаТабличныйДокумент. В штатном редакторе вручную подготовьте ровно3строки x2колонки, без объединений, скрытых дополнительных строк, рисунков и linkedcontrols. Полная копируемая JSON-спецификация всех6ячееек находится в supporting module Накладная85.Она описывает manual подготовку, НЕ является import CF/MXL. Четыре textcells — literal text; R2C2/R3C2 — заполнениеПараметр с именамиКоличество85/Сумма85, СодержитЗначениеДа, TypeNumber12,0nonnegative, Value0 до заполнения.

  9. Каждой из6compiledcells установите ЗащитаДа, ЦветТекста абсолютныйRGB0/0/0 и абсолютный Arial10, все4начертанияFalse, Масштаб100. Не полагайтесь на Авто/элементСтиля или текущий OS defaultfont. На учебной Windows проверьте наличие Arial вручную; код проверяет native свойства шрифта, не наличие glyphs/реальный renderer. В numericcells форматЧГ=0;ЧДЦ=0 нужен для чтения глазами, но арифметика сверяется через native ЗначениеЧисло.

  10. Конфигурация→Открыть модуль обычного приложения: APPLICATION_MODULE целиком. Оно сначала проверит свой File-path/config/version, затем создаст новый собственный ReportObject и получит его ordinary форму3слота(имя,Undefined-owner,newactualUUID). КлючUUID и Метка85 связывают форму именно с этим instance; это не UUID пользователя и не UUID базы. После ручной проверки синтаксиса/обновления своей учебной CF запустите только ее обычный толстый клиент.

  11. Будущий manual протокол: начальный output5/1050, RGB0/0/0, Arial10regular. Штатно отредактируйте ЦветНакладной85 до абсолютногоRGB0/64/128 и ШрифтНакладной85 до абсолютногоArial12bold/scale100, остальныеflagsFalse; commit ввод обоих штатным UI. После OnChange preview еще baseline, статусПоляизменены. НажмитеПрименить85: actual output5/1050 остается, все6cellstyle становится0/64/128+Arial12bold. НажмитеСбросить85: новый macro от metadata manager возвращаетчерныйArial10 и те же5/1050.

  12. Отдельно только в новой ручной учебной сессии проверьте отказ при неправильном типе макета, текстовом numeric0, лишней строке, неверном цветеАвто/Windows/Style, шрифтеАвто/Arial размера вне8..24 или измененной собственной строке. Код не исправляет ошибочную подготовку ValueType/setContainsValue и не подставляет пустой NewTabDoc вместо native union result. Любая ошибка оставляет stickyОстановка85True; возможна частичная UI замена, нужно закрыть стенд, проверить причину и запустить новый свой instance. Автоматических retry/rollback/DBwrites нет.

Перем Остановка85;
Перем Строки85;
Перем ПринятыйДокумент85;
Перем ПринятыйЦвет85;
Перем ПринятыйШрифт85;

Процедура ПроверитьСтенд85()
    Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Или СтрокаСоединенияИнформационнойБазы() <> "File=""C:\1c-labs\OwnInvoiceAppearance85_29f78431-6f4c-4e86-9ac8-b23c4b6fce95\IB"";" Тогда
        ВызватьИсключение "Нужен только собственный новый File-стенд и точная платформа 8.5.1.1343";
    КонецЕсли;
    Если ТипЗнч(Отчет) <> Тип("ОтчетОбъект.ПредпросмотрНакладной85")
        Или Отчет.Метаданные() <> Метаданные.Отчеты.ПредпросмотрНакладной85
        Или ТипЗнч(КлючУникальности) <> Тип("УникальныйИдентификатор")
        Или Отчет.Метка85 <> Строка(КлючУникальности) Или ВладелецФормы <> Неопределено Тогда
        ВызватьИсключение "Нужна собственная форма конкретного нового экземпляра отчета, без владельца-контрола";
    КонецЕсли;
КонецПроцедуры

Функция СоздатьСтроки85()
    Таблица = Новый ТаблицаЗначений;
    Таблица.Колонки.Добавить("Товар85", Новый ОписаниеТипов("Строка"));
    Таблица.Колонки.Добавить("Количество85", Новый ОписаниеТипов("Число"));
    Таблица.Колонки.Добавить("Цена85", Новый ОписаниеТипов("Число"));
    СтрокаНакладной = Таблица.Добавить();
    СтрокаНакладной.Товар85 = "BOOK";
    СтрокаНакладной.Количество85 = 3;
    СтрокаНакладной.Цена85 = 250;
    СтрокаНакладной = Таблица.Добавить();
    СтрокаНакладной.Товар85 = "TEA";
    СтрокаНакладной.Количество85 = 2;
    СтрокаНакладной.Цена85 = 150;
    Возврат Таблица;
КонецФункции

Функция СверитьСтроки85()
    Если ТипЗнч(Строки85) <> Тип("ТаблицаЗначений") Или Строки85.Количество() <> 2 Или Строки85.Колонки.Количество() <> 3 Тогда
        ВызватьИсключение "Изменен полный собственный источник накладной";
    КонецЕсли;
    Для Номер = 0 По 2 Цикл
        Колонка = Строки85.Колонки[Номер];
        ИмяКолонки = ?(Номер = 0, "Товар85", ?(Номер = 1, "Количество85", "Цена85"));
        ТипКолонки = ?(Номер = 0, Тип("Строка"), Тип("Число"));
        Если Колонка.Имя <> ИмяКолонки Или Колонка.ТипЗначения.Типы().Количество() <> 1 Или Не Колонка.ТипЗначения.СодержитТип(ТипКолонки) Тогда
            ВызватьИсключение "Изменена схема собственных строк";
        КонецЕсли;
    КонецЦикла;
    Количество = 0;
    Сумма = 0;
    Для Номер = 0 По 1 Цикл
        СтрокаНакладной = Строки85[Номер];
        Если СтрокаНакладной.Товар85 <> ?(Номер = 0, "BOOK", "TEA")
            Или ТипЗнч(СтрокаНакладной.Количество85) <> Тип("Число") Или СтрокаНакладной.Количество85 <> ?(Номер = 0, 3, 2)
            Или ТипЗнч(СтрокаНакладной.Цена85) <> Тип("Число") Или СтрокаНакладной.Цена85 <> ?(Номер = 0, 250, 150) Тогда
            ВызватьИсключение "Изменены собственные товары, количества или цены";
        КонецЕсли;
        Количество = Количество + СтрокаНакладной.Количество85;
        Сумма = Сумма + СтрокаНакладной.Количество85 * СтрокаНакладной.Цена85;
    КонецЦикла;
    Если Количество <> 5 Или Сумма <> 1050 Тогда
        ВызватьИсключение "Неверный расчет собственной накладной";
    КонецЕсли;
    Возврат Новый ФиксированнаяСтруктура("Количество85,Сумма85", Количество, Сумма);
КонецФункции

Процедура ПроверитьЦвет85(Цвет)
    Если ТипЗнч(Цвет) <> Тип("Цвет") Тогда
        ВызватьИсключение "Требуется настоящее значение Цвет, а не строка RGB";
    КонецЕсли;
    Если Цвет.Вид <> ВидЦвета.Абсолютный Или Цвет.Красный < 0 Или Цвет.Красный > 255
        Или Цвет.Зеленый < 0 Или Цвет.Зеленый > 255 Или Цвет.Синий < 0 Или Цвет.Синий > 255 Тогда
        ВызватьИсключение "Этот учебный профиль принимает только абсолютный RGB, не Авто/Windows/элемент стиля";
    КонецЕсли;
КонецПроцедуры

Процедура ПроверитьШрифт85(Шрифт)
    Если ТипЗнч(Шрифт) <> Тип("Шрифт") Тогда
        ВызватьИсключение "Требуется настоящее значение Шрифт, не название строкой";
    КонецЕсли;
    Если Шрифт.Вид <> ВидШрифта.Абсолютный Или Шрифт.Имя <> "Arial" Или Шрифт.Размер < 8 Или Шрифт.Размер > 24
        Или Шрифт.Масштаб <> 100 Или ТипЗнч(Шрифт.Полужирный) <> Тип("Булево") Или ТипЗнч(Шрифт.Наклонный) <> Тип("Булево")
        Или ТипЗнч(Шрифт.Подчеркивание) <> Тип("Булево") Или ТипЗнч(Шрифт.Зачеркивание) <> Тип("Булево") Тогда
        ВызватьИсключение "Учебный профиль: абсолютный Arial 8..24, масштаб100 и четыре явных Boolean начертания";
    КонецЕсли;
КонецПроцедуры

Процедура СравнитьЦвет85(Цвет, ОжидаемыйЦвет)
    ПроверитьЦвет85(Цвет);
    ПроверитьЦвет85(ОжидаемыйЦвет);
    Если Цвет.Вид <> ОжидаемыйЦвет.Вид Или Цвет.Красный <> ОжидаемыйЦвет.Красный
        Или Цвет.Зеленый <> ОжидаемыйЦвет.Зеленый Или Цвет.Синий <> ОжидаемыйЦвет.Синий Тогда
        ВызватьИсключение "Actual native RGB не совпадает с принятым оформлением";
    КонецЕсли;
КонецПроцедуры

Процедура СравнитьШрифт85(Шрифт, ОжидаемыйШрифт)
    ПроверитьШрифт85(Шрифт);
    ПроверитьШрифт85(ОжидаемыйШрифт);
    Если Шрифт.Вид <> ОжидаемыйШрифт.Вид Или Шрифт.Имя <> ОжидаемыйШрифт.Имя Или Шрифт.Размер <> ОжидаемыйШрифт.Размер
        Или Шрифт.Полужирный <> ОжидаемыйШрифт.Полужирный Или Шрифт.Наклонный <> ОжидаемыйШрифт.Наклонный
        Или Шрифт.Подчеркивание <> ОжидаемыйШрифт.Подчеркивание Или Шрифт.Зачеркивание <> ОжидаемыйШрифт.Зачеркивание
        Или Шрифт.Масштаб <> ОжидаемыйШрифт.Масштаб Тогда
        ВызватьИсключение "Actual native восемь свойств шрифта не совпадают с принятым оформлением";
    КонецЕсли;
КонецПроцедуры

Процедура ПроверитьПоля85()
    ПолеЦвета = ЭлементыФормы.ЦветНакладной85;
    ПолеШрифта = ЭлементыФормы.ШрифтНакладной85;
    Если ТипЗнч(ПолеЦвета) <> Тип("ПолеВвода") Или ПолеЦвета.Данные <> "Цвет85" Или ПолеЦвета.Имя <> "ЦветНакладной85"
        Или ТипЗнч(ПолеШрифта) <> Тип("ПолеВвода") Или ПолеШрифта.Данные <> "Шрифт85" Или ПолеШрифта.Имя <> "ШрифтНакладной85" Тогда
        ВызватьИсключение "Нужны собственные обычные native input controls с правильными связями";
    КонецЕсли;
    Если ПолеЦвета.ОграничениеТипа.Типы().Количество() <> 1 Или Не ПолеЦвета.ОграничениеТипа.СодержитТип(Тип("Цвет"))
        Или ПолеШрифта.ОграничениеТипа.Типы().Количество() <> 1 Или Не ПолеШрифта.ОграничениеТипа.СодержитТип(Тип("Шрифт")) Тогда
        ВызватьИсключение "ОграничениеТипа контролов должно содержать ровно Цвет или ровно Шрифт";
    КонецЕсли;
    СравнитьЦвет85(ПолеЦвета.Значение, Цвет85);
    СравнитьШрифт85(ПолеШрифта.Значение, Шрифт85);
КонецПроцедуры

Процедура СверитьДокумент85(Документ, Количество, Сумма, Цвет, Шрифт, ЭтоМакет)
    Если ТипЗнч(Документ) <> Тип("ТабличныйДокумент") И ТипЗнч(Документ) <> Тип("ПолеТабличногоДокумента") Тогда
        ВызватьИсключение "GetTemplate имеет union return; в этом стенде допустим только настоящий TabDoc или его own native field";
    КонецЕсли;
    Если Документ.ВысотаТаблицы <> 3 Или Документ.ШиринаТаблицы <> 2 Тогда
        ВызватьИсключение "Нужны ровно все шесть подготовленных ячеек, без скрытых дополнительных строк";
    КонецЕсли;
    Для Строка = 1 По 3 Цикл
        Для Колонка = 1 По 2 Цикл
            Ячейка = Документ.Область(Строка, Колонка);
            Если ТипЗнч(Ячейка) <> Тип("ОбластьЯчеекТабличногоДокумента") Или Не Ячейка.Защита Тогда
                ВызватьИсключение "Свой макет содержит только шесть защищенных native ячеек";
            КонецЕсли;
            СравнитьЦвет85(Ячейка.ЦветТекста, Цвет);
            СравнитьШрифт85(Ячейка.Шрифт, Шрифт);
            Если Колонка = 1 Или Строка = 1 Тогда
                Текст = ?(Колонка = 2, "BOOK 3 x 250; TEA 2 x 150", ?(Строка = 1, "Накладная в памяти", ?(Строка = 2, "Количество", "Сумма")));
                Если Ячейка.Текст <> Текст Тогда
                    ВызватьИсключение "Изменен собственный заголовок или полная спецификация двух товаров";
                КонецЕсли;
            Иначе
                Если Не Ячейка.СодержитЗначение Или ТипЗнч(Ячейка.Значение) <> Тип("Число")
                    Или Ячейка.Значение <> ?(Строка = 2, Количество, Сумма) Тогда
                    ВызватьИсключение "Неверный реальный numeric readback: значение не подменяется текстом или ожидаемой константой";
                КонецЕсли;
                Если ЭтоМакет И (Ячейка.Заполнение <> ТипЗаполненияОбластиТабличногоДокумента.Параметр
                    Или Ячейка.Параметр <> ?(Строка = 2, "Количество85", "Сумма85") Или Не Ячейка.ТипЗначения.СодержитТип(Тип("Число"))) Тогда
                    ВызватьИсключение "Сначала вручную подготовьте numeric параметры в собственном compiled макете";
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
КонецПроцедуры

Функция ПостроитьВывод85(Макет, Цвет, Шрифт)
    БазовыйЦвет = Новый Цвет(0, 0, 0);
    БазовыйШрифт = Новый Шрифт("Arial", 10, Ложь, Ложь, Ложь, Ложь, 100);
    Если ТипЗнч(Макет) <> Тип("ТабличныйДокумент") Тогда
        ВызватьИсключение "GetTemplate может вернуть TextDoc или иной макет: не заменяем его NewTabDoc";
    КонецЕсли;
    СверитьДокумент85(Макет, 0, 0, БазовыйЦвет, БазовыйШрифт, Истина);
    ПроверитьЦвет85(Цвет);
    ПроверитьШрифт85(Шрифт);
    Числа = СверитьСтроки85();
    Область = Макет.ПолучитьОбласть(1, 1, 3, 2);
    Если ТипЗнч(Область) <> Тип("ТабличныйДокумент") Или Область = Макет Тогда
        ВызватьИсключение "Нужна новая область как TabDoc, не исходный compiled макет";
    КонецЕсли;
    Область.Параметры.Заполнить(Числа);
    Для Строка = 1 По 3 Цикл
        Для Колонка = 1 По 2 Цикл
            Ячейка = Область.Область(Строка, Колонка);
            Ячейка.ЦветТекста = Цвет;
            Ячейка.Шрифт = Шрифт;
        КонецЦикла;
    КонецЦикла;
    СверитьДокумент85(Область, Числа.Количество85, Числа.Сумма85, Цвет, Шрифт, Ложь);
    Документ = Новый ТабличныйДокумент;
    Документ.Вывести(Область);
    Документ.ТолькоПросмотр = Истина;
    СверитьДокумент85(Документ, Числа.Количество85, Числа.Сумма85, Цвет, Шрифт, Ложь);
    СверитьДокумент85(Макет, 0, 0, БазовыйЦвет, БазовыйШрифт, Истина);
    СверитьСтроки85();
    Возврат Документ;
КонецФункции

Процедура ПроверитьРаботу85()
    Если Остановка85 <> Ложь Тогда
        ВызватьИсключение "После ошибки закройте стенд: повтор и слепой rollback запрещены";
    КонецЕсли;
    ПроверитьСтенд85();
    Числа = СверитьСтроки85();
    ПолеВывода = ЭлементыФормы.Вывод85;
    Если ТипЗнч(ПолеВывода) <> Тип("ПолеТабличногоДокумента") Или ПолеВывода.Имя <> "Вывод85" Или ПолеВывода.Данные <> "Вывод85"
        Или Вывод85 <> ПринятыйДокумент85 Или ПолеВывода.Значение <> ПринятыйДокумент85 Или Не ПолеВывода.ТолькоПросмотр Тогда
        ВызватьИсключение "Actual own preview control не связан с принятым документом";
    КонецЕсли;
    СверитьДокумент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 = "Проверены actual native ячейки: количество5, сумма1050, RGB и все восемь свойств шрифта. Рендер и печать не проверены.";
КонецПроцедуры

Процедура ПроверитьКнопку85(Элемент, Имя)
    Если ТипЗнч(Элемент) <> Тип("Кнопка") Или Элемент.Имя <> Имя Или Элемент <> ЭлементыФормы[Имя] Тогда
        ВызватьИсключение "Команда доступна только своему native control этой формы";
    КонецЕсли;
КонецПроцедуры

Процедура ПриОткрытии()
    Попытка
        Если Остановка85 <> Неопределено Тогда
            ВызватьИсключение "Нужен новый экземпляр формы: повторное Open не снимает sticky отказ";
        КонецЕсли;
        Остановка85 = Ложь;
        ПроверитьСтенд85();
        Строки85 = СоздатьСтроки85();
        Цвет85 = Новый Цвет(0, 0, 0);
        Шрифт85 = Новый Шрифт("Arial", 10, Ложь, Ложь, Ложь, Ложь, 100);
        ПроверитьПоля85();
        Макет = Отчет.ПолучитьМакет("Накладная85");
        Кандидат = ПостроитьВывод85(Макет, Цвет85, Шрифт85);
        ПринятьКандидат85(Кандидат, Цвет85, Шрифт85);
    Исключение
        Остановка85 = Истина;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

Процедура ОформлениеПриИзменении85(Элемент)
    Попытка
        ПроверитьРаботу85();
        Если Элемент <> ЭлементыФормы.ЦветНакладной85 И Элемент <> ЭлементыФормы.ШрифтНакладной85 Тогда
            ВызватьИсключение "Native OnChange пришел не от собственного поля оформления";
        КонецЕсли;
        ПроверитьПоля85();
        Состояние85 = "Поля изменены; прежний preview сохранен. Нажмите Применить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();
        СвойЦвет = Новый Цвет(0, 0, 0);
        СвойШрифт = Новый Шрифт("Arial", 10, Ложь, Ложь, Ложь, Ложь, 100);
        Макет = Отчеты.ПредпросмотрНакладной85.ПолучитьМакет("Накладная85");
        Кандидат = ПостроитьВывод85(Макет, СвойЦвет, СвойШрифт);
        Цвет85 = СвойЦвет;
        Шрифт85 = СвойШрифт;
        ПроверитьПоля85();
        ПринятьКандидат85(Кандидат, СвойЦвет, СвойШрифт);
    Исключение
        Остановка85 = Истина;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры
Полный ordinary модуль preview собственной накладной

Отчеты → ПредпросмотрНакладной85 → Формы → Форма85 → Модуль

Толстый клиент, обычное приложение; только собственная новая File CF

Перем Остановка85;
Перем Строки85;
Перем ПринятыйДокумент85;
Перем ПринятыйЦвет85;
Перем ПринятыйШрифт85;

Процедура ПроверитьСтенд85()
    Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Или СтрокаСоединенияИнформационнойБазы() <> "File=""C:\1c-labs\OwnInvoiceAppearance85_29f78431-6f4c-4e86-9ac8-b23c4b6fce95\IB"";" Тогда
        ВызватьИсключение "Нужен только собственный новый File-стенд и точная платформа 8.5.1.1343";
    КонецЕсли;
    Если ТипЗнч(Отчет) <> Тип("ОтчетОбъект.ПредпросмотрНакладной85")
        Или Отчет.Метаданные() <> Метаданные.Отчеты.ПредпросмотрНакладной85
        Или ТипЗнч(КлючУникальности) <> Тип("УникальныйИдентификатор")
        Или Отчет.Метка85 <> Строка(КлючУникальности) Или ВладелецФормы <> Неопределено Тогда
        ВызватьИсключение "Нужна собственная форма конкретного нового экземпляра отчета, без владельца-контрола";
    КонецЕсли;
КонецПроцедуры

Функция СоздатьСтроки85()
    Таблица = Новый ТаблицаЗначений;
    Таблица.Колонки.Добавить("Товар85", Новый ОписаниеТипов("Строка"));
    Таблица.Колонки.Добавить("Количество85", Новый ОписаниеТипов("Число"));
    Таблица.Колонки.Добавить("Цена85", Новый ОписаниеТипов("Число"));
    СтрокаНакладной = Таблица.Добавить();
    СтрокаНакладной.Товар85 = "BOOK";
    СтрокаНакладной.Количество85 = 3;
    СтрокаНакладной.Цена85 = 250;
    СтрокаНакладной = Таблица.Добавить();
    СтрокаНакладной.Товар85 = "TEA";
    СтрокаНакладной.Количество85 = 2;
    СтрокаНакладной.Цена85 = 150;
    Возврат Таблица;
КонецФункции

Функция СверитьСтроки85()
    Если ТипЗнч(Строки85) <> Тип("ТаблицаЗначений") Или Строки85.Количество() <> 2 Или Строки85.Колонки.Количество() <> 3 Тогда
        ВызватьИсключение "Изменен полный собственный источник накладной";
    КонецЕсли;
    Для Номер = 0 По 2 Цикл
        Колонка = Строки85.Колонки[Номер];
        ИмяКолонки = ?(Номер = 0, "Товар85", ?(Номер = 1, "Количество85", "Цена85"));
        ТипКолонки = ?(Номер = 0, Тип("Строка"), Тип("Число"));
        Если Колонка.Имя <> ИмяКолонки Или Колонка.ТипЗначения.Типы().Количество() <> 1 Или Не Колонка.ТипЗначения.СодержитТип(ТипКолонки) Тогда
            ВызватьИсключение "Изменена схема собственных строк";
        КонецЕсли;
    КонецЦикла;
    Количество = 0;
    Сумма = 0;
    Для Номер = 0 По 1 Цикл
        СтрокаНакладной = Строки85[Номер];
        Если СтрокаНакладной.Товар85 <> ?(Номер = 0, "BOOK", "TEA")
            Или ТипЗнч(СтрокаНакладной.Количество85) <> Тип("Число") Или СтрокаНакладной.Количество85 <> ?(Номер = 0, 3, 2)
            Или ТипЗнч(СтрокаНакладной.Цена85) <> Тип("Число") Или СтрокаНакладной.Цена85 <> ?(Номер = 0, 250, 150) Тогда
            ВызватьИсключение "Изменены собственные товары, количества или цены";
        КонецЕсли;
        Количество = Количество + СтрокаНакладной.Количество85;
        Сумма = Сумма + СтрокаНакладной.Количество85 * СтрокаНакладной.Цена85;
    КонецЦикла;
    Если Количество <> 5 Или Сумма <> 1050 Тогда
        ВызватьИсключение "Неверный расчет собственной накладной";
    КонецЕсли;
    Возврат Новый ФиксированнаяСтруктура("Количество85,Сумма85", Количество, Сумма);
КонецФункции

Процедура ПроверитьЦвет85(Цвет)
    Если ТипЗнч(Цвет) <> Тип("Цвет") Тогда
        ВызватьИсключение "Требуется настоящее значение Цвет, а не строка RGB";
    КонецЕсли;
    Если Цвет.Вид <> ВидЦвета.Абсолютный Или Цвет.Красный < 0 Или Цвет.Красный > 255
        Или Цвет.Зеленый < 0 Или Цвет.Зеленый > 255 Или Цвет.Синий < 0 Или Цвет.Синий > 255 Тогда
        ВызватьИсключение "Этот учебный профиль принимает только абсолютный RGB, не Авто/Windows/элемент стиля";
    КонецЕсли;
КонецПроцедуры

Процедура ПроверитьШрифт85(Шрифт)
    Если ТипЗнч(Шрифт) <> Тип("Шрифт") Тогда
        ВызватьИсключение "Требуется настоящее значение Шрифт, не название строкой";
    КонецЕсли;
    Если Шрифт.Вид <> ВидШрифта.Абсолютный Или Шрифт.Имя <> "Arial" Или Шрифт.Размер < 8 Или Шрифт.Размер > 24
        Или Шрифт.Масштаб <> 100 Или ТипЗнч(Шрифт.Полужирный) <> Тип("Булево") Или ТипЗнч(Шрифт.Наклонный) <> Тип("Булево")
        Или ТипЗнч(Шрифт.Подчеркивание) <> Тип("Булево") Или ТипЗнч(Шрифт.Зачеркивание) <> Тип("Булево") Тогда
        ВызватьИсключение "Учебный профиль: абсолютный Arial 8..24, масштаб100 и четыре явных Boolean начертания";
    КонецЕсли;
КонецПроцедуры

Процедура СравнитьЦвет85(Цвет, ОжидаемыйЦвет)
    ПроверитьЦвет85(Цвет);
    ПроверитьЦвет85(ОжидаемыйЦвет);
    Если Цвет.Вид <> ОжидаемыйЦвет.Вид Или Цвет.Красный <> ОжидаемыйЦвет.Красный
        Или Цвет.Зеленый <> ОжидаемыйЦвет.Зеленый Или Цвет.Синий <> ОжидаемыйЦвет.Синий Тогда
        ВызватьИсключение "Actual native RGB не совпадает с принятым оформлением";
    КонецЕсли;
КонецПроцедуры

Процедура СравнитьШрифт85(Шрифт, ОжидаемыйШрифт)
    ПроверитьШрифт85(Шрифт);
    ПроверитьШрифт85(ОжидаемыйШрифт);
    Если Шрифт.Вид <> ОжидаемыйШрифт.Вид Или Шрифт.Имя <> ОжидаемыйШрифт.Имя Или Шрифт.Размер <> ОжидаемыйШрифт.Размер
        Или Шрифт.Полужирный <> ОжидаемыйШрифт.Полужирный Или Шрифт.Наклонный <> ОжидаемыйШрифт.Наклонный
        Или Шрифт.Подчеркивание <> ОжидаемыйШрифт.Подчеркивание Или Шрифт.Зачеркивание <> ОжидаемыйШрифт.Зачеркивание
        Или Шрифт.Масштаб <> ОжидаемыйШрифт.Масштаб Тогда
        ВызватьИсключение "Actual native восемь свойств шрифта не совпадают с принятым оформлением";
    КонецЕсли;
КонецПроцедуры

Процедура ПроверитьПоля85()
    ПолеЦвета = ЭлементыФормы.ЦветНакладной85;
    ПолеШрифта = ЭлементыФормы.ШрифтНакладной85;
    Если ТипЗнч(ПолеЦвета) <> Тип("ПолеВвода") Или ПолеЦвета.Данные <> "Цвет85" Или ПолеЦвета.Имя <> "ЦветНакладной85"
        Или ТипЗнч(ПолеШрифта) <> Тип("ПолеВвода") Или ПолеШрифта.Данные <> "Шрифт85" Или ПолеШрифта.Имя <> "ШрифтНакладной85" Тогда
        ВызватьИсключение "Нужны собственные обычные native input controls с правильными связями";
    КонецЕсли;
    Если ПолеЦвета.ОграничениеТипа.Типы().Количество() <> 1 Или Не ПолеЦвета.ОграничениеТипа.СодержитТип(Тип("Цвет"))
        Или ПолеШрифта.ОграничениеТипа.Типы().Количество() <> 1 Или Не ПолеШрифта.ОграничениеТипа.СодержитТип(Тип("Шрифт")) Тогда
        ВызватьИсключение "ОграничениеТипа контролов должно содержать ровно Цвет или ровно Шрифт";
    КонецЕсли;
    СравнитьЦвет85(ПолеЦвета.Значение, Цвет85);
    СравнитьШрифт85(ПолеШрифта.Значение, Шрифт85);
КонецПроцедуры

Процедура СверитьДокумент85(Документ, Количество, Сумма, Цвет, Шрифт, ЭтоМакет)
    Если ТипЗнч(Документ) <> Тип("ТабличныйДокумент") И ТипЗнч(Документ) <> Тип("ПолеТабличногоДокумента") Тогда
        ВызватьИсключение "GetTemplate имеет union return; в этом стенде допустим только настоящий TabDoc или его own native field";
    КонецЕсли;
    Если Документ.ВысотаТаблицы <> 3 Или Документ.ШиринаТаблицы <> 2 Тогда
        ВызватьИсключение "Нужны ровно все шесть подготовленных ячеек, без скрытых дополнительных строк";
    КонецЕсли;
    Для Строка = 1 По 3 Цикл
        Для Колонка = 1 По 2 Цикл
            Ячейка = Документ.Область(Строка, Колонка);
            Если ТипЗнч(Ячейка) <> Тип("ОбластьЯчеекТабличногоДокумента") Или Не Ячейка.Защита Тогда
                ВызватьИсключение "Свой макет содержит только шесть защищенных native ячеек";
            КонецЕсли;
            СравнитьЦвет85(Ячейка.ЦветТекста, Цвет);
            СравнитьШрифт85(Ячейка.Шрифт, Шрифт);
            Если Колонка = 1 Или Строка = 1 Тогда
                Текст = ?(Колонка = 2, "BOOK 3 x 250; TEA 2 x 150", ?(Строка = 1, "Накладная в памяти", ?(Строка = 2, "Количество", "Сумма")));
                Если Ячейка.Текст <> Текст Тогда
                    ВызватьИсключение "Изменен собственный заголовок или полная спецификация двух товаров";
                КонецЕсли;
            Иначе
                Если Не Ячейка.СодержитЗначение Или ТипЗнч(Ячейка.Значение) <> Тип("Число")
                    Или Ячейка.Значение <> ?(Строка = 2, Количество, Сумма) Тогда
                    ВызватьИсключение "Неверный реальный numeric readback: значение не подменяется текстом или ожидаемой константой";
                КонецЕсли;
                Если ЭтоМакет И (Ячейка.Заполнение <> ТипЗаполненияОбластиТабличногоДокумента.Параметр
                    Или Ячейка.Параметр <> ?(Строка = 2, "Количество85", "Сумма85") Или Не Ячейка.ТипЗначения.СодержитТип(Тип("Число"))) Тогда
                    ВызватьИсключение "Сначала вручную подготовьте numeric параметры в собственном compiled макете";
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
КонецПроцедуры

Функция ПостроитьВывод85(Макет, Цвет, Шрифт)
    БазовыйЦвет = Новый Цвет(0, 0, 0);
    БазовыйШрифт = Новый Шрифт("Arial", 10, Ложь, Ложь, Ложь, Ложь, 100);
    Если ТипЗнч(Макет) <> Тип("ТабличныйДокумент") Тогда
        ВызватьИсключение "GetTemplate может вернуть TextDoc или иной макет: не заменяем его NewTabDoc";
    КонецЕсли;
    СверитьДокумент85(Макет, 0, 0, БазовыйЦвет, БазовыйШрифт, Истина);
    ПроверитьЦвет85(Цвет);
    ПроверитьШрифт85(Шрифт);
    Числа = СверитьСтроки85();
    Область = Макет.ПолучитьОбласть(1, 1, 3, 2);
    Если ТипЗнч(Область) <> Тип("ТабличныйДокумент") Или Область = Макет Тогда
        ВызватьИсключение "Нужна новая область как TabDoc, не исходный compiled макет";
    КонецЕсли;
    Область.Параметры.Заполнить(Числа);
    Для Строка = 1 По 3 Цикл
        Для Колонка = 1 По 2 Цикл
            Ячейка = Область.Область(Строка, Колонка);
            Ячейка.ЦветТекста = Цвет;
            Ячейка.Шрифт = Шрифт;
        КонецЦикла;
    КонецЦикла;
    СверитьДокумент85(Область, Числа.Количество85, Числа.Сумма85, Цвет, Шрифт, Ложь);
    Документ = Новый ТабличныйДокумент;
    Документ.Вывести(Область);
    Документ.ТолькоПросмотр = Истина;
    СверитьДокумент85(Документ, Числа.Количество85, Числа.Сумма85, Цвет, Шрифт, Ложь);
    СверитьДокумент85(Макет, 0, 0, БазовыйЦвет, БазовыйШрифт, Истина);
    СверитьСтроки85();
    Возврат Документ;
КонецФункции

Процедура ПроверитьРаботу85()
    Если Остановка85 <> Ложь Тогда
        ВызватьИсключение "После ошибки закройте стенд: повтор и слепой rollback запрещены";
    КонецЕсли;
    ПроверитьСтенд85();
    Числа = СверитьСтроки85();
    ПолеВывода = ЭлементыФормы.Вывод85;
    Если ТипЗнч(ПолеВывода) <> Тип("ПолеТабличногоДокумента") Или ПолеВывода.Имя <> "Вывод85" Или ПолеВывода.Данные <> "Вывод85"
        Или Вывод85 <> ПринятыйДокумент85 Или ПолеВывода.Значение <> ПринятыйДокумент85 Или Не ПолеВывода.ТолькоПросмотр Тогда
        ВызватьИсключение "Actual own preview control не связан с принятым документом";
    КонецЕсли;
    СверитьДокумент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 = "Проверены actual native ячейки: количество5, сумма1050, RGB и все восемь свойств шрифта. Рендер и печать не проверены.";
КонецПроцедуры

Процедура ПроверитьКнопку85(Элемент, Имя)
    Если ТипЗнч(Элемент) <> Тип("Кнопка") Или Элемент.Имя <> Имя Или Элемент <> ЭлементыФормы[Имя] Тогда
        ВызватьИсключение "Команда доступна только своему native control этой формы";
    КонецЕсли;
КонецПроцедуры

Процедура ПриОткрытии()
    Попытка
        Если Остановка85 <> Неопределено Тогда
            ВызватьИсключение "Нужен новый экземпляр формы: повторное Open не снимает sticky отказ";
        КонецЕсли;
        Остановка85 = Ложь;
        ПроверитьСтенд85();
        Строки85 = СоздатьСтроки85();
        Цвет85 = Новый Цвет(0, 0, 0);
        Шрифт85 = Новый Шрифт("Arial", 10, Ложь, Ложь, Ложь, Ложь, 100);
        ПроверитьПоля85();
        Макет = Отчет.ПолучитьМакет("Накладная85");
        Кандидат = ПостроитьВывод85(Макет, Цвет85, Шрифт85);
        ПринятьКандидат85(Кандидат, Цвет85, Шрифт85);
    Исключение
        Остановка85 = Истина;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

Процедура ОформлениеПриИзменении85(Элемент)
    Попытка
        ПроверитьРаботу85();
        Если Элемент <> ЭлементыФормы.ЦветНакладной85 И Элемент <> ЭлементыФормы.ШрифтНакладной85 Тогда
            ВызватьИсключение "Native OnChange пришел не от собственного поля оформления";
        КонецЕсли;
        ПроверитьПоля85();
        Состояние85 = "Поля изменены; прежний preview сохранен. Нажмите Применить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();
        СвойЦвет = Новый Цвет(0, 0, 0);
        СвойШрифт = Новый Шрифт("Arial", 10, Ложь, Ложь, Ложь, Ложь, 100);
        Макет = Отчеты.ПредпросмотрНакладной85.ПолучитьМакет("Накладная85");
        Кандидат = ПостроитьВывод85(Макет, СвойЦвет, СвойШрифт);
        Цвет85 = СвойЦвет;
        Шрифт85 = СвойШрифт;
        ПроверитьПоля85();
        ПринятьКандидат85(Кандидат, СвойЦвет, СвойШрифт);
    Исключение
        Остановка85 = Истина;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры
Настоящая own ReportObject factory и ordinary startup

Конфигурация → Открыть модуль обычного приложения

Толстый клиент, обычное приложение; собственный новый File CF

Процедура ПриНачалеРаботыСистемы()
    Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Или СтрокаСоединенияИнформационнойБазы() <> "File=""C:\1c-labs\OwnInvoiceAppearance85_29f78431-6f4c-4e86-9ac8-b23c4b6fce95\IB"";" Тогда
        ВызватьИсключение "Этот пример открывает только собственный новый File-стенд";
    КонецЕсли;
    СвойОтчет = Отчеты.ПредпросмотрНакладной85.Создать();
    Если ТипЗнч(СвойОтчет) <> Тип("ОтчетОбъект.ПредпросмотрНакладной85") Тогда
        ВызватьИсключение "Native Create не вернул собственный ReportObject";
    КонецЕсли;
    Ключ = Новый УникальныйИдентификатор;
    СвойОтчет.Метка85 = Строка(Ключ);
    СвояФорма = СвойОтчет.ПолучитьФорму("Форма85", Неопределено, Ключ);
    Если ТипЗнч(СвояФорма) <> Тип("Форма") Или СвояФорма.КлючУникальности <> Ключ Или СвояФорма.ВладелецФормы <> Неопределено Тогда
        ВызватьИсключение "Нужна собственная ordinary форма конкретного созданного отчета";
    КонецЕсли;
    СвояФорма.Открыть();
КонецПроцедуры
Копируемая спецификация всех шести compiled ячеек

Отчеты → ПредпросмотрНакладной85 → Макеты → Накладная85 → штатный табличный редактор

Manual подготовка собственного TabDoc макета; JSON не импортирует CF/MXL и не выполняется какBSL

[
  {
    "cell": "R1C1",
    "text": "Накладная в памяти",
    "protection": true,
    "textColorRGB": [
      0,
      0,
      0
    ],
    "font": {
      "name": "Arial",
      "size": 10,
      "bold": false,
      "italic": false,
      "underline": false,
      "strikeout": false,
      "scale": 100,
      "kind": "Абсолютный"
    }
  },
  {
    "cell": "R1C2",
    "text": "BOOK 3 x 250; TEA 2 x 150",
    "protection": true,
    "textColorRGB": [
      0,
      0,
      0
    ],
    "font": {
      "name": "Arial",
      "size": 10,
      "bold": false,
      "italic": false,
      "underline": false,
      "strikeout": false,
      "scale": 100,
      "kind": "Абсолютный"
    }
  },
  {
    "cell": "R2C1",
    "text": "Количество",
    "protection": true,
    "textColorRGB": [
      0,
      0,
      0
    ],
    "font": {
      "name": "Arial",
      "size": 10,
      "bold": false,
      "italic": false,
      "underline": false,
      "strikeout": false,
      "scale": 100,
      "kind": "Абсолютный"
    }
  },
  {
    "cell": "R2C2",
    "fill": "Параметр",
    "parameter": "Количество85",
    "containsValue": true,
    "valueType": "Число12,0 неотрицательное",
    "value": 0,
    "format": "ЧГ=0;ЧДЦ=0",
    "protection": true,
    "textColorRGB": [
      0,
      0,
      0
    ],
    "font": {
      "name": "Arial",
      "size": 10,
      "bold": false,
      "italic": false,
      "underline": false,
      "strikeout": false,
      "scale": 100,
      "kind": "Абсолютный"
    }
  },
  {
    "cell": "R3C1",
    "text": "Сумма",
    "protection": true,
    "textColorRGB": [
      0,
      0,
      0
    ],
    "font": {
      "name": "Arial",
      "size": 10,
      "bold": false,
      "italic": false,
      "underline": false,
      "strikeout": false,
      "scale": 100,
      "kind": "Абсолютный"
    }
  },
  {
    "cell": "R3C2",
    "fill": "Параметр",
    "parameter": "Сумма85",
    "containsValue": true,
    "valueType": "Число12,0 неотрицательное",
    "value": 0,
    "format": "ЧГ=0;ЧДЦ=0",
    "protection": true,
    "textColorRGB": [
      0,
      0,
      0
    ],
    "font": {
      "name": "Arial",
      "size": 10,
      "bold": false,
      "italic": false,
      "underline": false,
      "strikeout": false,
      "scale": 100,
      "kind": "Абсолютный"
    }
  }
]

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

  1. Native Create0 создает собственный ReportObject. Native Object.GetForm3 возвращает ordinary форму для конкретного instance, ownerUndefined и newactualUUID проверяются до Open0.

  2. Color/Font input extensions не имеют собственных ctor/members. Реальные ПолеВвода, тип реквизитовColor/Font, ограничения и actual boundData/Value доказывают маршруты; typed propertyreadback не является screenshot/pixelproof.

  3. Начальный и пользовательский candidate используют actual ReportObject.GetTemplate1. Reset использует отдельно actual ReportManager.GetTemplate1, а не сохраненную UIкопию. Union result всегда проверяется TypeTabDoc.

  4. GetArea4 возвращает новый ownTabDoc. Parameters.Fill1 получает actual суммы двух проверенных source rows. Style setters применяются только к6ячейкам новой копии; исходный compiled macro перечитывается0/0+baseline после output, исходные rows остаются прежними.

  5. Native numeric readback выполняется на candidate, результате Output1, actual bound field.Value и свежих inheritedcells самогоSpreadsheetField. Все RGB/8fontprops проверяются по реальным значениям каждойячейки, не по preparedexpected вместоreader.

  6. Редактирование input полей само по себе не меняет preview. ПриИзменении1 проверяет owncontrol и прежний actualresult; Применить1 принимает typed font/colorкопии; Сбросить1 восстанавливает только подтвержденный собственный result. Ни один native event не вызывается из кода вручную.

  7. До замены формы candidate полностью прочитан; после назначения actualfield перечитывается. Stickyfailstop/rethrow сохраняет отказ после частичнойUIоперации, без атомарности/слепогоrestore.

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

  1. Ожидаемый будущий manual readback: количество5, сумма1050 на всех трехэтапах; baselineRGB0/0/0 Arial10regular → actual0/64/128 Arial12bold → baseline. Четыреtextcells и6protectionflags неизменны.

  2. Неверные source/CF/version/controlbinding/uniontype/compilednumeric/type/style/partialformstate вызывают отказ до дальнейшейработы; color/font readonlyproperties не присваиваются.

  3. Visible JSON asset полностью описывает6compiledcells. Это manualmetadata, не скрытыйtemplate и не выполненная компиляция.

  4. Здесь проверяются authored source/native signatures/scopes и negative mutants; фактические1С/GUI/fonts/printing/DB/network0.

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

Будущий ручной результат: owninvoice5/1050, шесть actualRGB/fontreadbacks меняются и сбрасываются, исходные rows/compiledmacro не меняются. RuntimeVerifiedFalse; выполненной native1С/CFcompiler/UI/печати здесь нет.

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

  1. Обычный толстый клиент: не используйте managed Элементы/НаСервере/новый extension ctor. APIalias type|… не является реальным runtime TypeName. Nativeцвет/шрифт extensions получены actualtyped binding, не по имени переменной.

  2. Цвет и Шрифт immutable: RGB, Вид и все8fontproperties RO. Нужны настоящие значения NewColor3/NewFont7 или Font-copy8; менять Цвет.Красный или Шрифт.Размер нельзя.

  3. Неabsolute цвета имеютRGB-1, неabsolute шрифт можетиметьNameEmpty/Size-1/flagsUndefined. Наш простой учебный профиль явноотказываетсяотних; это ограничениепримера, не ограничениевсехAPI.

  4. NativeGetTemplate обоихфабрик принимает1requiredslot ивозвращаетunion TabDoc/TextDoc/другоймакет. Имяmetadata/marker/fileguard не доказываетдовериечужомукодуприложения; prerequisite — только вручнуюсозданныйсвойCF.

  5. Font/Color scalar equality не доказываетpixels/реальную гарнитуру/печатныйрезультат. Arialдолженбыть подготовленнаучебнойWindows; fallback/render/nativeUIздесьнеизмерены.

  6. Readonly/Защита ограничиваютредактированиезащищенныхячееек, не являютсяsecurity/DBpermissions. Formreset не означаетatomic rollback, не очищаетбазу/файлы и не делаетреальнуюпечать.

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

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

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

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

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