Каталог решений - Выгрузка данных из БП 1.6 в БП 2.0

Выгрузка данных из БП 1.6 в БП 2.0

Выгрузка данных из БП 1.6 в БП 2.0

В наличии

При выгрузке данных  из БП 1.6 в БП 2.0 столкнулся с проблемой нехватки памяти при обработке раздела "Товары и торговая наценка (счета 41, 42)". В итоге пришлось изменить алгоритм ПВД "Остатки_Товары".
Данные выгружаются порциями по 1000 объектов, при выгрузке первой порции ТЧ очищается, а все последующие порции добавляются.

Категория:

Описание

В обработчиках «Перед обработкой» ПКГС «МПЗПриобретенные» и ПКГС «ДанныеПоСФ» ПКО «ВводНачальныхОстатковНаДату» добавить строки:

Если ВходящиеДанные.Свойство(«НеОчищать») Тогда

    НеОчищать = ВходящиеДанные.НеОчищать;
КонецЕсли;

В обработчике ПВД «Остатки_Товары» после строк:

ТаблицаДанных = РезультатЗапроса.СкопироватьКолонки();
ТаблицаДанныхНДС = РезультатЗапросаПоПартиямНДС.СкопироватьКолонки();
ТаблицаОрганизаций = РезультатЗапроса.Скопировать(,«Организация,СчетУчета»);
ТаблицаОрганизаций.Свернуть(«Организация,СчетУчета»,);

Заменить весь код на:

Для Каждого СтрокаТаблицыОрганизаций ИЗ ТаблицаОрганизаций Цикл

    ТекОрганизация      = СтрокаТаблицыОрганизаций.Организация;
   
ТекСчетУчета        = СтрокаТаблицыОрганизаций.СчетУчета;

    ПрименениеУСН = НалоговыйУчетУСН.ПрименениеУСН(ТекОрганизация, ДатаНачала);
   
Предприниматель = ДоходыИРасходыПредпринимателя.Предприниматель(ТекОрганизация, ДатаНачала);
    Если
Предприниматель Тогда
       
УчетнаяПолитикаНеЗадана = Истина;
       
УчетнаяПолитика = ОбщегоНазначения.ПолучитьПараметрыУчетнойПолитики(ДатаНачала, УчетнаяПолитикаНеЗадана, ТекОрганизация);
        Если
УчетнаяПолитикаНеЗадана Тогда
           
ОсновнойХарактерДеятельности = Неопределено;
           
ОсновнаяНоменклатурнаяГруппа = Неопределено;
        Иначе
           
ОсновнойХарактерДеятельности = УчетнаяПолитика.ОсновнойХарактерДеятельности;
           
ОсновнаяНоменклатурнаяГруппа = УчетнаяПолитика.ОсновнаяНоменклатурнаяГруппа;
        КонецЕсли;
    КонецЕсли;

    СтруктураОтбора = Новый Структура;
   
СтруктураОтбора.Вставить(«Организация», ТекОрганизация);
   
СтруктураОтбора.Вставить(«СчетУчета», ТекСчетУчета);

    МассивДанных = РезультатЗапроса.НайтиСтроки(СтруктураОтбора);

    //Подсчитываем количество порций

    Количество = МассивДанных.Количество();
   
РазмерПорции      = 1000;
   
КоличествоПорций = Цел(Количество / РазмерПорции);
   
КоличествоПорцийЦел   = КоличествоПорций * РазмерПорции;

    Для СчетчикПорций = 1 По КоличествоПорций Цикл

        //Очищаем таблицы данных для каждой порции

        ТаблицаДанных.Очистить();
       
ТаблицаДанныхНДС.Очистить();

        //Вычисляем начало и конец выгружаемого диапазона

        Начало  = РазмерПорции * (СчетчикПорций — 1) + 1;
       
Конец   = РазмерПорции * СчетчикПорций;
        Для
Н = Начало По Конец Цикл

            НоваяСтрока = ТаблицаДанных.Добавить();
           
ЗаполнитьЗначенияСвойств(НоваяСтрока,МассивДанных.Получить(Н—1));
           
НоваяСтрока.Ключ = Н;
           
НоваяСтрока.НомерСтрокиТЧ = Н;
            Если
Предприниматель Тогда
                Если
НоваяСтрока.ХарактерДеятельности = Неопределено Тогда
                   
НоваяСтрока.ХарактерДеятельности = ОсновнойХарактерДеятельности;
                КонецЕсли;
                Если
НоваяСтрока.НоменклатурнаяГруппа = Неопределено Тогда
                   
НоваяСтрока.НоменклатурнаяГруппа = ОсновнаяНоменклатурнаяГруппа;
                КонецЕсли;
            КонецЕсли;

            //Формируем таблицу по партиям НДС
           
