Фильтрация узлов при обмене РИБ в типовой конфигурации 8.1

15.10.12

Интеграция - Перенос данных 1C

При создании в предприятии системы обмена со множеством узлов может возникнуть проблема , которая может привести к искажению данных при обмене: «Проблема загрузки файла обмена с неправильного узла». Бывает, что пользователи (обычно администраторы или программисты) любят делать копии базы для различных целей. При этом даже специалисты часто забывают отключать автообмен. Тогда и возникает данная проблема: с копии базы может выгрузиться файл обмена в рабочий ресурс обмена (например, на ftp ресурс).

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Тексты функций в модуле обработки (то что в статье) скачивать необязательно, т.к. в статье все тексты есть
.epf 5,70Kb
5
5 Скачать (1 SM) Купить за 1 850 руб.

Фильтрация узлов при обмене

 

Проблема

 

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

Бывает, что пользователи (обычно администраторы или программисты) любят делать копии базы для различных целей. Часто эти копии потом открывают  в файловом режиме, но иногда могут делать копии и на сервере, например для различных тестов или разработок. При этом даже специалисты часто забывают отключать автообмен. Тогда и возникает данная проблема: с копии базы может выгрузиться файл обмена в рабочий ресурс обмена (например, на ftp ресурс). Тогда, если рабочая база не успеет переписать неправильный файл, то  в рабочую базу может загрузиться файл обмена не с рабочей базы, а с его копии, что может привести к ошибочному изменению данных.

Это касается обмена РИБ между центральной базой и с несколькими  (особенно, когда их много) подчиненными базами, но также это может касаться и универсального обмена между многими базами.  В данном при мере мы рассмотрим именно обмен в системе РИБ типовой конфигурации. 

 

Решение

 

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

Следующий  вариант реализации  был использован в типовой конфигурации Бухгалтерии Предприятия 2.0, но, скорее всего, годиться и для других типовых конфигураций, разработанных на обычных формах (например, для Управление торговли 10,3)

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

 

Srvr="Сервер1С";Ref="РабочаяБаза"; для серверного варианта или File="\\Сервер1С\С\ПапкаРабочейБазы"; для файлового варианта информационной базы.

 

Для удобства хранения правильного местонахождения, мы в план обмена «Полный» (как пример РИБ обмена) добавили реквизит «Параметры» типа «Строка» неограниченной длины, где и будем хранить строку соединения правильной базы, с которой можно загружать данные.

При выгрузке файла наша процедура будет добавлять в файл обмена в начало блога непосредственно до начала блога наш элемент

 info: 

[CODE]

Srvr="Сервер1С ";Ref="РабочаяБаза";

[/CODE]

 

Пример пустого файла сообщений из главного узла в подчиненный с нашей вставкой:

 

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

 

Реализация записи дополнительной информации:

 

В Общем модуле «ПроцедурыОбменаДанными», в процедуре «ЗаписатьСообщенияСИзмененеиямиДляУзла» после кода

Если ЭтоРИБ Тогда

ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();

ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена);

Вставляем ссылку на нашу процедуру:

 

ЗаписатьДопИнфо(ЗаписьСообщения,ЗаписьXML,УзелОбмена);

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

 

Процедура ЗаписатьДопИнфо(ЗаписьСообщения,ЗаписьXML,УзелОбмена) Экспорт
    если
ПроверятьСтрокуСоединенияУзла(ПолучитьСтрокуСоединенияУзла(УзелОбмена)) тогда
       
ЗаписьXML.ЗаписатьНачалоЭлемента("info");
       
ЗаписьXML.ЗаписатьАтрибут("dop_info", "Строка");
       
ВключитьСтоку=СтрокаСоединенияИнформационнойБазы();
       
ЗаписьXML.ЗаписатьТекст(ВключитьСтоку);
       
ЗаписьXML.ЗаписатьКонецЭлемента();
    КонецЕсли;
КонецПроцедуры

 

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

Функция ПолучитьСтрокуСоединенияУзла(УзелОбмена)
    если
ТипЗнч(УзелОбмена)=тип("ПланОбменаСсылка.Полный") тогда
        Возврат
