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
Дополнительные реквизиты документа. |
Я |
12.08.19 — 11:16
Добрый день! Мне нужно как то в доп реквизиты типового документа добавить ссылку на нетиповой справочник. может кто подсказать?
1 — 12.08.19 — 11:20
План видов характеристик — тип значения
2 — 12.08.19 — 11:32
(1) А по подробнее?
3 — 12.08.19 — 11:34
(2) начни с себя
4 — 12.08.19 — 11:34
(1) Просто они добавлены через режим предприятия
5 — 12.08.19 — 11:35
(4) и я еще ни разу не добавляла их ни в один документ(
6 — 12.08.19 — 11:36
(3) кто бы говорил)) Кроме никнейма нет ничего
7 — 12.08.19 — 11:38
Давайте расскажу всё ТЗ по этой теме. Нужно создать доп реквизиты у типового документа Приходный кассовый ордер, в последствии заполнить их из нетипового документа. 3 из 5 доп реквизитов — ссылка на нетиповой справочник.
8 — 12.08.19 — 11:40
в конфигураторе тип посмотреть предлагать или нет? хотя (1) уже всё сказал
9 — 12.08.19 — 11:40
(2) а куда подробнее, заходите в конфигуратор и добавляете свои нетиповые справочники в тип значение для плана видов характеристик ДополнительныеРеквизитыИСведения
10 — 12.08.19 — 11:46
(9) Дак там в значении стоит тип ЛюбаяСсылка, значит мои не типовые справочники тоже должны туда попадать
11 — 12.08.19 — 11:48
(10) ну так мы то не знаем где и что у вас, простите, стоит)
12 — 12.08.19 — 11:50
(11) это типовой ТипЗначения для планов вида характеристик ДополнительныеРеквизитыИСведения
13 — 12.08.19 — 11:52
(12) А что тогда не получается?
14 — 12.08.19 — 11:54
(13) Нет там многих типов ссылок
15 — 12.08.19 — 11:54
+(14) ощущение, что какие-то предопределенные моменты имеются, если что это УТ 11 Проф
16 — 12.08.19 — 11:56
(10) >> там в значении стоит тип ЛюбаяСсылка.
Не пи*дите! Это невозможно. Платформа пока так не умеет.
Тип значения характеристик не может быть ЛюбаяСсылка.
(12) Опять гонево! Вы куда-то явно не туда смотрите. Или не понимаете о чём пишете.
17 — 12.08.19 — 12:00
Проверьте, что всё сделано согласно инструкции:
https://its.1c.ru/db/bsp302doc#content:68:1
18 — 12.08.19 — 12:12
19 — 12.08.19 — 12:15
(16) и к тому же мне типовой механизм изменять нельзя
20 — 12.08.19 — 12:20
(18) это не то
(19) это очень плохо, т.к через расширение это вроде бы тоже не поменять, а значит добро пожаловать в дивный мир извращений.
21 — 12.08.19 — 12:31
(18) это тип у значения. А вам нужно «Состав» у плана видов характеристик
22 — 12.08.19 — 12:51
(21) Это в конфигураторе или же в предприятии тоже возможно?
23 — 12.08.19 — 12:52
(22) это возможно только в конфигураторе
24 — 12.08.19 — 12:53
(23) и это изменит типовой механизм, правильно понимаю?
25 — 12.08.19 — 12:54
(24) смотря что вы подразумеваете под «изменит типовой механизм». Нужно будет включить возможность изменения конфигурации и конкретно для данного ПВХ и поменять его состав.
26 — 12.08.19 — 12:58
(25) конфигурация останется на поддержке при этом, нооо, при обновлении не слетит ли то, что я наворотила?
27 — 12.08.19 — 13:00
(26) конфигурация будет на поддержке, но уже измененная, т.е при обновлении нужно будет на это обращать внимание. И да есть вероятность что при обновлении все затрется, если невнимательно обновить.
28 — 12.08.19 — 13:36
(18) Сходите что ли на курсы по платформе. Если вы не в состоянии отличить регистр сведений от плана видов характеристик.
Тип значения ресурса «Значение» регистра (то, что вы на картинке прислали) должен быть Характеристика.ДополнительныеРеквизитыИСведения. И никакой другой.
А менять вы должны тип значения характеристик в плане видов характеристик ДополнительныеРеквизитыИСведения. Вот там состав типов и надо расширять, дополнив его типами своих самописных объектов. Можно ли это делать в расширении — не знаю, не пробовал. Если нельзя, то придётся в конфигурации включать возможность изменения (если у вас уже есть самописные объекты, то он уже должен быть включен). Снимать с поддержки не нужно. При обновлении необходимо будет следить, чтобы случайно не затереть внесенные изменения.
PS Позвали бы вы специалиста, пока базу не грохнули своим творчеством.
29 — 12.08.19 — 14:04
(28) в ней нет данных, поэтому вольна делать то, что посчитаю нужным)
30 — 12.08.19 — 14:05
+(29) Исключительно тестовые.
31 — 12.08.19 — 14:19
ну в статье с ИТС все в деталях и для дела и для обучения
32 — 14.08.19 — 09:26
Вроде бы всю статью вдоль и поперек перечитала. Решила что данные текстовой строкой туда занесу, но даже строковое значение не могу поместить в доп реквизиты, подскажите, что я делаю не так?
Функция ЗаписатьЗначениеДопРеквизита(Ссылка, Свойство, Значение)
Попытка
ОбъектСсылки = Ссылка.ПолучитьОбъект();
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить(«Свойство»,Свойство);
Массив = ОбъектСсылки.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
Если Массив.Количество() = 0 Тогда
НовоеСвойство = ОбъектСсылки.ДополнительныеРеквизиты.Добавить();
НовоеСвойство.Свойство = Свойство;
НовоеСвойство.Значение = Значение;
Иначе
Массив[0].Значение = Значение;
КонецЕсли;
ОбъектСсылки.Записать();
Исключение
Возврат Ложь;
КонецПопытки
КонецФункции
Функция ЗаполнитьДР(Док,ДокН);
ЗаписатьЗначениеДопРеквизита(Док,ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Номер проживания»,истина), Строка(ДокН.НомерПроживания));
ЗаписатьЗначениеДопРеквизита(Док,ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Комната проживания»,истина), ДокН.КомнатаПроживания);
ЗаписатьЗначениеДопРеквизита(Док,ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Койка проживания»,истина), ДокН.КойкаПроживания);
КонецФункции
&НаКлиенте
Процедура НачислениеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле.Имя = «НачислениеЧек» Тогда
СЗ = Новый СписокЗначений;
СЗ.Добавить(«Наличные»);
СЗ.Добавить(«Карта»);
СЗ.Добавить(«Банк»);
Строка=Элементы.Начисление.ТекущиеДанные;
Ответ= Вопрос(«Выберите тип оплаты»,СЗ);
Если Ответ= «Наличные» Тогда
Док = создатьдокПКО(Строка.ФизЛицо,Строка.ДокументНачисления,Строка.Сумма);
ЗаполнитьДР(Док,Строка.ДокументНачисления);
ОткрытьЗначение(Док);
ИначеЕсли Ответ = «Карта» Тогда
Док = создатьдокЭО(Строка.ФизЛицо,Строка.ДокументНачисления,Строка.Сумма);
ОткрытьЗначение(Док);
ИначеЕсли Ответ = «Банк» Тогда
СЗ.Очистить();
СЗ.Добавить(«Выгрузка»);
СЗ.Добавить(«Новый»);
Ответ2 = Вопрос(«Использовать выгрузку или создать новый?»,СЗ);
Если Ответ2 = «Новый» Тогда
Док = создатьдокБДС(Строка.ФизЛицо,Строка.ДокументНачисления,Строка.Сумма);
ОткрытьЗначение(Док);
Иначе
ОткрытьФорму(«Обработка.ЖурналДокументовБезналичныеПлатежи.Форма.ФормаСписка»);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
33 — 14.08.19 — 11:27
И никто не подскажет, что я сделала не так?
34 — 14.08.19 — 11:30
а что не получается?
35 — 14.08.19 — 11:34
(34) Ну вроде бы я задаю значение, записываю документ, потом открываю его, а доп реквизиты пустуют, не написано в них ничего.
36 — 14.08.19 — 11:36
(35) Отсутствие проверяете путем отсутствия на форме документа? или вы можете затем просмотреть ТЧ доп реквизитов и она пустая?
37 — 14.08.19 — 11:46
(36) Да, отсутствием на форме. Сейчас попробую посмотреть состав ТЧ доп реквизитов
38 — 14.08.19 — 11:48
39 — 14.08.19 — 11:49
(38) свойство пустое
40 — 14.08.19 — 11:52
(39) тоесть свойство не задается моим методом, правильно понимаю?
41 — 14.08.19 — 11:55
ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Комната проживания»,истина)
Вот так я задавала свойство. А доп реквизит создавала не программно а в режиме предприятия
42 — 14.08.19 — 11:57
ну значит оно называется подругому, очевидно же
43 — 14.08.19 — 11:58
да и вообще есть же поле имя, которое для разработчика, оно как раз должно и использоваться в таких случаях
44 — 14.08.19 — 11:58
(42) А может искать не по наименованию а по реквизиту?
45 — 14.08.19 — 11:59
(43) А как его использовать?
46 — 14.08.19 — 12:01
(43) Я знаю где оно находится, но как его использовать пока не разобралась
47 — 14.08.19 — 12:01
НайтиПоРеквизиту
48 — 14.08.19 — 12:01
ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту(«Имя», ТвоеИмя);
Мало ли
JuixyJes
49 — 14.08.19 — 12:08
(48) Господи, я вас обожаю!
В новых редакциях программ 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 дней бесплатно
Дополнительные реквизиты в 1С Управление Нашей Фирмой
Видеоинструкция к этой статье https://youtu.be/f9Q8398SjE4
В 1С Управление Нашей Фирмой есть возможность создавать дополнительные реквизиты — поля и справочники для ввода данных без программиста. Ссылки на добавление реквизитов есть во многих карточках и документах — карточка контрагента, карточка номенклатуры, заказ покупателя и т. п.
Дополнительные реквизиты могут использоваться в вспомогательных целях, таких как переменные в формулах динамических спецификаций.
Возможность использовать доп. реквизиты в 1С Управление Нашей Фирмой включается при установке программы, но если у вас эта функция отсутствует, то включить ее можно в разделе «Настройки» по ссылке «Общие настройки»
Рис 1. Включение модуля Дополнительных реквизитов в 1С Управление Нашей Фирмой
Для просмотра дополнительных реквизитов, а также для их создания и редактирования, необходимо в «Общих настройках» пройти по ссылке «Дополнительные реквизиты».
Рис 2. Журнал Дополнительные реквизиты в 1С Управление Нашей Фирмой
Журнал состоит из шапки с управляющими кнопками — «Добавить», «Копировать» и «Вставить», а также двух окон — в левом окне находится иерархический список групп (папок) реквизитов и в правом окне показываются дополнительные реквизиты, которые относятся в выделенной папке.
Для добавления реквизита необходимо нажать на кнопку «Добавить» и выбрать один из двух вариантов — «Новый» и «Из другого набора»
Рис 3. Кнопка «Добавить» в журнале Дополнительные реквизиты в 1С Управление Нашей Фирмой
Начнем обзор с создания нового реквизита.
1. Создание нового реквизита
Для создания нового реквизита в журнале «Дополнительные реквизиты» нажимаем кнопку «Добавить» и выбираем вариант «Новый».
Откроется карточка создания Дополнительного реквизита.
Рис 4. Карточка создания Дополнительного реквизита в 1С Управление Нашей Фирмой
Поле «Наименование»
В первую очередь необходимо заполнить поле «Наименование» — наименование реквизита должно четко его идентифицировать, так как на его основании будет заполнено поле «Идентификатор для формул» и поле «Имя» в блоке «Для разработчиков», которое используется для программного обращения к данному реквизиту.
Поле «Тип значения»
В строке «Тип значения» необходимо выбрать значение из раскрывающегося списка, который открывается нажатием на кнопку с тремя точками в правой части строки.
Рис 5. Карточка выбора Типов значений карточки Дополнительного реквизита в 1С Управление Нашей Фирмой
Часть элементов справочника «Типы значений» понятна большинству пользователей — Дата, Валюта и т. п., а часть значений будет понятна специалистам или опытным пользователям — рассмотрим эти значения подробно с примерами использования доп. реквизитов в карточке номенклатуры.
Типы значений дополнительных реквизитов в 1С: Управление Нашей Фирмой
1)Булево
Булево — имеет только 2 значения: да/нет, истина/ложь и т. п.
Рис 6. Вариант карточки Дополнительного реквизита при выборе типа значений Булево в 1С Управление Нашей Фирмой
В карточке Номенклатуры этот тип данных может выглядеть как Чек-бокс с галочкой.
Рис 7. Вариант карточки Номенклатуры при выборе типа значений Булево в 1С Управление Нашей Фирмой.
Мы можем изменить формат отображения нажав на ссылку «Формат по умолчанию» в карточке доп. реквизита справа от поля «Тип значения»
Рис 8. Конструктор форматной строки при выборе типа значений Булево в 1С Управление Нашей Фирмой.
Клик по ссылке откроет форму «Конструктор форматной строки». В ней нам нужен список из двух значений «Представление значения булево Ложь» и «Представление значения булево Истина» — если галочки перед строками снять, то останется первый вариант с чек-боксом.
В поле со значениями мы можем выбрать из трех вариантов Ложь/Истина, Да/Нет, Выключено/Включено или ввести собственное значение как в примере (см. Рис. 11).
В результате изменения формата в карточке номенклатуры этот реквизит будет выглядеть как текстовое поле с выбором значения, но на выбор будет выводиться только два значения.
Рис 9. Дополнительный реквизит с типом Булево с собственными значениями в карточке номенклатуры в 1С Управление Нашей Фирмой.
2)Строка
Строка — самый простой тип значений, который позволяет вводить любой набор символов. К строке не привязан справочник значений, поэтому в ней нет повторного выбора ранее введенной информации.
При выборе Типа значения в форме «Редактирование типа данных» в нижней части формы в зависимости от типа данных появляются дополнительные настройки.
Рис 10. Настройки отображения данных дополнительных реквизитов в 1С Управление Нашей Фирмой.
В типе значений «Строка» в нижней части расположены настройки длины строки: Длина — количество символов, Вариант изменения длины строки — «Переменная» (в зависимости от количества введенных символов) и «Фиксированная», а также чек-бокс для галочки «Неограниченная» — снимает все ограничения по количеству вводимых символов.
После выбора этого Типа значения в карточке Дополнительного реквизита появятся три дополнительных варианта выбора отображения реквизита — «Однострочное поле ввода», «Многострочное поле ввода» — при выборе данного варианта активируется параметр «Количество строк», который позволяет ограничить количество строк ввода.
Рис 11. Дополнительные параметры Дополнительных реквизитов с типом Строка в 1С Управление Нашей Фирмой.
3)Дополнительное значение
Дополнительное значение — раскрывающийся список, в котором значения могут быть внесены заранее или добавляться в процессе работы.
Рис 12. Создание Дополнительного реквизита с типом значения Дополнительное в 1С Управление Нашей Фирмой.
Галочка «Выводить в виде гиперссылки» позволяет отображать этот тип значений в документе в двух вариантах: без галочки — как раскрывающийся список, а с галочкой — как гиперссылка
Вариант без галочки:
Рис 13. Дополнительный реквизит с типом значения Дополнительное в карточке номенклатуры в 1С Управление Нашей Фирмой.
Для выбора значения нажимаем на стрелочку в правой части поля и появляется форма значения, в которой переходим по ссылке «Показать все» или «+(создать)».
При установленной галочке значение выводится, как ссылка, а для его изменения необходимо нажать на карандаш (справа от строки).
Рис 14. Гиперссылка дополнительного реквизита в карточке номенклатуры в 1С Управление Нашей Фирмой.
Ниже выбора варианта отображения, располагается табличная форма с двумя вкладками — «Главное» и «Значения».
Во вкладке «Главное» заполняем поля по необходимости — более подробно рассмотрим поля ниже.
Во вкладке «Значения» содержится список значений, присвоенных данному реквизиту.
Рис 15. Вкладка «Значения» в карточке дополнительного реквизита в 1С Управление Нашей Фирмой.
Значения можно ввести в этой вкладке с помощью кнопки «Создать» или после в процессе работы, как показано на Рис. 13.
Кнопка «Еще» раскрывает список дополнительных действий по управлению списком.
Рис 16. Список действий кнопки «Еще» во вкладки «Значения» карточки дополнительного реквизита в 1С Управление Нашей Фирмой.
Под полем списка значений располагается чек-бокс «Значения дополнительно характеризуются весовым коэффициентом» — после установки этой галочки каждому значению можно добавить числовое значение, которое позволяет дополнительно сортировать значения в отчетах или при выборе, также можно его использовать в других целях. В списке значений добавится колонка «Весовой коэффициент».
Рис 17. Весовые коэффициенты значений в карточке дополнительного реквизита в 1С Управление Нашей Фирмой.
Значения можно сгруппировать — кнопка «Создать группу» позволяет создавать группы (папки) значений.
4)Число
Этот тип значений ограничен только числовыми значениями.
В настройке отображения этого реквизита при его выборе программа выдает два поля: «Длина» — количество вводимых символов, «Точность» — количество символов после запятой, а также чек-бокс для галочки «Неотрицательное» — установленная галочка не дает ввести отрицательное число.
Рис 18. Настройки дополнительного реквизита при выборе типа значений в 1С Управление Нашей Фирмой.
Остальные Типы значений и их настройка более понятны пользователям и не имеют дополнительных настроек поэтому не будем их рассматривать.
Рассмотрим остальные элементы карточки «Дополнительный реквизит» общие для всех типов.
5)Составной тип данных
Составной тип данных находится в верней части формы выбора. Установка галочки позволяет создать поле, при нажатии на которое программа попросит у пользователя самостоятельно выбрать тип вводимых данных.
После установки галочки в чек-боксе «Составной тип данных» в списке появляется возможность выбора нескольких значений — например:
В заказе покупателя вы хотите отобразить Агента, человека, который нашел данный заказ -сторонний человек или сотрудник предприятия.
Создаем дополнительный реквизит с названием «Агент». А при выборе типа значений устанавливаем галочки: «Составной тип данных», «Контрагент», «Сотрудник».
Рис 19. Составной тип данных дополнительного реквизита в 1С Управление Нашей Фирмой.
В Заказе покупателя находим созданный реквизит «Агент» и нажимаем на три точки в правой части поля и, в открывшейся форме, нажимаем на нужный тип данных — Сотрудник или Контрагент
Рис 20. Поле с составным дополнительным реквизитом в 1С Управление Нашей Фирмой.
Выбор поля дает доступ к нужному справочнику «Контрагенты» или «Сотрудники».
В конце месяца можно отсортировать заказы по контрагентам и сотрудникам, начислить комиссионное вознаграждение контрагентам или премию сотрудникам.
Ссылка «Виден»
Позволяет настроить видимость реквизита в зависимости от настроенных условий.
Например:
У товара, в редких случаях, кроме основного цвета могут быть элементы с другим цветом.
Создаем два дополнительных реквизита — один реквизит с типом «Булево», а второй с типом «Строка».
В настройках реквизита с типом «Строка» нажимаем на ссылку «Виден» — откроется форма «Видимость дополнительного реквизита», в которой мы настраиваем условия видимости — нажимаем на кнопку «Добавить условия» и в табличной части заполняем строку из трех ячеек:
-
«Реквизит» — двойной клик на ячейку активирует ее, а клик на кнопку с тремя точками в правой части ячейки откроет дополнительную форму «Выбор реквизита» со списком доступных реквизитов, в котором кроме реквизитов программы есть дополнительные реквизиты, введенные нами. Выбираем доп. реквизит «Дополнительный цвет».
Рис 21. Настройка условий видимости дополнительного реквизита в 1С Управление Нашей Фирмой.
-
«Вид сравнения» — двойной клик откроет список выбора вида сравнения — равно, не равно, заполнено, не заполнено и т. п.
-
«Значение» — двойной клик откроет список значений выбранного реквизита, выбираем кликом нужное значение
В примере у нас получилось условие: Если в реквизите «Дополнительный цвет» установлена галочка, то реквизит «дополнительная гамма цветов» становится виден.
Рис 22. Видимость дополнительного реквизита в 1С Управление Нашей Фирмой.
Ссылка «Доступен»
Эта ссылка позволяет настроить доступность реквизита, также, как ссылка «Виден», но в отличии от нее реквизит виден всегда, но активен при определенном условии.
Чек-бокс (Галочка) «Заполнять обязательно»
При установленной галочке данный реквизит становится обязательным к заполнению, а ссылка справа позволяет настроить условие, при котором этот параметр будет действовать — настраивает аналогично предыдущим ссылкам «Виден» и «Доступен».
Поле «Идентификатор для формул»
Заполняется автоматически, но возможна ручная корректировка.
Рис 23. Карточка дополнительного реквизита 1С Управление Нашей Фирмой.
С права от поля расположена кнопка со стрелкой для перезаполнения поля на основании строки «Наименование».
Поле «Всплывающая подсказка»
Это поле позволяет выводить нужную информацию — наименование или инструкцию по заполнению реквизита, которая будет появляться при наведении на реквизит.
Поле «Комментарий»
В это поле можно занести любую информацию для внутреннего пользования по этому реквизиту.
На этом обзор работы с новой карточкой «Дополнительный реквизит» заканчиваем и переходим к рассмотрению копирования дополнительных реквизитов.
2. Копирование реквизита «Из другого набора»
В журнале «Дополнительные реквизиты» нажимаем кнопку «Добавить» и выбираем второй вариант — «Из другого набора».
Откроется форма «Добавление дополнительного реквизита»
Рис 24. Добавление Дополнительного реквизита из другого набора в 1С Управление Нашей Фирмой
Форма «Добавления Дополнительного реквизита» очень похожа на журнал «Дополнительные реквизиты» с некоторыми отличиями — отсутствуют верхние кнопки управления и в правой части добавлены поля
— «Тип значения» — показывает, какого типа значения присутствуют в выбранном варианте,
— «Всплывающая подсказка» — необходимо ввести текст, который будет появляться при наведении на реквизит мышкой,
а также два поля «Заголовок формы значения» и «Заголовок формы выбора значения» — текст, который будет выводиться на заголовках указанных форм.
Заполнили поля и нажимаем в нижнем правом углу желтую кнопку «Далее».
Откроется новая страница с выбором варианта добавления реквизита
Рис 25. Выбор варианта добавления Дополнительного реквизита из другого набора в 1С Управление Нашей Фирмой
-
Добавить реквизит как есть — реквизит будет показываться в папке копирования, но это будет тот же реквизит. Реквизит в программе один, но входит в две группы, о чем нас извещает ссылка в нижней части вкладки «Главное».
Рис 26. Разделение общего Дополнительного реквизита в 1С Управление Нашей Фирмой
При нажатии на ссылку откроется список групп реквизитов, в которых присутствует этот реквизит.
Для разделения реквизитов в самостоятельные параметры необходимо нажать кнопку «Изменить» справа от ссылки. В открывшейся форме необходимо выбрать один из двух вариантов: «Реквизит со своим списком значений» или «Общий реквизит» — в первом варианте будет полное разделение реквизитов на самостоятельные единицы, а во втором случае все останется так как есть.
Во вкладке «Значения» присутствует похожая ссылка и кнопка «Изменить», но уже для разделения списка значений.
-
Сделать копию реквизита по образцу (с общим списком значений) —будет создан новый реквизит, отдельный от копируемого, но с общим списком значений.
Вариант разделения аналогично с предыдущим вариантом, но ссылка и кнопка изменить есть только во вкладке «Значения».
-
Сделать копию реквизита — копируются тип реквизита и значения, а наименование вводим самостоятельно. В этом случае создается реквизит полностью независимый от копируемого.
Выбираем вариант копирования и нажимаем на кнопку «Далее» в нижнем правом углу.
При выборе варианта копирования «Добавить реквизит как есть» реквизит создается сразу. В вариантах «Сделать копию реквизита по образцу» и «Сделать копию реквизита» программа откроет карточку создания Дополнительного реквизита для заполнения полей «Наименование» и «Идентификатор для формул», так как в отличии от первого варианта копирования будут созданы новые реквизиты.
На этом обзор Дополнительных реквизитов заканчиваем.
Если остались вопросы пишите нам на почту mail@rps-1c.ru или звоните на телефон(он же WhatsApp) +7-923-158-67-74
Аренда 1С: УНФ в облачном сервисе 1С: Фреш — https://rps-1c.ru/content/published/1cfresh/1с-fresh/
Протестируйте 1С Управление Нашей Фирмой бесплатно 30 дней — https://rps-1c.ru/1capp/arenda_fresh.html
По мере использования 1С, у многих предприятий возникает потребность создать для какого-либо объекта информационной базы реквизит, позволяющий хранить дополнительную информацию, например, добавление дополнительного специфического, характерного для вашей продукции описания номенклатуры в текстовом виде или же в виде числовых характеристик. Для удовлетворения данной потребности есть два пути либо заказать доработку конфигурации у фирмы 1С:Франчайзи, либо воспользоваться механизмом добавления дополнительных реквизитов.
В данной статье будет описан второй вариант. Использование механизма дополнительных реквизитов позволяет добавить реквизит в режиме 1С Предприятия, не прибегая к помощи «конфигуратора». Если ваша цель ограничена лишь добавлением дополнительной аналитики объекта и последующего использования этой аналитики в типовых отчетах (например, использование дополнительного реквизита в качестве условия отбора или простого вывода в табличный документ), то не понадобится даже помощь программиста. Однако стоит сразу оговориться, что более сложные задачи, связанные с дополнительным реквизитом, например, вывод в печатную форму, все же потребует изменений в программном коде.
Дополнительные реквизиты можно найти на форме объекта – Ещё – Изменить состав дополнительных реквизитов или же через НСИАдминистрирование – Общие настройки, как показано на рисунке 1. На данном рисунке видно, что сначала необходимо проставить флажок для включения интересующей нас опции. Так же видно, что помимо реквизитов, есть и дополнительные сведения. С точки зрения пользователя они отличаются тем, что доп. реквизиты вынесены на форму, а сведения вызываются отдельной формой специальной командой из кнопки Ещё на форме объекта.
Рисунок 1 – Настройка дополнительных реквизитов и сведений через Общие настройки
На рисунке 2 можно увидеть окно, в котором можно увидеть список доп. реквизитов, а также возможность создать их.
Рисунок 2 – Окно «Дополнительные реквизиты»
На рисунке 3 изображено окно непосредственного создания нового реквизита.
Пользователю доступны следующие настройки:
1. Наименование – Имя реквизита, которое видит пользователь
2. Для разработчиков, Имя – Уникальное имя реквизита, по которому разработчик сможет получатьизменять значения, модифицировать элемент формы связанный с доп. реквизитом.
3. Тип значения:
- Строка – доступна настройка длины строки, настройки элемента ввода элемента (однострочноемногострочное поле ввода)
- Число – доступны настройки длины числа, точности, флажок неотрицательное, представления нуля и отрицательных чисел.
- Булево – Просто флажок.
- Дата – Есть возможность выбора формата даты, состава даты (дата, время, дата и время), а также представления пустой даты
- Составной тип данных – Пользователь сам выбирает тип данных при вводе.
- Дополнительные значения – При выборе данного типа значения задаются на вкладке «значения», рисунок 3.
- Пользователь – значение из справочника пользователи.
4. Настройки видимости, доступности и обязательности заполнения элемента формы.
Рисунок 3 – Окно создания дополнительного реквизита
Добавим дополнительные реквизиты для справочника Организации, рисунок 4, 5. Дополнительные реквизиты, в зависимости от структуры элемента формы, добавляются на закладку «Дополнительно» или в подраздел «Дополнительные реквизиты» в порядке создания реквизитов.
Рисунок 4 – Добавленные реквизиты
Рисунок 5 – Элементы формы дополнительных реквизитов
Теперь попробуем применить новые элементы справочника Организации на примере отчета «Универсальный отчет» и выведем их на экран. Как видно из рисунка 6, к новым реквизитам (у данных реквизитов после названия в скобках указан справочник, которому они принадлежат) можно обратиться «через точку».
Рисунок 6 – Использование новых реквизитов при настройке варианта отчета
Рисунок 7 – Вывод дополнительных реквизитов на экран с помощью «универсального отчета»
В итоге на рисунке 7 мы видим, что возможно добавление новой аналитики в отчет, не прибегая к помощи разработчиков используя механизм дополнительных реквизитов.
Нужна помощь с 1С?
Мы можем взять на себя ваш бухгалтерский учет. Вам не нужно будет думать о расчете налогов и сдаче отчетности. Мы будем вести финансовую ответственность за ошибки. Мы — команда профессионалов, а не один бухгалтер, мы не заболеем, не пропадем и не уйдем внезапно в отпуск. Сосредоточьтесь на управлении. А учет и отчетность мы возьмем на себя. Чтобы получить бесплатную консультацию по автоматизации своего бизнеса Вы можете пообщаться с нашими специалистами в офисе компании или позвонив по телефону: 8-800-707-01-02.
Сопровождение 1С
Наш специалист
Специалист отдела разработки
Чем мы можем быть вам полезны?
Как редактировать доп реквизиты:
редактировать их состав можно тут:
хранятся они тут:
где типы реквизитов:
получить их в запросе можно так:
ВЫБРАТЬ ПЕРВЫЕ 100
НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка,
НоменклатураДополнительныеРеквизиты.Ссылка.Код КАК Код,
НоменклатураДополнительныеРеквизиты.Свойство КАК Свойство,
НоменклатураДополнительныеРеквизиты.Значение КАК Значение
ИЗ
Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
Разберем что откуда берется.
Дополнительные реквизиты заводятся в «ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения» и там же указан тип значений допРеквизитов:
ВЫБРАТЬ
ДополнительныеРеквизитыИСведения.Ссылка КАК Ссылка,
ДополнительныеРеквизитыИСведения.ТипЗначения КАК ТипЗначения
ИЗ
ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
Для справки: Кроме ссыка и типЗначения в «ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения» хранится куча свойств этих реквизитов
Если указан типЗначеня «ДополнительноеЗначение», то виды этих доп значений можем посмотреть тут:
ВЫБРАТЬ
ЗначенияСвойствОбъектов.Владелец КАК Владелец,
ЗначенияСвойствОбъектов.Ссылка КАК Ссылка,
ЗначенияСвойствОбъектов.Владелец.ТипЗначения КАК ВладелецТипЗначения
ИЗ
Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
а сами значения дополнительных реквизитов хранятся тут:
В библиотеке стандартных подсистем 1С дополнительные реквизиты и сведения включены и активно применяются. Эти механизмы позволяют добавить дополнительный реквизит к объекту метаданных без изменения типовой конфигурации. В публикации хочу продемонстрировать работу дополнительных реквизитов и сведений, их добавление и получение значений.
Краткое описание механизма дополнительных реквизитов и сведений
Пример добавление дополнительного реквизита вручную вы можете посмотреть в публикации Брутто в ТОРГ12, где добавляется новый реквизит «Коэффициент брутто» в справочнике «Номенклатура». Таким образом можно добавлять реквизиты всех известных типов (число, строка, булево, список значений, ссылки на справочники и т.д.) к распространенным справочникам и документам 1С.
Отличие дополнительного реквизита от дополнительного сведения в том, что
- Дополнительные реквизиты – список реквизитов, доступных в форме документа или справочника; причем эти реквизиты хранятся в табличной части объекта, к которому они добавлены;
- Дополнительные сведения – список значений доступных по дополнительной кнопке; причем доп. сведения хранятся в отдельном регистре.
После ввода дополнительного реквизита или сведения 1С, можно создать подключаемую обработку, где считать введенные дополнительные данные и задать необходимую логику обработки данных, в которой использовать этот реквизит или сведение.
Для получения дополнительных данных приведу примеры запросов, в которых получу 1С дополнительные реквизиты и сведения.
Для получения дополнительного сведения использую запрос вида:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ДополнительныеСведения.Свойство, | ДополнительныеСведения.Значение |ИЗ | РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения |ГДЕ | ДополнительныеСведения.Объект = &Объект"; Запрос.УстановитьПараметр("Объект", СсылкаДокумент);
Для получения дополнительного реквизита использую код вида (пример получения коэффициента брутто в ТОРГ12):
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НоменклатураДополнительныеРеквизиты.Свойство, | НоменклатураДополнительныеРеквизиты.Значение |ИЗ | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты |ГДЕ | НоменклатураДополнительныеРеквизиты.Свойство = &Свойство | И НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", СсылкаДокумент); Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Коэффициент бруто"));
Теперь вы без труда сможете добавить и получить необходимые дополнительные 1С данные без снятия конфигурации 1С с поддержки и изменения типовой конфигурации. Без сомнения, такой инструмент должен быть в арсенале 1С программиста и активно использоваться в работе.