Имя: Пароль:
1C
1С v8
Тормозит обмен УТ <->БП
0 Альбатрос
 
23.07.14
12:41
Мужики, такая проблем. Две базы, УТ10.3 и БП2.0, обмен через файловый ресурс. С УТ выгрузка данных проходит норм, 2 - 3 мин. С БП же... При выгрузке ~4000 элементов база виснет на 2-2,5 часа. Замер производительности показал узкое место = Выполнить(Конвертация.ПередВыгрузкойДанных);.

Теперь код обработчика:

Если НЕ Параметры.ПервыйОбмен Тогда
    
    Параметры.Вставить("ДатаНачалаВыгрузкиДокументов",УзелДляОбмена.ДатаНачалаВыгрузкиДокументов);
        
    Параметры.Вставить("ИспользоватьФильтрПоОрганизациям",?(УзелДляОбмена.Организации.Количество()>0,Истина,Ложь));
    
    Если Параметры.ИспользоватьФильтрПоОрганизациям Тогда
        
        Параметры.Вставить("МассивОрганизаций",УзелДляОбмена.Организации.Выгрузить().ВыгрузитьКолонку("Организация"));
        
    КонецЕсли;
    
    МассивТиповДокументов = Новый Массив;
    
    Для каждого МетаДокумент Из Метаданные.Документы цикл
        
        МассивТиповДокументов.Добавить(Тип("ДокументСсылка." + МетаДокумент.Имя));
        МассивТиповДокументов.Добавить(Тип("ДокументОбъект." + МетаДокумент.Имя));
        
    КонецЦикла;
    
    ОписаниеТиповДокументы = Новый ОписаниеТипов(МассивТиповДокументов);
    Параметры.Вставить("ОписаниеТиповДокументы",ОписаниеТиповДокументы);
    
    МассивТиповДокументов.Очистить();
    МассивТиповДокументов.Добавить(Тип("ДокументСсылка.СчетФактураВыданный"));
    МассивТиповДокументов.Добавить(Тип("ДокументСсылка.СчетФактураПолученный"));
    МассивТиповДокументов.Добавить(Тип("ДокументОбъект.СчетФактураПолученный"));
    МассивТиповДокументов.Добавить(Тип("ДокументОбъект.СчетФактураВыданный"));
    
    ОписаниеТиповДокументы = Новый ОписаниеТипов(МассивТиповДокументов);
    
    Параметры.Вставить("ОписаниеТиповДокументыСФ",ОписаниеТиповДокументы);
    
