Имя: Пароль:
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
Да и в запросе можно сразу ограничить на только отрицательные количества. Будет как минимум на порядок быстрее работать.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn