Contents
- 1 Введение
- 2 Архитектура
- 3 Использование
- 4 Особенности реализации
- 5 Источники
Введение
В этой статье я хотел бы рассказать об архитектуре, использовании и особенностях реализации подсистемы «Свойства» из инструментария разработчика «1С:Библиотека стандартных подсистем» (1С БСП).
Для начала предлагаю разобраться с терминологией 1С БСП: согласно ИТС дополнительные реквизиты и сведения — это свойства. По моему мнению, подсистема «Свойства» (Управление свойствами) — это очень мощный функционал, который позволяет во многих случаях отказаться от снятия конфигурации с поддержки или внесения ненужных изменений и ошибок в конфигурацию.
Архитектура
Описание работы с подсистемой «Свойства» на сайте ИТС 1С является исчерпывающим для типовых конфигураций, но в любом случае, для того, чтобы начать работать со свойствами в любой конфигурации с внедрённым 1С БСП необходимо установить установить константу «Использовать дополнительные реквизиты и сведения» в значение «Истина». После этого мы можем открыть справочник «Наборы дополнительных реквизитов и сведений», который содержит список объектов для которых можно создавать дополнительные реквизиты и сведения. При добавлении через стандартные формы 1С БСП пользователь создаёт новый элемент «Плана видов характеристик», который добавляется в табличную часть элемента.
Дополнительные сведения отличаются от дополнительных реквизитов прежде всего расположением, дополнительные сведения содержатся в отдельном регистре с одноименным названием, а дополнительные реквизиты являются табличной частью объекта, к которому относятся. На рисунке ниже слева-направо изображены: элемент справочника «Наборы дополнительных реквизитов и свойств», элемент плана видов характеристик и список регистра сведений «Дополнительные сведения».
Следующий рисунок изображает пример дополнительного реквизита, слева-направо: элемент справочника «Наборы дополнительных реквизитов и свойств», элемент плана видов характеристик и элемент справочника, в который был добавлен дополнительный реквизит.
Также стоит учитывать, что большая часть объектов метаданных в справочнике «Наборы дополнительных реквизитов и сведений» является предопределённой:
Однако, заполнение этих данных происходит программно, при внедрении 1С БСП или обновлении информационной базы — для этого в общих модулях добавляют процедуру ПриПолученииПредопределенныхНаборовСвойств. Уникальный идентификатор задаётся в явном виде, в т.ч. для того чтобы облегчить процедуры обмена между базами.
// См. УправлениеСвойствамиПереопределяемый.ПриПолученииПредопределенныхНаборовСвойств. // // Параметры: // Наборы - см. УправлениеСвойствамиПереопределяемый.ПриПолученииПредопределенныхНаборовСвойств.Наборы // Процедура ПриПолученииПредопределенныхНаборовСвойств(Наборы) Экспорт Набор = Наборы.Строки.Добавить(); Набор.Имя = "Справочник_ПапкиФайлов"; Набор.Идентификатор = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); КонецПроцедуры
С точки зрения интеграции с объектами механизм работы с формами не сильно отличается от аналогичных у других подсистем 1С БСП: из модуля УправлениеСвойствами вызываются процедуры и функции с названиями соответствующими названиям событий для которых они вызываются, например:
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) // Обработчик подсистемы "Свойства" ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("Объект", Объект); ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты"); УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, ДополнительныеПараметры); КонецПроцедуры
Полный список функций и процедур находится в общем модуле УправлениеСвойствами в блоке, озаглавленным: «Процедуры и функции для стандартной обработки дополнительных реквизитов».
Использование
Каждый дополнительный реквизит или свойство содержит поле «Имя», подразумевается, что для программного использования будет использоваться этот реквизит.
Пример использования имени для получения дополнительного реквизита:
ВЫБРАТЬ ГражданствоФизическихЛиц.ФизическоеЛицо КАК ФизическоеЛицо, ФизическиеЛицаДополнительныеРеквизиты.Значение КАК Рост, ГражданствоФизическихЛиц.Страна КАК Страна ИЗ Справочник.ФизическиеЛица.ДополнительныеРеквизиты КАК ФизическиеЛицаДополнительныеРеквизиты ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГражданствоФизическихЛиц КАК ГражданствоФизическихЛиц ПО ГражданствоФизическихЛиц.ФизическоеЛицо = ФизическиеЛицаДополнительныеРеквизиты.Ссылка ГДЕ ГражданствоФизическихЛиц.ФизическоеЛицо = &ФизическоеЛицо И ФизическиеЛицаДополнительныеРеквизиты.Свойство.Имя = &Имя
Результат:
Пример запроса для получения всех дополнительных свойств:
ВЫБРАТЬ ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура, ЦеныНоменклатурыСрезПоследних.ТипЦен КАК ТипЦен, ЦеныНоменклатурыСрезПоследних.Цена КАК Цена, ДополнительныеСведения.Свойство КАК Свойство, ДополнительныеСведения.Значение КАК Значение, ДополнительныеСведения.Свойство.Имя КАК ИмяСвойства ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних( &Дата, Номенклатура = &Номенклатура И ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = ДополнительныеСведения.Объект ИТОГИ МАКСИМУМ(Номенклатура), МАКСИМУМ(Цена) ПО ОБЩИЕ, ТипЦен
Результат:
Примеры получения свойств без запроса:
Рост = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.найтиПоРеквизиту("Имя", "Рост_12f49d4f164847b79effd75a758186c3"); // Получение дополнительного реквизита Рост = УправлениеСвойствами.ЗначениеСвойства(ФизическоеЛицо.Ссылка, Рост); // Получение всех дополнительных реквизитов и сведений объекта ВсеСвойства = УправлениеСвойствами.ЗначенияСвойств(ФизическоеЛицо.Ссылка);
Особенности реализации
Если с запросами и функциями всё более менее ясно неприятным сюрпризом может стать то, что дополнительный реквизит на форме содержит название, отличающееся от этого реквизита, например, такое:
Чтобы найти реквизит на форме 1С БСП создаёт новые реквизиты формы Свойства_ОписаниеДополнительныхРеквизитов и Свойства_ОписаниеЗависимыхДополнительныхРеквизитов, с помощью них можно установить однозначное соответствие между элементом и значением объекта:
Второй особенностью реализации можно выделить невозможность создания свойства с мутабельным типом, с одной стороны это очевидное ограничение, с другой тип «Список значений» вполне допустим, но только для дополнительного реквизита (у дополнительных сведений невозможность связана с архитектурными ограничениями, так как объект и свойство — это измерения регистра «Дополнительные сведения»). Возможно, отсутствие такого типа связано со сложностями при обмене, а возможно в скором времени это будет реализовано, предлагаю посмотреть на пример такой реализации ниже.
Добавим новый дополнительный реквизит для справочника физические лица «Номера счетов»
Добавляем программно, вторую запись в табличную часть «Дополнительные реквизиты» справочника «Физические лица» с тем же самым свойством:
Немного модифицируем код функции ЗначенияСвойств в общем модуле УправлениеСвойствамиСлужебный:
А также код процедуры ЗаполнитьДополнительныеРеквизитыВФорме в общем модуле УправлениеСвойствами:
Таким образом мы можем сохранять и восстанавливать значения реквизитов, которые, принимают множество значений.
// Создает/пересоздает дополнительные реквизиты и элементы в форме владельца свойств. // // Параметры: // Форма - ФормаКлиентскогоПриложения - уже настроена в процедуре ПриСозданииНаСервере. // // Объект - Неопределено - взять объект из реквизита формы "Объект". // - СправочникОбъектИмяСправочника - // - ДокументОбъектИмяДокумента - // - ПланВидовХарактеристикОбъектИмяПланаВидовХарактеристик - // - БизнесПроцессОбъектИмяБизнесПроцесса - // - ЗадачаОбъектИмяЗадачи - // - ПланВидовРасчетаОбъектИмяПланаВидовРасчета - // - ПланСчетовОбъектИмяПланаСчетов - // - ДанныеФормыСтруктура - // // ПоляНадписей - Булево - если указать Истина, то вместо полей ввода на форме будут созданы поля надписей. // // СкрытьУдаленные - Неопределено - не менять текущий режим скрытия удаленных, установленный ранее. // - Булево - установить/отключить режим скрытия удаленных. // При вызове процедуры ПередЗаписьюНаСервере в режиме скрытия удаленных, удаленные значения // очищаются (не переносятся обратно в объект), а режим СкрытьУдаленные устанавливается Ложь. // Процедура ЗаполнитьДополнительныеРеквизитыВФорме(Форма, Объект = Неопределено, ПоляНадписей = Ложь, СкрытьУдаленные = Неопределено) Экспорт Если НЕ Форма.Свойства_ИспользоватьСвойства ИЛИ НЕ Форма.Свойства_ИспользоватьДопРеквизиты Тогда Возврат; КонецЕсли; Если ТипЗнч(СкрытьУдаленные) = Тип("Булево") Тогда Форма.Свойства_СкрытьУдаленные = СкрытьУдаленные; КонецЕсли; Если Объект = Неопределено Тогда ОписаниеОбъекта = Форма.Объект; Иначе ОписаниеОбъекта = Объект; КонецЕсли; Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта = Новый СписокЗначений; КлючНазначения = Неопределено; НаборыСвойствОбъекта = УправлениеСвойствамиСлужебный.ПолучитьНаборыСвойствОбъекта( ОписаниеОбъекта, КлючНазначения); УправлениеСвойствамиСлужебный.ЗаполнитьНаборыСДополнительнымиРеквизитами( НаборыСвойствОбъекта, Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта); ОбновитьКлючНазначенияФормы(Форма, КлючНазначения); ОписаниеСвойств = УправлениеСвойствамиСлужебный.ЗначенияСвойств( ОписаниеОбъекта.ДополнительныеРеквизиты.Выгрузить(), Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта, Ложь); ОписаниеСвойств.Колонки.Добавить("ИмяРеквизитаЗначение"); ОписаниеСвойств.Колонки.Добавить("СтрокаСсылочногоТипа"); ОписаниеСвойств.Колонки.Добавить("ИмяСсылочногоРеквизитаЗначение"); ОписаниеСвойств.Колонки.Добавить("ИмяУникальнаяЧасть"); ОписаниеСвойств.Колонки.Добавить("ДополнительноеЗначение"); ОписаниеСвойств.Колонки.Добавить("Булево"); УдалитьСтарыеРеквизитыИЭлементы(Форма); // Создание реквизитов. ДобавляемыеРеквизиты = Новый Массив(); Для каждого ОписаниеСвойства Из ОписаниеСвойств Цикл ТипЗначенияСвойства = ОписаниеСвойства.ТипЗначения; СписокТипов = ТипЗначенияСвойства.Типы(); СтроковыйРеквизит = (СписокТипов.Количество() = 1) И (СписокТипов[0] = Тип("Строка")); // Поддержка строк неограниченной длины. ИспользоватьНеограниченнуюСтроку = УправлениеСвойствамиСлужебный.ИспользоватьНеограниченнуюСтроку( ТипЗначенияСвойства, ОписаниеСвойства.МногострочноеПолеВвода); Если ИспользоватьНеограниченнуюСтроку Тогда ТипЗначенияСвойства = Новый ОписаниеТипов("Строка"); ИначеЕсли ТипЗначенияСвойства.СодержитТип(Тип("Строка")) И ТипЗначенияСвойства.КвалификаторыСтроки.Длина = 0 Тогда // Если нельзя использовать неограниченную строку, а в свойствах реквизита она неограниченная, // то устанавливаем ограничение в 1024 символа. ТипЗначенияСвойства = Новый ОписаниеТипов(ОписаниеСвойства.ТипЗначения, ,,, Новый КвалификаторыСтроки(1024)); КонецЕсли; ОписаниеСвойства.ИмяУникальнаяЧасть = СтрЗаменить(ВРег(Строка(ОписаниеСвойства.Набор.УникальныйИдентификатор())), "-", "x") + "_" + СтрЗаменить(ВРег(Строка(ОписаниеСвойства.Свойство.УникальныйИдентификатор())), "-", "x"); // {{ Prosto. [Silantev Oleg Sergeevich] - [26.09.2020 21:51]. Если ОписаниеСвойств.Найти("ДополнительныйРеквизитЗначение_" + ОписаниеСвойства.ИмяУникальнаяЧасть) <> Неопределено Тогда ОписаниеСвойства.ИмяУникальнаяЧасть = ОписаниеСвойства.ИмяУникальнаяЧасть + "_" + ОписаниеСвойств.Индекс(описаниеСвойства); КонецЕсли; // }} {{ Prosto. [Silantev Oleg Sergeevich] - [26.09.2020 21:51]. ОписаниеСвойства.ИмяРеквизитаЗначение = "ДополнительныйРеквизитЗначение_" + ОписаниеСвойства.ИмяУникальнаяЧасть; ОписаниеСвойства.СтрокаСсылочногоТипа = Ложь; Если СтроковыйРеквизит И Не ИспользоватьНеограниченнуюСтроку И ОписаниеСвойства.ВыводитьВВидеГиперссылки Тогда ФорматированнаяСтрока = Новый ОписаниеТипов("ФорматированнаяСтрока"); ОписаниеСвойства.СтрокаСсылочногоТипа = Истина; ОписаниеСвойства.ИмяСсылочногоРеквизитаЗначение = "СсылочныйДополнительныйРеквизитЗначение_" + ОписаниеСвойства.ИмяУникальнаяЧасть; Реквизит = Новый РеквизитФормы(ОписаниеСвойства.ИмяСсылочногоРеквизитаЗначение, ФорматированнаяСтрока, , ОписаниеСвойства.Наименование, Истина); ДобавляемыеРеквизиты.Добавить(Реквизит); КонецЕсли; Если ОписаниеСвойства.Удалено Тогда ТипЗначенияСвойства = Новый ОписаниеТипов("Строка"); КонецЕсли; Реквизит = Новый РеквизитФормы(ОписаниеСвойства.ИмяРеквизитаЗначение, ТипЗначенияСвойства, , ОписаниеСвойства.Наименование, Истина); ДобавляемыеРеквизиты.Добавить(Реквизит); ОписаниеСвойства.ДополнительноеЗначение = УправлениеСвойствамиСлужебный.ТипЗначенияСодержитЗначенияСвойств(ТипЗначенияСвойства); ОписаниеСвойства.Булево = ОбщегоНазначения.ОписаниеТипаСостоитИзТипа(ТипЗначенияСвойства, Тип("Булево")); КонецЦикла; Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); // Создание элементов формы. Для Каждого ОписаниеСвойства Из ОписаниеСвойств Цикл ИмяЭлементаДляРазмещения = Форма.Свойства_ИмяЭлементаДляРазмещения; Если ТипЗнч(ИмяЭлементаДляРазмещения) <> Тип("СписокЗначений") Тогда Если ИмяЭлементаДляРазмещения = Неопределено Тогда ИмяЭлементаДляРазмещения = ""; КонецЕсли; ЭлементРазмещения = ?(ИмяЭлементаДляРазмещения = "", Неопределено, Форма.Элементы[ИмяЭлементаДляРазмещения]); Иначе РазделыДляРазмещения = Форма.Свойства_ИмяЭлементаДляРазмещения; РазмещениеНабора = РазделыДляРазмещения.НайтиПоЗначению(ОписаниеСвойства.Набор); Если РазмещениеНабора = Неопределено Тогда РазмещениеНабора = РазделыДляРазмещения.НайтиПоЗначению("ВсеОстальные"); КонецЕсли; ЭлементРазмещения = Форма.Элементы[РазмещениеНабора.Представление]; КонецЕсли; ФормаОписаниеСвойства = Форма.Свойства_ОписаниеДополнительныхРеквизитов.Добавить(); ЗаполнитьЗначенияСвойств(ФормаОписаниеСвойства, ОписаниеСвойства); // Заполнение таблицы зависимых дополнительных реквизитов. Если ОписаниеСвойства.ЗависимостиДополнительныхРеквизитов.Количество() > 0 И Не ОписаниеСвойства.Удалено Тогда ОписаниеЗависимогоРеквизита = Форма.Свойства_ОписаниеЗависимыхДополнительныхРеквизитов.Добавить(); ЗаполнитьЗначенияСвойств(ОписаниеЗависимогоРеквизита, ОписаниеСвойства); КонецЕсли; ОтборСтрок = Новый Структура; ОтборСтрок.Вставить("НаборСвойств", ОписаниеСвойства.Набор); ЗависимостиДанногоНабора = ОписаниеСвойства.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборСтрок); Для Каждого СтрокаТаблицы Из ЗависимостиДанногоНабора Цикл Если СтрокаТаблицы.ЗависимоеСвойство = "ЗаполнятьОбязательно" И ОписаниеСвойства.ТипЗначения = Новый ОписаниеТипов("Булево") Тогда Продолжить; КонецЕсли; Если ОписаниеСвойства.Удалено Тогда Продолжить; КонецЕсли; Если ТипЗнч(СтрокаТаблицы.Реквизит) = Тип("Строка") Тогда ПутьКРеквизиту = "Параметры.ОписаниеОбъекта." + СтрокаТаблицы.Реквизит; Иначе ОписаниеДополнительногоРеквизита = ОписаниеСвойств.Найти(СтрокаТаблицы.Реквизит, "Свойство"); Если ОписаниеДополнительногоРеквизита = Неопределено Тогда Продолжить; // Дополнительный реквизит не существует, условие игнорируется. КонецЕсли; ПутьКРеквизиту = "Параметры.Форма." + ОписаниеДополнительногоРеквизита.ИмяРеквизитаЗначение; КонецЕсли; УправлениеСвойствамиСлужебный.ПостроитьУсловияЗависимостей(ОписаниеЗависимогоРеквизита, ПутьКРеквизиту, СтрокаТаблицы); КонецЦикла; Если ОписаниеСвойства.СтрокаСсылочногоТипа Тогда Если ЗначениеЗаполнено(ОписаниеСвойства.Значение) Тогда Значение = ОписаниеСвойства.ТипЗначения.ПривестиЗначение(ОписаниеСвойства.Значение); СтрокаЗначение = СтроковыеФункции.ФорматированнаяСтрока(Значение); Иначе Значение = НСтр("ru = 'не задано'"); СсылкаРедактирования = "НеЗадано"; СтрокаЗначение = Новый ФорматированнаяСтрока(Значение,, ЦветаСтиля.ЦветПустойГиперссылки,, СсылкаРедактирования); КонецЕсли; Форма[ОписаниеСвойства.ИмяСсылочногоРеквизитаЗначение] = СтрокаЗначение; КонецЕсли; Форма[ОписаниеСвойства.ИмяРеквизитаЗначение] = ОписаниеСвойства.Значение; Если ОписаниеСвойства.Удалено И Форма.Свойства_СкрытьУдаленные Тогда Продолжить; КонецЕсли; Если НаборыСвойствОбъекта.Количество() > 1 Тогда ЭлементСписка = Форма.Свойства_ЭлементыГруппДополнительныхРеквизитов.НайтиПоЗначению( ОписаниеСвойства.Набор); Если ЭлементСписка <> Неопределено Тогда Родитель = Форма.Элементы[ЭлементСписка.Представление]; Иначе ОписаниеНабора = НаборыСвойствОбъекта.Найти(ОписаниеСвойства.Набор, "Набор"); Если ОписаниеНабора = Неопределено Тогда ОписаниеНабора = НаборыСвойствОбъекта.Добавить(); ОписаниеНабора.Набор = ОписаниеСвойства.Набор; ОписаниеНабора.Заголовок = НСтр("ru = 'Удаленные реквизиты'") КонецЕсли; Если НЕ ЗначениеЗаполнено(ОписаниеНабора.Заголовок) Тогда ОписаниеНабора.Заголовок = Строка(ОписаниеСвойства.Набор); КонецЕсли; ИмяЭлементаНабора = "НаборДополнительныхРеквизитов" + ОписаниеСвойства.ИмяУникальнаяЧасть; Родитель = Форма.Элементы.Добавить(ИмяЭлементаНабора, Тип("ГруппаФормы"), ЭлементРазмещения); Форма.Свойства_ЭлементыГруппДополнительныхРеквизитов.Добавить( ОписаниеСвойства.Набор, Родитель.Имя); Если ТипЗнч(ЭлементРазмещения) = Тип("ГруппаФормы") И ЭлементРазмещения.Вид = ВидГруппыФормы.Страницы Тогда Родитель.Вид = ВидГруппыФормы.Страница; Иначе Родитель.Вид = ВидГруппыФормы.ОбычнаяГруппа; Родитель.Отображение = ОтображениеОбычнойГруппы.Нет; КонецЕсли; Родитель.ОтображатьЗаголовок = Ложь; Родитель.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; ЗаполненныеСвойстваГруппы = Новый Структура; Для каждого Колонка Из НаборыСвойствОбъекта.Колонки Цикл Если ОписаниеНабора[Колонка.Имя] <> Неопределено Тогда ЗаполненныеСвойстваГруппы.Вставить(Колонка.Имя, ОписаниеНабора[Колонка.Имя]); КонецЕсли; КонецЦикла; ЗаполнитьЗначенияСвойств(Родитель, ЗаполненныеСвойстваГруппы); КонецЕсли; Иначе Родитель = ЭлементРазмещения; КонецЕсли; Если ОписаниеСвойства.ВыводитьВВидеГиперссылки Тогда ИмяГруппыГиперссылки = "Группа_" + ОписаниеСвойства.ИмяУникальнаяЧасть; ГруппаГиперссылки = Форма.Элементы.Добавить(ИмяГруппыГиперссылки, Тип("ГруппаФормы"), Родитель); ГруппаГиперссылки.Вид = ВидГруппыФормы.ОбычнаяГруппа; ГруппаГиперссылки.Отображение = ОтображениеОбычнойГруппы.Нет; ГруппаГиперссылки.ОтображатьЗаголовок = Ложь; ГруппаГиперссылки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; ГруппаГиперссылки.Заголовок = ОписаниеСвойства.Наименование; Элемент = Форма.Элементы.Добавить(ОписаниеСвойства.ИмяРеквизитаЗначение, Тип("ПолеФормы"), ГруппаГиперссылки); // РасширениеПоляФормыДляПоляНадписи, РасширениеПоляФормыДляПоляВвода РеквизитДоступен = РеквизитДоступенПоФункциональнымОпциям(ОписаниеСвойства); Если РеквизитДоступен И Не ПоляНадписей Тогда ИмяКнопки = "Кнопка_" + ОписаниеСвойства.ИмяУникальнаяЧасть; Кнопка = Форма.Элементы.Добавить( ИмяКнопки, Тип("КнопкаФормы"), ГруппаГиперссылки); Кнопка.ТолькоВоВсехДействиях = Истина; Кнопка.ИмяКоманды = "РедактироватьГиперссылкуРеквизита"; Кнопка.ОтображениеФигуры = ОтображениеФигурыКнопки.ПриАктивности; КонецЕсли; Если Не ОписаниеСвойства.СтрокаСсылочногоТипа И ЗначениеЗаполнено(ОписаниеСвойства.Значение) Тогда Элемент.Гиперссылка = Истина; КонецЕсли; Иначе Элемент = Форма.Элементы.Добавить(ОписаниеСвойства.ИмяРеквизитаЗначение, Тип("ПолеФормы"), Родитель); // РасширениеПоляФормыДляПоляНадписи, РасширениеПоляФормыДляПоляВвода КонецЕсли; ФормаОписаниеСвойства.ЭлементФормыДобавлен = Истина; Если ОписаниеСвойства.Булево И ПустаяСтрока(ОписаниеСвойства.ФорматСвойства) Тогда Элемент.Вид = ВидПоляФормы.ПолеФлажка; Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; Иначе Если ПоляНадписей Тогда Элемент.Вид = ВидПоляФормы.ПолеВвода; ИначеЕсли ОписаниеСвойства.ВыводитьВВидеГиперссылки И (ОписаниеСвойства.СтрокаСсылочногоТипа Или ЗначениеЗаполнено(ОписаниеСвойства.Значение))Тогда Элемент.Вид = ВидПоляФормы.ПолеНадписи; Иначе Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.АвтоОтметкаНезаполненного = ОписаниеСвойства.ЗаполнятьОбязательно И НЕ ОписаниеСвойства.Удалено; КонецЕсли; Элемент.РастягиватьПоВертикали = Ложь; Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Лево; КонецЕсли; Если ОписаниеСвойства.СтрокаСсылочногоТипа Тогда Элемент.ПутьКДанным = ОписаниеСвойства.ИмяСсылочногоРеквизитаЗначение; Элемент.УстановитьДействие("ОбработкаНавигационнойСсылки", "Подключаемый_СвойстваВыполнитьКоманду"); Иначе Элемент.ПутьКДанным = ОписаниеСвойства.ИмяРеквизитаЗначение; КонецЕсли; Элемент.Подсказка = ОписаниеСвойства.Подсказка; Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_ПриИзмененииДополнительногоРеквизита"); Если Элемент.Вид = ВидПоляФормы.ПолеВвода И Не ИспользоватьНеограниченнуюСтроку И ОписаниеСвойства.ТипЗначения.Типы().Найти(Тип("Строка")) <> Неопределено Тогда Элемент.СвязьПоТипу = Новый СвязьПоТипу("Свойства_ОписаниеДополнительныхРеквизитов.Свойство", ОписаниеСвойств.Индекс(ОписаниеСвойства)); КонецЕсли; Если ОписаниеСвойства.МногострочноеПолеВвода > 0 Тогда Если НЕ ПоляНадписей Тогда Элемент.МногострочныйРежим = Истина; КонецЕсли; Элемент.Высота = ОписаниеСвойства.МногострочноеПолеВвода; КонецЕсли; Если НЕ ПустаяСтрока(ОписаниеСвойства.ФорматСвойства) И Не ОписаниеСвойства.ВыводитьВВидеГиперссылки Тогда Если ПоляНадписей Тогда Элемент.Формат = ОписаниеСвойства.ФорматСвойства; Иначе ФорматнаяСтрока = ""; Массив = СтрРазделить(ОписаниеСвойства.ФорматСвойства, ";", Ложь); Для каждого Подстрока Из Массив Цикл Если СтрНайти(Подстрока, "ДП=") > 0 ИЛИ СтрНайти(Подстрока, "DE=") > 0 Тогда Продолжить; КонецЕсли; Если СтрНайти(Подстрока, "ЧН=") > 0 ИЛИ СтрНайти(Подстрока, "NZ=") > 0 Тогда Продолжить; КонецЕсли; Если СтрНайти(Подстрока, "ДФ=") > 0 ИЛИ СтрНайти(Подстрока, "DF=") > 0 Тогда Если СтрНайти(Подстрока, "ддд") > 0 ИЛИ СтрНайти(Подстрока, "ddd") > 0 Тогда Подстрока = СтрЗаменить(Подстрока, "ддд", "дд"); Подстрока = СтрЗаменить(Подстрока, "ddd", "dd"); КонецЕсли; Если СтрНайти(Подстрока, "дддд") > 0 ИЛИ СтрНайти(Подстрока, "dddd") > 0 Тогда Подстрока = СтрЗаменить(Подстрока, "дддд", "дд"); Подстрока = СтрЗаменить(Подстрока, "dddd", "dd"); КонецЕсли; Если СтрНайти(Подстрока, "МММ") > 0 ИЛИ СтрНайти(Подстрока, "MMM") > 0 Тогда Подстрока = СтрЗаменить(Подстрока, "МММ", "ММ"); Подстрока = СтрЗаменить(Подстрока, "MMM", "MM"); КонецЕсли; Если СтрНайти(Подстрока, "ММММ") > 0 ИЛИ СтрНайти(Подстрока, "MMMM") > 0 Тогда Подстрока = СтрЗаменить(Подстрока, "ММММ", "ММ"); Подстрока = СтрЗаменить(Подстрока, "MMMM", "MM"); КонецЕсли; КонецЕсли; Если СтрНайти(Подстрока, "ДЛФ=") > 0 ИЛИ СтрНайти(Подстрока, "DLF=") > 0 Тогда Если СтрНайти(Подстрока, "ДД") > 0 ИЛИ СтрНайти(Подстрока, "DD") > 0 Тогда Подстрока = СтрЗаменить(Подстрока, "ДД", "Д"); Подстрока = СтрЗаменить(Подстрока, "DD", "D"); КонецЕсли; КонецЕсли; ФорматнаяСтрока = ФорматнаяСтрока + ?(ФорматнаяСтрока = "", "", ";") + Подстрока; КонецЦикла; Элемент.Формат = ФорматнаяСтрока; Элемент.ФорматРедактирования = ФорматнаяСтрока; КонецЕсли; КонецЕсли; Если ОписаниеСвойства.Удалено Тогда Элемент.ЦветТекстаЗаголовка = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет; Элемент.ШрифтЗаголовка = ШрифтыСтиля.ЗаголовокУдаленногоРеквизитаШрифт; Если Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда Элемент.КнопкаОчистки = Истина; Элемент.КнопкаВыбора = Ложь; Элемент.КнопкаОткрытия = Ложь; Элемент.КнопкаВыпадающегоСписка = Ложь; Элемент.РедактированиеТекста = Ложь; КонецЕсли; КонецЕсли; Если НЕ ПоляНадписей И ОписаниеСвойства.ДополнительноеЗначение И Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда ПараметрыВыбора = Новый Массив; ПараметрыВыбора.Добавить(Новый ПараметрВыбора("Отбор.Владелец", ?(ЗначениеЗаполнено(ОписаниеСвойства.ВладелецДополнительныхЗначений), ОписаниеСвойства.ВладелецДополнительныхЗначений, ОписаниеСвойства.Свойство))); Элемент.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбора); КонецЕсли; КонецЦикла; // Установка видимости, доступности и обязательности заполнения дополнительных реквизитов. Для Каждого ОписаниеЗависимогоРеквизита Из Форма.Свойства_ОписаниеЗависимыхДополнительныхРеквизитов Цикл Если ОписаниеЗависимогоРеквизита.ВыводитьВВидеГиперссылки Тогда ОбрабатываемыйЭлемент = СтрЗаменить(ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение, "ДополнительныйРеквизитЗначение_", "Группа_"); Иначе ОбрабатываемыйЭлемент = ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение; КонецЕсли; Если ОписаниеЗависимогоРеквизита.УсловиеДоступности <> Неопределено Тогда Результат = РезультатВычисленияУсловия(Форма, ОписаниеОбъекта, ОписаниеЗависимогоРеквизита.УсловиеДоступности); Элемент = Форма.Элементы[ОбрабатываемыйЭлемент]; // ПолеФормы Если Элемент.Доступность <> Результат Тогда Элемент.Доступность = Результат; КонецЕсли; КонецЕсли; Если ОписаниеЗависимогоРеквизита.УсловиеВидимости <> Неопределено Тогда Результат = РезультатВычисленияУсловия(Форма, ОписаниеОбъекта, ОписаниеЗависимогоРеквизита.УсловиеВидимости); Элемент = Форма.Элементы[ОбрабатываемыйЭлемент]; Если Элемент.Видимость <> Результат Тогда Элемент.Видимость = Результат; КонецЕсли; КонецЕсли; Если ОписаниеЗависимогоРеквизита.УсловиеОбязательностиЗаполнения <> Неопределено Тогда Если Не ОписаниеЗависимогоРеквизита.ЗаполнятьОбязательно Тогда Продолжить; КонецЕсли; Результат = РезультатВычисленияУсловия(Форма, ОписаниеОбъекта, ОписаниеЗависимогоРеквизита.УсловиеОбязательностиЗаполнения); Элемент = Форма.Элементы[ОбрабатываемыйЭлемент]; Если Не ОписаниеЗависимогоРеквизита.ВыводитьВВидеГиперссылки И Элемент.АвтоОтметкаНезаполненного <> Результат Тогда Элемент.АвтоОтметкаНезаполненного = Результат; КонецЕсли; КонецЕсли; КонецЦикла; Структура = Новый Структура("ПараметрыСвойств"); ЗаполнитьЗначенияСвойств(Структура, Форма); Если ТипЗнч(Структура.ПараметрыСвойств) = Тип("Структура") И Структура.ПараметрыСвойств.Свойство("ВыполненаОтложеннаяИнициализация") Тогда Форма.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация = Истина; // Удаление временной декорации, если она была добавлена. Если Форма.ПараметрыСвойств.Свойство("ДобавленаПустаяДекорация") Тогда Для Каждого ИмяДекорации Из Форма.ПараметрыСвойств.КоллекцияДекораций Цикл Форма.Элементы.Удалить(Форма.Элементы[ИмяДекорации]); КонецЦикла; Форма.ПараметрыСвойств.Удалить("ДобавленаПустаяДекорация"); КонецЕсли; КонецЕсли; КонецПроцедуры
// Возвращает заполненную таблицу значений свойств объекта. Функция ЗначенияСвойств(ДополнительныеСвойстваОбъекта, Наборы, ЭтоДополнительноеСведение) Экспорт Если ДополнительныеСвойстваОбъекта.Количество() = 0 Тогда // Предварительная быстрая проверка использования дополнительных свойств. СвойстваНеНайдены = ДополнительныеРеквизитыИСведенияНеНайдены(Наборы, ЭтоДополнительноеСведение); Если СвойстваНеНайдены Тогда ОписаниеСвойств = Новый ТаблицаЗначений; ОписаниеСвойств.Колонки.Добавить("Набор"); ОписаниеСвойств.Колонки.Добавить("Свойство"); ОписаниеСвойств.Колонки.Добавить("ВладелецДополнительныхЗначений"); ОписаниеСвойств.Колонки.Добавить("ЗаполнятьОбязательно"); ОписаниеСвойств.Колонки.Добавить("Наименование"); ОписаниеСвойств.Колонки.Добавить("ТипЗначения"); ОписаниеСвойств.Колонки.Добавить("ФорматСвойства"); ОписаниеСвойств.Колонки.Добавить("МногострочноеПолеВвода"); ОписаниеСвойств.Колонки.Добавить("Удалено"); ОписаниеСвойств.Колонки.Добавить("Значение"); Возврат ОписаниеСвойств; КонецЕсли; КонецЕсли; Свойства = ДополнительныеСвойстваОбъекта.ВыгрузитьКолонку("Свойство"); НаборыСвойств = Новый ТаблицаЗначений; НаборыСвойств.Колонки.Добавить( "Набор", Новый ОписаниеТипов("СправочникСсылка.НаборыДополнительныхРеквизитовИСведений")); НаборыСвойств.Колонки.Добавить( "ПорядокНабора", Новый ОписаниеТипов("Число")); Для каждого ЭлементСписка Из Наборы Цикл НоваяСтрока = НаборыСвойств.Добавить(); НоваяСтрока.Набор = ЭлементСписка.Значение; НоваяСтрока.ПорядокНабора = Наборы.Индекс(ЭлементСписка); КонецЦикла; Запрос = Новый Запрос; Запрос.УстановитьПараметр("Свойства", Свойства); Запрос.УстановитьПараметр("НаборыСвойств", НаборыСвойств); Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык); Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка); Запрос.Текст = "ВЫБРАТЬ | НаборыСвойств.Набор КАК Набор, | НаборыСвойств.ПорядокНабора КАК ПорядокНабора |ПОМЕСТИТЬ НаборыСвойств |ИЗ | &НаборыСвойств КАК НаборыСвойств |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | НаборыСвойств.Набор КАК Набор, | НаборыСвойств.ПорядокНабора КАК ПорядокНабора, | СвойстваНаборов.Свойство КАК Свойство, | СвойстваНаборов.ПометкаУдаления КАК ПометкаУдаления, | СвойстваНаборов.НомерСтроки КАК ПорядокСвойства |ПОМЕСТИТЬ СвойстваНаборов |ИЗ | НаборыСвойств КАК НаборыСвойств | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов | ПО (СвойстваНаборов.Ссылка = НаборыСвойств.Набор) | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства | ПО (СвойстваНаборов.Свойство = Свойства.Ссылка) |ГДЕ | НЕ СвойстваНаборов.ПометкаУдаления | И НЕ Свойства.ПометкаУдаления |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | Свойства.Ссылка КАК Свойство |ПОМЕСТИТЬ ЗаполненныеСвойства |ИЗ | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства |ГДЕ | Свойства.Ссылка В(&Свойства) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СвойстваНаборов.Набор КАК Набор, | СвойстваНаборов.ПорядокНабора КАК ПорядокНабора, | СвойстваНаборов.Свойство КАК Свойство, | СвойстваНаборов.ПорядокСвойства КАК ПорядокСвойства, | СвойстваНаборов.ПометкаУдаления КАК Удалено |ПОМЕСТИТЬ ВсеСвойства |ИЗ | СвойстваНаборов КАК СвойстваНаборов | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка), | 0, | ЗаполненныеСвойства.Свойство, | 0, | ИСТИНА |ИЗ | ЗаполненныеСвойства КАК ЗаполненныеСвойства | ЛЕВОЕ СОЕДИНЕНИЕ СвойстваНаборов КАК СвойстваНаборов | ПО ЗаполненныеСвойства.Свойство = СвойстваНаборов.Свойство |ГДЕ | СвойстваНаборов.Свойство ЕСТЬ NULL |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВсеСвойства.Набор КАК Набор, | ВсеСвойства.Свойство КАК Свойство, | ДополнительныеРеквизитыИСведения.ВладелецДополнительныхЗначений КАК ВладелецДополнительныхЗначений, | ДополнительныеРеквизитыИСведения.ЗаполнятьОбязательно КАК ЗаполнятьОбязательно, | ВЫБОР | КОГДА &ЭтоОсновнойЯзык | ТОГДА ДополнительныеРеквизитыИСведения.Заголовок | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Заголовок, ДополнительныеРеквизитыИСведения.Заголовок) КАК СТРОКА(150)) | КОНЕЦ КАК Наименование, | ДополнительныеРеквизитыИСведения.ТипЗначения КАК ТипЗначения, | ДополнительныеРеквизитыИСведения.ФорматСвойства КАК ФорматСвойства, | ДополнительныеРеквизитыИСведения.МногострочноеПолеВвода КАК МногострочноеПолеВвода, | ВсеСвойства.Удалено КАК Удалено, | ДополнительныеРеквизитыИСведения.Доступен КАК Доступен, | ДополнительныеРеквизитыИСведения.Виден КАК Виден, | ВЫБОР | КОГДА &ЭтоОсновнойЯзык | ТОГДА ДополнительныеРеквизитыИСведения.Подсказка | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Подсказка, ДополнительныеРеквизитыИСведения.Подсказка) КАК СТРОКА(150)) | КОНЕЦ КАК Подсказка, | ДополнительныеРеквизитыИСведения.ВыводитьВВидеГиперссылки КАК ВыводитьВВидеГиперссылки, | ДополнительныеРеквизитыИСведения.ЗависимостиДополнительныхРеквизитов.( | ЗависимоеСвойство КАК ЗависимоеСвойство, | Реквизит КАК Реквизит, | Условие КАК Условие, | Значение КАК Значение, | НаборСвойств КАК НаборСвойств | ) КАК ЗависимостиДополнительныхРеквизитов |ИЗ | ВсеСвойства КАК ВсеСвойства | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения | ПО ВсеСвойства.Свойство = ДополнительныеРеквизитыИСведения.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Представления КАК СвойстваПредставления | ПО (СвойстваПредставления.Ссылка = ДополнительныеРеквизитыИСведения.Ссылка) | И (СвойстваПредставления.КодЯзыка = &КодЯзыка) | |УПОРЯДОЧИТЬ ПО | Удалено, | ВсеСвойства.ПорядокНабора, | ВсеСвойства.ПорядокСвойства"; Если ЭтоДополнительноеСведение Тогда Запрос.Текст = СтрЗаменить( Запрос.Текст, "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты", "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения"); КонецЕсли; ОписаниеСвойств = Запрос.Выполнить().Выгрузить(); ОписаниеСвойств.Индексы.Добавить("Свойство"); ОписаниеСвойств.Колонки.Добавить("Значение"); // Удаление дублей свойств в нижестоящих наборах свойств. Если Наборы.Количество() > 1 Тогда Индекс = ОписаниеСвойств.Количество()-1; Пока Индекс >= 0 Цикл Строка = ОписаниеСвойств[Индекс]; НайденнаяСтрока = ОписаниеСвойств.Найти(Строка.Свойство, "Свойство"); Если НайденнаяСтрока <> Неопределено И НайденнаяСтрока <> Строка Тогда ОписаниеСвойств.Удалить(Индекс); КонецЕсли; Индекс = Индекс-1; КонецЦикла; КонецЕсли; // {{ Prosto. [Silantev Oleg Sergeevich] - [26.09.2020 21:33]. ИспользованныеСвойства = Новый Массив; // }} {{ Prosto. [Silantev Oleg Sergeevich] - [26.09.2020 21:33]. // Заполнение значений свойств. Для Каждого Строка Из ДополнительныеСвойстваОбъекта Цикл ОписаниеСвойства = ОписаниеСвойств.Найти(Строка.Свойство, "Свойство"); Если ОписаниеСвойства <> Неопределено Тогда // {{ Prosto. [Silantev Oleg Sergeevich] - [26.09.2020 21:34]. Если ИспользованныеСвойства.Найти(ОписаниеСвойства.Свойство) = Неопределено Тогда ИспользованныеСвойства.Добавить(ОписаниеСвойства.Свойство) Иначе НоваяСтрокаОписания = ОписаниеСвойств.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрокаОписания, ОписаниеСвойства); ОписаниеСвойства = НоваяСтрокаОписания; КонецЕсли; // }} {{ Prosto. [Silantev Oleg Sergeevich] - [26.09.2020 21:34]. // Поддержка строк неограниченной длины. Если НЕ ЭтоДополнительноеСведение Тогда ИспользоватьСтрокуВВидеСсылки = ИспользоватьСтрокуВВидеСсылки( ОписаниеСвойства.ТипЗначения, ОписаниеСвойства.ВыводитьВВидеГиперссылки, ОписаниеСвойства.МногострочноеПолеВвода); ИспользоватьНеограниченнуюСтроку = ИспользоватьНеограниченнуюСтроку( ОписаниеСвойства.ТипЗначения, ОписаниеСвойства.МногострочноеПолеВвода); НеобходимоПеренестиЗначениеИзСсылки = НеобходимоПеренестиЗначениеИзСсылки( Строка.ТекстоваяСтрока, Строка.Значение); Если (ИспользоватьНеограниченнуюСтроку Или ИспользоватьСтрокуВВидеСсылки Или НеобходимоПеренестиЗначениеИзСсылки) И НЕ ПустаяСтрока(Строка.ТекстоваяСтрока) Тогда Если Не ИспользоватьСтрокуВВидеСсылки И НеобходимоПеренестиЗначениеИзСсылки Тогда ЗначениеБезСсылки = ЗначениеБезСсылки(Строка.ТекстоваяСтрока, Строка.Значение); ОписаниеСвойства.Значение = ЗначениеБезСсылки; Иначе ОписаниеСвойства.Значение = Строка.ТекстоваяСтрока; КонецЕсли; Иначе ОписаниеСвойства.Значение = Строка.Значение; КонецЕсли; Иначе ОписаниеСвойства.Значение = Строка.Значение; КонецЕсли; КонецЕсли; КонецЦикла; Возврат ОписаниеСвойств; КонецФункции
Работа в примерах была осуществлена с версией БСП: 3.1.2.245
Источники
Как подключить дополнительные реквизиты к справочнику или документу в БСП 2.3
Создание множественного дополнительного реквизита. Управление торговлей 11
В новых редакциях программ 1С была существенно усовершенствована подсистема дополнительных реквизитов Дополнительные реквизиты и сведения. Эта подсистема дает возможность пользователю самим добавлять реквизиты и сведения к объектам программы не прибегая к помощи программиста.
Содержание
- Дополнительные реквизиты и сведения в 1С
- Настройка подсистемы Дополнительные реквизиты и дополнительные сведения на примере 1С 8.3 Бухгалтерия 3.0
- Добавление дополнительных реквизитов
- Добавление дополнительных сведений к форме
Дополнительные реквизиты являются неотъемлемой часть справочника, хранятся в самом объекте и отображаются на его форме. С их помощью описываются свойства объекта. После их настройки они появляются на форме объекта и становятся доступны для заполнения. Они доступны тем же пользователям, которым доступен и сам объект. Дополнительные реквизиты лучше использовать для отражения общедоступной информации.
Дополнительные сведения — не видны всем, они хранятся в регистре сведений и доступны по команде из элемента справочника или документа. Они вводятся в отдельном окне Дополнительные сведения, а также в формах списков документов и справочников и могут быть доступны для просмотра пользователям, доступ которым к объекту закрыт.
Настройка подсистемы Дополнительные реквизиты и дополнительные сведения на примере 1С 8.3 Бухгалтерия 3.0
Включить возможность создавать дополнительные реквизиты и сведения и настроить их можно в разделе Администрирование — Общие настройки. Для этого в подразделе Дополнительные реквизиты и сведения установите галочки, разрешающие добавлять эти элементы.
Добавление дополнительных реквизитов
Для добавления и настройки дополнительных реквизитов в 1С 8.3 перейдем по ссылке Дополнительные реквизиты. В окне перечислены объекты, к которым можем добавить реквизиты.
Для примера, создадим несколько дополнительных реквизитов к справочнику Номенклатура. Выберем элемент, к которому будем создавать реквизит (в нашем примере Номенклатура) и нажмем кнопку Добавить — Новый.
Для примера создадим Дополнительный реквизит, значения которого будут заданы и их необходимо будет выбрать из списка. Назовем его Доп. реквизит 1 (выбор значения). В открывшейся форме зададим его Наименование, Тип значения оставляем Дополнительный реквизит. При желании можно установить флажок Выводить в виде гиперссылки, соответственно в форме элемента данное поле будет представлено в виде гиперссылки. Настраиваем видимость, доступность и обязательность заполнения и по желанию заполнить следующие поля.
На вкладке Значения можем перечислить значения нашего реквизита, при этом значения можно объединять в группы. Например, Значение доп. реквизита 1, значение доп. реквизита 2, значение доп. реквизита 3.
Нажимаем Записать и закрыть и также сохраняем наш созданный реквизит.
Создадим еще один реквизит, назовем его Доп. реквизит — 2 (установка галочки). Для добавления реквизита галочка, флажок установим Тип реквизита — Булево. При смене реквизита меняются настройки формы. В данном случае нам предлагается установить настройки видимости и доступности, установить всплывающую подсказку.
Сохраняем реквизит, нажав кнопку Записать и закрыть.
Введем для примера еще один реквизит с Типом значения Строка (назовем его для примера Доп. реквизит — 3 (текст)).
Все настройки интуитивно понятны.
Так, при создании дополнительных реквизитов в 1С, при выборе Тип значения реквизита, мы можем использовать разные варианты и в зависимости от его выбора немного меняется настройка создаваемого реквизита.
Итак, мы создали три дополнительных реквизита к справочнику Номенклатура.
Посмотрим, как они отобразятся в форме элемента справочника. Откроем элемент справочника Номенклатура и зайдем в раздел Дополнительные реквизиты, внизу формы.
Мы видим, три наших добавленных реквизита. В первом реквизите — поле с кнопкой выбора значений, во втором — возможность установить галочку, в третьем — обычное текстовое поле и наши всплывающие подсказки, которые прописали в настройках.
При выборе значений первого реквизита, нажав кнопку Показать все, видим введенные нами его значения дополнительного реквизита. При этом, с помощью кнопки Создать можем эти значения добавлять непосредственно при работе со справочником.
Добавление дополнительных сведений к форме
Рассмотрим пример добавления дополнительных сведений в 1С 8.3. Для этого перейдем по ссылке Дополнительные сведения, в разделе Администрирование — Общие настройки — Дополнительные реквизиты и сведения. Выберем элемент для добавления сведений и нажимаем кнопку Создать — Новое.
Новый объект в предложенный список ввести нельзя. В списке отражены все документы и часть справочников, для которых можно добавить Дополнительные сведения. Дополнительные реквизиты можно добавить лишь к справочникам.
Добавление и настройка дополнительных сведений в 1С производится аналогично дополнительным реквизитам.
Для примера создадим одно дополнительное сведение для справочника Сотрудники, где выбор будет производится из справочника Физические лица, для указания лица, которому подчиняется данный сотрудник (назовем его просто Дополнительные сведения).
Откроем справочник Сотрудники и проверим добавление сведений. Эта информация скрыта из формы элемента и открывается нажатием кнопки Еще — Дополнительные сведения.
Выбрав этот пункт, мы можем добавить дополнительные сведения для данного элемента справочника, в данном примере выбрав из справочника Физические лица.
Аналогично можно добавить Дополнительные сведения и к документам. Окно ввода дополнительных сведений также будет доступно в кнопке Еще — Дополнительные сведения документа.
Данная команда доступна как из самого документа, так и из журнала документов.
См. также:
- Печать ценников в 1С
- Очистка кэш 1С 8.3
- Журнал регистрации в 1С 8.3
- Как сделать копию базы 1С 8.3
- Загрузка из Excel в 1С 8.3
- Как выгрузить документ, отчет из 1С 8.3 в Excel
Если Вы еще не являетесь подписчиком системы БухЭксперт8:
Активировать демо-доступ бесплатно →
или
Оформить подписку на Рубрикатор →
После оформления подписки вам станут доступны все материалы по 1С Бухгалтерия, записи поддерживающих эфиров и вы сможете задавать любые вопросы по 1С.
Подписывайтесь на наши YouTube и Telegram чтобы не пропустить
важные изменения 1С и законодательства
Помогла статья?
Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно
Рассмотрим работу с дополнительными сведениями и дополнительными реквизитами в Конфигураторе на примере конфигурации УТ 11.
Сами элементы дополнительных сведений и дополнительных реквизитов хранятся в плане видов характеристик ДополнительныеРеквизитыИСведения (рис. 1):
Рис. 1. План видов характеристик ДополнительныеРеквизитыИСведения
Значения дополнительных сведений хранятся в непериодическом независимом регистре сведений ДополнительныеСведения (рис. 2):
Рис. 2. Регистр сведений ДополнительныеСведения
Значения дополнительных реквизитов хранятся в табличных частях объектов ДополнительныеРеквизиты, например, справочник Номенклатура (рис. 3):
Рис. 3. Табличная часть объекта ДополнительныеРеквизиты
Получить значения дополнительных сведений и дополнительных реквизитов можно с помощью типовой функции ПолучитьЗначенияСвойств() общего модуля УправлениеСвойствами (рис. 4):
Рис. 4. Функция ПолучитьЗначенияСвойств() общего модуля УправлениеСвойствами
Автор Дина Королева.
Подписывайтесь на канал
«Полезный 1С»
В телеграм канале — наш практический опыт, бизнес-кейсы и способы повышения эффективности компании, которые мы опробовали внутри группы Neti.
Возврат к списку
В конфигурации 1С:ERP существует возможность создавать и редактировать в режиме 1С:Предприятие дополнительные реквизиты различных документов и справочников конфигурации.
Дополнительные реквизиты и сведения объектов делятся на две категории:
- Дополнительные реквизиты – хранятся в самом объекте (в специальной табличной части).
- Дополнительные сведения – предназначены для хранения сведений об объекте, которые не являются неотъемлемой частью объекта.
Добавление дополнительных реквизитов осуществляется опцией НСИ и администрирование – Администрирование – Общие настройки – Дополнительные реквизиты и сведения – Дополнительные реквизиты и сведения.
Рисунок 1 — Добавление дополнительных реквизитов
Назначение новых дополнительных реквизитов и сведений
Для ввода и назначения объектам конфигурации новых дополнительных реквизитов и сведений у пользователей должна быть установлена роль Полные права.
Работа с дополнительными реквизитами и сведениями осуществляется в соответствующих списках: НСИ и администрирование – Администрирование – Общие настройки – Дополнительные реквизиты и сведения – Дополнительные реквизиты и Дополнительные сведения.
Рисунок 2 — Дополнительные реквизиты, дополнительные сведения
Рисунок 3 — Пример дополнительных реквизитов
Для дополнительного реквизита или сведения можно задать список возможных значений на закладке Значения в форме дополнительного реквизита или дополнительного сведения.
Рисунок 4 — Список значений
Процедура добавления дополнительных реквизитов и сведений
Создание дополнительных реквизитов и сведений предусмотрено для видов номенклатуры, характеристик и серий по команде Добавить – Из другого набора.
Рисунок 5 — Добавление реквизита из другого набора
Поддерживаются различные варианты добавления дополнительных реквизитов и сведений (выбор варианта осуществляется в форме Добавление дополнительного реквизита/сведения):
- Копирование общего реквизита, входящего в состав нескольких наборов (видов номенклатуры), и всех его значений – вариант Сделать копию реквизита.
Рисунок 6 — Создание копии реквизита
- Копирование реквизита по образцу (с общим списком значений) – вариант Сделать копию реквизита по образцу (с общим списком значений).
Рисунок 7 — Создание копии реквизита по образцу
- Добавление общего реквизита в набор – вариант Сделать реквизит общим и добавить в набор. Этот вариант подходит для тех случаев, когда реквизит должен быть одинаков для обоих наборов. В этом случае будет возможно отбирать по нему данные разных типов в списках и отчетах.
Создание и добавление дополнительных сведений для видов номенклатуры, характеристик и серий аналогично созданию/добавлению дополнительных реквизитов.
Ведение дополнительных реквизитов и сведений
Ведение дополнительных реквизитов объектов выполняется пользователем конфигурации, имеющим права на изменение самого объекта.
Установка дополнительных сведений, как правило, осуществляется в отдельной форме, которая вызывается из формы объекта командой Дополнительные сведения.
Рисунок — Дополнительные сведения
Настройки 1C:ERP мы осуществляем в рамках услуги Аренда 1С:ERP или осуществляем отдельно поддержку 1С:ERP с привлечением квалифицированных консультантов 1С:ERP.
Не нашли ответа на свой вопрос?
Дополнительные свойства «1С:Документооборот» бывают двух видов: дополнительные реквизиты и дополнительные сведения.
Набор дополнительных свойств для объекта можно задать в справочнике «Наборы дополнительных реквизитов и сведений»: Настройка и администрирование Дополнительные реквизиты/Дополнительные сведения.
В отличие от дополнительных реквизитов, дополнительные сведения не являются частью объекта, с которым связаны, а хранятся в специальном регистре сведений. Значение дополнительных сведений доступно из карточки документа по кнопке «Дополнительные сведения». Поэтому значения дополнительных сведений не блокируются в зависимости от состояния документа, а всегда доступны для редактирования.
Также дополнительные сведения всегда расположены в специальной форме, и их нельзя перенести в карточку документа.
Дополнительные реквизиты объектов с помощью плана видов характеристик
Достаточно часто возникает необходимость в добавлении объектам дополнительных реквизитов (характеристик). При этом каждый раз вносить для этого изменения в конфигурацию и проводить реструктуризацию базы данных не хочется.
В этой статье я расскажу о том, как реализовать такую возможность с помощью плана видов характеристик и регистра сведений и поделюсь парой приёмов использования этих реквизитов в отчётах и списках.
Быстрый переход
- Изменения в конфигурации
- Использование дополнительных реквизитов в отчётах и списках
- Вариант №1
- Вариант №2
Изменения в конфигурации
Разработку конфигурации будем вести на базе платформе 1С: Предприятие 8.2 с установленным свойством “Основной режим запуска” – “Управляемое приложение”. В качестве основы для разработки подойдет любая демо-конфигурация. Добавим новый план видов характеристик “Виды характеристик”. На закладке “Основные” плана видов характеристик в поле “Тип значения характеристик” выберем необходимые типы.
В качестве одного из возможных типов значений характеристик выберем предварительно добавленный в конфигурацию справочник “Значения характеристик”, подчиненный плану видов характеристик “Виды характеристик”. Его же выберем в поле “Дополнительные значения характеристик”. Это позволит добавлять характеристики с произвольными ссылочными значениями (например, цвет или размер).
Создадим регистр сведений “Характеристики” с измерениями “Объект”, “Вид характеристики” и ресурсом “Значение”. Измерение “Объект” должно включать в себя все типы объектов для которых необходимо использовать дополнительные реквизиты. В нашем случае это будет справочник “Контрагенты”, В свойствах измерения “Объект” должны быть установлены флаги “Ведущее”, “Основной отбор” и “Запрет незаполненных”.
Это обеспечит связь объекта с записями регистра сведений. В форме элемента справочника “Контрагенты” переход к редактированию характеристик будет возможен с помощью соответствующего пункта меню “Перейти” в левой части формы.
Измерению “Вид характеристики” необходимо назначить тип “ПланВидовХарактеристикСсылка.ВидыХарактеристик”, а ресурсу “Значение” – “Характеристика.ВидыХарактеристик”.
Для обеспечения взаимосвязи значений ресурса “Значение” со значениями измерения “ВидХарактеристик” регистра “Характеристики” необходимо чтобы в свойстве “Связи параметров выбора” ресурса “Значение” было указано “Отбор.Владелец(ВидХарактеристики)”, а в свойстве “Связь по типу” – “ВидХарактеристики”
Теперь всё готово для того чтобы мы могли вводить в базу данных дополнительные реквизиты справочника “Контрагенты”.
Попробуем добавить дополнительный реквизит “Адрес”
Использование дополнительных реквизитов в отчётах и списках
После того как все необходимые изменения в конфигурации выполнены возникает вопрос о том как использовать дополнительные реквизиты для вывода и фильтрации данных в отчётах и списках.
Вариант №1
Начнём с использования характеристик в отчёте, разработанном с использованием системы компоновки данных. За основу возьмём отчёт “Ведомость взаиморасчетов”. Добавим в конфигурацию копию этого отчёта и назовём его “Ведомость взаиморасчетов (с характеристиками)”.
Оригинал отчёта нам понадобится для демонстрации второго варианта использования характеристик.
Итак, откроем набор данных “Взаиморасчеты” схемы компоновки данных нашего отчета в конструкторе запросов и перейдем на закладку “Характеристики”.
- В таблицу на вкладке “Характеристики” добавим строку.
- В поле “Тип” выберем “СправочникСсылка.Контрагенты” (это объект для которого в отчёте необходимо использовать дополнительные характеристики).
- В поле “Источник видов” выберем вариант “Запрос” (хотя в нашем случае можно ограничиться и вариантом “Таблица”).
- В колонку “Виды характеристик” внесём текст запроса, которым будут выбираться виды характеристик, используемые для справочника “Контрагенты”.
Текст запроса обязательно должен содержать три поля – ссылка на вид характеристики, наименование характеристики и тип значения характеристики. Наименования этих полей выбираются в колонках “Поле ключа”, “Поле имени” и “Поле типа значения” таблицы на закладке “Характеристики”.
- Для визуального выделения дополнительных реквизитов объекта в запросе по видам характеристик к наименованиям добавлен текст “(доп. реквизит)”.
- В колонке “Источник значений” на вкладке “Характеристики” выберем вариант “Таблица”.
- В колонке “Значения характеристик” выберем “РегистрСведений.Характеристики”,
- в колонке “Поле объекта” – наименование измерения регистра “Объект”,
- в колонке “Поле вида” – наименование измерения “ВидХарактеристики”,
- в колонке “Поле значения” – наименование ресурса “Значение”.
В тексте запроса схемы компоновки результат добавления характеристик выглядит следующим образом (в обычных запросах применение таких конструкций невозможно):
{ХАРАКТЕРИСТИКИ
ТИП(Справочник.Контрагенты)
ВИДЫХАРАКТЕРИСТИК (ВЫБРАТЬ
ВидыХарактеристик.Ссылка,
ВидыХарактеристик.Наименование + » (доп. реквизит)» КАК Наименование,
ВидыХарактеристик.ТипЗначения
ИЗ
ПланВидовХарактеристик.ВидыХарактеристик КАК ВидыХарактеристик)
ПОЛЕКЛЮЧА Ссылка
ПОЛЕИМЕНИ Наименование
ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения
ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.Характеристики
ПОЛЕОБЪЕКТА Объект
ПОЛЕВИДА ВидХарактеристики
ПОЛЕЗНАЧЕНИЯ Значение }
Проверим работу отчёта. Для этого откроем отчёт “Ведомость взаиморасчетов (с характеристиками)”. Перейдем в пункт меню “Все действия -> Изменить вариант”. В окне настроек перейдём на закладку “Отбор” и добавим отбора по дополнительному реквизиту контрагента “Адрес”
Вариант №2
Рассмотрим более универсальный вариант работы с характеристикам объектов, благодаря которому характеристики возможно будет использовать в любых отчетах, содержащих объект-владелец характеристик, а также устанавливать отборы по значению этих характеристик в формах списков.
Перейдём на закладку “Данные” справочника “Контрагенты” и нажмём кнопку “Характеристики”.
- В открывшемся окне “Дополнительных характеристик объекта метаданных” добавим строку.
- В колонке “Виды характеристик” выберем “ПланВидовХарактеристик.ВидыХарактеристик”, в колонке “Поле ключа” – “Ссылка”.
- В колонке “Значения характеристик” выберем “РегистрСведений.Характеристики”, в колонке “Поле объекта” – “Объект”,
- в колонке “Поле вида” – “ВидХарактеристики”, в колонке “Поле значения” – “Значение”.
Сохраним конфигурацию и попробуем воспользоваться дополнительными характеристиками справочника “Контрагенты” в форме списка (в отчёте “Ведомость взаиморасчетов” использование дополнительных реквизитов будет выглядеть аналогичному тому как это было описано в Варианте №1, с той лишь разницей, что наименованию вида характеристики не будет добавляться текст “(доп. реквизит)”).
Откроем список справочника “Контрагенты”, перейдем в пункт меню “Все действия -> Настройка списка” и установим отбор по дополнительному реквизиту “Адрес”.
Стоит отметить, что при использовании Варианта №1 в отчётах с использованием СКД отключается приведенный механизм платформы и используется описанный пользователем.
Статья найдена на просторах интернета.
Я знаю, что трачу половину денег на рекламу впустую, но не знаю, какую именно половину.
Содержание:
1. Что такое характеристика номенклатуры и какую роль играют дополнительные реквизиты номенклатуры в 1С: Управление нашей фирмой 3.0?
2. Настройка работы системы в конфигурации системы 1С: Предприятие УНФ
3. Создание и работа характеристики номенклатуры в конфигурации программы 1С: УНФ
4. Дополнительные реквизиты номенклатуры в конфигурации системы 1С: УНФ
1. Что такое характеристика номенклатуры и какую роль играют дополнительные реквизиты номенклатуры в 1С: Управление нашей фирмой 3.0?
В данной статье рассмотрим использование характеристик номенклатуры. Также затронем тему 1С дополнительных реквизитов номенклатуры. Часто, пользователи не понимают разницу в данных возможностях и как правильно их использовать, потому что и то, и другое можно назвать свойствами номенклатуры. В статье на примерах рассмотрим функциональные возможности характеристик и дополнительных характеристик.
В первую очередь разберемся с понятиями.
Характеристика номенклатуры – это справочник, предназначением которого является описание отличительных свойств одного и того же товара, например, цвет и размер футболки, или цвет и сечение провода. Также, характеристики необходимы для сокращения количества элементов в справочнике номенклатуры в 1С. Например, футболка может быть разных размеров, и по каждому размеру могут быть разные цвета. Если создавать карточки номенклатуры в 1С под каждую комбинацию всего двух свойств, то получится большой список элементов справочника номенклатуры. При использовании характеристик останется всего одна карточка номенклатуры в 1С и появятся, например, такие характеристики (размер, цвет):
· 45, белый;
· 50, желтый;
· 45, синий;
· 50, красный
· И т.д.
Какую же роль играет при этом в 1С дополнительные реквизиты номенклатуры?
С помощью дополнительных реквизитов можно задать для номенклатуры общие свойства, которые повторяются вне зависимости от ее цвета или размера, если смотреть на пример с футболками. Например, для футболки общим свойством будет производитель, или информация о том, что на футболке есть стразы.
Но для чего же указывать эту информацию, как она пригодится в жизни?
Над этим вопросом как раз и надо подумать. Например, можно исходить от опыта работы с покупателями. Представим такую ситуацию, пришел покупатель в магазин одежды, нашел футболку со стразами, и она ему очень понравилась, но вот только нужного размера не оказалось. Покупатель может попросить показать ей другие футболки со стразами. В этом случае продавец в справочнике номенклатуры в 1С может поставить отбор по данному свойству и проверить наличие необходимого размера по другим футболкам со стразами.
Цели использования дополнительных реквизитов могут быть разными, поэтому каждой компанией данный вопрос рассматривается индивидуально.
Оптимизацией справочника номенклатуры в 1С обычно занимаются компании, которые уже имеют большой опыт работы со своими товарами и знают, как могут пригодится выделение тех или иных свойств. Данной оптимизацией больше всего занимаются при внедрении 1С.
Переходим к настройкам системы 1С
2. Настройка работы системы в конфигурации системы 1С: Предприятие УНФ
Для включения использования характеристик переходим в настройки системы 1С.
Настройки
В разделе Общие активируем функциональную опцию Характеристики номенклатуры.
Характеристики номенклатуры
Для включения в 1С функциональной опции использования дополнительных реквизитов переходим в общие настройки.
Общие настройки
Активируем флажок Дополнительные реквизиты и сведения.
Дополнительные реквизиты и сведения
3. Создание и работа характеристики номенклатуры в конфигурации программы 1С: УНФ
В первую очередь рассмотрим процесс создания характеристик, но для этого необходимо создать номенклатуру. Откроем справочник номенклатуры в 1С.
Все справочники
Нажимаем на кнопку Создать.
Запас
В 1С:УНФ категория номенклатуры используется как шаблон для заполнения реквизитов карточки номенклатуры в 1С. Заполняем тип запасов, наименование категории, единицу измерения. Записываем категорию.
Если характеристика будет состоять из двух и более свойств, то оптимально будет использовать дополнительные реквизиты для характеристики. Ниже в правой части карточки категории находим область с настройкой свойств характеристик. Нажимаем Добавить.
Свойства характеристик
Нажимаем Создать.
Дополнительные реквизиты и сведения
Вводим наименование свойства и указываем тип свойства – Дополнительное значение. Можно установить флажок Заполнять обязательно. Записываем и закрываем.
Дополнительный реквизит (создание)
Создаем еще одно свойство.
Размер
Перейдем по гиперссылке Шаблоны наименований. Здесь мы видим, что программа автоматически создала настройку автоматического заполнения наименование характеристики по шаблоны. Ее можно изменить, если, например, необходимо поменять порядок свойств в наименовании.
Шаблоны наименований
Закрываем категорию и продолжаем заполнять карточку товара в 1С. Заполняем наименование товара и переходим на вкладку Характеристики.
Характеристики
Устанавливаем флажок Использовать характеристики.
Использовать характеристику
Характеристики можно создать из карточки товара в 1С, или из документа. Выберем второй вариант. Оформим приходную накладную в 1С. Указываем номенклатуру и характеристику. Если необходимой характеристики нет, то создаем ее.
Приходная накладная
Создаем значения для свойств.
Характеристики номенклатуры
Значение свойства Размер (Создание)
Далее нажимаем на кнопку Создать.
Значение
Созданные значения перенеслись в форму создания характеристики. Наименование заполнилось по шаблону. Наименование можно изменить по другому шаблону или заполнить вручную. Записываем и закрываем.
Характеристика номенклатуры (создание)
В отчете можем увидеть, что остатки товаров на складе в 1С можно хранить в разрезе характеристик.
Остатки товаров
В отчете также поставить отбор на конкретное значение любого дополнительного реквизита.
Остатки товаров
Остаток товара по характеристикам можно также увидеть в самой карточке товара в 1С.
Остатки
4. Дополнительные реквизиты номенклатуры в конфигурации системы 1С: УНФ
Как мы уже поняли, что в 1С дополнительные реквизиты номенклатуры могут дополнять и характеристики номенклатуры товаров. Теперь перейдем к 1С дополнительным реквизитам номенклатуры.
Откроем 1С: УНФ категорию номенклатуры и добавляем создаем дополнительные реквизиты номенклатуры.
Категория номенклатуры
В первом свойстве указываем тип данных Булево. Для данного свойства будут 2 предопределенных значения: Да и Нет.
Дополнительный реквизит (создание)
Во втором свойстве использовался тип Дополнительные значения.
Наименование
Созданный свойства можно увидеть в карточке товара в 1С с той категорией, в котором были созданы данный реквизиты, в данном случае это Футболки.
Прямо из карточки товара в 1С можно создавать новые свойства для номенклатуры.
Для примера создадим несколько карточке товара в 1С в данной категории и заполним свойства различными значениями.
Карточка товара
Далее продемонстрируем как можно использовать данный свойства в отборах. Открываем справочник номенклатуры в 1С, выделяем категорию Футболки и ниже видим созданные в 1С свойства номенклатуры.
Номенклатура
При установке отбор по одному из свойств, в 1С списке номенклатуры останется только те карточки товаров, в которых указано отбираемое свойство. Значения данных свойств можно также вывести в колонках.
Номенклатура
В отчетах также можно выводить колонки по данным дополнительным реквизитам, ставить по ним отборы и делать группировки.
Номенклатура
Остатки товаров
Специалист компании «Кодерлайн»
Олег Чернов