Если РезультатЗапросаПоПартиямНДС.Количество() <> 0 Тогда

                СтруктураОтбора = Новый Структура;
               
СтруктураОтбора.Вставить(«Организация», ТекОрганизация);
               
СтруктураОтбора.Вставить(«СчетУчета», ТекСчетУчета);
               
СтруктураОтбора.Вставить(«Номенклатура», НоваяСтрока.Номенклатура);
                Если
Параметры.ВестиСуммовойУчетПоСкладамБУ Тогда
                   
СтруктураОтбора.Вставить(«Склад», НоваяСтрока.Склад);
                КонецЕсли;
               
СтруктураОтбора.Вставить(«Партия», НоваяСтрока.Партия);

                МассивДанныхНДС = РезультатЗапросаПоПартиямНДС.Скопировать(СтруктураОтбора);

                Если МассивДанныхНДС.Количество() <> 0 Тогда

                    Если МассивДанныхНДС.Итог(«Количество») = 0 Тогда
                       
Коэфф = 1;
                    Иначе
                       
Коэфф = НоваяСтрока.Количество/МассивДанныхНДС.Итог(«Количество»);
                    КонецЕсли;

                    Для НС=1 По МассивДанныхНДС.Количество() Цикл
                       
НоваяСтрокаНДС = ТаблицаДанныхНДС.Добавить();
                       
ЗаполнитьЗначенияСвойств(НоваяСтрокаНДС,МассивДанныхНДС.Получить(НС—1));
                       
НоваяСтрокаНДС.Ключ = НоваяСтрока.Ключ;
                       
НоваяСтрокаНДС.НомерСтрокиТЧ = НС;
                       
НоваяСтрокаНДС.Количество = НоваяСтрокаНДС.Количество*Коэфф;
                       
НоваяСтрокаНДС.Стоимость = НоваяСтрокаНДС.Стоимость*Коэфф;
                       
НоваяСтрокаНДС.НДС = НоваяСтрокаНДС.НДС*Коэфф;
                    КонецЦикла;

                КонецЕсли;

            КонецЕсли;
        КонецЦикла;

        Если ТаблицаДанных.Количество() <> 0 Тогда

            ВходящиеДанные = Новый Структура(«НеОчищать, Комментарий, Организация, ОтражатьВБухгалтерскомУчете, ОтражатьВНалоговомУчете, ОтражатьПоСпециальнымРегистрам, ПодразделениеОрганизации, РазделУчета, ОС, НМА, БухСправка, ДанныеПоСФ, ДанныеПоСФНДС, ДопРасходыИП, ДопРасходыУСН, МПЗОтгруженные, МПЗПриобретенные, МПЗРеализованныеИП, МПЗРеализованныеУСН, Обороты, ПрочиеРасходыИП, РасходыБудущихПериодов, РасчетыПоЗаработнойПлате, РасчетыПоНалогамИСборам, РасчетыСКонтрагентами, РасчетыСПодотчетнымиЛицами, УслугиУСН»);

            //Если выгружается первая порция, то очищаем ТЧ, иначе не очищаем

            Если СчетчикПорций = 1 Тогда
               
ВходящиеДанные.НеОчищать = Ложь;
            Иначе
               
ВходящиеДанные.НеОчищать = Истина;
            КонецЕсли;
           
ВходящиеДанные.Организация                    = ТекОрганизация;
           
ВходящиеДанные.ОтражатьВБухгалтерскомУчете    = Истина;
           
ВходящиеДанные.ОтражатьВНалоговомУчете        = Истина;
           
ВходящиеДанные.ОтражатьПоСпециальнымРегистрам = Истина;
           
ВходящиеДанные.ПодразделениеОрганизации       = Справочники.ПодразделенияОрганизаций.ПустаяСсылка();
           
ВходящиеДанные.РазделУчета                    = Перечисления.РазделыУчетаДляВводаОстатков[РазделУчета];
           
ВходящиеДанные.МПЗПриобретенные               = ТаблицаДанных;
           
ВходящиеДанные.ДанныеПоСФ                     = ТаблицаДанныхНДС;
           
ВходящиеДанные.Комментарий                    = «#Счет учета: «»» + Строка(ТекСчетУчета) + «»»# #Раздел учета «»» + Строка(Перечисления.РазделыУчетаДляВводаОстатков[РазделУчета]) + «»»# #Перенесено из 1С:Бухгалтерии 8, ред. 1.6#»;

            //Дополнение входящих данных пустыми таблицами
           
ВходящиеДанные.ОС                           = Новый ТаблицаЗначений;
           
ВходящиеДанные.НМА                          = Новый ТаблицаЗначений;
           
