Имя: Пароль:
1C
1С v8
Заполнение табличной части документа через цикл
0 victor-o555
 
29.06.15
01:21
РезультатЗапроса1 содержит номенклатуру с положительными и отрицательными остатками. Как заполнить табличную часть поступления со всеми отрицательными остатками из запроса?
Как я написал - создаются новые документы с одним наименованием номенклатуры.

Пока РезультатЗапроса1.Следующий() Цикл
    Наименование1 = РезультатЗапроса1.Субконто1;
    Организация1 = РезультатЗапроса1.Организация1;
    Количество1 = РезультатЗапроса1.КоличествоДт;
    Если Количество1<0 Тогда
    НовоеПоступление = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
    НовоеПоступление.Дата = ТекущаяДата();
    НовоеПоступление.ВидОперации = Перечисления.ВидыОперацийПоступлениеТоваровУслуг.Товары;
    НовоеПоступление.Организация = Организация1;
    ТабличнаяЧасть = НовоеПоступление.Товары.Добавить();
    ТабличнаяЧасть.Номенклатура = Наименование1;
    ТабличнаяЧасть.Количество = -Количество1;
    НовоеПоступление.Записать();
    КонецЦикла;
1 France
 
29.06.15
01:24
Выгружай в тз. Зачем мучать циклы.
2 victor-o555
 
29.06.15
01:30
я бухгалтер, изучаю 1С. можно в двух словах как нужно это реализовать?
3 France
 
29.06.15
01:39
Тз = запрос.выполнить().выгрузить().
Или, если уж цикл, то использовать ЗаполнитьЗначеняСвойств()
4 Mirnin
 
29.06.15
02:30
У тебя документ внутри цикла создается. Лучше сперва провести проверку создавать/не создавать, а затем циклом заполнять табличную часть.

Ну, либо переменную ввести, а-ля ДокументСоздан, определив её перед циклом и сменив после создания документа.

Если НЕ ДокументСоздан Тогда
НовоеПоступление = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
ДокументСОздан = Истина;
КонецЕсли;
5 Jokero
 
29.06.15
07:39
Зачем документ в цикле то создаешь, сделай это перед циклом и после цикла запишешь, если ТабЧасть не пустая.
Если ТабличнаяЧасть.Количество() > 0 тогда
  НовоеПоступление.Записать();
КонецЕсли;
6 ЧеловекДуши
 
29.06.15
07:41
(0) Попробуйте нанять Программиста.
Либо начать работу с Франчайзи.
Либо работать с фрилансером.

...
Бухгалтер - "Программист", конечно хорошо, но как то лучше быть кем то одним :)

...
А так, в коде в (0):


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

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

    НовоеПоступление.Записать();
7 ЧеловекДуши
 
29.06.15
07:43
+(6)  Перед: КонецЦикла; , поставить КонецЕсли;

Так же дописать проверку, как в (5), перед записью документа, что бы не было пустых документов :)
8 ЧеловекДуши
 
29.06.15
07:45
+(6) Табличная часть документа ограничена "99999" строк.
9 SansyGl
 
29.06.15
07:56
Да и в запросе можно сразу ограничить на только отрицательные количества. Будет как минимум на порядок быстрее работать.
AdBlock убивает бесплатный контент. 1Сергей