Имя: Пароль:
1C
1C 7.7
v7: Простой перебор реквизитов табличной части документа
0 PiotrLoginov
 
24.12.12
08:49
Здравствуйте всем. Подскажите, пожалуйста. Есть код:

Приходники = СоздатьОбъект("Документ.ПриходнаяНакладная");
Приходники.ВыбратьДокументы();
Пока Приходники.ПолучитьДокумент() > 0 Цикл
   Если Приходники.ТекущийДокумент().ПризнакНакладной = Перечисление.ПризнПрихНакл.Закупка Тогда
       Сообщить("начата обработка следующего документа");
       // ну здесь обрабатывается шапка,
       //без проблем
       //............
       
       ТЗ = СоздатьОбъект("ТаблицаЗначений");
       ТЗ.НоваяКолонка("Номенклатура");
       ТЗ.НоваяКолонка("КоличествоУпаковок");
       ТЗ.НоваяКолонка("Количество");
       ТЗ.НоваяКолонка("Цена");
       ТЗ.НоваяКолонка("Сумма");
       ТЗ.НоваяКолонка("СтавкаНДС");
       ТЗ.НоваяКолонка("СуммаНДС");
       ТЗ.НоваяКолонка("СуммаСНДС");
       ТЗ.НоваяКолонка("СуммаВзаиморасчетов");
           
       Сообщить("начата обработка табличной части");
           
       Приходники.ТекущийДокумент().ВыбратьСтроки();
       Пока Приходники.ТекущийДокумент().ПолучитьСтроку() = 1 Цикл // крутится без конца
           ТЗ.НоваяСтрока();
           ТЗ.Номенклатура = Приходники.ТекущийДокумент().Товар;
           ТЗ.КоличествоУпаковок = Приходники.ТекущийДокумент().Количество;
           ТЗ.Количество = Приходники.ТекущийДокумент().Количество;
           ТЗ.Цена = Приходники.ТекущийДокумент().Цена;
           ТЗ.Сумма = Приходники.ТекущийДокумент().Сумма;
           ТЗ.СтавкаНДС = Приходники.ТекущийДокумент().СтавкаНДС;
           ТЗ.СуммаНДС = Приходники.ТекущийДокумент().НДС;
           ТЗ.СуммаСНДС = Приходники.ТекущийДокумент().Всего;
           ТЗ.СуммаВзаиморасчетов = Приходники.ТекущийДокумент().Всего;
       КонецЦикла;
       //дальше по идее должна быть обработка ТЗ,
       //но до нее дело не доходит
       Сообщить("____ с этим документом закончили");
   КонецЕсли;
КонецЦикла;

Пока идет обработка шапки текущего документа, все хорошо. А вот после начала цикла перебора строк табличной части обработка как будто зависает - цикл крутится без остановки. То ли я к реквизитам строки обращаюсь неверно, то ли цикл организовал неправильно...

Заранее спасибо за помощь.
1 1Сергей
 
24.12.12
08:51
а нафига ты туда ТекущийДокумент() впендюрил?
2 Aleksey
 
24.12.12
08:53
А зачем в цикле создавать ТЗ?
3 1Сергей
 
24.12.12
08:54
(2) +1 тоже хороший вопрос
4 KishMish
 
24.12.12
08:54
(1) прав
Приходники.ВыбратьСтроки();
Пока Приходники.ПолучитьСтроку() = 1 Цикл

возможно при получении каждый раз текущего документа сбивается выборка
5 Aleksey
 
24.12.12
08:55
Не проще ли
ВремТЗ="";
Приходники.ВыгрузитьТабличнуюЧасть(ВремТЗ,"Номенклатура,Количество,Цена,Сумма,СтавкаНДС,СуммаНДС,СуммаСНДС,СуммаВзаиморасчетов");
6 Aleksey
 
24.12.12
08:56
И почему то мне кажется что нет реквизита Всего, он динамически вычисляется
7 PiotrLoginov
 
24.12.12
09:08
(1) Ну .. я же арганизовал цикл перебора приходных накладных, вот и полагал, что раз получаю табличную часть текущего выбранного документа, обращаюсь к нему...

(2) Мне надо для каждой выбранной приходной накладной создать таблицу значений на основе строк табличной части.

(4) пробую...

(5) Наверное проще.. буду иметь ввиду на будущее.

(6) Это в шапке вроде бы "Всего" не существует, а вычисляется - сумма по определенному реквизиту табличной части
8 PiotrLoginov
 
24.12.12
09:08
* организовал
9 Aleksey
 
24.12.12
09:09
(7) В шапке нет всего, как и в ТЧ
В шапке есть реквизит СуммаВзаиморасчетов
10 1Сергей
 
24.12.12
09:14
Приходники = СоздатьОбъект("Документ.ПриходнаяНакладная");
Приходники.ВыбратьДокументы();
Пока Приходники.ПолучитьДокумент() > 0 Цикл
   Если Приходники.ПризнакНакладной = Перечисление.ПризнПрихНакл.Закупка Тогда
       Сообщить("начата обработка следующего документа");
       // ну здесь обрабатывается шапка,

       //без проблем

       //............

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

           ТЗ.НоваяСтрока();
           ТЗ.Номенклатура = Приходники.Товар;
           ТЗ.КоличествоУпаковок = Приходники.Количество;
           ТЗ.Количество = Приходники.Количество;
           ТЗ.Цена = Приходники.Цена;
           ТЗ.Сумма = Приходники.Сумма;
           ТЗ.СтавкаНДС = Приходники.СтавкаНДС;
           ТЗ.СуммаНДС = Приходники.НДС;
           ТЗ.СуммаСНДС = Приходники.Всего;
           ТЗ.СуммаВзаиморасчетов = Приходники.Всего;
       КонецЦикла;
       //дальше по идее должна быть обработка ТЗ,

       //но до нее дело не доходит

       Сообщить("____ с этим документом закончили");
   КонецЕсли;
КонецЦикла;
11 1Сергей
 
24.12.12
09:15
ТекущийДокумент() - возвращает ссылку, а тебе нужен объект
12 PiotrLoginov
 
24.12.12
09:16
Да. Убрал ТекущийДокумент() - и заработало. Спасибо всем Большое. Не совсем правда понимаю логику обращения к реквизитам табл. части ... Ведь к реквизитам шапки-то я обращаюсь через ТекущийДокумент() - и все работает! Ну да ладно..

(9) "В шапке нет всего..."  - ну да, я так и написал.
"...как и в ТЧ" - в ТЧ вроде есть.  сейчас еще раз проверю.

(11) Аа-а.. теперь понял.
13 Aleksey
 
24.12.12
09:20
(12) хз как в твоей нетленки, в типовых нет
14 PiotrLoginov
 
24.12.12
09:29
да, беру из переписанной конфы, не сказал, пардон.

Реквизит есть. Комментарий: "Сумма поступления с налогами". Тип значения: Число. Длина: 15. Точность: 2.
Конфа: ТиС дописанная.

Вопрос темы раскрыт полностью. Спасибо еще раз форумчанам - в этот раз помогли наиоперативнейше.

P.S. Всех с наступающими праздниками.