Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

КД ВыгрузитьПоПравилу получить узел

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

Делаю так:

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

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

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

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

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

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


почему переменной Партия присваиваешь какую то непонятную хренотень?
   Скромный программер
 
7 - 05.02.21 - 05:03
(5) Давайте не будем усложнять. Пусть у документа Ввод остатков есть только реквизиты Номер, Дата и Партия, а у документа ПервичныйДокумент только номер и дата. Как в этом случае следует сделать?
(6) Я не прошу поставить мне пятерку за мой код, я описал суть задачи и прошу помощи в ее решении. В переменную Партия я пытаюсь получить ссылку на узел документа ПевричныйДокумент, чтобы при загрузке создались оба документа, а ссылка на ПервичныйДокумент была в реквизите Партия документа ВводОстатков.
   hhhh
 
8 - 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) научиться на примерах из типовых, например
   SamHinkie
 
13 - 05.02.21 - 13:34
(7)

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

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.