УзелОбмена.Параметры;
    иначе
        возврат
"";
    КонецЕсли;
КонецФункции

 

Следующая функция определяет – нужно ли записывать дополнительную информацию или проверять файлы обмена перед загрузкой. Такая проверка позволяет отключать наш фильтр, что весьма полезно на этапе внедрения.  В нашем случае просто – если реквизит «Параметры» - пустой – то не фильтруем.

 

Функция ПроверятьСтрокуСоединенияУзла(стр_изУзла)
    если
стр_изУзла="" тогда
        возврат Ложь;
    иначе
        Возврат Истина;
    КонецЕсли;
КонецФункции

z88;

 

Реализация чтения дополнительной информации:

 

В Общем модуле «ПроцедурыОбменаДанными», в процедуре «ЗагрузитьCообщениеСИзменениямиОтРИБУзла» после кода

ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();

Комментируем следующую строку

//ЧтениеСообщения.НачатьЧтение(ЧтениеXML);

и вместо него вставляем ссылку на нашу процедуру:

 

ПроверитьВозможностьЗагрузки(СтруктураНастроекОбменаДанными.ДанныеНастройки.УзелИнформационнойБазы,ЧтениеСообщения,ЧтениеXML);

 

 

Следующая функция реализует схему фильтрации узлов, даже тогда когда возникает ошибка при чтении заголовка файла (например «Номер сообщения меньше или равен номеру ранее принятого сообщения»), чтобы вовремя выявить «неотключённый автообмен» в копиях информационной базы. Иначе даже если файл из неправильного узла не будет загружаться, то есть не будет искажения данных, но файл из неправильного узла может затирать файл из правильного узла и тем самым тормозить обмен между узлами:

Процедура ПроверитьВозможностьЗагрузки(УзелОбмена,ЧтениеСообщения,ЧтениеXML) Экспорт
    Попытка
       
ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
       
ОписаниеОшибки= ПроверитьПравильностьУзла(УзелОбмена,ЧтениеСообщения,ЧтениеXML);
    Исключение
       
ОписаниеОшибки=ОписаниеОшибки();
        если
ЧтениеXML<>Неопределено тогда
           
ОписаниеОшибки=ОписаниеОшибки+" (номер сообщения = " + ЧтениеXML.Значение+" номер ранее принятого = "+СтрЗаменить(УзелОбмена.НомерПринятого,символы.НПП,"")+") ";
           
ОписаниеОшибки1= ПроверитьПравильностьУзла(УзелОбмена,ЧтениеСообщения,ЧтениеXML);
            если
ОписаниеОшибки1<>"" тогда
               
ОписаниеОшибки=ОписаниеОшибки1 + Символы.ПС + ОписаниеОшибки;
            КонецЕсли;
        КонецЕсли;
    КонецПопытки;

    если
ОписаниеОшибки<>"" тогда
        ВызватьИсключение
ОписаниеОшибки;
    КонецЕсли;
КонецПроцедуры

 

Следующая функция читает блок наш из файла обмена и проверяет возможность его загрузки: 

 

Функция ПроверитьПравильностьУзла(УзелОбмена,ЧтениеСообщения,ЧтениеXML)
   
// ограничим чтение для непридвиденных случаев (неправильных файлов)
   
для счетчик=1 по 30  цикл
       
ЧтениеXML_Имя=ЧтениеXML.Имя;
       
ЧтениеXML.Прочитать();
       
СтрокаСоединения=ЧтениеXML.Значение;
        если
ЧтениеXML_Имя="info" тогда
           
Строки_изУзла=ПолучитьСтрокуСоединенияУзла(УзелОбмена);
            если Не
ПроверятьСтрокуСоединенияУзла(Строки_изУзла) тогда
               
ОписаниеОшибки="";
            иначе
               
ОписаниеОшибки=ПроверкаСтрокиСоединенияУзла(Строки_изУзла,СтрокаСоединения);
            КонецЕсли;

            если
ОписаниеОшибки="" тогда
               
// читаем конец элемента info
               
ЧтениеXML.Прочитать();

               
// позиционируемся на начало элемента v8de:Changes
               
