Вход | Регистрация


Конвертация УПП1.3 --> ЗУП 3.1 Оптимизация переноса

Конвертация УПП1.3 --> ЗУП 3.1 Оптимизация переноса
Я
   Optan
 
13.04.18 - 10:34
Перенос документа "Табель учета рабочего времени" оооочень долгий.

В УПП в ТЧ данных отработанного времени на одного сотрудника получается 248 реквизитов (31день*4 (ВидаВремени+Часы).
В ЗУП 1 строчка превращается в 4 (на каждый ВидВремени)

В ПВД выбираю запросом и при обходе выборки заполняю ТЗ и вызываю ВыгрузитьПоПравилу (для каждого документа). В ПКО правило без источника, а состав приемника соответствует ТЗ.

Сначала написал преобразование реквизитов (т.к. наименования отличаются) через"Выполнить", но один месяц у меня выгружался почти сутки (видимо, операции конкатенации со строками долговаты). Переписал через кучу присвоений для каждого реквизита - стало побыстрее но недостаточно.

Как можно еще ускорить выгрузку?
 
 
   Alexandr_U1982
 
1 - 13.04.18 - 10:43
Не использовать КД.
С помощью объекта ЗаписьXML сформировать свой XML-файл и выгрузить туда нужные данные.
С помощью объекта ЧтениеXML прочитать файл и создать документы.
   d4rkmesa
 
2 - 13.04.18 - 10:46
(0) Сколько же там этих табелей в итоге, тысячи человек? Какой объем выгружается?
   d4rkmesa
 
3 - 13.04.18 - 10:54
(0) Я бы сделал по-другому, ПКО документ-в-документ, с переопределенным обработчиком выгрузки ПКГС, где КоллекцияОбъектов бы заполнялась из запроса. Запрос бы постарался оптимизировать.
Имхо, проблема может быть в выборке:
"выбираю запросом и при обходе выборки заполняю ТЗ"
Лучше привести код обработчика.
   xxTANATORxx
 
4 - 13.04.18 - 10:59
(0)как-то нужно извернуться и выполнить замер производительности, понять в каком месте тормоза
   Optan
 
5 - 13.04.18 - 11:28
(2) 1 мес=357 документов=6834 строк ТЧ
Урезанный текст обработчика:
Запрос=Новый Запрос;

Запрос.УстановитьПараметр("ДатаНач",Дата(2014,4,1));
Запрос.УстановитьПараметр("ДатаКон",Дата(2014,5,1));

ТЧФизЛиц = Новый ТаблицаЗначений;
ТЧФизЛиц.Колонки.Добавить("ФизическоеЛицо");


ТЧВремени = Новый ТаблицаЗначений;
ТЧВремени.Колонки.Добавить("Сотрудник");
ТЧВремени.Колонки.Добавить("КоличествоСмен");

ТЧВремени.Колонки.Добавить("ВидВремени1");
ТЧВремени.Колонки.Добавить("ВидВремени2");
....
ТЧВремени.Колонки.Добавить("ВидВремени31");
...
ТЧВремени.Колонки.Добавить("Часов31");

Запрос.Текст="ВЫБРАТЬ
|    ТабельУчетаРабочегоВремениОрганизации.Ссылка,
|    ТабельУчетаРабочегоВремениОрганизации.Номер,
|    ТабельУчетаРабочегоВремениОрганизации.Дата,
|    ТабельУчетаРабочегоВремениОрганизации.Организация,
|    ТабельУчетаРабочегоВремениОрганизации.ПериодРегистрации,
|    ТабельУчетаРабочегоВремениОрганизации.ПодразделениеОрганизации,
|    ТабельУчетаРабочегоВремениОрганизации.Ответственный,
|    ТабельУчетаРабочегоВремениОрганизации.Комментарий,
|    ТабельУчетаРабочегоВремениОрганизации.КраткийСоставДокумента,
|    ТабельУчетаРабочегоВремениОрганизации.СпособУказанияПериода,
|    ТабельУчетаРабочегоВремениОрганизации.ДатаНачалаПериода,
|    ТабельУчетаРабочегоВремениОрганизации.ДатаОкончанияПериода
|ИЗ
|    Документ.ТабельУчетаРабочегоВремениОрганизации КАК ТабельУчетаРабочегоВремениОрганизации
|ГДЕ
|    ТабельУчетаРабочегоВремениОрганизации.Проведен
|    И ТабельУчетаРабочегоВремениОрганизации.Дата МЕЖДУ &ДатаНач И &ДатаКон
|";

ТЗ=Запрос.Выполнить().Выгрузить();
ТЗ.Колонки.Добавить("ФизическиеЛица");
ТЗ.Колонки.Добавить("ДанныеОВремени");

Для каждого докТабеля Из ТЗ Цикл
    Запрос.Текст="ВЫБРАТЬ
    ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Сотрудник,
    ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Сотрудник.ФизЛицо КАК ФизЛицо,
    ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ПервыйВидВремени1,

....248строк
Запрос.УстановитьПараметр("Ссылка",докТабеля.Ссылка);

ВыборкаВремени=Запрос.Выполнить().Выбрать();

    Пока ВыборкаВремени.Следующий() Цикл
        
        СтрокаТЧФизЛиц=ТЧФизЛиц.Добавить();
        СтрокаТЧФизЛиц.ФизическоеЛицо=ВыборкаВремени.ФизЛицо;


///Присвоения

        СтрокаТчВремени1=ТЧВремени.Добавить();
        
        СтрокаТчВремени1.Сотрудник=ВыборкаВремени.Сотрудник;
        СтрокаТчВремени1.КоличествоСмен=ВыборкаВремени.КоличествоСмен;        
        
        СтрокаТчВремени1.ВидВремени1=ВыборкаВремени.ПервыйВидВремени1;
        СтрокаТчВремени1.ВидВремени2=ВыборкаВремени.ПервыйВидВремени2;
.....
СтрокаТчВремени4.Часов31=ВыборкаВремени.ЧетвертыйЧасов31;

    КонецЦикла;
//документ закончился

докТабеля.ФизическиеЛица=ТЧФизЛиц.Скопировать();
докТабеля.ДанныеОВремени=ТЧВремени.Скопировать();

ВыгрузитьПоПравилу(докТабеля, , , , "ТабельУчетаРабочегоВремени");    
    
    
КонецЦикла;

   Alexandr_U1982
 
6 - 13.04.18 - 11:35
(5) Запрос в цикле??
Зачем вам переносить табели за 2014 год??
   Optan
 
7 - 13.04.18 - 11:38
(6) ТЗ от бизнеса такое.
Запрос без цикла в память не лезет - начинаются вылеты(
   Optan
 
8 - 13.04.18 - 11:39
(6) Приходится по шапкам отдельно ТЧ выгружать.
   d4rkmesa
 
9 - 13.04.18 - 12:11
Все-таки лучше использовать один запрос по ТЧ(второй можно сделать отдельно для реквизитов шапки) и обходить через выборку. Через консоль отдельно оцените, какие данные нужно выгружать, 3/4 реквизитов может быть не нужным вовсе.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует