Имя: Пароль:
1C
1С v8
Дополнительные реквизиты справочника. Программное создание
0 Luganchanin
 
07.10.16
15:30
Помогите разобраться.

Стоит задача программно создать и заполнить дополнительный реквизит справочника.
Делаю так:
Процедура ТестДопСвойст()

    //Отладочные значения
    МойАртикул = "МЕ085797";  
    МойПоставщик = "БУ003041";
    МойПоставщикНазвание = "ROVERSE";
    МойПоставщикСсыль = Справочники.Контрагенты.НайтиПоНаименованию(МойПоставщикНазвание);
    
    НоменклатураСсылка = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",МойАртикул);
    МОбъект = НоменклатураСсылка.ПолучитьОбъект();
    //МОбъект.ДополнительныеРеквизиты.Очистить(); // Сперва можно подчистить все доп. реквизиты.
    
    ТекСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Основной поставщик");
    ТекЗначение = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(МойПоставщикСсыль);
    Если Не ЗначениеЗаполнено(ТекСвойство) Тогда
        Сообщить("Не удалось найти свойство: Основной поставщик");
        Возврат
    КонецЕсли;
    Если Не ЗначениеЗаполнено(ТекЗначение) Тогда
        НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
        НовоеЗначение.Владелец = ТекСвойство;
        НовоеЗначение.Наименование = МойПоставщикСсыль;
        НовоеЗначение.Записать();
        ТекЗначение = НовоеЗначение.Ссылка;
    КонецЕсли;

    МассивСтрок = МОбъект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство", ТекСвойство));
    Если МассивСтрок.Количество() = 0 Тогда
        ДопРеквизит = МОбъект.ДополнительныеРеквизиты.Добавить();
    Иначе
        ДопРеквизит = МассивСтрок[0];
    КонецЕсли;
    ДопРеквизит.Свойство = ТекСвойство;
    ДопРеквизит.Значение = ТекЗначение;
    
    МОбъект.Записать();
КонецПроцедуры

Все хорошо создается, но на форме ни видно значение заполненного реквизита
Пишут что вроде бы 1с еще использует для хранения этих данных регистр. уже пересмотрел все - не нахожу

PS.
Платформа: 1С:Предприятие 8.3 (8.3.7.1845)
Конфигурация: Управление торговлей, редакция 11.2 (11.2.2.119) (http://v8.1c.ru/trade/)
1 DrShad
 
07.10.16
15:33
никаких регистров давным давно нет
2 DrShad
 
07.10.16
15:36
и вообще весь код адский мегапизнец
3 Luganchanin
 
07.10.16
15:53
(2) не судите строго, подскажите более красивый и правильный вариант решения
4 alexey123perm
 
07.10.16
15:53
Код для Бух 3.0. Создает договор с доп. реквизитом "Ставка НДС"

Функция СоздатьДоговор(Контрагент, ВидДоговора, СтавкаНДС = Неопределено)
    
    НовыйЭлемент = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
    НовыйЭлемент.Наименование = "Основной договор";
    НовыйЭлемент.Организация = Организация;
    НовыйЭлемент.ВалютаВзаиморасчетов = ВалютаРегламентированногоУчета;
    НовыйЭлемент.ВидДоговора = ВидДоговора;
    НовыйЭлемент.Владелец = Контрагент;
        
    Попытка
        НовыйЭлемент.Записать();
        //Заполним свойство
        Если ВидДоговора =Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком Тогда
            НовыйРеквизит = НовыйЭлемент.ДополнительныеРеквизиты.Добавить();
            НовыйРеквизит.Свойство = "Ставка НДС";
            НовыйРеквизит.ТекстоваяСтрока = "Ставка НДС";
            НовыйРеквизит.Значение = СтавкаНДС;            
            НовыйЭлемент.Записать();
        КонецЕсли;
        
        Возврат НовыйЭлемент.Ссылка;
        
    Исключение
        //ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Не удалось записать элемент справочника ""Договоры контрагентов""!");    
    КонецПопытки;
    
    Возврат Справочники.ДоговорыКонтрагентов.ПустаяСсылка();
    
КонецФункции
5 alexey123perm
 
07.10.16
15:56
Это поиск значения "ставки НДС". Они были заведены в режиме "Предприятие".
Функция ВернутьСтавкуНДСизДопРеквизитов(СтавкаНДС)
    
    РеквизитСтавкаНДС = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Ставка НДС");
    ТаблицаСвойств    = УправлениеСвойствами.ПолучитьСписокЗначенийСвойств(РеквизитСтавкаНДС);
    НайденноеЗначение = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка();
    Для Каждого ЭлементМассива Из ТаблицаСвойств Цикл
        Если ЭлементМассива.Наименование = СтавкаНДС Тогда
            НайденноеЗначение = ЭлементМассива;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Возврат НайденноеЗначение;
КонецФункции
6 Luganchanin
 
07.10.16
16:41
про код, конечно спасибо.
но по сути я так понял все правильно, почему же в карточке номенклатуры доп реквизит не показывается?
7 newbling
 
07.10.16
16:58
А ты уверен, что у тебя доп реквизит, а ни доп сведение создаётся?
8 newbling
 
07.10.16
16:59
В форме отображается доп реквизит, доп сведение имеет отдельную форму по вот такой вот кнопочке
http://prntscr.com/cqyq6p
9 Luganchanin
 
10.10.16
15:46
(7) для справочника номенклатуры я создал именно доп реквизит, а не доп сведение

(8) ссылка не открывается :-(
10 Luganchanin
 
10.10.16
15:47
да и запрос показывает эти реквизиты:
ВЫБРАТЬ
    НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка,
    НоменклатураДополнительныеРеквизиты.НомерСтроки КАК НомерСтроки,
    НоменклатураДополнительныеРеквизиты.Свойство КАК Свойство,
    НоменклатураДополнительныеРеквизиты.Значение КАК Значение,
    НоменклатураДополнительныеРеквизиты.ТекстоваяСтрока КАК ТекстоваяСтрока
ИЗ
    Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
ГДЕ
    НоменклатураДополнительныеРеквизиты.Свойство.Заголовок = "Основной поставщик"