ВходящиеДанные.РасчетыПоНалогамИСборам      = Новый ТаблицаЗначений;
           
ВходящиеДанные.РасчетыСПодотчетнымиЛицами   = Новый ТаблицаЗначений;
           
ВходящиеДанные.БухСправка                   = Новый ТаблицаЗначений;
           
ВходящиеДанные.РасчетыСКонтрагентами        = Новый ТаблицаЗначений;
           
ВходящиеДанные.РасчетыПоЗаработнойПлате     = Новый ТаблицаЗначений;
           
ВходящиеДанные.МПЗОтгруженные               = Новый ТаблицаЗначений;
           
ВходящиеДанные.Обороты                      = Новый ТаблицаЗначений;
           
ВходящиеДанные.ДанныеПоСФНДС                = Новый ТаблицаЗначений;
           
ВходящиеДанные.РасходыБудущихПериодов       = Новый ТаблицаЗначений;
           
ВходящиеДанные.МПЗРеализованныеИП           = Новый ТаблицаЗначений;
           
ВходящиеДанные.ДопРасходыИП                 = Новый ТаблицаЗначений;
           
ВходящиеДанные.ПрочиеРасходыИП              = Новый ТаблицаЗначений;
           
ВходящиеДанные.МПЗРеализованныеУСН          = Новый ТаблицаЗначений;
           
ВходящиеДанные.ДопРасходыУСН                = Новый ТаблицаЗначений;
           
ВходящиеДанные.УслугиУСН                    = Новый ТаблицаЗначений;
           
//***

            ВыгрузитьПоПравилу(,, ВходящиеДанные,, «ВводНачальныхОстатковНаДату»);

        КонецЕсли;

    КонецЦикла;
    //Если осталась последняя неполная порция то выгружаем ее
   
Если КоличествоПорцийЦел < Количество Тогда

        //Очищаем таблицы данных

        ТаблицаДанных.Очистить();
       
ТаблицаДанныхНДС.Очистить();

        //Вычисляем начало и конец выгружаемого диапазона

        Начало  = КоличествоПорций * РазмерПорции + 1;
       
Конец   = Количество;

        Для Н = Начало По Конец Цикл

            НоваяСтрока = ТаблицаДанных.Добавить();
           
ЗаполнитьЗначенияСвойств(НоваяСтрока,МассивДанных.Получить(Н—1));
           
НоваяСтрока.Ключ = Н;
           
НоваяСтрока.НомерСтрокиТЧ = Н;
            Если
Предприниматель Тогда
                Если
НоваяСтрока.ХарактерДеятельности = Неопределено Тогда
                   
НоваяСтрока.ХарактерДеятельности = ОсновнойХарактерДеятельности;
                КонецЕсли;
                Если
НоваяСтрока.НоменклатурнаяГруппа = Неопределено Тогда
                   
НоваяСтрока.НоменклатурнаяГруппа = ОсновнаяНоменклатурнаяГруппа;
                КонецЕсли;
            КонецЕсли;

            //Формируем таблицу по партиям НДС
           
Если РезультатЗапросаПоПартиямНДС.Количество() <> 0 Тогда

                СтруктураОтбора = Новый Структура;
               
СтруктураОтбора.Вставить(«Организация», ТекОрганизация);
               
СтруктураОтбора.Вставить(«СчетУчета», ТекСчетУчета);
               
СтруктураОтбора.Вставить(«Номенклатура», НоваяСтрока.Номенклатура);
                Если
Параметры.ВестиСуммовойУчетПоСкладамБУ Тогда
                   
СтруктураОтбора.Вставить(«Склад», НоваяСтрока.Склад);
                КонецЕсли;
               
СтруктураОтбора.Вставить(«Партия», НоваяСтрока.Партия);

                МассивДанныхНДС = РезультатЗапросаПоПартиямНДС.Скопировать(СтруктураОтбора);

                Если МассивДанныхНДС.Количество() <> 0 Тогда

                    Если МассивДанныхНДС.Итог(«Количество») = 0 Тогда
                       
Коэфф = 1;
                    Иначе
                       
Коэфф = НоваяСтрока.Количество/МассивДанныхНДС.Итог(«Количество»);
                    КонецЕсли;

                    Для НС=1 По МассивДанныхНДС.Количество() Цикл
                       
НоваяСтрокаНДС = ТаблицаДанныхНДС.Добавить();
                       
ЗаполнитьЗначенияСвойств(НоваяСтрокаНДС,МассивДанныхНДС.Получить(НС—1));
                       
НоваяСтрокаНДС.Ключ = НоваяСтрока.Ключ;
                       
НоваяСтрокаНДС.НомерСтрокиТЧ = НС;
                       
НоваяСтрокаНДС.Количество = НоваяСтрокаНДС.Количество*Коэфф;
                       
