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