ЧтениеXML.Прочитать();
                возврат
"";
            иначе
                Возврат
ОписаниеОшибки;
            КонецЕсли;
        КонецЕсли;

        если
ЧтениеXML.Имя="v8de:Changes" или ЧтениеXML.Имя="v8de:Data" тогда
       
// позиционируемся на начало элемента v8de:Changes
           
ЧтениеXML.Прочитать();
            возврат
"";
        КонецЕсли;
    КонецЦикла;;
    Возврат
"";
КонецФункции

 

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

Например, сервер может называться по имени, или же как «localhost» или же может быть задан IP адрес. Причем IP для локальной базы может быть задан как 127.0.0.1. Для файлового варианта тоже местонахождение базы может быть задана несколькими способами:

 

Srvr="Сервер1С";Ref="РабочаяБаза";

Srvr="localhost";Ref="РабочаяБаза";

Srvr="192.168.0.1 ";Ref="РабочаяБаза";

Srvr="127.0.0.1 ";Ref="РабочаяБаза";

File="\\Сервер1С\С\ПапкаРабочейБазы";

File="\\192.168.0.1\С\ПапкаРабочейБазы";

File="C:\Базы1С\ПапкаРабочейБазы"; где С:- локальный диск.

File="Z:\ПапкаРабочейБазы"; где Z:- подсоединенный диск.

Обмен может идти с одного компьютера (например автообмен из сервера), или же обмен может быть сделан вручную пользователями разных компьютеров. Если на разных компьютерах и у разных пользователей прописаны разные строки соединения, то в реквизите «Параметры» нужно включить несколько «правильных» строк соединения через разделитель «//»

Например: Srvr="Сервер1С";Ref="РабочаяБаза";//Srvr="localhost";Ref="РабочаяБаза";//Srvr="192.168.0.1 ";Ref="РабочаяБаза";

Но для большей гарантии того, что файл идет с правильного узла, конечно, лучше настроить на всех компьютерах и для всех пользователей единую, универсальную  строку соединения, например: Srvr="Сервер1С";Ref="РабочаяБаза"; или File="\\Сервер1С\С\ПапкаРабочейБазы"; Здесь выбран вариант имени сервера,  так как IP часто могут меняться, а имя сервера обычно редко меняется.

В клиент-серверном варианте, для того, чтобы при автообмене в файл записывалась правильная строка соединения, мы должны в списке баз на сервере поменять (если нужно) строку соединения на правильный, т.к. обычно системные администраторы любят при настройке базы писать не имя сервера, а  localhost или 127.0.0.1. Здесь есть тонкость:

необходимо проверить 2 файла на сервере приложений, в которых сохранены строки настроек баз 1С на сервере:

впапке C:\Program Files (x86)\1cv82\srvinfo\  или C:\Program Files\1cv82\srvinfo\ в файле srvribrg.lst  проверить, что стоит в строке настройки рабочей базы

Второй файл лежит в следующей папке: C:\ProgramFiles (x86)\1cv82\srvinfo\reg_1541  или C:\ProgramFiles\1cv82\srvinfo\reg_1541 (обычно, эта папка единственная в папке \1cv82\srvinfo\) в файле 1CV8Reg.lst  также проверить настройку строки соединения.

Если в файлах что-то неправильно, то перед тем как редактировать эти файлы необходимо сохранить копию этих файлов (на случай неудачного редактирования) остановить сервер 1С и после редактирования – заново запустить сервер 1С. При этом помните, что операция перезапуска сервера аварийно завершит все сеансы пользователей 1С во свех базах этого сервера приложений!

 z88;

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

 

z88;

Функция ПроверкаСтрокиСоединенияУзла(знач Строки_изУзла,знач СтрокаСоединения)
   
СтрокаСоединения=ВРег(СтрокаСоединения);
   
МассивСтрок=ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Строки_изУзла, "//");
    для Каждого
СтрокаИзУзла из МассивСтрок Цикл
        если
СтрокаСоединения=ВРег(СтрокаИзУзла) тогда
            возврат
"";
        КонецЕсли;
    КонецЦикла;
    Если
