Каталог решений - Ускоряем проведение многострочных документов в БП…

Ускоряем проведение многострочных документов в БП…

Ускоряем проведение многострочных документов в БП…

В наличии

Скорость проведения документов, содержащих тысячи строк, в типовой БП невелика, но есть простое решение этой проблемы.

Категория:

Описание

Скорость проведения документов, содержащих тысячи строк, в типовой БП невелика. Зависимость ее от количества строк очень нелинейна. Таким образом, разбивая таблицу товаров при проведении на подтаблицы, можно значительно ускорить проведение.

 

По х — сотни строк, по y- секунды.
Типовая 1С 8.2 БП, документ — реализация.
Нижний график — усовершенствованный механизм (решение ниже), вверху — типовой. 

Простейший пример усовершенствования: Вместо строки в модуле проведения:

 

УправлениеЗапасамиПартионныйУчет.ДвижениеПартийТоваров(Заголовок, ТаблицаПоТоварам, Истина, СтруктураШапкиДокумента.ОтражатьВНалоговомУчетеУСН, Отказ, , СодержаниеПроводки);


Вставляем блок:

 

              

 Если ТаблицаПоТоварам.Колонки.Найти("ПодразделениеОрганизации") = Неопределено Тогда

                               ТаблицаПоТоварам.Колонки.Добавить("ПодразделениеОрганизации");

                КонецЕсли;

               

                Если ТаблицаПоТоварам.Колонки.Найти("СписанныеПартии") = Неопределено Тогда

                               ТаблицаПоТоварам.Колонки.Добавить("СписанныеПартии");

                КонецЕсли;

               

                Если ТаблицаПоТоварам.Колонки.Найти("ДоговорПоставщика") = Неопределено Тогда

                               ТаблицаПоТоварам.Колонки.Добавить("ДоговорПоставщика");

                КонецЕсли;

               

                Для Индекс = 1 По 3 Цикл

                               Если ТаблицаПоТоварам.Колонки.Найти("КорСубконтоСписания" + Индекс) = Неопределено Тогда

                                               ТаблицаПоТоварам.Колонки.Добавить("КорСубконтоСписания" + Индекс);

                               КонецЕсли;

                КонецЦикла;

               

                Если ТаблицаПоТоварам.Колонки.Найти("СписыватьПоУказаннойСтоимости") = Неопределено Тогда

                               ТаблицаПоТоварам.Колонки.Добавить("СписыватьПоУказаннойСтоимости", Новый ОписаниеТипов("Булево"));

                КонецЕсли;

               

                Если ТаблицаПоТоварам.Колонки.Найти("Себестоимость") = Неопределено Тогда

                               ТаблицаПоТоварам.Колонки.Добавить("Себестоимость");

                КонецЕсли;

       

                колвоСтрок = ТаблицаПоТоварам.количество();

                если  колвоСтрок>400 тогда

                ТаблицаПоТоварам2 = ТаблицаПоТоварам.СкопироватьКолонки();

                              

                               для каждого с из ТаблицаПоТоварам цикл

                               сс=ТаблицаПоТоварам2.добавить();

                               ЗаполнитьЗначенияСвойств(сс,с);

                               индескСтроки = ТаблицаПоТоварам.индекс(с)+1;

                               дробь=индескСтроки/300;

                               если окр(дробь) = дробь или индескСтроки = колвоСтрок тогда

                               УправлениеЗапасамиПартионныйУчет.ДвижениеПартийТоваров(Заголовок, ТаблицаПоТоварам2, Истина, СтруктураШапкиДокумента.ОтражатьВНалоговомУчетеУСН, Отказ, , СодержаниеПроводки);

                               для каждого ст из ТаблицаПоТоварам2 цикл   //передаем измененную подтаблицу в таблицу..

                                               стт=ТаблицаПоТоварам.найти(ст.номерстроки,"НомерСтроки");

                                               ЗаполнитьЗначенияСвойств(стт,ст);

                               конеццикла;

                               ТаблицаПоТоварам2.очистить();

                               конецесли;

                               конеццикла;

 

                иначе   

                УправлениеЗапасамиПартионныйУчет.ДвижениеПартийТоваров(Заголовок, ТаблицаПоТоварам, Истина, СтруктураШапкиДокумента.ОтражатьВНалоговомУчетеУСН, Отказ, , СодержаниеПроводки);

                конецесли;


 

 

Резюме: разбиение только в движении партий позволяеет приблизить зависимость времени проведения от количества строк к линейной. Точнее эта зависимость имеет не столь выраженную нелинейность, и экономия времении проведения может быть в разы. Добавлю, что использовался серверный вариант БД, версия 1С — 8.2.13.219, но примерное такие же графики были получены и на сервреной версии 8.1. Использовался режим «первого проведения» — второе проведение тойже последовательности документов дает более гладкую кривую и меньшие времена проведений.

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