7.7 Подскажите, как лучше организовать цикл в коде

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем phcode, 8 июн 2010.

  1. TopicStarter Overlay
    phcode
    Offline

    phcode Опытный в 1С

    Регистрация:
    13 апр 2009
    Сообщения:
    68
    Симпатии:
    0
    Баллы:
    26
    Добрый вечер. Написал код, для выгрузки (копирование) табличной части из одного документа в другой. Но работает не совсем правильно.
    Код:
    Процедура Списание()
    
    ВыбратьСтроки();
    Пока ПолучитьСтроку()=1 Цикл
    Док=СоздатьОбъект("Документ.РасходнаяНакладная");
    Если Товар.Выбран()=1 Тогда
    Док.Новый();
    Док.ДатаДок=ДатаДок;
    Док.СкладП=Склад;
    
    ТЗ=СоздатьОбъект("ТаблицаЗначений"); 
    Док.ВыгрузитьТабличнуюЧасть(ТЗ);
    
    ТЗ.НоваяСтрока();
    ТЗ.Товар=Товар; 
    ТЗ.Количество=Количество; 
    ТЗ.Количество=Вес;
    ТЗ.Количество=Цена;  
    
    Док.ЗагрузитьТабличнуюЧасть(ТЗ);
    КонецЕсли;	
    КонецЦикла;
    Док.Записать();
    Сообщить("Документ "+Док.НомерДок+" "+Док.ДатаДок+" записан");
    КонецПроцедуры
    
    Подскажите, как организовать цикл, чтобы можно было все строки табличной части документа перенести в новый документ, а не тока последнею. (как у меня получилось в коде)

    ps Конфа Бухгалтерский учет
  2. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Если необходимые реквизиты табличных частей документов совпадают и нужно перенести полностью ТЧ из одного документа в другой, то как-то так:

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

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Или вы чего другого хотели?
    Потому что логика:
    Код:
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
    Док = СоздатьОбъект("Документ.РасходнаяНакладная");
    Если Товар.Выбран() = 1 Тогда
    Док.Новый();
    // ...
    КонецЕсли;    
    КонецЦикла;
    Док.Записать();
    
    
    для меня не совсем понятна.
    Да и этот участок:
    Код:
    Док.ВыгрузитьТабличнуюЧасть(ТЗ);
    ТЗ.НоваяСтрока();
    ТЗ.Товар = Товар; 
    ТЗ.Количество = Количество; 
    ТЗ.Количество = Вес;
    ТЗ.Количество = Цена;  
    Док.ЗагрузитьТабличнуюЧасть(ТЗ);
    
    
    вызывает вопросы.
  4. TopicStarter Overlay
    phcode
    Offline

    phcode Опытный в 1С

    Регистрация:
    13 апр 2009
    Сообщения:
    68
    Симпатии:
    0
    Баллы:
    26

    Табличные части у документов не полностью одинаковы.

    В последнем участке, немного напутал, на самом деле вот так конечно:
    Код:
    Док.ВыгрузитьТабличнуюЧасть(ТЗ);
    ТЗ.НоваяСтрока();
    ТЗ.Товар = Товар; 
    ТЗ.Количество = Количество; 
    ТЗ.Вес = Вес;
    ТЗ.Цена = Цена;  
    Док.ЗагрузитьТабличнуюЧасть(ТЗ);
    
  5. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Т.е. вам нужны только ревизиты "Товар", "Количество", "Вес", "Цена"?
    Тогда можно так:
    Код:
    Процедура Списание()
    ТЗ = СоздатьОбъект("ТаблицаЗначений"); 
    ВыгрузитьТабличнуюЧасть(ТЗ);  
    ТЗ.Свернуть("Товар,Количество,Вес,Цена", "");
    // можно и сгруппировать
    // ТЗ.Свернуть("Товар", "Количество,Вес,Цена");
    
    Док = СоздатьОбъект("Документ.РасходнаяНакладная");
    Док.Новый();
    Док.ДатаДок = ДатаДок;
    Док.УстановитьНовыйНомер("");
    Док.СкладП = Склад;  
    Док.ЗагрузитьТабличнуюЧасть(ТЗ);
    Док.Записать();
    Сообщить("Документ " + Док.НомерДок + " " + Док.ДатаДок + " записан");
    КонецПроцедуры
    
    
    Ну или если хотите можно и так:
    Код:
    Процедура Списание()
    Док = СоздатьОбъект("Документ.РасходнаяНакладная");
    Док.Новый();
    Док.ДатаДок = ДатаДок;
    Док.УстановитьНовыйНомер("");
    Док.СкладП = Склад;  
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
    Если Товар.Выбран() = 1 Тогда
    Док.НоваяСтрока();
    Док.Товар = Товар; 
    Док.Количество = Количество; 
    Док.Вес = Вес;
    Док.Цена = Цена;       
    КонецЕсли;
    КонецЦикла;
    Док.Записать();
    Сообщить("Документ " + Док.НомерДок + " " + Док.ДатаДок + " записан");
    КонецПроцедуры
    
    
  6. TopicStarter Overlay
    phcode
    Offline

    phcode Опытный в 1С

    Регистрация:
    13 апр 2009
    Сообщения:
    68
    Симпатии:
    0
    Баллы:
    26
    Requin, Благодарю за помощь! Теперь все, отлично выгружается.

Поделиться этой страницей