Вводные
- Управление небольшой фирмой 1.6.23.61
- Нужно создать категорию номенклатуры
- Для категории номенклатуры создать доп реквизиты характеристик
- Для категории номенклатуры создать характеристики
- Создать номенклатуру с характеристиками
В статье описан блок анализа, как демонстрация решения данного типа задач. Для просмотра данных в объекте использую http://www.infostart.ru/public/100967/
Реализация
Категории номенклатуры
Иерархический справочник, минимально пользователем определяется
- Наименование
- Тип номенклатуры по умолчанию
При записи нового элемента дополнительно формируются наборы доп реквизитов для
- спр. Номенклатура
- спр. ХарактеристикиНоменклатуры
- спр. СпецификацииНоменклатуры
Заполняются наборы при записи элемента
Процедура ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если НЕ Отказ И НЕ ЭтоГруппа Тогда
// СтандартныеПодсистемы.Свойства
УправлениеСвойствами.ПередЗаписьюВидаОбъекта(ЭтотОбъект, "Справочник_Спецификации", "НаборСвойствСпецификации");
УправлениеСвойствами.ПередЗаписьюВидаОбъекта(ЭтотОбъект, "Справочник_ХарактеристикиНоменклатуры", "НаборСвойствХарактеристики");
УправлениеСвойствами.ПередЗаписьюВидаОбъекта(ЭтотОбъект, "Справочник_Номенклатура", "НаборСвойств");
// Конец СтандартныеПодсистемы.Свойства
КонецЕсли;
ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());
КонецПроцедуры // ПередЗаписью()
Создаю категорию с указанием использования общих характеристик и значения единицы измерения по умолчанию.
обКатегория = Справочники.КатегорииНоменклатуры.СоздатьЭлемент();
обКатегория.Наименование = "Обувь";
обКатегория.ТипНоменклатурыПоУмолчанию = Перечисления.ТипыНоменклатуры.Запас;
обКатегория.ИспользоватьХарактеристики = Истина;
обКатегория.ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.шт;
обКатегория.Записать();
Дополнительные реквизиты
Хранятся в "ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения".
В элементе указывается набор "НаборСвойств" в от которого был создан. При использовании информация о принадлежности берется из ТЧ "ДополнительныеРеквизиты" спр. "НаборыДополнительныхРеквизитовИСведений".
На форме пользователь видит "Наименование", по факту заполняется "Заголовок"
Скриншот формы из конфигуратора
Для коррекной работы кроме наименования нужно заполнить
- тип данных
- идентификатор для формул
- Имя (Требуется для программного обращения к дополнительным реквизитам и сведениям. Аналог имени обычного реквизита.)
Заполнение идентификатора происходит на форме
ЗаголовокДляИдентификатора = ЗаголовокДляФормированияИдентификатора(Объект.Заголовок, Объект.Представления);
Объект.ИдентификаторДляФормул = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.УникальныйИдентификаторДляФормул(
ЗаголовокДляИдентификатора, Объект.Ссылка);
"Имя" заполняется в модуле объекта в процедуре "ПередЗаписью()"
Процедура КонтрольЗаполнениеИдентификатораДляФормул(Отказ)
Если НЕ ДополнительныеСвойства.Свойство("ПроверкаИдентификатораДляФормулВыполнена") Тогда
// Программная запись.
Если ЗначениеЗаполнено(ИдентификаторДляФормул) Тогда
ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПроверитьУникальностьИдентификатора(ИдентификаторДляФормул, Ссылка, Отказ);
Иначе
// Установка идентификатора.
ИдентификаторДляФормул = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.УникальныйИдентификаторДляФормул(
ЗаголовокДляФормированияИдентификатора(), Ссылка);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Пример создания с типом "Дополнительное значение". Реквизиты "Доступен", "Виден" используются для управлением отображением в форме элемента спр. "Характерисики".
Код создания доп реквизита
обСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент();
обСвойство.Наименование = "Размер";
обСвойство.Заголовок = обСвойство.Наименование;
обСвойство.Доступен = Истина;
обСвойство.Виден = Истина;
ЗаголовокДляИдентификатора = ЗаголовокДляФормированияИдентификатора(обСвойство.Заголовок, обСвойство.Представления);
обСвойство.ИдентификаторДляФормул = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.УникальныйИдентификаторДляФормул(
ЗаголовокДляИдентификатора, обСвойство.Ссылка);
обСвойство.НаборСвойств = обКатегория.НаборСвойствХарактеристики;
//обСвойство.ТипЗначения = Новый ОписаниеТипов("Строка");
обСвойство.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.ЗначенияСвойствОбъектов");
обСвойство.Записать();
обНаборСвойствХарактеристики = обКатегория.НаборСвойствХарактеристики.ПолучитьОбъект();
СтрДопРеквизит = обНаборСвойствХарактеристики.ДополнительныеРеквизиты.Добавить();
СтрДопРеквизит.Свойство = обСвойство.Ссылка;
обНаборСвойствХарактеристики.Записать();
Значения дополнительных реквизитов
Хранятся в справочнике "ЗначенияСвойствОбъектов" с владельцем "ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения"
Код создания значения доп реквизита
обЗначениеСвойстваОбъекта = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
обЗначениеСвойстваОбъекта.Владелец = обСвойство.Ссылка;
обЗначениеСвойстваОбъекта.Наименование = "42";
обЗначениеСвойстваОбъекта.Записать();
Характеристики номенклатуры
Характеристики могут быть привязаны к:
- спр. КатегорииНоменклатуры, можно выбирать в документах для любой номенклатцры в рамках категории.
- спр. Номенклатура, можно выбирать в документах для номенклатуры владельца
Выбор харктеристик сделан через "нестандартную" форму выбора с фильтром, относительно неудобная для пользователей.
Создаем характеристику общую для категории, добавляем в нее значение доп реквизита
Код создания характеристики
обХарактеристика = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
обХарактеристика.Владелец = обКатегория.Ссылка;
обХарактеристика.Наименование = "42";
обХарактеристика.НаименованиеДляПечати = обХарактеристика.Наименование;
СтрДопРеквизит = обХарактеристика.ДополнительныеРеквизиты.Добавить();
СтрДопРеквизит.Свойство = обСвойство.Ссылка;
СтрДопРеквизит.Значение = обЗначениеСвойстваОбъекта.Ссылка;
обХарактеристика.Записать();
Для формирования наимменования из значений доп. реквизитов можно использовать функцию
ШаблоныНаименований.СформироватьНаименования(ЭтотОбъект, КатегорияНоменклатуры);
Итог
В структуре данных по доп реквизитам в УНФ есть своя специфика, учитывая которую можно программно создавать элементы для последующего использования.
Благодарю за внимание.