Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Дополнительные реквизиты справочника. Программное создание

Дополнительные реквизиты справочника. Программное создание
Я
   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/)
 
 
   DrShad
 
1 - 07.10.16 - 15:33
никаких регистров давным давно нет
   DrShad
 
2 - 07.10.16 - 15:36
и вообще весь код адский мегапизнец
   Luganchanin
 
3 - 07.10.16 - 15:53
(2) не судите строго, подскажите более красивый и правильный вариант решения
   alexey123perm
 
4 - 07.10.16 - 15:53
Код для Бух 3.0. Создает договор с доп. реквизитом "Ставка НДС"

Функция СоздатьДоговор(Контрагент, ВидДоговора, СтавкаНДС = Неопределено)
    
    НовыйЭлемент = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
    НовыйЭлемент.Наименование = "Основной договор";
    НовыйЭлемент.Организация = Организация;
    НовыйЭлемент.ВалютаВзаиморасчетов = ВалютаРегламентированногоУчета;
    НовыйЭлемент.ВидДоговора = ВидДоговора;
    НовыйЭлемент.Владелец = Контрагент;
        
    Попытка
        НовыйЭлемент.Записать();
        //Заполним свойство

        Если ВидДоговора =Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком Тогда
            НовыйРеквизит = НовыйЭлемент.ДополнительныеРеквизиты.Добавить();
            НовыйРеквизит.Свойство = "Ставка НДС";
            НовыйРеквизит.ТекстоваяСтрока = "Ставка НДС";
            НовыйРеквизит.Значение = СтавкаНДС;            
            НовыйЭлемент.Записать();
        КонецЕсли;
        
        Возврат НовыйЭлемент.Ссылка;
        
    Исключение
        //ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Не удалось записать элемент справочника ""Договоры контрагентов""!");    

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует