Каталог решений - Ускорение обмена УТ — БП

Ускорение обмена УТ — БП

Ускорение обмена УТ — БП

В наличии

Добрый день.
В конторе, в которой я сейчас работаю, возникла необходимость раз в месяц выгружать продажи из Ут в Бухгалтерию.  Дело обычное, но проблема заключалась в том, что объем данных оказался приличным (около 500 реализаций в день) и выгрузка/загрузка обычным способом была очень долгой, так что мы решили прибегнуть к некоторым ухищрения, о которых я хочу рассказать в этой публикации, может кому-то они помогут.

Категория:

Описание

По сути, мы имеем 3 этапа, которые я опишу, а так же какой выигрыш по времени мы получили:

Выгрузка данных из УТ (было ~ 45 часов, стало 8 -10)

Загрузка в бухгалтерию (на удивление быстро проходит, но стала идти параллельно с выгрузкой из УТ)

Проведение загруженных документов в бухгалтерии (было 40 часов, стало 10)

 

Сразу хочу уточнить, что для взаимодействия между базами мы автоматом создавали в папке на сервере файлики (маяки). Это выглядит довольно грубо, но на деле оказалось довольно удобно. Можно посмотреть  на каком этапе процесс выгрузки/загрузки, не заходя в базы. Плюс у нас ночью перезагружаются серваки, и если выгрузка/загрузка не успела пройти за вечер по этим маякам видно, на чем дело остановилось.

Так же мы создали 2 константы: начало периода выгрузки и окончание периода выгрузки. Если нам нужно выгрузить март, то устанавливаем 01.03.2014 и 31.03.2014 в соответствующих константах. Выгрузка месяца каждый раз согласовывается с бухгалтерией и день для нее назначается вручную.

 

Выгрузка

Выгрузка данных из УТ осуществляется с помощью обработки «Универсальный обмен данными в формате XML», которая запускается регламентными заданиями по расписанию. Выгрузка идет в 8 потоков, т.е. параллельно запущены 8 регламентных заданий. Стартуют они с интервалом 1 минута.  Выгрузка идет по 1 дню.

 

 

Принцип работы регламентного задания выгрузки.

При запуске задания создается файлик в папке «Начата выгрузка в УТ» имя которого, это дата для выгрузки. Это нужно для того, что бы следующее регламентное задание знало, какой день надо выгружать.

Т.е. например нам надо выгрузить март. Ищем в папке «Начата выгрузка в УТ» файлы и, анализируя каких не хватает, определяем день для выгрузки. Что удобно, если был пропущен день, то он начнет выгружаться.

Функция ПолучитьДеньВыгрузки()	
	НайденныеФайлы = НайтиФайлы(Путь,"*.txt");		
	НачалоПериодаВыгрузки = Дата(Формат(Константы.НачалоПериодаВыгрузки.Получить()));
	КонецПериодаВыгрузки  = Дата(Формат(Константы.КонецПериодаВыгрузки.Получить()));
	
	Если НачалоПериодаВыгрузки = '00010101' или КонецПериодаВыгрузки = '00010101' Тогда
		Сообщить("Константа НачалоПериодаВыгрузки или КонецПериодаВыгрузки не заданы");
		Возврат Неопределено
	КонецЕсли;	
	ДеньВыгрузки = НачалоПериодаВыгрузки;
	Пока ДеньВыгрузки  0 Тогда 
	ДеньВыгрузки = ДеньВыгрузки + 24*60*60;
		Продолжить
	Иначе	
	Возврат ДеньВыгрузки
	КонецЕсли;	
		КонецЦикла;	
	Возврат неопределено
КонецФункции
 

Перед началом выгрузки в папке «Начата выгрузка в УТ» создается файл, имя которого это дата выгружаемого дня. Теперь остальным регламентным заданиям видно, что этот день выгружается или уже выгружен и его не надо трогать.

В папке «Файлы выгрузки» создаются сами файлы с данными. У них тоже имена – это даты. Видно, какой день выгружен. Что интересно, обработка «Универсальный обмен данными в формате XML» увеличивает файлы выгрузки каждые 2-3 секунды, т.е. видно как идет выгрузка. Это тоже бывает полезно.

После окончания выгрузки в папке «Закончена выгрузка из УТ» создается txt файл с именем – датой. Таким образом, появляется возможность определить, какие файлы можно загружать в бухгалтерию.

Так устроена выгрузка в несколько потоков. Работает нормально, задания особо друг другу не мешают. Пробовали выгружать в 4, 8 и 12 потоков. По опыту 30 файлов (месяц) лучше всего выгружать в 8 потоков.

Загрузка

Загрузка в бухгалтерию так же осуществляется регламентным заданием,  но только в 1 поток, т.к. по логике считывание данных может происходить одновременно несколькими заданиями, а вот запись нормально без блокировок идет только в 1 поток.

Принцип тут следующий:

В 6 вечера стартует регламентное задание в бухгалтерии с интервалом 10 секунд. В папке «Закончена выгрузка из УТ» ищем файлы и определяем, какой день можно загружать и сразу удаляем это файл. Определив день, ищем соответствующий файл с данными по наименованию и загружаем его. По окончанию создаем файл с именем датой в папке «Загружены в Бух». И теперь видно, какие дни полностью загружены в бухгалтерию.

Выгрузка из УТ и загрузка в бухгалтерию  начинается одновременно, поэтому, как только день заканчивает выгружаться, он сразу начинает загружаться в бухгалтерию.

Проведение документов в бухгалтерии

Так как документов много, то решили на время проведения засунуть базу в оперативную память (ram dick).  Использовали программу RAMDisk, описывать ее установку я не буду, т.к. занимался этим не я и в интернетах можно найти инструкции.

Документы должны проводиться в строгой последовательности по датам без учета их типа, для этого был нарисован нехитрый запрос.

В результате после загрузки непроведенных документов за месяц, бухгалтерия архивировалась в .dt и разворачивалась в файловой версии в оперативке. После проведения, она снова  отправлялась в .dt и разворачивалась на своем законом месте и Вуаля! Мы получаем счастливого бухгалтера. Во всяком случае, я в это верю. 

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