Имя: Пароль:
1C
1С v8
Программное добавление Номенклатуры из табличной части документа
0 eklient
 
16.01.17
23:10
Прошу помощи

Условия задачки:
- каждая номенклатура уникальна
таково условие
Задача:
Документ приходной накладной. Требуется после заполнения табличной части при проведении документа создавать номенклатуру по данным строк.

Делаю след. образом:
Документ.ПриходнаяНакладная: МодульОбъекта

дополняю процедуру "Процедура ОбработкаПроведения(Отказ, Режим)"
в конец прописал:

Для Каждого СтрокаТЧ Из Товары Цикл
    ЭлементыОтбора = Новый Структура("Код,Наименование,ТипНоменклатуры,ВидНоменклатуры,Состояние,База,Склад,Номер",
    СтрокаТЧ.Код,СтрокаТЧ.Номенклатура,СтрокаТЧ.Товар,СтрокаТЧ.ВидНоменклатуры,СтрокаТЧ.Состояние,СтрокаТЧ.База,Склад,СтрокаТЧ.Номер,);
    ОбъектЗаписи = Справочники.Номенклатура.СоздатьЭлемент();
    ОбъектЗаписи.Заполнить(ЭлементыОтбора);
КонецЦикла;

Реквизит "Склад" не из таблицы а из шапки поэтому обращение прямое и он общий.

Пробовал так же заполнять не значениями из табличной части а непосредственно ссылками и УникальныйИдентификатор, и так тоже Перечисления.ТипыНоменклатуры.Товар для перечислений. Однако не заполняет созданный объект.

В данный момент проверяю не из-за того ли что справочник иерархический, и мне нужно при создании обращаться к объекту так:
ОбъектЗаписи = Справочники.Номенклатура.Группа.СоздатьЭлемент();

подскажите кто сталкивался с подобной задачей.. пока я экспериментирую с вариантами
1 Lexey_
 
16.01.17
23:21
(0) ЗаполнитьЗначенияСвойств()
2 eklient
 
17.01.17
01:41
Да, спасибо большое, это именно то.
Свойства заполнились но элемент справочника не записало...
Как отловить в чем ошибка?
возможон какие-то дополнительные свойства объекта из обязательных необходимо заполнить?
3 i_rodionov
 
17.01.17
01:43
(2) никогда не делайте запись объектов при проведении
4 i_rodionov
 
17.01.17
01:45
(2) Если требуется что-то записать при проведении, лучше зависимый регистр сведения. При отмене проведения его можно очистить
5 eklient
 
17.01.17
02:13
нашел почему не писал)) забыл .Записать();

"никогда не делайте запись объектов при проведении"

совершенно согласен, делалось в попыхах и это моя первая конфигурация, делаю по видеоурокам, и в инструкциях видел что рекомендовано сделать на регистре, но пока не разобрался как)

в принципе весь нюанс в следующем:
есть три реквизита у номенклатуры комбинация которых должна быть уникальна.
в данный момент реализовано так:
в .Код программно записывается Реквизит1+Реквизит2+Реквизит3
включен контроль уникальности в справочнике
Реквизит1 и Реквизит2 тип строка, Реквизит3 - дата (yyyy)
Все остальные реквизиты это ссылки на справочники и перечисления

в приходной накладной нужно максимально облегчить массовое добавление номенклатуры и упростить до обычной таблицы ввод всех данных (без дополнительных окон создания записей в том или ином справочнике)
6 i_rodionov
 
17.01.17
02:17
(5) В добрый путь с регистром сведений. Если надо будет прочетсть, делается отбор данных по регистратору
7 i_rodionov
 
17.01.17
02:26
(5) Регистр сведений обеспечивает уникальность комбинации измерений. Если сделать по ним отбор, а потом записывать, то данные перезапишутся. Если отобрать и прочитать, их можно модифицировать и записать