НоваяСтрокаНДС.Стоимость = НоваяСтрокаНДС.Стоимость*Коэфф;
                       
НоваяСтрокаНДС.НДС = НоваяСтрокаНДС.НДС*Коэфф;
                    КонецЦикла;

                КонецЕсли;

            КонецЕсли;
        КонецЦикла;
        Если ТаблицаДанных.Количество() <> 0 Тогда

            ВходящиеДанные = Новый Структура(«НеОчищать, Комментарий, Организация, ОтражатьВБухгалтерскомУчете, ОтражатьВНалоговомУчете, ОтражатьПоСпециальнымРегистрам, ПодразделениеОрганизации, РазделУчета, ОС, НМА, БухСправка, ДанныеПоСФ, ДанныеПоСФНДС, ДопРасходыИП, ДопРасходыУСН, МПЗОтгруженные, МПЗПриобретенные, МПЗРеализованныеИП, МПЗРеализованныеУСН, Обороты, ПрочиеРасходыИП, РасходыБудущихПериодов, РасчетыПоЗаработнойПлате, РасчетыПоНалогамИСборам, РасчетыСКонтрагентами, РасчетыСПодотчетнымиЛицами, УслугиУСН»);

            //Если выгружается первая порция, то очищаем ТЧ, иначе не очищаем

            Если СчетчикПорций = 1 Тогда
               
ВходящиеДанные.НеОчищать = Ложь;
            Иначе
               
ВходящиеДанные.НеОчищать = Истина;
            КонецЕсли;
           
ВходящиеДанные.НеОчищать                      = Истина;
           
ВходящиеДанные.Организация                    = ТекОрганизация;
           
ВходящиеДанные.ОтражатьВБухгалтерскомУчете    = Истина;
           
ВходящиеДанные.ОтражатьВНалоговомУчете        = Истина;
           
ВходящиеДанные.ОтражатьПоСпециальнымРегистрам = Истина;
           
ВходящиеДанные.ПодразделениеОрганизации       = Справочники.ПодразделенияОрганизаций.ПустаяСсылка();
           
ВходящиеДанные.РазделУчета                    = Перечисления.РазделыУчетаДляВводаОстатков[РазделУчета];
           
ВходящиеДанные.МПЗПриобретенные               = ТаблицаДанных;
           
ВходящиеДанные.ДанныеПоСФ                     = ТаблицаДанныхНДС;
           
ВходящиеДанные.Комментарий                    = «#Счет учета: «»» + Строка(ТекСчетУчета) + «»»# #Раздел учета «»» + Строка(Перечисления.РазделыУчетаДляВводаОстатков[РазделУчета]) + «»»# #Перенесено из 1С:Бухгалтерии 8, ред. 1.6#»;

            //Дополнение входящих данных пустыми таблицами
           
ВходящиеДанные.ОС                           = Новый ТаблицаЗначений;
           
ВходящиеДанные.НМА                          = Новый ТаблицаЗначений;
           
ВходящиеДанные.РасчетыПоНалогамИСборам      = Новый ТаблицаЗначений;
           
ВходящиеДанные.РасчетыСПодотчетнымиЛицами   = Новый ТаблицаЗначений;
           
ВходящиеДанные.БухСправка                   = Новый ТаблицаЗначений;
           
ВходящиеДанные.РасчетыСКонтрагентами        = Новый ТаблицаЗначений;
           
ВходящиеДанные.РасчетыПоЗаработнойПлате     = Новый ТаблицаЗначений;
           
ВходящиеДанные.МПЗОтгруженные               = Новый ТаблицаЗначений;
           
ВходящиеДанные.Обороты                      = Новый ТаблицаЗначений;
           
ВходящиеДанные.ДанныеПоСФНДС                = Новый ТаблицаЗначений;
           
ВходящиеДанные.РасходыБудущихПериодов       = Новый ТаблицаЗначений;
           
ВходящиеДанные.МПЗРеализованныеИП           = Новый ТаблицаЗначений;
           
ВходящиеДанные.ДопРасходыИП                 = Новый ТаблицаЗначений;
           
ВходящиеДанные.ПрочиеРасходыИП              = Новый ТаблицаЗначений;
           
ВходящиеДанные.МПЗРеализованныеУСН          = Новый ТаблицаЗначений;
           
ВходящиеДанные.ДопРасходыУСН                = Новый ТаблицаЗначений;
           
ВходящиеДанные.УслугиУСН                    = Новый ТаблицаЗначений;
           
//***

            ВыгрузитьПоПравилу(,, ВходящиеДанные,, «ВводНачальныхОстатковНаДату»);

        КонецЕсли;
    КонецЕсли;

КонецЦикла;

has been added to your cart:
Оформление заказа