Имя: Пароль:
1C
1С v8
КД ВыгрузитьПоПравилу получить узел
0 Скромный программер
 
04.02.21
12:39
Всем доброго дня.
Есть результат запроса в источнике из которого нужно в приемнике создать два документа, причем один из них является значением реквизита другого.

Делаю так:

СтруктураПартии= Новый Структура("ТипПервичногоДокумента, Организация, СуммаРегл, СуммаДокумента, Дата, Контрагент, Комментарий","ПриобретениеУПоставщика",Организация,899,899,'20200101',, "раз111");
Партия=ВыгрузитьПоПравилу(СтруктураПартии,,,, "ПервичныйДокумент");
    
СтруктураВводаОстатков = Новый Структура("ТипОперации,Дата,Склад,Организация,Партия,Комментарий", "ОстаткиСобственныхТоваров", '20191231',Склад,Организация, Партия, "просто комментарий");
ВыгрузитьПоПравилу(СтруктураВводаОстатков, , , , "ВводОстатков");    

По идее должен получиться один ВводОстатков и один ПервичныйДокумент, который является значение реквизита Партия документа ВводОстатков. Но создается три документа ПервичныйДокумент, причем только один из них с нужным набором данных, второй только с номером и датой, а третий содержит только дату - даже номера нет. Причем ссылка на этот третий и содержится в реквизите документа ВводОстатков.
1 SamHinkie
 
04.02.21
12:43
удобнее сделать через таблицу значений.
2 SamHinkie
 
04.02.21
12:44
ТЗ = новый ТаблицаЗначений;

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

    НоваяСтрокаТМЦ=Товары.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрокаТМЦ,Выборка);
    НоваяСтрокаТМЦ.СуммаРегл=НоваяСтрокаТМЦ.Сумма;
    НоваяСтрокаТМЦ.КоличествоУпаковок=НоваяСтрокаТМЦ.Количество;
    НоваяСтрокаТМЦ.Цена=?(НоваяСтрокаТМЦ.Количество=0,0,НоваяСтрокаТМЦ.сумма/НоваяСтрокаТМЦ.Количество);
    НоваяСтрокаТМЦ.Сумма = НоваяСтрокаТМЦ.Сумма;
    НоваяСтрокаТМЦ.СуммаБезНДС = НоваяСтрокаТМЦ.Сумма;
    НоваяСтрокаТМЦ.СуммаНДС = НоваяСтрокаТМЦ.Сумма * 0.2;
    НоваяСтрокаТМЦ.НДСРегл = НоваяСтрокаТМЦ.Сумма * 0.2;
    НоваяСтрокаТМЦ.СуммаСНДС = НоваяСтрокаТМЦ.Сумма + НоваяСтрокаТМЦ.СуммаНДС;
    НоваяСтрокаТМЦ.СтавкаНДС = Новый Структура("Наименование", "20%")

КонецЦикла;
ВыборкаДанных= ТЗ;
3 SamHinkie
 
04.02.21
12:46
тебе же потом в документах ввода остатков по сути нужно будет получить много строк, к каждой из этих строк будет относится первичный документ
4 Скромный программер
 
04.02.21
13:43
У меня вопрос в другом, сейчас пока речи не идет о табличной части.
5 SamHinkie
 
04.02.21
14:15
ну на этот вопрос нельзя просто ответить. нужно фото ПКО ввода остатков и первичного документа. ну и что там в ПВД стоит
6 hhhh
 
04.02.21
14:34
(4) вот это что за бред?

Партия=ВыгрузитьПоПравилу(СтруктураПартии,,,, "ПервичныйДокумент");


почему переменной Партия присваиваешь какую то непонятную хренотень?
7 Скромный программер
 
05.02.21
05:03
(5) Давайте не будем усложнять. Пусть у документа Ввод остатков есть только реквизиты Номер, Дата и Партия, а у документа ПервичныйДокумент только номер и дата. Как в этом случае следует сделать?
(6) Я не прошу поставить мне пятерку за мой код, я описал суть задачи и прошу помощи в ее решении. В переменную Партия я пытаюсь получить ссылку на узел документа ПевричныйДокумент, чтобы при загрузке создались оба документа, а ссылка на ПервичныйДокумент была в реквизите Партия документа ВводОстатков.
8 hhhh
 
05.02.21
05:09
(7) Ну возьмите например реквизит Номенклатура. Или контрагент. Посмотрите как их выгружаете. И точно также выгружайте партию. Зачем придумывать какие-то узлы.
9 Скромный программер
 
05.02.21
05:16
(8) Потому что в исходной базе нет исходных объектов-аналогов - все создается в базе-приемнике на основании передаваемого набора данных.
10 Йохохо
 
05.02.21
05:35
(7) "В переменную Партия я пытаюсь получить ссылку на узел документа" это надо переписать ВыгрузитьПоПравилу и способ записи иксемельки, т.е. своё кд с узлами и гениальностью
(9) в исходной базе есть ТЗ, в структуре есть ТЗ, в ТЗ есть ТЗ, в (2) есть ТЗ, возьмите ТЗ
11 Скромный программер
 
05.02.21
05:45
(10) Я не понял, о чем вы говорите. В (7) я описал максимально упрощенный пример данных. Как такой простой пример сделать?
12 Йохохо
 
05.02.21
06:50
(11) научиться на примерах из типовых, например
13 SamHinkie
 
05.02.21
13:34
(7)

ПВД - перед обработкой
ДокументВводаОстатков = Новый Структура("Номер, Дата, Партия");
ДокументВводаОстатков.Вставить("Номер", "1");
ДокументВводаОстатков.Вставить("Дата", Дата(2020,12,31));
Партия = Новый Структура("Номер, Дата");
Партия.Вставить("Номер", "1");
Партия.Вставить("Дата");
ДокументВводаОстатков.Вставить("Партия", Партия);
ВыгрузитьПоПравилу(ДокументВводаОстатков,,,,"ВводОстатковТМЦ");
Отказ = Истина;
14 Скромный программер
 
08.02.21
06:38
(13) Это то, что надо. Спасибо за помощь.