Имя: Пароль:
1C
1C 7.7
v7: перенос табличной части в другой документ
0 curys
 
16.03.12
09:50
Доброе время суток! Задача стоит такая: Необходимо чтобы в выбраный документ переносилсь строки табличной части документов из выбранного списка. Подскажите почему не получается получить строки табличной части документа? Вот код: Процедура Выполнить()
   ДокЗап = ДокПост;
   ДокЗап.Выбран();
   Таб = СоздатьОбъект ("ТаблицаЗначений");
   ВыгрузитьТабличнуюЧасть(Таб);
   СчетчикЦикла = 0;
   Для СчетчикЦикла = 1 По таб.количествострок() Цикл
        Сообщить(Таб.ПолучитьЗначение(СчетчикЦикла,2));
        ДокПер = Таб.ПолучитьЗначение(СчетчикЦикла,2);
        ДокПер.ВыбратьСтроки();
        Пока ДокПер.ПолучитьСтроку()=1 Цикл
             ДокЗап.НоваяСтрока();//пишет что документ не выбран!!!!!
             ДокЗап.НОменклатура = ДокПер.Номенклатура;
           
        КонецЦикла;
   КонецЦикла;

   
КонецПроцедуры
1 zak555
 
16.03.12
09:51
что такое
ДокПер и ДокЗап ?
2 zak555
 
16.03.12
09:52
с ДокЗап разобрался
что такое ДостПост
?
3 vicof
 
16.03.12
09:52
"ДокЗап.Выбран()"  +100
4 Попытка1С
 
16.03.12
09:53
1) Где найтидокумент который ДокЗап
2) нафига цикл, если названия колонок совпадают можешь просто использовать загрузитьтабличнуючасть
5 curys
 
16.03.12
09:54
на форме есть поле выбора(ДокПост) это документ в который будут переносится табличные части
6 zak555
 
16.03.12
09:55
(5) док пер что из ит ?
7 Попытка1С
 
16.03.12
09:55
(5) НайтиДокумент
8 curys
 
16.03.12
09:57
ДокПер = Таб.ПолучитьЗначение(СчетчикЦикла,2); здесь я получаю документ из которого необходимо перенести таб часть
9 Рэйв
 
16.03.12
09:58
(8)Там пусто
10 curys
 
16.03.12
09:58
на 8ке давно бы уже все сделал, а тут въехать не могу....
11 curys
 
16.03.12
09:59
(9)нет, там получаю документ из таб части
12 vladko
 
16.03.12
09:59
ДокЗап = ДокПост;
ДокЗап.Выбран();

Поэтому
ДокЗап.НоваяСтрока();//пишет что документ не выбран!!!!!

первые 2 строки - бред программы.
Создай Объект для докЗап по виду документа и всё.
13 zak555
 
16.03.12
09:59
ДокЗап = СоздатьОбъект("Документ");
ДокЗап.НайтиДокумент(ДокПост);

   Таб = СоздатьОбъект ("ТаблицаЗначений");
   ВыгрузитьТабличнуюЧасть(Таб);

ДокЗап.ЗагрузитьТабличнуюЧасть(Таб);
ДокЗап.Записать();
14 zak555
 
16.03.12
10:00
(10) на 8ке ты тоже не сделал бы
15 Рэйв
 
16.03.12
10:01
(13)Зачем его искать то? когда он в докПост лежит уже как ТС утверждает
16 zak555
 
16.03.12
10:01
(15) чтоб записать
17 Рэйв
 
16.03.12
10:01
аа..ПоняллОбъект нада
18 zak555
 
16.03.12
10:03
хотя сейчас выяснится, что автору нужно будет дополнить ТЧ ДокПост тек доком =)
19 curys
 
16.03.12
10:04
(14) если я в 7ке плохо шарю, это не значит что и в 8ке тоже....
(15) так оно есть
20 zak555
 
16.03.12
10:06
(19) в 8ке никто циклами ТЧ не заполняет
запрос и точка
21 curys
 
16.03.12
10:09
(20) в том то и дело, что в 8ке проще
22 zak555
 
16.03.12
10:10
(21) где ты в (13) видишь перебор ?
23 Рэйв
 
16.03.12
10:33
(19)У тебя в поле ввода ссылка. Чтобы записать что-то в нее надо получить объект.

ДокЗап = СоздатьОбъект("Документ");
ДокЗап.НайтиДокумент(ДокПост);

Это эквивалент .ПолучитьОбъект()  в 8.х
24 curys
 
16.03.12
10:46
вот что получилось:
   ДокЗап = СоздатьОбъект("Документ");
   ДокЗап.НайтиДокумент(ДокПост);

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

   КонецЦикла;
но сейчас просто заменяет таб часть в док, а как сделать чтобы она дополнилась?
25 zak555
 
16.03.12
10:47
что в ТЧ ?
26 curys
 
16.03.12
10:50
заменяет существующие строки, а не добовляет новые
27 Ёпрст
 
гуру
16.03.12
11:09
Процедура Сформировать()
 Перем СлужТЗ;
  ТЗ=Создатьобъект("ТаблицаЗначений");
  ВыбратьСтроки();
  Пока ПолучитьСтроку() =1 Цикл
     КолСтрок = ТЗ.КоличествоСтрок();
     Если КолСтрок=0 Тогда
         ИдентификаторДокументаИзТабличнойЧасти.ВыгрузитьТабличнуюЧасть(ТЗ);
     Иначе
         ИдентификаторДокументаИзТабличнойЧасти.ВыгрузитьТабличнуюЧасть(СлужТЗ);
         ТЗ.КоличествоСтрок(КолСтрок+СлужТЗ.КоличествоСтрок());
         ТЗ.Заполнить(СлужТЗ,КолСтрок+1);
     КонецЕсли;
  КонецЦикла;
  ДокЗап = СоздатьОбъект("Документ");
  ДокЗап.НайтиДокумент(ДокПост);
  ДокЗап.ЗагрузитьТабличнуюЧасть(ТЗ);
  ДокЗап.Записать();

КонецПроцедуры
28 curys
 
16.03.12
11:27
(27) спасибо за пример, я уже сделал немного подругому:
Процедура Выполнить()
   ДокЗап = СоздатьОбъект("Документ");
   ДокЗап.НайтиДокумент(ДокПост);

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

        ДокПер.ВыбратьСтроки();
        Пока ДокПер.ПолучитьСтроку()=1 Цикл
             ДокЗап.НоваяСтрока();  
             
             ДокЗап.Товар = ДокПер.Товар;
             ДокЗап.Количество = ДокПер.Количество;
             ДокЗап.Цена = ДокПер.Цена;
             ДокЗап.Сумма = ДокПер.Сумма;
             ДокЗап.НДС = ДокПер.НДС;
             ДокЗап.Всего = ДокПер.Всего;
             
             ДокЗап.Записать();
           КонецЦикла;
   КонецЦикла;

Спасибо всем за пмощь!!!
29 Ёпрст
 
гуру
16.03.12
11:37
(28) не надо записывать документ в цикле, не надо искать документ в цикле из табличной части, не надо выгружать табличную часть в тз и делать обход ТЗ..

в общем, твой код смело в топку
30 Mikeware
 
16.03.12
11:38
(29) вместе с автором....