МассивСтрок.Количество()=1 тогда
       
ОписаниеОшибки = " Файл обмен из неправильного узла ("+СтрокаСоединения+"). Файл не будет загружен! Правильный узел = "+СтрокаИзУзла+". ";
    иначе
       
ОписаниеОшибки = " Файл обмен из неправильного узла ("+СтрокаСоединения+"). Файл не будет загружен! Правильные узлы = "+Строки_изУзла+". ";
    КонецЕсли;
    Возврат
ОписаниеОшибки;
КонецФункции

 

См. также

SALE! 20%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 22338 руб.

12.06.2017    141467    798    297    

419

SALE! 10%

Перенос данных 1C Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

55778 50200 руб.

04.08.2015    166431    332    277    

373

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.234.x) и БП 3.0 (3.0.161.x). Правила подходят для версии ПРОФ и КОРП.

35000 31500 руб.

15.12.2021    23987    169    51    

127

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.19.x).

35000 31500 руб.

23.07.2020    51189    228    69    

185

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

53111 47800 руб.

03.12.2020    36569    94    66    

89

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    171155    303    257    

378

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Платформа 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

15300 13005 руб.

18.02.2016    186856    589    509    

526

Перенос данных 1C Программист Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ ФОМС, ЕФС Платные (руб)

Обработки для быстрого перехода с конфигураций «КАМИН:Расчет заработной платы 3.0», «КАМИН:Зарплата для бизнеса 4.0» и «КАМИН:Зарплата 5.0» на конфигурацию «Зарплата и управление персоналом» версии 3.1.

12000 руб.

25.09.2016    80638    312    250    

264
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. WKBAPKA 215 16.10.12 09:41 Сейчас в теме
да бывало такое... но я бы, как человек ленивый, уже бы не делал сравнение при загрузке, а делал перед выгрузкой сравнение по списку... т.е. используя предложенный вариант хранения списка баз...
2. alfir70 195 16.10.12 10:06 Сейчас в теме
(1) WKBAPKA,
сравнение перед выгрузкой - менее надежный вариант, т к решение принимает выгружаемая база а не загружаемая
по опыту работы со мнигими филиалами в других городах, могу сказать что система должна иметь защиту от дураков
т.к. если есть возможность ошибиться, то чедовек находит это шанс и ошибается
например в той же филиальной базе кто то может просто подкорректировать список по каими то необъяснимым причинам и выгрузить все таки файл из копии базы

У меня был сдучай, когда я поаросил одному программисту зарегистрировать изменения с помощью стандартной обработки "регистрация изменений для обмена", так он потом додумался отменять регистрацию тем объектам которые удалены ("объект не найден...") с вполне благородным мотивом не порить центральную базу "битыми ссылками" :) и таким образоом удаления объетов не пришил в центральную базу и данные оказались искажены.

и мне еше в этой стандартной обработке пришлось удалить кнопку "зарегистрировать все" по тем же причинам

так что я считаю что за целостность своих данных должен отвечат хозяин своей базы и не загружать ненужное
это то же из опыта - обычно за то что выгружают - относяться менее отвественно, чем за то что загружают
некоторые могут даже на "всякий случай" загуржать файл сначала на тестовую базу и только потом на рабочую.
3. WKBAPKA 215 16.10.12 10:17 Сейчас в теме
список можно загрузить в макет, он при обмене гарантированно попадет во все переферийные базы и никто не сможет его подкорректировать... вот вам и защита от дураков ;)
4. alfir70 195 16.10.12 10:29 Сейчас в теме
(3) WKBAPKA,
можно и так

но когда проверяшь при загрузке можно более оперативно - на ходу корректировать зарузку

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

это может быть актуально елси запакованнй файл выгрзуки - более 50 мБайт

также филиал может перйти на другой сервер, с файлового на сервер или еще как то изменить свою строку соединения - тогда быстрый способ возобновить обмен - именно в случае фильтрации при загрузке.
5. aspirator23 339 17.10.12 07:44 Сейчас в теме
Да, информация актуальна. Тоже имеем обмены и тоже приходится за ними смотреть
Оставьте свое сообщение