gifts2017

Массовая загрузка от узлов РИБ, не принявших конфигурацию

Опубликовал Осипов Сергей (fixin) в раздел Администрирование - Распределенная БД (УРИБ, УРБД)

Демонстрируются возможности ранее описанной обработки XML-Uniloader для чтения файлов обмена от узлов РИБ, не принявших изменения конфигурации.

Применение метода

Ранее я показывал, как с помощью обработки XML-Uniloader можно прочитать данные от узла, содержащие недопустимые символы XML (у меня, на ИС).

Теперь я расскажу об еще одном применении этой обработки.

Когда я занимался сопровождением базы РИБ с нескольким десятков периферийных узлов, если обновление конфигурации делалось поздно вечером, то не все узлы успевали принимать изменения до ночи. Ситуация осложнялась тем, что на ночь компьютеры периферийных баз выключались. Т.е. они передавали в центр выгрузки, которые РИБ не разрешала принимать, т.к. не были сделаны изменения конфигурации. Учитывая, что в большинстве случаев изменения конфигурации носят косметический характер и затрагивают только алгоритмы, а не структуры таблиц, тем более обычно изменения таблиц идут из центра на периферию, было решено в экстренных случаях делать массовую загрузку данных из точек через XML-Uniloader.

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

Также метод пригодится, если есть только файл выгрузки от убитой базы, а произошло уже изменение конфигурации в центре.

Алгоритм действий

  1. Копируем все полученные от периферийных узлов файлы обмена в отдельную папку. Это делается для того, что если будут выгружены новые файлы от узлов, чтобы они повторно не грузились, а то система может зациклиться:
  2. Запускаем код загрузки, он делает следующее:
    1. Перебирает все магазины, смотрит есть для магазина узел плана обмена и файл в каталоге обмена.
    2. Запускает обработку с флагом удаления файла после загрузки.
    3. Пытается загрузить данные, если возникает ошибка, пропускает загрузку.
    4. Пользователь может прервать загрузку.

 

Код загрузки для конфигурации Розница:

       О = ВнешниеОбработки.Создать("E:\1c\Проекты\Обмен данными\ЧтениеВыгрузкиXML.epf");

       З = Новый Запрос(

       "ВЫБРАТЬ РАЗЛИЧНЫЕ

       |      Магазины.Код

       |ИЗ

       |      Справочник.Магазины КАК Магазины");

       ТЗ = З.Выполнить().Выгрузить();

       Для Каждого Строка ИЗ ТЗ Цикл

             ТекКод = СокрЛП(Строка.Код);

             ТекУзел = ПланыОбмена.ПоМагазину.НайтиПоКоду(ТекКод);

             ИмяФайла = "\\server\1c_obmen\load\Message_" + ТекКод + "_Ц01.zip";

             Если НЕ ЗначениеЗаполнено(ТекУзел) Тогда

                    Сообщить("Не найден узел: " + ТекКод);

                    Продолжить;

             КонецЕсли;

             Сообщить("Найден узел: " + ТекКод);

            

             Файл = Новый Файл(ИмяФайла);

             Если НЕ Файл.Существует() Тогда

                    Сообщить("Не найден файл: " + ИмяФайла);

                    Продолжить;

             КонецЕсли;

            

             Сообщить("Найден файл: " + ИмяФайла);

            

             О.УдалятьИсходныйФайл = истина;

             О.ИмяФайла = ИмяФайла;

             О.ПолучениеОтУзла = ТекУзел;

             О.ВыводитьПротокол = ложь;

             Сообщить("Чтение: " + ТекКод);

             ОбработкаПрерыванияПользователя();

             Попытка

                    О.Работа();

             Исключение

                    ОписаниеОшибки = ОписаниеОшибки();

                    Сообщить("  Произошла ошибка: " + ОписаниеОшибки);

             КонецПопытки;

            

       КонецЦикла;

 

Пример протокола загрузки:

Найден узел: М00

Не найден файл: \\server\1c_obmen\load\Message_М00_Ц01.zip

Найден узел: М01

Найден файл: \\server\1c_obmen\load\Message_М01_Ц01.zip

Чтение: М01

Удален файл обмена: \\server\1c_obmen\load\Message_М01_Ц01.zip

Найден узел: М02

Не найден файл: \\server\1c_obmen\load\Message_М02_Ц01.zip

Не найден узел: М03

Не найден узел: М04

Не найден узел: М05

 

Прилагаю файл обработки с жестко прописанными каталогами, нужно поменять их на свои.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
down.zip
.zip 4,30Kb
15.08.13
5
.zip 4,30Kb 5 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Антонио (Fragster) 16.08.13 19:26
Проще всего сделать 2 плана обмена. Один для обмена конфигурацией, другой для обмена данными и все.
2. Осипов Сергей (fixin) 16.08.13 20:09
(1) не скажи. Оцени трудозатраты для 70 узлов и поймешь, что не все так просто.
К тому же надежнее, когда алгоритмы (конфа) соответствует ожидаемой. Так хоть мотивация есть - данные не поступают из узла. А так на обновление конфы могут и подзабить.
3. Максим Зудин (kasper076) 19.08.13 15:17
(2), разве нельзя один раз выгрузить конфу, отдельным планом обмена, и разослать ее всем узлам, предварительно поменяв идентификаторы внутри файла? А затем другим планом обмена выгружать данные.
4. Осипов Сергей (fixin) 19.08.13 15:25
(3) я уже отвечал, что это слишком серьезное (а значит дорогое) вмешательство в типовые обмены.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа