Программное добавление новых дополнительных реквизитов номенклатуры
Всем доброго дня УНФ 1.6 (1.6.17.123) . Подскажите пожалуйста, как программно добавить номенклатуре новый дополнительный реквизит. Т.е не заполнить тот, который вы руками создали, а для конкретной позиции создать новый доп реквизит (для каждой группы номенклатуры будет разный перечень реквизитов).
Сколько не пробовал добавлять постоянно появляются зачеркнутые доп реквизиты.
Сколько не пробовал добавлять постоянно появляются зачеркнутые доп реквизиты.
По теме из базы знаний
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- Установка розничных цен / наценка из документа Поступление товаров (Приходная накладная) + разблокировка реквизитов Номенклатуры для конфигурации Розница v2.2, v2.3, v3
- Пример переноса справочников, документов и движений через Эксель и "Конвертацию данных 2" из оптовой учетной системы 1С 7.7 Комплексной 4.2 и розничной учетной системы Рарус Торговый комплекс -> в 1С 8.3 ЕРП 2.4 (расширение и дополнительные реквизиты)
- 1С:БСП Дополнительные реквизиты и сведения
- Работа с произвольным набором основных и дополнительных реквизитов справочника в одном динамическом списке
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
БСП злиться, что с ней работают не ручками, а пытаются грубо сломать полностью.
я не представляю зачем добавлять допреквизиты программно, время на отладку этого костыля
будет стоить дороже времени ручной работы опытного юзера по предоставленному списку.
я не представляю зачем добавлять допреквизиты программно, время на отладку этого костыля
будет стоить дороже времени ручной работы опытного юзера по предоставленному списку.
///////////////////////Поиск созданного набораДопРеквизитов или использование созданного вручную(Если не найден)/////////////////
ЗапросНаборыДополнительныхРеквизитов = новый запрос;
ЗапросНаборыДополнительныхРеквизитов.Текст = "ВЫБРАТЬ
| НаборыДополнительныхРеквизитовИСведений.Ссылка КАК Ссылка
|ИЗ
| Справочник.НаборыДополнительныхРеквизитовИСведений КАК НаборыДополнительныхРеквизитовИСведений
|ГДЕ
| НаборыДополнительныхРеквизитовИСведений.Расш1_IDПостащика = &Наим";
ЗапросНаборыДополнительныхРеквизитов.УстановитьПараметр("Наим", струк.categoryId);
Результат = ЗапросНаборыДополнительныхРеквизитов.Выполнить().Выгрузить();
Если Результат.Количество()<>0 тогда
НаборыДополнительныхРеквиз = Результат[0].Ссылка.ПолучитьОбъект();
Иначе
НаборыДополнительныхРеквиз = РанееПодготовленныйНабор.ссылка;
КонецЕсли;
////////////////////////Поиск доп реквизитов в данном наборе совйсв///////////////////////////////
Запрос = новый запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДополнительныеРеквизитыИСведения.Ссылка КАК Ссылка
|ИЗ
| ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
|ГДЕ
| ДополнительныеРеквизитыИСведения.Наименование = &ЗнчНаименования
| И ДополнительныеРеквизитыИСведения.НаборСвойств = &ЗнчНабора";
Запрос.УстановитьПараметр("ЗнчНаименования",строчка.СвойствоХарак);
Запрос.УстановитьПараметр("ЗнчНабора",НаборыДополнительныхРеквиз.ссылка);
Результат1 = Запрос.Выполнить().Выгрузить();
////////////////////Создание доп реквизитов ///////////////////////////
Если Результат1.Количество()=0 тогда
НоваяХарактеристика = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент();
НоваяХарактеристика.Наименование = строчка.СвойствоХарак;
НоваяХарактеристика.ВыводитьВВидеГиперссылки=Ложь;
НоваяХарактеристика.ДополнительныеЗначенияИспользуются=Ложь;
НоваяХарактеристика.ДополнительныеЗначенияСВесом=Ложь;
НоваяХарактеристика.Заголовок = строчка.СвойствоХарак;
НоваяХарактеристика.НаборСвойств = НаборыДополнительныхРеквиз.ссылка;
НоваяХарактеристика.Виден=Истина;
Если строчка.СвойствоХарак = "Детальное описание" тогда
Новарак.ТипЗначения=ОбщегоНазначения.ОписаниеТипаСтрока(0);
Иначе
Новарак.ТипЗначения=ОбщегоНазначения.ОписаниеТипаСтрока(1024);
КонецЕсли;
НоваяХарактеристика.Записать();
ПолученноеСвойство = НоваяХарактеристика.Ссылка;
новыйРеквизит = НаборыДополнительныхРеквиз.ДополнительныеРеквизиты.Добавить();
новыйРеквизит.Свойство = ПолученноеСвойство;
новыйРеквизит.ИмяПредопределенногоНабора = строчка.СвойствоХарак;
Иначе
ПолученноеСвойство = Результат1[0].ссылка;
КонецЕсли;
Если строчка.ЗначениеСвойства<>"" тогда
НовыйРеквизитНоменклатуры = НоваяПозиция.ДополнительныеРеквизиты.Добавить();
НовыйРеквизитНоменклатуры.Свойство = ПолученноеСвойство;
НовыйРеквизитНоменклатуры.Значение = строчка.ЗначениеСвойства;
КонецЕсли;
ПРИМЕР
ЗапросНаборыДополнительныхРеквизитов = новый запрос;
ЗапросНаборыДополнительныхРеквизитов.Текст = "ВЫБРАТЬ
| НаборыДополнительныхРеквизитовИСведений.Ссылка КАК Ссылка
|ИЗ
| Справочник.НаборыДополнительныхРеквизитовИСведений КАК НаборыДополнительныхРеквизитовИСведений
|ГДЕ
| НаборыДополнительныхРеквизитовИСведений.Расш1_IDПостащика = &Наим";
ЗапросНаборыДополнительныхРеквизитов.УстановитьПараметр("Наим", струк.categoryId);
Результат = ЗапросНаборыДополнительныхРеквизитов.Выполнить().Выгрузить();
Если Результат.Количество()<>0 тогда
НаборыДополнительныхРеквиз = Результат[0].Ссылка.ПолучитьОбъект();
Иначе
НаборыДополнительныхРеквиз = РанееПодготовленныйНабор.ссылка;
КонецЕсли;
////////////////////////Поиск доп реквизитов в данном наборе совйсв///////////////////////////////
Запрос = новый запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДополнительныеРеквизитыИСведения.Ссылка КАК Ссылка
|ИЗ
| ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
|ГДЕ
| ДополнительныеРеквизитыИСведения.Наименование = &ЗнчНаименования
| И ДополнительныеРеквизитыИСведения.НаборСвойств = &ЗнчНабора";
Запрос.УстановитьПараметр("ЗнчНаименования",строчка.СвойствоХарак);
Запрос.УстановитьПараметр("ЗнчНабора",НаборыДополнительныхРеквиз.ссылка);
Результат1 = Запрос.Выполнить().Выгрузить();
////////////////////Создание доп реквизитов ///////////////////////////
Если Результат1.Количество()=0 тогда
НоваяХарактеристика = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент();
НоваяХарактеристика.Наименование = строчка.СвойствоХарак;
НоваяХарактеристика.ВыводитьВВидеГиперссылки=Ложь;
НоваяХарактеристика.ДополнительныеЗначенияИспользуются=Ложь;
НоваяХарактеристика.ДополнительныеЗначенияСВесом=Ложь;
НоваяХарактеристика.Заголовок = строчка.СвойствоХарак;
НоваяХарактеристика.НаборСвойств = НаборыДополнительныхРеквиз.ссылка;
НоваяХарактеристика.Виден=Истина;
Если строчка.СвойствоХарак = "Детальное описание" тогда
Новарак.ТипЗначения=ОбщегоНазначения.ОписаниеТипаСтрока(0);
Иначе
Новарак.ТипЗначения=ОбщегоНазначения.ОписаниеТипаСтрока(1024);
КонецЕсли;
НоваяХарактеристика.Записать();
ПолученноеСвойство = НоваяХарактеристика.Ссылка;
новыйРеквизит = НаборыДополнительныхРеквиз.ДополнительныеРеквизиты.Добавить();
новыйРеквизит.Свойство = ПолученноеСвойство;
новыйРеквизит.ИмяПредопределенногоНабора = строчка.СвойствоХарак;
Иначе
ПолученноеСвойство = Результат1[0].ссылка;
КонецЕсли;
Если строчка.ЗначениеСвойства<>"" тогда
НовыйРеквизитНоменклатуры = НоваяПозиция.ДополнительныеРеквизиты.Добавить();
НовыйРеквизитНоменклатуры.Свойство = ПолученноеСвойство;
НовыйРеквизитНоменклатуры.Значение = строчка.ЗначениеСвойства;
КонецЕсли;
ПРИМЕР
Создать новый элемент в Плане видов характеристик "ДополнительныеРеквизитыИСведения", заполнить реквизиты:
обязательно НаборСвоств - или предопределенный элемент справочника "НаборыДополнительныхРеквизитовИСведений" "Общий" из группы "Номенклатура" или созданный по имени папки, Заполнить наименование созданного свойства, так, как наименование выглядит для созданного руками свойства, заполнить заголовок свойства (почти как наименование, но без постфикса), установить ТипЗначения...долго писать, вот пример из моей БДРС:
в принципе вот тут всё естьhttps://infostart.ru/public/288722/
обязательно НаборСвоств - или предопределенный элемент справочника "НаборыДополнительныхРеквизитовИСведений" "Общий" из группы "Номенклатура" или созданный по имени папки, Заполнить наименование созданного свойства, так, как наименование выглядит для созданного руками свойства, заполнить заголовок свойства (почти как наименование, но без постфикса), установить ТипЗначения...долго писать, вот пример из моей БДРС:
Функция _УстановитьСвойствоВПланВидовХарактеристик(ДРС, ИмяДРС, ИмяОбъектаДРС, ТипДРС, ДлинаДРС = 0, ТочностьДРС = 0, ПерезаписатьСвойсво = Неопределено) Экспорт
Если ПерезаписатьСвойсво <> Неопределено Тогда
НовСвойство = ПерезаписатьСвойсво.ПолучитьОбъект();
Иначе
НовСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент();
КонецЕсли;
НовСвойство.ДополнительныеЗначенияИспользуются = Истина;
НовСвойство.Доступен = Истина;
НовСвойство.Виден = Истина;
НовСвойство.Заголовок = ИмяДРС;
НовСвойство.ЗаголовокФормыВыбораЗначения = ИмяДРС;
НовСвойство.ЗаголовокФормыЗначения = ИмяДРС;
НовСвойство.НаборСвойств = _ПолучитьСсылкуНабораСвойств(ИмяОбъектаДРС);
НаименованиеНабора = ЗначениеРеквизитаОбъекта(НовСвойство.НаборСвойств, "Наименование");
НовСвойство.Наименование = ИмяДРС + " (" + НаименованиеНабора + ")";
ЗаписатьЗначения = Ложь;
Если ЗначениеЗаполнено(ТипДРС) Тогда
МассивТипов = Новый Массив;
Если ТипЗнч(ТипДРС) = Тип("Строка") Тогда
Если ТипДРС = "Дата" Тогда
МассивТипов.Добавить(Тип("Дата"));
ИначеЕсли ТипДРС = "Булево" Тогда
МассивТипов.Добавить(Тип("Булево"));
ИначеЕсли ТипДРС = "Строка" Тогда
МассивТипов.Добавить(Тип("Строка"));
ИначеЕсли ТипДРС = "Число" Тогда
МассивТипов.Добавить(Тип("Число"));
ИначеЕсли ТипДРС = "Валюта" Тогда
МассивТипов.Добавить(Тип("СправочникСсылка.Валюты"));
ИначеЕсли ТипДРС = "РеализацияТоваровУслуг" Тогда
МассивТипов.Добавить(Тип("ДокументСсылка.РеализацияТоваровУслуг"));
ИначеЕсли ТипДРС = "ЕдиницаИзмерения" или ТипДРС = "КлассификаторЕдиницИзмерения" Тогда
МассивТипов.Добавить(Тип("СправочникСсылка.КлассификаторЕдиницИзмерения"));
ИначеЕсли ТипДРС = "КонтактноеЛицо" Тогда
МассивТипов.Добавить(Тип("СправочникСсылка.КонтактныеЛица"));
ИначеЕсли ТипДРС = "Контрагент" или ТипДРС = "Контрагенты" Тогда
МассивТипов.Добавить(Тип("СправочникСсылка.Контрагенты"));
ИначеЕсли ТипДРС = "Договор" или ТипДРС = "ДоговорыКонтрагентов" Тогда
МассивТипов.Добавить(Тип("СправочникСсылка.ДоговорыКонтрагентов"));
ИначеЕсли ТипДРС = "Номенклатура" Тогда
МассивТипов.Добавить(Тип("СправочникСсылка.Номенклатура"));
ИначеЕсли ТипДРС = "НоменклатурнаяГруппа" или ТипДРС = "НоменклатурныеГруппы" Тогда
МассивТипов.Добавить(Тип("СправочникСсылка.НоменклатурныеГруппы"));
ИначеЕсли ТипДРС = "Организация" Тогда
МассивТипов.Добавить(Тип("СправочникСсылка.Организации"));
ИначеЕсли ТипДРС = "Подразделение" Тогда
МассивТипов.Добавить(Тип("СправочникСсылка.ПодразделенияОрганизаций"));
ИначеЕсли ТипДРС = "Пользователь" Тогда
МассивТипов.Добавить(Тип("СправочникСсылка.Пользователи"));
ИначеЕсли ТипДРС = "Склад" или ТипДРС = "Склады" Тогда
МассивТипов.Добавить(Тип("СправочникСсылка.Склады"));
ИначеЕсли ТипДРС = "СтатьяЗатрат" или ТипДРС = "СтатьиЗатрат" Тогда
МассивТипов.Добавить(Тип("СправочникСсылка.СтатьиЗатрат"));
ИначеЕсли ТипДРС = "Страна" Тогда
МассивТипов.Добавить(Тип("СправочникСсылка.СтраныМира"));
ИначеЕсли ТипДРС = "Файл" Тогда
МассивТипов.Добавить(Тип("СправочникСсылка.Файлы"));
ИначеЕсли ТипДРС = "ФизическоеЛицо" или ТипДРС = "ФизическиеЛица" Тогда
МассивТипов.Добавить(Тип("СправочникСсылка.ФизическиеЛица"));
ИначеЕсли Найти(ТипДРС, "Дополнительное") > 0 ИЛИ ТипДРС = "" Тогда //Значит устанавливаем дополнительное значение
МассивТипов.Добавить(Тип("СправочникСсылка.ЗначенияСвойствОбъектов"));
КонецЕсли;
ИначеЕсли ТипЗнч(ТипДРС) = Тип("СписокЗначений") Тогда
МассивТипов.Добавить(Тип("СправочникСсылка.ЗначенияСвойствОбъектов"));
ЗаписатьЗначения = Истина;
ИначеЕсли ТипЗнч(ТипДРС) = Тип("ТаблицаЗначений") Тогда
МассивТипов.Добавить(Тип("СправочникСсылка.ЗначенияСвойствОбъектов"));
ЗаписатьЗначения = Истина;
ИначеЕсли ТипЗнч(ТипДРС) = Тип("ДеревоЗначений") Тогда
МассивТипов.Добавить(Тип("СправочникСсылка.ЗначенияСвойствОбъектовИерархия"));
ЗаписатьЗначения = Истина;
КонецЕсли;
НовСвойство.ТипЗначения = ?(ТипДРС = "Строка", Новый ОписаниеТипов(МассивТипов, Новый КвалификаторыСтроки(ДлинаДРС)),
?(ТипДРС = "Число", Новый ОписаниеТипов(МассивТипов,Новый КвалификаторыЧисла(ДлинаДРС, ТочностьДРС)), Новый ОписаниеТипов(МассивТипов)));
КонецЕсли;
НовСвойство.Комментарий = "#Введено автоматически с использованием БДРС. © ermilov_alex@mail.ru";
НовСвойство.ЭтоДополнительноеСведение = _ЭтоДополнительноеСведение(ДРС);
НовСвойство.ОбменДанными.Загрузка = Истина;
НовСвойство.Записать();
ОбъектНаборДополнительныхРеквизитовИСведений = НовСвойство.НаборСвойств.ПолучитьОбъект();
Если НовСвойство.ЭтоДополнительноеСведение Тогда
ТЧ_НабораДРС = ОбъектНаборДополнительныхРеквизитовИСведений.ДополнительныеСведения;
Иначе
ТЧ_НабораДРС = ОбъектНаборДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты;
КонецЕсли;
ЕстьСтрока = ТЧ_НабораДРС.НайтиСтроки(Новый Структура("Свойство", НовСвойство.Ссылка));
Если ЕстьСтрока.Количество() Тогда
НовСтр = ЕстьСтрока[0];
Иначе
НовСтр = ТЧ_НабораДРС.Добавить();
КонецЕсли;
НовСтр.Свойство = НовСвойство.Ссылка;
ОбъектНаборДополнительныхРеквизитовИСведений.ОбменДанными.Загрузка = Истина;
ОбъектНаборДополнительныхРеквизитовИСведений.Записать();
Если ЗаписатьЗначения Тогда
Если ТипЗнч(ТипДРС) = Тип("СписокЗначений") ИЛИ ТипЗнч(ТипДРС) = Тип("ТаблицаЗначений") Тогда
ДопЗначения = Справочники.ЗначенияСвойствОбъектов;
Для Каждого стр Из ТипДРС Цикл
ЕстьСсылка = ДопЗначения.НайтиПоНаименованию("" + стр.Значение, Истина);
Если ЕстьСсылка = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка() Тогда
НовСтр = ДопЗначения.СоздатьЭлемент();
Иначе
НовСтр = ЕстьСсылка.ПолучитьОбъект();
КонецЕсли;
НовСтр.Владелец = НовСвойство.Ссылка;
НовСтр.Наименование = стр.Значение;
Попытка
НовСтр.Записать();
Исключение
НовСтр.ОбменДанными.Загрузка = Истина;
НовСтр.Записать();;
КонецПопытки;
КонецЦикла;
ИначеЕсли ТипЗнч(ТипДРС) = Тип("ДеревоЗначений") Тогда
ДопЗначения = Справочники.ЗначенияСвойствОбъектовИерархия;
Уровень1 = ТипДРС.ПолучитьЭлементы();
Для Каждого стр Из Уровень1 Цикл
ЕстьСсылка = ДопЗначения.НайтиПоНаименованию("" + стр.Значение, Истина);
Если ЕстьСсылка = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка() Тогда
НовСтр = ДопЗначения.СоздатьЭлемент();
Иначе
НовСтр = ЕстьСсылка.ПолучитьОбъект();
КонецЕсли;
НовСтр.Владелец = НовСвойство.Ссылка;
ЗаполнитьЗначенияСвойств(НовСтр, стр);
Попытка
НовСтр.Записать();
Исключение
НовСтр.ОбменДанными.Загрузка = Истина;
НовСтр.Записать();
КонецПопытки;
Уровень2 = стр.ПолучитьЭлементы();
Для Каждого стр2 Из Уровень2 Цикл
ЕстьСсылка = ДопЗначения.НайтиПоНаименованию("" + стр2.Значение, Истина);
Если ЕстьСсылка = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка() Тогда
НовСтр2 = ДопЗначения.СоздатьЭлемент();
Иначе
НовСтр2 = ЕстьСсылка.ПолучитьОбъект();
КонецЕсли;
НовСтр2.Владелец = НовСвойство.Ссылка;
ЗаполнитьЗначенияСвойств(НовСтр2, стр2);
НовСтр2.Родитель = НовСтр;
Попытка
НовСтр2.Записать();
Исключение
НовСтр2.ОбменДанными.Загрузка = Истина;
НовСтр2.Записать();;
КонецПопытки;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат НовСвойство.Ссылка;
КонецФункции
Показатьв принципе вот тут всё есть
(5)
Многабукаф, ниасилил.
Нашел решение попрощевот здесь и немного универсализировал.
Вызываю вот так:
Прекрасно работает
Многабукаф, ниасилил.
Нашел решение попроще
Процедура ПроверитьДобавитьДопРеквизит(ТипОбъекта, ИмяРеквизита, ТипыРеквизита, КвалификаторыЧисла=Неопределено, КвалификаторыСтроки=Неопределено, КвалификаторыДаты=Неопределено, КвалификаторыДвоичныхДанных=Неопределено)
//Выберем Имя объекта ДРС.
НаборДР = Новый Структура;
Если ТипОбъекта = "ПеремещениеТоваров" Тогда
НаборДР.Вставить("Объект",Справочники.НаборыДополнительныхРеквизитовИСведений.Документ_ПеремещениеТоваров);
ИначеЕсли ТипОбъекта = "РеализацияТоваровУслуг" Тогда
НаборДР.Вставить("Объект",Справочники.НаборыДополнительныхРеквизитовИСведений.Документ_РеализацияТоваровУслуг);
//Шаблон для добавления объектов ДРС
//ИначеЕсли ТипОбъекта = "" Тогда
// НаборДР.Вставить("Объект",);
Иначе
Возврат;
КонецЕсли;
Если НаборДР.Свойство("Объект") Тогда
//пробуем найти доп. реквизит по заголовку
ЭлПВХ_Ссылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Заголовок",ИмяРеквизита);
Если ЭлПВХ_Ссылка.Пустая() Тогда
//если не найдено, то создадим новый
ЭлПВХ = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент();
ЭлПВХ.Заголовок = ИмяРеквизита;
ЭлПВХ.НаборСвойств = НаборДР;
ЭлПВХ.Наименование = ЭлПВХ.Заголовок+" ("+ЭлПВХ.НаборСвойств+")";
ЭлПВХ.ТипЗначения = Новый ОписаниеТипов(ТипыРеквизита, КвалификаторыЧисла, КвалификаторыСтроки, КвалификаторыДаты, КвалификаторыДвоичныхДанных);
ЭлПВХ.Записать();
ЭлПВХ_Ссылка = ЭлПВХ.Ссылка;
КонецЕсли;
//проверим, что реквизит указан в наборе доп. реквизитов заказа покупателя
НаборОб = НаборДР.Объект.ПолучитьОбъект();
Если НаборОб.ДополнительныеРеквизиты.Найти(ЭлПВХ_Ссылка, "Свойство") = Неопределено Тогда
//добавим реквизит в набор
СтрНаборОб = НаборОб.ДополнительныеРеквизиты.Добавить();
СтрНаборОб.Свойство = ЭлПВХ_Ссылка;
КонецЕсли;
Если НаборОб.Модифицированность() Тогда
//запишем при необходимости
НаборОб.Записать();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура УстановитьДополнительныйРеквизитОбъекта(Ссылка, ИмяРеквизита, ЗначениеРеквизита)
ЭлПВХ_Ссылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Заголовок",ИмяРеквизита);
Если ЭлПВХ_Ссылка.Пустая() Тогда
Сообщить("Не найден доп. реквизит "+ИмяРеквизита+", значение не установлено!");
Возврат;
КонецЕсли;
Объект = Ссылка.ПолучитьОбъект();
СтрДопРеквизиты = Объект.ДополнительныеРеквизиты.Найти(ЭлПВХ_Ссылка, "Свойство");
Если СтрДопРеквизиты = Неопределено Тогда
СтрДопРеквизиты = Объект.ДополнительныеРеквизиты.Добавить();
КонецЕсли;
СтрДопРеквизиты.Свойство = ЭлПВХ_Ссылка;
СтрДопРеквизиты.Значение = ЗначениеРеквизита;
Объект.Записать();
КонецПроцедуры
ПоказатьВызываю вот так:
//Выполняется при старте обработки
ПроверитьДобавитьДопРеквизит("РеализацияТоваровУслуг", "ПроверкаТС","Булево");
ПроверитьДобавитьДопРеквизит("РеализацияТоваровУслуг", "ЖурналПроверкиТС", "Строка",,Новый КвалификаторыСтроки(0));
//в теле рабочей процедуры
Реализация = Документы.РеализацияТоваровУслуг.НайтиПоНомеру(Номер, Дата) УстановитьДополнительныйРеквизитОбъекта(Реализация,"ПроверкаТС",РезультатПроверкиТС);
УстановитьДополнительныйРеквизитОбъекта(Реализация,"ЖурналПроверкиТС",ЖурналПроверкиТС);
ПоказатьПрекрасно работает
Добрый, коллеги, а будет ли работать функционал выше, если надо реквизит сделать для нескольких наборов?
КОнфигурация УТ 11.5
Например есть ВидНоменклатуры Стаканы и у него уже создан допреквизит Материал
создаю новый вид и набор Кувшины там нужен такой же доп реквизит, руками как сделать понятно
просто создать доп реквизит тоже норм работает
У себя пробовал проверять наличие допреквизита в ВидеНоменклатуры в ТЧ РеквизитыДляКонтроляНоменклатуры
но при записи он затирается
Сейчас еще попробую через БСП, но не понимаю отрабатываются ли там такие ситуации, может кто сталкивался?
КОнфигурация УТ 11.5
Например есть ВидНоменклатуры Стаканы и у него уже создан допреквизит Материал
создаю новый вид и набор Кувшины там нужен такой же доп реквизит, руками как сделать понятно
просто создать доп реквизит тоже норм работает
У себя пробовал проверять наличие допреквизита в ВидеНоменклатуры в ТЧ РеквизитыДляКонтроляНоменклатуры
но при записи он затирается
Сейчас еще попробую через БСП, но не понимаю отрабатываются ли там такие ситуации, может кто сталкивался?
В УНФ, пример, через стандартную функцию
Для Каждого Свойство Из Строка.ЗначенияСвойств Цикл
Если Сред(Свойство.ИД, 1, 8) = "Свойство" Тогда
СвойствоСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(
Свойство.Наименование);
Если НЕ ЗначениеЗаполнено(СвойствоСсылка) Тогда
НоваяХарактеристика = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент();
НоваяХарактеристика.НаборСвойств = УправлениеСвойствами.НаборСвойствПоИмени(
"Справочник_Номенклатура");
НоваяХарактеристика.Наименование = Свойство.Наименование;
НоваяХарактеристика.Заголовок = Свойство.Наименование;
НоваяХарактеристика.ТипЗначения = Тип("СправочникСсылка.ЗначенияСвойствОбъектов");
НоваяХарактеристика.Записать();
СвойствоСсылка = НоваяХарактеристика.Ссылка;
КонецЕсли;
Если СвойствоСсылка.ТипЗначения = Новый ОписаниеТипов("Строка") Тогда
ЗначениеСвойства = Свойство.Значение[0];
ИначеЕсли СвойствоСсылка.ТипЗначения = Новый ОписаниеТипов("Булево") Тогда
ЗначениеСвойства = Булево(Свойство.Значение[0]);
ИначеЕсли СвойствоСсылка.ТипЗначения = Новый ОписаниеТипов("Дата") Тогда
ЗначениеСвойства = Дата(Свойство.Значение[0]);
ИначеЕсли СвойствоСсылка.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.ЗначенияСвойствОбъектов") Тогда
ЗначениеСвойства = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(Свойство.Значение[0]);
Если НЕ ЗначениеЗаполнено(ЗначениеСвойства) Тогда
НовоеЗначениеСвойства = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
НовоеЗначениеСвойства.Наименование = Свойство.Значение[0];
НовоеЗначениеСвойства.Владелец = СвойствоСсылка;
НовоеЗначениеСвойства.Записать();
ЗначениеСвойства = НовоеЗначениеСвойства.Ссылка;
КонецЕсли;
КонецЕсли;
ТоварОбъект = Выборка.Номенклатура.ПолучитьОбъект();
СтрокаСвойств = ТоварОбъект.ДополнительныеРеквизиты.Найти(СвойствоСсылка, "Свойство");
Если СтрокаСвойств = Неопределено Тогда
СтрокаСвойств = ТоварОбъект.ДополнительныеРеквизиты.Добавить();
КонецЕсли;
СтрокаСвойств.Свойство = СвойствоСсылка;
СтрокаСвойств.Значение = ЗначениеСвойства;
ТоварОбъект.Записать();
ИначеЕсли Свойство.ИД = "Штрихкод" Тогда
ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.ПустаяСсылка();
Если ЗначениеЗаполнено(Свойство.Наименование) Тогда
ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоКоду(Свойство.Наименование);
КонецЕсли;
Для Каждого Штрихкод Из Свойство.Значение Цикл
МенеджерЗаписи = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Штрихкод = Штрихкод;
МенеджерЗаписи.Прочитать();
Если Не МенеджерЗаписи.Выбран() Тогда
МенеджерЗаписи.Номенклатура = Выборка.Номенклатура;
МенеджерЗаписи.ЕдиницаИзмерения = ЕдиницаИзмерения;
МенеджерЗаписи.Штрихкод = Штрихкод;
МенеджерЗаписи.Записать();
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла
Показать&НаСервере
Процедура Команда1НаСервере()
Запрос = новый Запрос;
Запрос.УстановитьПараметр("Организация",Объект.Организация);
//Запрос.УстановитьПараметр("Ссылка",Объект.Номенклатура);
Запрос.УстановитьПараметр("ВидДоговора",Перечисления.ВидыДоговоров.СПоставщиком);
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Поставщик В
| (ВЫБРАТЬ
| ДоговорыКонтрагентов.Владелец КАК Владелец
| ИЗ
| Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
| ГДЕ
| ДоговорыКонтрагентов.Организация = &Организация
| И ДоговорыКонтрагентов.ВидДоговора = &ВидДоговора)
// | И Номенклатура.Ссылка = &Ссылка";
|";
Результат = Запрос.Выполнить().Выбрать();
ДРС = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя","Договор");
пока Результат.Следующий() Цикл
НоменклатураСсылка = Результат.ссылка;
//спр = Справочники.Номенклатура.НайтиПоКоду();
УправлениеСвойствамиЗначениеСвойства = УправлениеСвойствами.ЗначениеСвойства(НоменклатураСсылка, ДРС);
Если УправлениеСвойствамиЗначениеСвойства = Неопределено Тогда
ЗначенияДополнительныхРеквизитов = Новый ТаблицаЗначений;
ЗначенияДополнительныхРеквизитов.Колонки.Добавить("Свойство");
ЗначенияДополнительныхРеквизитов.Колонки.Добавить("Значение");
// Для каждого Реквизит Из ДополнительныеРеквизиты Цикл
НоваяСтрока = ЗначенияДополнительныхРеквизитов.Добавить();
НоваяСтрока.Свойство = ДРС;
НоваяСтрока.Значение = Истина;
//КонецЦикла;
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(НоменклатураСсылка, ЗначенияДополнительныхРеквизитов);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура Команда1(Команда)
Команда1НаСервере();
КонецПроцедуры
Показать
Всем привет!
у меня проблема такая: нужно программно создать доп. сведение к номенклатуре вида (Блюдо)
//попробуем найти реквизит по наименованию
ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ИмяРеквизита);
Если НЕ ЗначениеЗаполнено(ДопРеквизитСсылка) Тогда
//если не нашли реквизит - будем его создавать
ДопРеквизитОбъект = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент();
ДопРеквизитОбъект.НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.НайтиПоНаименованию("Номенклатура (Готовые блюда)");
ДопРеквизитОбъект.Наименование = ИмяРеквизита;
ДопРеквизитОбъект.ТипЗначения = Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(250));
ДопРеквизитОбъект.Виден = Истина;
ДопРеквизитОбъект.Доступен = Истина;
ДопРеквизитОбъект.Заголовок = ИмяРеквизита;
ДопРеквизитОбъект.ИдентификаторДляФормул = ИмяРеквизита;
ДопРеквизитОбъект.Имя = СтрЗаменить(ИмяРеквизита," ","");
ДопРеквизитОбъект.ЭтоДополнительноеСведение = Истина;
ДопРеквизитОбъект.ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеСведения;
//зададим имя нового реквизита
ДопРеквизитОбъект.Записать();
ДопРеквизитСсылка = ДопРеквизитОбъект.Ссылка;
Сообщить("В справочнике ""Дополнительные сведения"" создан новый элемент: """ + НаименованиеРеквизита);
КонецЕсли;
Доп.сведение создается, но попадает в список неиспользуемые сведения.
Если открыть созданное доп.сведение, то в нём написано "Сведение не входит в наборы"
Что не так в коде? по отладке всё норм (мне так кажется)
Буду благодарен за помощь.
у меня проблема такая: нужно программно создать доп. сведение к номенклатуре вида (Блюдо)
//попробуем найти реквизит по наименованию
ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ИмяРеквизита);
Если НЕ ЗначениеЗаполнено(ДопРеквизитСсылка) Тогда
//если не нашли реквизит - будем его создавать
ДопРеквизитОбъект = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент();
ДопРеквизитОбъект.НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.НайтиПоНаименованию("Номенклатура (Готовые блюда)");
ДопРеквизитОбъект.Наименование = ИмяРеквизита;
ДопРеквизитОбъект.ТипЗначения = Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(250));
ДопРеквизитОбъект.Виден = Истина;
ДопРеквизитОбъект.Доступен = Истина;
ДопРеквизитОбъект.Заголовок = ИмяРеквизита;
ДопРеквизитОбъект.ИдентификаторДляФормул = ИмяРеквизита;
ДопРеквизитОбъект.Имя = СтрЗаменить(ИмяРеквизита," ","");
ДопРеквизитОбъект.ЭтоДополнительноеСведение = Истина;
ДопРеквизитОбъект.ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеСведения;
//зададим имя нового реквизита
ДопРеквизитОбъект.Записать();
ДопРеквизитСсылка = ДопРеквизитОбъект.Ссылка;
Сообщить("В справочнике ""Дополнительные сведения"" создан новый элемент: """ + НаименованиеРеквизита);
КонецЕсли;
Доп.сведение создается, но попадает в список неиспользуемые сведения.
Если открыть созданное доп.сведение, то в нём написано "Сведение не входит в наборы"
Что не так в коде? по отладке всё норм (мне так кажется)
Буду благодарен за помощь.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот