Как перенести таблицу в другую таблицу?

Рейтинг: 0Ответов: 1Опубликовано: 15.03.2023

Пишу обработку, заполняю таблицу данными из эксель. после загрузки у меня имеется таблица значений. мне необходимо перенести эту таблицу в другой док, записать его програмно. метод с индексом и счётчиком использовать не хотелось бы, но помогите уже хоть как-нибудь это реализовать. таб1-искочительно строковый тип. таб2-всё ссылочные типы. Задача перенести таб1 в таб2

&НаСервере
Процедура ЗаписьНаСервере()
    ДокКор                              = Документы.КорректировкаРегистров.СоздатьДокумент();  
    ДокКор.Дата                         = ТекущаяДата();
    ЖПТаб                               = ДокКор.Движения.ЖурналПроводокЕПСБУ;
    Для Каждого ТекСтрока Из Объект.Таблица1 Цикл  
        Таб                             = объект.Таблица1;
        НовСтрТЧДокумента               = ЖПТаб.Добавить();
        СЧ                              = ПланыСчетов.ЕПСБУ.НайтиПоНаименованию(Таб.Счёт, Истина);
        НовСтрТЧДокумента.СчетКт        = СЧ;
        //НовСтрТЧДокумента.КФО         = объект.Таблица1.КФО; 
        СКПС                            = Справочники.КлассификационныеПризнакиСчетов.НайтиПоНаименованию(Таб.КПС, Истина);
        НовСтрТЧДокумента.КПСКт         = СКПС;
        НовСтрТЧДокумента.КоличествоКт  = Таб.Количество; 
        СНОМ                            = Справочники.Номенклатура.НайтиПоНаименованию(Таб.Номенклатура, Истина);
        НовСтрТЧДокумента.СубконтоКт1   = Таб.СНОМ;
        СКЭК                            = Справочники.КОСГУ.НайтиПоНаименованию(Таб.КЭК, Истина);
        НовСтрТЧДокумента.КЭККт         = СКЭК;
        СЦМО                            = Справочники.ЦМО.НайтиПоНаименованию(Таб.ЦМО, Истина);
        НовСтрТЧДокумента.ЦМОКт         = СЦМО;

    КонецЦикла;
    ДокКор.Записать();  
КонецПроцедуры

Вариант по совету:

Процедура ЗаписьНаСервере()
    ДокКор                              = Документы.КорректировкаРегистров.СоздатьДокумент(); 
    
    Для Каждого стр из Объект.Таблица1 цикл
        НовСтрока   =   ДокКор.Движения.ЖурналПроводокЕПСБУ.Добавить();
        Для Каждого Реквизита из Объект.Таблица1 цикл
            Таб = объект.Таблица1;
        НовСтрока.СчетКт        = ПланыСчетов.ЕПСБУ.НайтиПоНаименованию(Таб.Счёт, Истина);  
        НовСтрока.КПСКт         = Справочники.КлассификационныеПризнакиСчетов.НайтиПоНаименованию(Таб.КПС, Истина); 
        НовСтрока.КоличествоКт  = Таб.Количество;   
        НовСтрока.СубконтоКт1   = Справочники.Номенклатура.НайтиПоНаименованию(Таб.Номенклатура, Истина);   
        НовСтрока.КЭККт         = Справочники.КОСГУ.НайтиПоНаименованию(Таб.КЭК, Истина);   
        НовСтрока.ЦМОКт         = Справочники.ЦМО.НайтиПоНаименованию(Таб.ЦМО, Истина); 
        КонецЦикла;
    КонецЦикла;
    ДокКор.Записать();  
КонецПроцедуры

Ответы

▲ 0Принят

В целом для решения любой задачи необходимо сделать две вещи:

  1. Описать алгоритм решения (крупными блоками)
  2. Запрограммировать каждый блок алгоритма

Общий алгоритм может выглядеть так:

// Создать новый документ
// Для каждой строки ИсходнойТаблицыДанных
//    Добавить строку в РезультирующуюТаблицуЗначений документа
//    Для каждого Реквизита строки ИсходнойТаблицыДанных // <- этот блок можно сделать без использования цикла (как в примере)
//        Преобразовать Реквизит к ссылочному типу
//        Записать реквизит в РезультирующуюТаблицуЗначений

Попробуйте самостоятельно реализовать шаг 2 по описанному алгоритму (тем более что большая часть кода уже есть в примере); Просто сделайте код более аккуратным (у Вас полно повторных присвоений, строка в новом документе не создается, Движения вообще не понятно зачем ...)