Расширение предоставляет возможность редактирования и хранения цвета в элементе управления ПолеВвода.
Полное описание, параметры и ограничения
Расширение поля ввода цвета (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 здесь не запускались.
Подготовка
Задача: оформить свою учебную накладную, не меняя товары и сумму. В памяти BOOK3 по250 и TEA2 по150: количество5, сумма1050. Изменим цвет и шрифт всех шести ячеек preview, перечитаем настоящие значения native ячеек и затем вернем baseline. Это не универсальный getter пример.
Вручную создайте НОВУЮ пустую File CF только в C:\1c-labs\OwnInvoiceAppearance85_29f78431-6f4c-4e86-9ac8-b23c4b6fce95\IB. UUID в имени каталога — собственный маркер стенда, не UUID базы. Код дополнительно создает actual UUID конкретной своей формы. Не используйте копию УТ/КА/УНФ/БП, не подключайте расширения базы/сеанса. Здесь никакой каталог, ИБ, CF или пользователь реально не создавались.
Только 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.
Отчеты→Добавить→ПредпросмотрНакладной85. Добавьте реквизит объекта Метка85 типа Строка36. Не добавляйте СКД, документы/регистры или процедуры записи. Модуль объекта отчета оставьте пустым. Это новый ReportObject из native Отчеты.ПредпросмотрНакладной85.Создать(), а не неизвестный ИсходныйОбъект и не объект БД.
В отчете Формы→Добавить обычную форму Форма85; ОсновнаяФорма=Форма85. Мастер создает главный реквизит Отчет типа ОтчетОбъект.ПредпросмотрНакладной85, ОсновнойРеквизитДа. Не создавайте форму списка/managed форму. FORM_MODULE целиком вставьте в Модуль формы. Цвет85 типЦвет, Шрифт85 типШрифт, Вывод85 типТабличныйДокумент, Состояние85 типСтрока2000 — дополнительные реквизиты формы. Private переменные из FORM_MODULE не создавайте как реквизиты.
На Форма85 разместите native ПолеВвода ЦветНакладной85 с ДанныеЦвет85 и ОграничениеТипа ровноЦвет; ПолеВвода ШрифтНакладной85 с ДанныеШрифт85 и ОграничениеТипа ровноШрифт. Это два настоящих typed bound обычных controls. Native дополнение цвета/шрифта дается типом связанного значения; отдельного NewExtension и API Type("Расширение поля ввода цвета") здесь нет. ПриИзменении обоих→ОформлениеПриИзменении85(Элемент): native OnChange0 плюс ordinary firstElement по event104.
Разместите ПолеТабличногоДокумента Вывод85 с ДанныеВывод85, ТолькоПросмотрДа; оно наследует свойства/методы TabDoc. Состояние85 — readonly поле. Кнопки Применить85/Сбросить85→одноименные процедуры(Элемент), native ButtonClick0 плюс ordinary firstElement. ПриОткрытии формы→ПриОткрытии() без параметров. Не вызывайте события вручную. Не назначайте input/tablecontrol владельцем формы: native bound extensionData/Value тогда недоступны.
Отчет→Макеты→Добавить Накладная85 типаТабличныйДокумент. В штатном редакторе вручную подготовьте ровно3строки x2колонки, без объединений, скрытых дополнительных строк, рисунков и linkedcontrols. Полная копируемая JSON-спецификация всех6ячееек находится в supporting module Накладная85.Она описывает manual подготовку, НЕ является import CF/MXL. Четыре textcells — literal text; R2C2/R3C2 — заполнениеПараметр с именамиКоличество85/Сумма85, СодержитЗначениеДа, TypeNumber12,0nonnegative, Value0 до заполнения.
Каждой из6compiledcells установите ЗащитаДа, ЦветТекста абсолютныйRGB0/0/0 и абсолютный Arial10, все4начертанияFalse, Масштаб100. Не полагайтесь на Авто/элементСтиля или текущий OS defaultfont. На учебной Windows проверьте наличие Arial вручную; код проверяет native свойства шрифта, не наличие glyphs/реальный renderer. В numericcells форматЧГ=0;ЧДЦ=0 нужен для чтения глазами, но арифметика сверяется через native ЗначениеЧисло.
Конфигурация→Открыть модуль обычного приложения: APPLICATION_MODULE целиком. Оно сначала проверит свой File-path/config/version, затем создаст новый собственный ReportObject и получит его ordinary форму3слота(имя,Undefined-owner,newactualUUID). КлючUUID и Метка85 связывают форму именно с этим instance; это не UUID пользователя и не UUID базы. После ручной проверки синтаксиса/обновления своей учебной CF запустите только ее обычный толстый клиент.
Будущий 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.
Отдельно только в новой ручной учебной сессии проверьте отказ при неправильном типе макета, текстовом 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": "Абсолютный"
}
}
]Разбор по шагам
Native Create0 создает собственный ReportObject. Native Object.GetForm3 возвращает ordinary форму для конкретного instance, ownerUndefined и newactualUUID проверяются до Open0.
Color/Font input extensions не имеют собственных ctor/members. Реальные ПолеВвода, тип реквизитовColor/Font, ограничения и actual boundData/Value доказывают маршруты; typed propertyreadback не является screenshot/pixelproof.
Начальный и пользовательский candidate используют actual ReportObject.GetTemplate1. Reset использует отдельно actual ReportManager.GetTemplate1, а не сохраненную UIкопию. Union result всегда проверяется TypeTabDoc.
GetArea4 возвращает новый ownTabDoc. Parameters.Fill1 получает actual суммы двух проверенных source rows. Style setters применяются только к6ячейкам новой копии; исходный compiled macro перечитывается0/0+baseline после output, исходные rows остаются прежними.
Native numeric readback выполняется на candidate, результате Output1, actual bound field.Value и свежих inheritedcells самогоSpreadsheetField. Все RGB/8fontprops проверяются по реальным значениям каждойячейки, не по preparedexpected вместоreader.
Редактирование input полей само по себе не меняет preview. ПриИзменении1 проверяет owncontrol и прежний actualresult; Применить1 принимает typed font/colorкопии; Сбросить1 восстанавливает только подтвержденный собственный result. Ни один native event не вызывается из кода вручную.
До замены формы candidate полностью прочитан; после назначения actualfield перечитывается. Stickyfailstop/rethrow сохраняет отказ после частичнойUIоперации, без атомарности/слепогоrestore.
Как проверить результат
Ожидаемый будущий manual readback: количество5, сумма1050 на всех трехэтапах; baselineRGB0/0/0 Arial10regular → actual0/64/128 Arial12bold → baseline. Четыреtextcells и6protectionflags неизменны.
Неверные source/CF/version/controlbinding/uniontype/compilednumeric/type/style/partialformstate вызывают отказ до дальнейшейработы; color/font readonlyproperties не присваиваются.
Visible JSON asset полностью описывает6compiledcells. Это manualmetadata, не скрытыйtemplate и не выполненная компиляция.
Здесь проверяются authored source/native signatures/scopes и negative mutants; фактические1С/GUI/fonts/printing/DB/network0.
Ожидаемый результат
Будущий ручной результат: owninvoice5/1050, шесть actualRGB/fontreadbacks меняются и сбрасываются, исходные rows/compiledmacro не меняются. RuntimeVerifiedFalse; выполненной native1С/CFcompiler/UI/печати здесь нет.
На что обратить внимание
Обычный толстый клиент: не используйте managed Элементы/НаСервере/новый extension ctor. APIalias type|… не является реальным runtime TypeName. Nativeцвет/шрифт extensions получены actualtyped binding, не по имени переменной.
Цвет и Шрифт immutable: RGB, Вид и все8fontproperties RO. Нужны настоящие значения NewColor3/NewFont7 или Font-copy8; менять Цвет.Красный или Шрифт.Размер нельзя.
Неabsolute цвета имеютRGB-1, неabsolute шрифт можетиметьNameEmpty/Size-1/flagsUndefined. Наш простой учебный профиль явноотказываетсяотних; это ограничениепримера, не ограничениевсехAPI.
NativeGetTemplate обоихфабрик принимает1requiredslot ивозвращаетunion TabDoc/TextDoc/другоймакет. Имяmetadata/marker/fileguard не доказываетдовериечужомукодуприложения; prerequisite — только вручнуюсозданныйсвойCF.
Font/Color scalar equality не доказываетpixels/реальную гарнитуру/печатныйрезультат. Arialдолженбыть подготовленнаучебнойWindows; fallback/render/nativeUIздесьнеизмерены.
Readonly/Защита ограничиваютредактированиезащищенныхячееек, не являютсяsecurity/DBpermissions. Formreset не означаетatomic rollback, не очищаетбазу/файлы и не делаетреальнуюпечать.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.