КонецЕсли;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Ниже следующий запрос получает документы "Поступление товаров и услуг", "Возврат товаров поставщику"                                                            //
// и помещает в параметр ДокументыПоступленияТоваровВыгрузкаСсылки                                                                                                 //
// В конвертации этот параметр анализируется в алгоритме ВыгрузкаДокументовРасчетовПоСсылке, ПКО "ВозвартТоваровПоставщикуНТТ" и ПКО "ПоступлениеТоваровУслугНТТ". //
// Документы отбирваются по следующей логике.                                                                                                                      //
// Склад в документе должен быть не оптовый                                                                                                                        //
// В учетной политике организации "способ ведения товаров в рознице" должен быть равен ПоПродажнойСтоимости                                                        //
// Вид договора контрагента должен быть с поставщиком                                                                                                              //
// Самый главный отбор, это документ должен быть не "родным", а созданным в базе приемнике (УТ)                                                                    //
// Список этих документов необходим когда происходит выгрузка документов по ссылке и чтобы назад была выгружена только ссылка                                      //
// Необходимо для поддержания логических цепочек бизнес процесса, например такого как "Документы расчетов".                                                        //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Запрос = Новый Запрос();
Запрос.Текст = "
|ВЫБРАТЬ
|    ВозвратТоваровПоставщику.Ссылка КАК ДокументПоступленияВозврата,
|    ВозвратТоваровПоставщику.Организация КАК Организация,
|    ВозвратТоваровПоставщику.Дата КАК Дата
|ПОМЕСТИТЬ ДокументыПоступленияВозврата
|ИЗ
|    Справочник.Склады КАК Склады
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
|    Документ.ВозвратТоваровПоставщику КАК ВозвратТоваровПоставщику
|ПО
|    ВозвратТоваровПоставщику.Склад = Склады.Ссылка
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
|    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|ПО
|    ВозвратТоваровПоставщику.ДоговорКонтрагента = ДоговорыКонтрагентов.Ссылка
|
|ГДЕ
|    ДоговорыКонтрагентов.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПоставщиком)
|    И ВозвратТоваровПоставщику.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийВозвратТоваровПоставщику.ПокупкаКомиссия)    
|    И (Склады.ВидСклада = ЗНАЧЕНИЕ(Перечисление.ВидыСкладов.НеавтоматизированнаяТорговаяТочка)
|        ИЛИ Склады.ВидСклада = ЗНАЧЕНИЕ(Перечисление.ВидыСкладов.Розничный))
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    ПоступлениеТоваровУслуг.Ссылка КАК ДокументПоступленияВозврата,
|    ПоступлениеТоваровУслуг.Организация КАК Организация,
|    ПоступлениеТоваровУслуг.Дата КАК Дата
|ИЗ
|    Справочник.Склады КАК Склады
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
|    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
|ПО
|    ПоступлениеТоваровУслуг.Склад = Склады.Ссылка
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
|    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|ПО
|    ПоступлениеТоваровУслуг.ДоговорКонтрагента = ДоговорыКонтрагентов.Ссылка
|
|ГДЕ
|    ДоговорыКонтрагентов.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПоставщиком)
|    И ПоступлениеТоваровУслуг.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоступлениеТоваровУслуг.ПокупкаКомиссия)    
|    И (Склады.ВидСклада = ЗНАЧЕНИЕ(Перечисление.ВидыСкладов.НеавтоматизированнаяТорговаяТочка)
|        ИЛИ Склады.ВидСклада = ЗНАЧЕНИЕ(Перечисление.ВидыСкладов.Розничный))
|ИНДЕКСИРОВАТЬ ПО
|    ДокументПоступленияВозврата
|;
|
|
|ВЫБРАТЬ
|    ДокументыПоступленияВозврата.ДокументПоступленияВозврата КАК ДокументПоступленияВозврата,
|    ДокументыПоступленияВозврата.Организация КАК Организация,
|    ДокументыПоступленияВозврата.Дата КАК Дата
|ПОМЕСТИТЬ ФильтрПоОбъектыИнформационныхБаз
|ИЗ
|    ДокументыПоступленияВозврата КАК ДокументыПоступленияВозврата
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
|    РегистрСведений.ОбъектыИнформационныхБаз КАК ОбъектыИнформационныхБаз
|ПО
|    ДокументыПоступленияВозврата.ДокументПоступленияВозврата = ВЫРАЗИТЬ(ОбъектыИнформационныхБаз.Объект КАК Документ.ПоступлениеТоваровУслуг)
|    ИЛИ ДокументыПоступленияВозврата.ДокументПоступленияВозврата = ВЫРАЗИТЬ(ОбъектыИнформационныхБаз.Объект КАК Документ.ВозвратТоваровПоставщику)
|ГДЕ
|    ОбъектыИнформационныхБаз.УзелОбмена = &УзелОбмена
|ИНДЕКСИРОВАТЬ ПО
|    ДокументыПоступленияВозврата.Дата, ДокументыПоступленияВозврата.Организация
|;
|
|ВЫБРАТЬ
|    УчетнаяПолитикаОрганизацийМаксимальныйПериод.ДокументПоступленияВозврата КАК ДокументПоступленияВозврата
|ИЗ
|    РегистрСведений.УчетнаяПолитикаОрганизаций КАК УчетнаяПолитикаОрганизаций
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
|(ВЫБРАТЬ
|    МАКСИМУМ(УчетнаяПолитикаОрганизаций.Период) КАК Период,
|    УчетнаяПолитикаОрганизаций.Организация,
|    ФильтрПоОбъектыИнформационныхБаз.ДокументПоступленияВозврата КАК ДокументПоступленияВозврата
|ИЗ
|    РегистрСведений.УчетнаяПолитикаОрганизаций КАК УчетнаяПолитикаОрганизаций
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
|    ФильтрПоОбъектыИнформационныхБаз КАК ФильтрПоОбъектыИнформационныхБаз
|ПО
|    УчетнаяПолитикаОрганизаций.Период <= ФильтрПоОбъектыИнформационныхБаз.Дата
|    И УчетнаяПолитикаОрганизаций.Организация = ФильтрПоОбъектыИнформационныхБаз.Организация
|СГРУППИРОВАТЬ ПО
|    УчетнаяПолитикаОрганизаций.Организация,
|    ФильтрПоОбъектыИнформационныхБаз.ДокументПоступленияВозврата
|) КАК УчетнаяПолитикаОрганизацийМаксимальныйПериод
|ПО
|    УчетнаяПолитикаОрганизацийМаксимальныйПериод.Организация = УчетнаяПолитикаОрганизаций.Организация
|    И УчетнаяПолитикаОрганизацийМаксимальныйПериод.Период = УчетнаяПолитикаОрганизаций.Период
|ГДЕ
|    УчетнаяПолитикаОрганизаций.СпособОценкиТоваровВРознице = ЗНАЧЕНИЕ(Перечисление.СпособыОценкиТоваровВРознице.ПоПродажнойСтоимости)
|";
Запрос.УстановитьПараметр("УзелОбмена", УзелДляОбмена.Ссылка);
ТаблицаДокументыПоступленияВозвратаТоваровВыгрузкаСсылки = Запрос.Выполнить().Выгрузить();
ТаблицаДокументыПоступленияВозвратаТоваровВыгрузкаСсылки.Индексы.Добавить("ДокументПоступленияВозврата");
Параметры.ДокументыПоступленияВозвратаТоваровВыгрузкаСсылки = ТаблицаДокументыПоступленияВозвратаТоваровВыгрузкаСсылки;

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



Собссна, посоветуйте, что можно изменить без потерь в данных?
1 Альбатрос
 
23.07.14
12:53
Что мне грозит, если я обнулю программный текст обработчика?
2 Альбатрос
 
23.07.14
12:54
Смысл его мне не ясен