В данной статье речь пойдет о настройке распределенной базы данных 1С предприятие 7.7, в качестве примера будет использована конфигурация Управление Торговлей 9.2.

Что бы настроить РИБ в 1С 7.7 нужно зайти в конфигуратор и перейти в Администрирование-Распределенная ИБ-Управление.

Затем необходимо конвертировать вашу базу в РИБ, если она ещё не конвертирована в РИБ, для этого нужно нажать кнопку "Центральная ИБ".

Установите Код и Описание как на скриншоте сверху и нажмите "OK". Должно появиться предупреждение как на скриншоте снизу, не обращайте на него внимания и нажмите "Да".
После этого ваша база будет готова для создания периферийных узлов.

Нажмите на кнопку "Новая периф. ИБ" и установите значения полей как на следующем скриншоте, впрочем, вы можете использовать свои обозначения.

Нажимаем OK и переходим к следующему шагу - настройке автообмена.

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

Выставляем все как на слайде, пути к каталогам у вас могут быть свои, галочки должны стоять как на скриншоте сверху. Нажимаем OK.

Теперь выгружаем начальный образ периферийной базы на диск, для этого нажимаем кнопку "Выгрузить данные". После выгрузки начального образа окно управления РИБ будет выглядеть следующим образом:

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

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

Нажимаем кнопку "Добавить" и указываем пусть к пустой папке и нажимаем OK.

Выбираем новую ИБ и переходим в режим конфигуратора.

В пустой папке мы создаем пустую ИБ, поэтому 1С просит указать нас в каком формате будет наша база, выбираем *.dbf. Нажимаем OK.

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

Укажем путь к файлу и нажмем OK.
По окончании загрузки нажмем OK и перейдем в администрирование-распределенная иб-автообмен.



На данном шаге необходимо учитывать правило: Директория выгрузки ЦБ = Директории загрузки ПБ и наоборот, т.е. если в центральной базе мы выгружали в папку out а загружали из папки in, то в периферийной базе мы будем загружать из папки out, а выгружать в папку in. Нажимаем OK и переходим к следующему шагу. Выполняем автообмен. Для этого в центральной базе зайдите в администрирование-распределенная иб-автообмен.


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

Теперь автоматизируем процесс. Для этого необходимо создать по 4 файла на каждом компьютере. По 2 *.prm файла и по 2 *.bat файла на каждую из операций загрузки-выгрузки.

*.bat файл должен содержать в себе следующую строку:

"<путь к файлу 1cv77.exe>" config /D"<путь к информационной базе>" /N<логин> /P<пароль>/@"<путь к prm-файлу>"

У меня файлы загрузки и выгрузки выглядит так:

"C:\Program Files\1Cv77\BIN\1cv7s.exe" config /D"C:\base\rib\" /Nadmin /P1 /@"c:\download.prm"

"C:\Program Files\1Cv77\BIN\1cv7s.exe" config /D"C:\base\rib\" /Nadmin /P1 /@"c:\upload.prm"

Вы прописываете свои значения. Теперь разберемся с prm-файлами!

Структура файла.prm:

Секция “General” – предназначена для описания основных параметров работы пакетного режима. Возможные параметры:

Output – путь к лог-файлу;
- Quit – нужно ли завершить работу конфигуратора после выполнения всех заданий;
- AutoExchange – нужно ли выполнять автообмен;
- SaveData – нужно ли выполнять сохранение базы;
- UnloadData – нужно ли выполнять выгрузку;
- CheckAndRepair – нужно ли выполнить тестирование и исправление базы.

Возможными значениями данных параметров могут быть 1(Y) или 0(N).

Секция “AutoExchange” – предназначена для определения параметров автообмена. Параметры:

SharedMode – указывает режим работы с базы данных. Если параметр не задан, то будет использоваться монопольный режим;
- ReadFrom - указывает от каких баз следует получать данные. Идентификаторы баз необходимо указывать через запятую. Если же необходимы все, то ставится * ;
- WriteTo - указывает для каких баз следует выгружать данные. Если же необходимо для всех, то ставится * .

Секция “SaveData” – предназначена для определения параметров сохранения базы. Возможные параметры:

SaveToFile – указывает путь, куда будет производиться сохранение;
- FileList – указывает список сохраняемых файлов. Перечисляются имена файлов через пробел или запятую;

Секция “ UnloadData” – предназначена для определения параметров выгрузки данных. Параметры:

UnloadToFile – указывает путь сохранения, включая имя файла;
- IncludeUserDef – указывает нужно ли в файл переноса включать список пользователей;
- Password – указывает пароль,который будет установлен на файл переноса.

Секция “ CheckAndRepair” – предназначена для определения параметров восстановления базы данных. Возможные параметры:

Repair – указывает, необходимо ли проводить восстановление базы данных;
- PhysicalIntegrity – указывает, нужно ли проводить проверку физической целостности таблиц информационной базы;
- Reindex – указывает необходимость проведения реиндексации базы;
- LogicalIntegrity – указывает, необходимо ли проводить проверку логической целостности таблиц;
- RecalcTotals – указывает, необходимо ли производить пересчет итогов бухгалтерского и оперативного учета;
- Pack – указывает, необходимо ли освобождать место, занятое удаленными записями;
- SkipUnresolved – указывает, пропускать неразрешенные ссылки или их исправлять;
- CreateForUnresolved – указывает, способ разрешения неразрешенных ссылок. Если 1, то для неразрешенной ссылки будет создан объект соответствующего типа. Если же 0, то ссылка будет очищена.

Исходя из этого мои файлы будут содержать следующее:

для загрузки из ЦБ в периферийную:


Output = log.txt
Output = 1


ReadFrom = ЦБ

для выгрузки из ЦБ в периферийную:


Output = log.txt
Output = 1


WriteTo = ЦБ

для загрузки из периферийной в ЦБ:


Output = log.txt
Output = 1


ReadFrom = ПБ1

для выгрузки из периферийной в ЦБ:


Output = log.txt
Output = 1


WriteTo = ПБ1

Теперь достаточно поместить bat- и prm- файлы в одну папку и запускать по очереди для выполнения загрузки и выгрузки.

Если остались вопросы - wellcome в комментарии!

Компоненту УРБД (Управление распределенными базами данных) применяют, когда необходимо обмениваться информацией между двумя или более идентичными информационными базами (далее – ИБ) по узкому каналу связи (например, модем, электронная почта). Ниже приведена пошаговая инструкция и практические советы по настройке УРБД в 1С:Предприятие 7.7. Пример приведен для двух ИБ, хотя настроить его на большее количество баз по аналогии с двумя базами не составляет большого труда. Автор статьи: romix | Редакторы: evGenius
Последняя редакция №7 от 22.02.08 | История
URL:

Ключевые слова: УРБД, скрипт для автообмена, обмен между филиалами, почта, rom-mail.dll, DialMail.dll, CDO, дозвон, УРИБ

Компоненту УРБД (Управление распределенными базами данных) применяют, когда необходимо обмениваться информацией между двумя идентичными информационными базами (далее – ИБ) по узкому каналу связи (например, модем, электронная почта). Ниже приведена пошаговая инструкция и практические советы по настройке УРБД в 1С:Предприятие 7.7. Пример приведен для двух ИБ, хотя настроить его на большее количество баз по аналогии с двумя базами не представляет большого труда.

1) За работу компоненты УРБД отвечает библиотека DistrDB.dll в папке BIN программы 1С:Предприятие. Эта компонента приобретается и устанавливается отдельно.

2) Для примера автообмена мы создадим две информационные базы, разместив их в папках с именами c:\1c_base1 и c:\1c_base2. Создайте эти папки, а в каждой из них – вложенные папки с именами CP и PC (латинскими буквами)

3) В папке c:\1c_base1 разместите уже готовую конфигурацию (скажем, «Торговля и Склад»). Но тренироваться лучше на самой простой информационной базе (содержащей, к примеру, всего один справочник с несколькими записями). Нам важно убедиться, что данные действительно мигрируют из одной ИБ в другую в результате автообмена УРБД, а это можно показать как на сложном, так и на самом простом тестовом примере.

4) Закройте все окна в Конфигураторе и активизируйте пункт меню «Администрирование – Распределенная ИБ – Управление». Этот пункт меню доступен, если в папке BIN программы 1С:Предприятие имеется компонента DistrDB.dll. Если библиотека имеет неправильную версию или повреждена, просто переустановите 1С:Предприятие поверх текущей установки – библиотека DistrDB.dll будет замещена ее правильной версией.

5) В открывшемся окне нажмите кнопку «Центральная ИБ». В окне запроса укажите код новой информационной базы (укажите цифру 1) и ее описание (например, «Центральная ИБ»).

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

7) Нажмите кнопку «Новая периф. ИБ». В окне запроса укажите для нее код 2 и описание – «Периферийная ИБ».

8) Выделите однократным щелчком периферийную базу и нажмите кнопку «Настр. автообмена». В открывшемся окне установкой переключателя поменяйте «Ручной» режим автообмена на «Автоматический» и нажмите кнопку «ОК».

9) Нажмите кнопку «Выгрузить данные». Запомните (в буфер обмена) имя файла с выгрузкой «c:\1c_base1\CP\20.zip» - он нам еще пригодится. Нажмите ОК. По окончании выгрузки 1С напишет «Выгрузка успешно завершена».

10) Закройте Конфигуратор и войдите (также в режиме Конфигуратора) в папку (пока еще пустую), где должна лежать вторая ИБ (в нашем примере – c:\1c_base2). Укажите, что база должна быть в формате DBF/CDX и нажмите «ОК».

11) Зайдите в пункт меню Администрирование – Распределенная ИБ – Управление. В ответ на вопрос «Информационная база не обнаружена. Выполнить загрузку данных?» нажмите «Да» и укажите имя файла выгрузки (в нашем примере, «c:\1c_base1\CP\20.zip») и нажмите кнопку «ОК». По окончании загрузки 1С напишет «Загрузка успешно завершена». Мы успешно создали Периферийную ИБ, выгрузив данные из Центральной ИБ.

12) Измените что-нибудь (например, добавьте новый элемент справочника) в одной из информационных баз. Наша цель – добиться, чтобы изменения в одной (любой) ИБ попали в другую ИБ через автообмен. Используйте пункт меню «Администрирование» – «Распределенная ИБ» – «Автообмен» попеременно в каждой из баз. Вновь появляющиеся файлы выгрузок с расширением ZIP в папках CP и PC надо перемещать (копировать) между информационными базами по принципу CP->CP, PC->PC (в реальных «полевых» условиях обычно это делают при помощи электронной почты).

Советы и рецепты

1) Чтобы превратить распределенную базу в обычную, удалите файлы 1SDBSET.DBF, 1SDWNLDS.DBF, 1SUPDTS.DBF и соответствующие им файлы *.CDX, а также 1SSYSTEM.DBF. В принципе, достаточно удалить 1SSYSTEM.DBF. После этого необходимо восстановить точку актуальности, запустив программу в монопольном режиме. Этот трюк недокументирован (угадайте, почему), но, тем не менее, он работает.

2) Вы можете изменять конфигурацию 1С, но только в Центральной ИБ. Это очень удобно – изменения в периферийных ИБ «накатываются» автоматически.

3) Если у вас пропала (например, в результате ошибки почты) одна или несколько выгрузок – не огорчайтесь, т.к. УРБД умеет отслеживать такие ситуации, и повторять отправку потерянных данных при следующем сеансе автообмена.

4) Штатная возможность отправки почты в 1С реализована через интерфейс MAPI, когда взаимодействие происходит с почтовым клиентом (таким, как Outlook). Мой совет – не тратьте зря времени - с MAPI и разного рода Оутлюками на практике постоянно возникают заморочки, требующие «быстрой езды» разработчика между филиалами. Использовать прямое модемное соединение или FTP я не советую по этой же причине. Посылать почту лучше внешними компонентами, такими как rom-mail.dll или DialMail.dll.

Другой вариант - использовать CDO
http://avb1c.narod.ru/?=a9
(c) avb, Рупор абсурда

5) Программу, которая умеет автоматически выполнять автообмен и пересылать файлы выгрузки по электронной почте, вы можете взять здесь:

Если вы правильно настроите несколько констант (почтовые адреса, пароли, явки и т.д.), пользователю остается лишь дважды кликнуть на ярлык, чтобы запустить Автообмен.

Программа реализована как конфигурация 1С:Предприятие. Подробное описание содержится в приложенном файле DOC.

6) Если нужно автоматически выполнять дозвон до провайдера, используйте программу E-Type Dialer. Она умеет запускать внешние приложения при успешном соединении. Другой вариант – использовать внешнюю компоненту DialMail, которая имеет средства работы с модемом (совет – префикс «p» латинское перед номером дает импульсный набор, 9W перед номером – звонок через «девятку» и ожидание гудка в линии т.д.).

Замечание: в Windows XP есть встроенная звонилка rasdial.exe. Ключи командной строки:
rasdial.exe Элемент Пользователь Пароль
rasdial.exe Элемент /DISCONNECT

7) Приоритет отдается изменениям, выполненным в Центральной ИБ. Обратите внимание, что в типовых конфигурациях 1С применяются префиксы информационной базы (см. эту настройку в Константах), чтобы коды элементов справочников и номера документов, созданных в разных базах, не совпадали, и не нарушалась их уникальность.

Инструкция по созданию и настройке распределенных баз с помощью компоненты УРБД (УРИБ)

Компонента УРБД (Управление распределенными базами данных) применяется для обмена информацией между двумя идентичными базами 1С. Если конфигурации разные, то применять ее также можно, об этом написано в другой . Для работы компоненты необходимо наличие файла DistrDB.dll в папке BIN программы 1С: Предприятие.

Рассмотрим действия по созданию распределенных баз данных. Например, у нас есть рабочая база в каталоге D:\base1. Требуется сделать ее центральной и создать периферийную базу.

1. Создаем каталог D:\base2 для периферийной базы.

2. В каталогах D:\base1 и D:\base2 создаем папки CP и PC (используем латинские буквы).

3. Запускаем конфигуратор центральной базы (D:\base1) и выбираем Меню - Администрирование - Распределенная ИБ - Управление.

4. Нажимаем кнопку "Центральная ИБ", в появившемся окне вводим код и наименование базы. Для кода лучше использовать цифры или латинские буквы. Вводим, например, 001 и "Центральная база", подтверждаем нажатием кнопки "ОК".

5. Нажимаем кнопку "Новая периф. ИБ" для того чтобы создать периферийную базу. Вводим для нее параметры: 002 и "Периферийная база 1".

6. Курсором выделяем базу "Периферийная база 1" и нажимаем кнопку «Настр. автообмена». В настройках меняем ручной режим на автоматический. Будьте внимательны, это важно.

7. Курсором выделяем базу "Периферийная база 1" и нажимаем кнопку «Выгрузить данные», затем кнопку "ОК". В результате выгрузки появится файл D:\base1\CP\020.zip.

8. Запускаем 1С в режиме конфигуратора, добавляем в окне запуска 1С новую базу "Периферийная база 1", указываем для нее ранее созданный каталог D:\base2.

9. Выбираем Меню - Администрирование – Распределенная ИБ – Управление. На заданный вопрос «Информационная база не обнаружена. Выполнить загрузку данных?» нажимаем кнопку "Да" и указываем имя файла "D:\base1\CP\020.zip", нажимаем кнопку "ОК". После окончания загрузки процесс создания периферийной базы можно считать законченным.

В и еще в приведены способы создания периферийной базы путем восстановления из бэкапа копии центральной базы либо приаттачивания файлов копии центральной базы для формата SQL и выполнения скрипта. Это будет полезно при больших объемах данных, когда выгрузки-загрузки растягиваются на часы или вообще нереальны.

Инструкция по обмену между распределенными базами с помощью компоненты УРБД (УРИБ)

Рассмотрим упрощенный пример, выполнять обмен будем вручную, запуская конфигуратор. Можно использовать пакетный режим конфигуратора, для доставки пакетов обмена можно использовать почту, ftp, автоматическое копирование файлов.

Для выполнения обмена необходимо выбирать Меню - Администрирование - Распределенная ИБ - Автообмен. Если обмен автоматический (см. пункт 6 предыдущей инструкции), то все у нас получится.

1. Итак, изменяем либо создаем какие-то объекты, которые мигрируют в периферийную базу. Правила миграции объектов задаются на вкладке "Миграция" в свойствах объекта (см. дерево объектов в конфигураторе).

2. Запускаем конфигуратор центральной базы, выбираем Меню - Администрирование - Распределенная ИБ - Автообмен, нажимаем кнопку "Выполнить".

3. Полученный файл D:\base1\CP\020.zip перемещаем в папку D:\base2\CP\

4. Изменяем какие-то объекты периферийной базе данных. Желательно не те, которые менялись до этого в центральной базе, т.к. центральная база имеет приоритет изменений объектов при обмене.

5. Запускаем конфигуратор периферийной базы, выбираем Меню - Администрирование - Распределенная ИБ - Автообмен, нажимаем кнопку "Выполнить".

6. В результате автообмена у нас должны появиться изменения, поступившие из центральной базы данных. Также у нас должен появиться файл для передачи в центральную базу D:\base2\PC\021.zip

7. Копируем файл D:\base2\PC\021.zip в папку D:\base1\PC

8. Повторяем пункт 2. В результате в центральной базе появятся изменения, поступившие из периферийной базы.

Итак, общий принцип обмена: попеременное выполнение автообмена с одновременным перемещением файлов (пакетов обмена) из папки PC одной базы в папку PC другой базы и из папки CP одной базы в папку CP другой базы.

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

Это моя первая в жизни статья, конструктивная критика приветствуется.

Целевая аудитория - те, кто первый раз сталкивается с РБД.

Задачи РБД

Первое с чего необходимо начать - это ответить на вопрос «Зачем нам нужна РБД?». Вариантов ответов много, в частности:

  1. У нас есть филиалы, работающие в несвязных БД. Теперь мы хотим, чтобы информация между ними синхронизировалась;
  2. У нас есть филиалы, однако нагрузка на базу слишком велика (имеются ввиду блокировкитранзакций, не объем БД) и онлайн актуальность (не путать с актуальностью в несколько минут, онлайн - это когда после выполнения каждой транзакции данные передаются во второй узел) данных для филиалов не требуется;
  3. У нас есть филиалы, в которых происходит только ввод данных (например, розничные магазины), поэтому можно существенно снизить нагрузку на центральную БД;
  4. Из соображений безопасности мы хотим, чтобы в филиалах даже теоретически(с админ. паролем) не было доступа к важным данным, например балансу предприятия.

В одном случае для меня были актуальны вопросы 2 и 4, в другом 2 и 3. Первый пункт слишком обширный и в рамках тематики данной статьи рассматриваться не будет.

Также лучше сразу рассмотреть проблематику транспорта файлов обмена, потому что в некоторых случаях она может наложить существенные ограничения на реализацию обмена данных. Сначала необходимо определить в каких филиалах точно появятся узлы РБД (обычно это региональные филиалы). Далее рассматриваем, где ещё мы хотим установить узлы РБД, и нужна ли в них онлайн актуальность. Например, для розничных магазинов далеко не всегда есть возможность установки даже модема, а установка беспроводной связи будет слишком дорогая. Здесь необходимо принять решение - возможно, данный магазин может работать в оффлайне и периодически обмениваться с центром (раз в день/раз в неделю) с помощью физического носителя, например флешки.

В некоторых случаях обмен посредствам физического носителя невозможен, например это очень удаленный филиал, где есть существенные проблемы с наладкой высокоскоростной связи. Здесь стоит примерно подсчитать объем информации при обмене. Часто при актуальности раз в час либо несколько раз в день достаточно 32к модема. Однако стоить помнить, что вместе с обновлениями данных придется иногда присылать обновления самой конфигурации или внешних файлов (печатный формы, фотографии товаров), поэтому периодически будет возникать ситуация, когда файл обмена существенно увеличиться из-за таких обновлений.

Топология

Итого мы получили следующие вопросы, на которые необходимо ответить:

  1. В каких подразделениях мы гарантированно будем устанавливать узлы РБД и есть ли там возможность установить высокоскоростной канал;
  2. В каких подразделениях установка узла РБД не требуется;
  3. Какие подразделения могут работать с актуальностью в несколько часов;
  4. Какие подразделения могут работать в оффлайн режиме (обмен данными меньше 3-4х раз в день).

Ответив на эти вопросы, мы получаем приблизительную схему нашей РБД. Для крупных компаний обычно получается нечто следующее:

Рис 1. Типовая схема РБД крупной компании

Если с узлами «Филиал» все относительно ясно - это крупные центры, требующие автоматизации, то под узлами «Магазин» подразумевается узел с серьезной нагрузкой на БД при вводе данных, который для снижения нагрузки следует отделить. Например, магазин с 50-тью кассами и ежедневным товарооборотом больше 10000 единиц.

  • Магазины - ввод данных о собственном товарообороте и движении денежных средств. Аналитика поверхностная, только по своему магазину.
  • Филиалы - ввод данных неавтоматизированных точек, бухгалтерия, зарплата и кадры, производство и т.п. Аналитика в рамках собственного филиала.
  • Центр - ввод данных неавтоматизированных филиалов. Аналитика предприятия в целом.

Важно понимать в каких целях будет использоваться БД в каждом узле. От целей выстраиваются задачи, необходимые к реализации, например:

  • Филиалы видят историю взаиморасчетов с контрагентами друг друга;
  • Магазины видят остатки товаров во всем (либо части) предприятия;
  • Аналитика доходов/расходов, выполнения бюджета и т.п.видны только в рамках иерархии собственного подразделения;
  • Бухгалтерия, зарплата и кадры видны только в рамках иерархии собственного подразделения;
  • Номенклатура, все её свойства и характеристики видны во всех узлах РБД;
  • Относительно иерархии подразделений все данные попадают вверх, но фильтруются вниз;
  • В центр попадает абсолютно вся информация о компании.

Ставя перед собой подобные вопросы можно ответить на самый сложный вопрос - какая информация, где и как должна курсировать между узлами РБД? Почему самый сложный? Зная, какие наборы данных курсируют между узлами, можно однозначно понять, как «нарезать» текущую БД, чтобы данные оставались логически целостными. Например, нельзя данные об остатках товаров отрывать от данных о текущих резервах.

Теперь, в зависимости от потоков информации, перерисуем схему РБД:

Что мы видим на рисунке 2? Согласно иерархии подразделений компании выстроилась топология потока информации между узлами БД. Также добавился узел «Центр 2», почему? При реализации топологии «Звезда» нагрузка на центр всегда выше, чем нагрузка на периферийные узлы, при этом часто нагрузка, генерируемая самим узлом, и так высока. Примеры использования узлов «Центр 1» и «Центр 2»:

  1. «Центр 1» служит только для консолидации данных остальных узлов РБД. Доступ к нему имеет только администратор. «Центр 2» служит для работы головного офиса;
  2. «Центр 1» служит для работы головного офиса. Однако тяжелые аналитические, тестовые, создающие огромную нагрузку на БД, операции выполняются в узле «Центр 2»; например восстановление последовательности, перепроведение закрытых периодов, формирование сводных отчетов по всему предприятию за длительный промежуток времени, формирование аналитики, приводящей к изменению данных;
  3. «Центр 1» служит для работы головного офиса. «Центр 2» является резервным, на случай непредвиденных ситуаций для быстрого восстановления всей РБД.

Реализация обмена

Существуют 2 варианта работы РБД:

  1. Автоматический - происходит без участия пользователя. Контроль за внештатными ситуациями,возложен либо на администратора БД, либо на продвинутого пользователя;
  2. Ручной - обмен происходит только по желанию пользователя.

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

Формирование пакетов обновлений

Так как есть однозначное решение о том, на какие узлы РБД возложены какие функции, то можно сформировать только тот пакет данных, который нужен этому узлу. С одной стороны, необходимо указать какие типы объектов будут синхронизироваться между узлами. Например, регистры бухгалтерии для узла «Магазин 1» не должны вообще синхронизироваться, т.к. данные вводятся только на уровне узла филиала. С другой стороны те типы данных, которые подлежат обмену необходимо фильтровать с привязкой к подразделению. Например, данные о поступлении денег узла «Магазин 1 филиала 2» могут находиться только в узлах «Филиал 2», «Центр 1» и «Центр 2».

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

Также следует решить, на каком этапе своей жизни объект подлежит обмену. Например, обмену подлежат только проведенные расходные накладные, но никак не просто сохраненные. Либо Расходные накладные магазинов никогда не выгружаются из узла «Центр», даже после их корректировки, однако нужно учитывать обратный эффект - данные могут быть рассинхронизированы, либо какие-то изменения могут быть затерты.

Важно понимать - при обмене между узлами, какой-то из них является приоритетным. Рассмотрим ситуацию:

  1. В узле «Магазин 1» создали документ;
  2. При обмене он попал в узел «Филиал 1»;
  3. Документ корректируется одновременно в обоих узлах.

Какой из документов будет считаться истинным? В 1С 8.х при использовании механизма «Планы обмена» по умолчанию приоритетным является главный узел, т.е. в данном случае изменения, сделанные в узле «Магазин 1» будут утеряны и заменены на данные из узла «Филиал 1».

Есть другая, более сложная ситуация, когда корректируют одновременно два связных объекта. Например, расходная накладная и ПКО по ней корректируются в разных узлах, здесь существует вероятность потери целостности, если изменят цены, сумму оплаты, контрагентов и тп.

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

Механизмы обмена в 1С 8.х

Существуют два подхода для реализации:

  1. Механизм «Планы обмена»;
  2. Собственная реализация регистрации объектов.

Рассмотрим оба варианта.

Механизм планов обмена позволяет, без какой либо настройки, за несколько минут, создать РБД с полным обменом данными. Если установить флаг «Распределенная информационная база», то при создании пакета обновления будут выгружены и обновления конфигурации. Всего за несколько минут можно настроить и правила разрешения/запрета обмена различными типами данных, открыв состав плана обмена. Если установить флаг «Авторегистрация» в положение «Запретить», то данный тип объекта, без дополнительных усилий, никогда обмениваться не будет.

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

Как настроить фильтрацию данных по принадлежности к подразделению? Здесь уже придётся программировать. В моей реализации на запись любого объекта была установлена подписка на событие «При записи», где, посредством свойства «ОбменДанными.Получатели», можно установить список получателей данного объекта. Т.е. при выгрузке стандартными средствами для узла, которого нету в списке, объект выгружен не будет. Есть и другое решение - выбирать выгружать ли объект можно непосредственно при выгрузке объекта, в процедурах «ПриОтправкеДанныхПодчиненному» и «ПриОтправкеДанныхГлавному» модуля плана обмена.

Оба варианта имеют право на существование. Однако в качестве лучшего варианта выбрал первый, потому что вычисление признака выгружаемости происходит сразу же при записи объекта, что увеличивает длительность записи объекта на 3-5% (можно оптимизировать, в некоторых случаях можно досвести до 0.01%) т.е. в среднем 0.1-0.3 секунды, а в случае расчета выгружаемости объекта непосредственно при отправке данных, которая и так создает существенную нагрузку на БД, это время будет составлять до нескольких минут.

Для полного понимания работы механизма «Планы обмена» рекомендую прочитать главу 15 книги «Профессиональная разработка в система 1С:Предприятие 8», Габец А.П., Гончаров Д.И.

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

Транспорт

Задача транспортировки файлов от главного к подчиненному узлу сводиться к максимальной отказоустойчивости. Не редко файлы шифруются либо передаются по защищенному каналу. Для передачи файлов желательно использовать несколько различных служб, либо подготовить несколько различных вариантов подключения. Например, основной способ передачи - это используя FTP -сервер, подключенный через VPN -туннель; резервный - это e -mail сервер с TLS -подключением. Зачем нужен резервный канал с другой службой? Как показывает практика, использовать 2 различных FTP сервера менее надежно, чем FTP сервер и E -Mail .

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

Моя реализация РБД

Реализация полностью автономна, поэтому как подзадача выступала максимальная отказоустойчивость. Отсюда получилось 2 службы - служба транспорта обновлений и служба импорта/экспорта данных. Обе службы работают независимо друг от друга.

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

Для сокращения объема траффика xml -файлы упаковывались в zip -архивы. Система поддерживает два вида транспорта - FTP и E -mail .

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

Важно понимать, под каким системным пользователем будут работать службы, т.к. может не хватить прав на создание файлов даже во временной папке 1С. Для отладки крайне рекомендую писать каждую, успешно выполненную, операцию в журнал регистраций, либо в txt -файл. В 1С 8.1 выполнение серверного кода отладить нельзя.

Для удобства отладки и настройки своей реализации прикладываю обработку "Регистрация изменений", описание которой находится в самой обработке.

Общая схема работы комплекса обмена данными указана на рис 3.

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

Послесловие

Главная задача - это ответить на список вопросов:

  1. Зачем нам нужна РБД?
  2. Чем не устраивает работа через RDP- клиент?
  3. Где и почему мы хотим установить узлы РБД?
  4. Как будет происходить транспорт обновлений?
  5. Какой уровень отказоустойчивости будет реализован?

Обработка "РегистрацияИзменений"

Обработка позволяет принудительно регистрировать изменения в объектах. Есть несколько вариантов регистрации изменений:

  1. Если установлена галочка на каком-либо метаданном и НЕ выбран ни единый объект и НЕ установлен флаг "Выгружать по всем значениям", то РЕГИСТРИРУЕТСЯ ТОЛЬКО ВЫБРАННАЯ ТАБЛИЦА;
  2. Если установлен флаг "Выгружать по всем значениям", то выбранные метаданные будут выгружен по всем объектам в цикле;
  3. Если переключатель установлен в режим "Выгружать только выбранные объекты", то буду выгружены исключительно выбранные объекты (например: установка флага на метаданном без выбора объектов равносильна включенному флагу "Выгружать по всем значениям" и переключателю в позиции "Выгружать только выбранные объекты";
  4. Если переключатель установлен в режим "Выгружать выбранные и непосредственно связанные объекты" то буду выгружены выбранные объекты и те объекты, существование которых зависит от существования выбранного объекта(например: у справочников - подчиненные справочники);
  5. Если переключатель установлен в режим "Выгружать по всем ссылкам", то буду выгружены ВСЕ объекты в которых присутствует ссылка на выбранный объект.

Из дополнительного функционала доступно:

  • Перерегистрация зарегистрированных объектов, часто требуется для отладки;
  • Удаление зарегистрированных, часто требуется для отладки;
  • Печать изменений - печать полного перечня объектов, которые помечены как измененные;
  • Печать дерева конфигурации - только для удобства просмотра всей конфигурации.

Ключевые слова: распределенная, УРБД, XML, регистрация, узел, узла, авторегистрация, начальный, образ, POP3, SMTP, ПочтовоеСообщение, периферийная, центральная, репликация, обмен

Дисклеймер и условия использования

Все случайно упомянутые в статье торговые марки принадлежат своим владельцам.
Статья опубликована под лицензией Creative Commons Attribution-Share Alike 3.0 Unported License.
http://creativecommons.org/licenses/by-sa/3.0/

Сразу замечу, что все нижеследующее относится к релизу платформы 8.0.7.36 и выше.

Шаг 1. Создание плана обмена

Создаем в конфигурации план обмена. Называем его, например "РаспределеннаяБаза". Обязательно в
свойствах плана обмена ставим флажок "Распределенная информационная база".

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

Замечание: при добавлении новых объектов в конфигурацию, они не включаются в план обмена. Т.е. после
добавления объекта его необходимо добавить в состав плана обмена.

Если Вы хотите, чтобы некоторые объекты не участвовали в обмене, просто исключаете их из состава
плана обмена. Но тогда контроль ссылочной целостности остается целиком на вашей совести. Если, к
примеру, некий документ не включен в план обмена, а регистр, по которому он делает движения включен,
то в базе-приемнике вполне реально получить движения по регистру без документа-регистратора, что
согласитесь, не есть хорошо.

В принципе, этих действий достаточно, чтобы РБД заработала в "ручном" режиме. Для этого запускаем
Предприятие, открываем наш план обмена через меню "Операции". В плане обмена всегда присутствует
предопределенный узел "с точкой". Это описание текущего узла. Его нужно открыть и заполнить. В нашем
случае будут доступны поля "Код" и "Наименование". Присвоим нашему узлу код "AA" и назовем
"Центральная". Добавим в план обмена один узел. Присвоим ему код "ВВ" и назовем "Периферийная".

Теперь мы можем создать образ периферийной базы. Делается это нажатием кнопки "Создать начальный
образ". В списке узлов должна быть выбрана периферийная база. Образ базы создается в виде готовой ИБ
в каталоге или на сервере 1С:Предприятия. (в отличие от 7.7, где образ ИБ создавался как файл
выгрузки). Далее созданную базу можно перенести в нужное место, просто скопировав файлик 1CV8.1CD
(для файлового варианта), либо через Конфигуратор через выгрузку-загрузку данных.

Если Вы откроете план обмена в периферийной ИБ, то Вы увидите, что узлом "с точкой", т.е. текущим
узлом стал узел "Периферийная", а иконка у узла "Центральная" стала красного цвета, т.е. узел
"Центральная" является главным узлом по отношению к текущему.

Обмен в "ручном" режиме можно производить при помощи кнопок "Записать изменения" и "Прочитать
изменения". В первом случае будет предложено выбрать файл, куда изменения будут записаны, во втором
- файл, откуда изменения будут считаны. Обмен ведется в формате xml. Изменения записываются для
выбранного узла.

Шаг 2. Выгрузка изменений в XML-файл и отправка по электронной почте

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

Добавляем в план обмена два реквизита: ЭлектронныйАдрес типа "строка" и "ВыполнятьОбмен" типа
"булево". В реквизите ЭлектронныйАдрес будем хранить email узла, т.е. тот адрес, на который будем
посылать сообщения обмена. Реквизит ВыполнятьОбмен нужен, чтобы быстро отключить автоматическую
посылку-отправку сообщений.

Процедуру для работы с электронной почтой сделаем универсальной, т.е. сделаем возможным
использование как MAPI (отправка-получение через почтового клиента, например, MS Outlook), так и
прямое обращение к SMTP/POP3 серверам.

Добавим в конфигурацию несколько констант:

где-нибудь в общей форме обеспечиваем редактирование значений этих констант.

Добавим общий модуль, назовем его "рбРаспределеннаяБаза". В нем пишем:

Процедура рбОтправитьСообщенияОбмена() Экспорт ИспользоватьSMTP = Константы.ИспользоватьОбменПоSMTP.Получить(); //Сначала создаем объект Почта, который в зависимости от настроек будет типа ИнтернетПочта, //если используется прямое обращение к серверам, либо Почта если используется MAPI. Если ИспользоватьSMTP Тогда //Для объекта типа ИнтернетПочта создаем и заполняем почтовый профиль. ПочтовыйПрофиль = Новый ИнтернетПочтовыйПрофиль; ПочтовыйПрофиль.АдресСервераSMTP = Константы.АдресСервераSMTPОбмена.Получить(); ПочтовыйПрофиль.ПортSMTP = Константы.ПортСервераSMTPОбмена.Получить(); ПочтовыйПрофиль.ПользовательSMTP = Константы.ПользовательСервераSMTPОбмена.Получить(); ПочтовыйПрофиль.ПарольSMTP = Константы.ПарольПользователяSMTPОбмена.Получить(); ПочтовыйПрофиль.ВремяОжидания = Константы.ВремяОжиданияСервера.Получить(); Почта = Новый ИнтернетПочта(); Попытка Почта.Подключиться(ПочтовыйПрофиль); Исключение Сообщить("ОБМЕН: Ошибка при подключении к почтовому профилю! Обмен не выполнен! " + ОписаниеОшибки(), СтатусСообщения.ОченьВажное); Возврат; КонецПопытки; Иначе Почта = Новый Почта(); Попытка Почта.Подключиться(); Исключение Сообщить("" + ОписаниеОшибки(), СтатусСообщения.ОченьВажное); Возврат; КонецПопытки; КонецЕсли; //Далее выбираем все узлы из плана обмена, за исключением текущего, //у которых установлен реквизит ВыполнятьОбмен. ВыборкаУзлов = ПланыОбмена.РаспределеннаяБаза.Выбрать(); Пока ВыборкаУзлов.Следующий() Цикл Если Не ВыборкаУзлов.ВыполнятьОбмен Тогда Продолжить; КонецЕсли; Если ВыборкаУзлов.Ссылка = ПланыОбмена.РаспределеннаяБаза.ЭтотУзел() Тогда Продолжить; КонецЕсли; ЭлектронныйАдрес = СокрЛП(ВыборкаУзлов.ЭлектронныйАдрес); Если ЭлектронныйАдрес = "" Тогда Продолжить; КонецЕсли; //С помощью объектов ЗаписьXML и ЗаписьСообщения выполняем запись изменений //для выбранного узла в xml-файл. Узел = ВыборкаУзлов.Ссылка; ЗаписьXML = Новый ЗаписьXML(); ИмяФайлаСообщения = КаталогВременныхФайлов() + "Message_ " + СокрЛП(ПланыОбмена.РаспределеннаяБаза.ЭтотУзел().Код) + "_ " + СокрЛП(Узел.Код) + ".xml "; ЗаписьXML.ОткрытьФайл(ИмяФайлаСообщения); ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); ЗаписьСообщения.НачатьЗапись(ЗаписьXML,Узел); ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения); ЗаписьСообщения.ЗакончитьЗапись(); ЗаписьXML.Закрыть(); //Затем создаем новое письмо, прикрепляем к нему полученный xml-файл и //отправляем по адресу, указанному в реквизите ЭлектронныйАдрес узла. Файл = Новый Файл(ИмяФайлаСообщения); ТемаСообщения = "1С:Обмен " + СокрЛП(ПланыОбмена.РаспределеннаяБаза.ЭтотУзел().Код) + "_ " + СокрЛП(Узел.Код); Если ИспользоватьSMTP Тогда ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение; ПочтовоеСообщение.Тема = ТемаСообщения; ПочтовоеСообщение.Вложения.Добавить(ИмяФайлаСообщения, Файл.Имя); ПочтовоеСообщение.Получатели.Добавить(ЭлектронныйАдрес); Почта.Послать(ПочтовоеСообщение); Иначе ПочтовоеСообщение = Новый ПочтовоеСообщение; ПочтовоеСообщение.Тема = ТемаСообщения; ПочтовоеСообщение.Вложения.Добавить(ИмяФайлаСообщения); ПочтовоеСообщение.Получатели.Добавить(ЭлектронныйАдрес); Почта.Послать(ПочтовоеСообщение, Ложь); КонецЕсли; Если Константы.ВыводитьСообщенияОбмена.Получить() Тогда Сообщить("ОБМЕН: Сообщение обмена для узла " + Узел.Наименование + " отправлено! ", СтатусСообщения.Информация); КонецЕсли; УдалитьФайлы(ИмяФайлаСообщения); КонецЦикла; Почта.Отключиться(); КонецПроцедуры

Рекомендую в интерфейс добавить дополнительную панель, на одну из кнопок которой повесить вызов этой
процедуры. Теперь осталось запустить Предприятие, настроить электронный адрес периферийной ИБ,
поставить галку "Выполнять обмен", нажать на кнопку процедуры на панели и бежать получать почту для
указанного эл. адреса. Должно придти письмо с темой "1С:Обмен AA_BB" и вложенным файлом
"Message_AA_BB.xml".

Итак, половина дела сделана: мы научили "восьмерку" отправлять сообщения обмена РБД по электронной
почте.

Шаг 3. Получение обновлений по электронной почте и запись их в ИБ

Теперь займемся обратной процедурой: получение обновлений по электронной почте и запись их в ИБ.

В параметры сеанса добавим параметр "ИдетОбменРаспределеннойБазы" типа Булево. Ниже я объясню его
назначение.

Добавим в общий модуль рбРаспределеннаяБаза такую процедуру:

Процедура рбПолучитьСообщенияОбмена() Экспорт ИспользоватьSMTP = Константы.ИспользоватьОбменПоSMTP.Получить(); //так же, как в процедуре рбОтправитьСообщенияОбмена(), сначала создаем объект Почта Если ИспользоватьSMTP Тогда ПочтовыйПрофиль = Новый ИнтернетПочтовыйПрофиль; ПочтовыйПрофиль.АдресСервераPOP3 = Константы.АдресСервераPOP3Обмена.Получить(); ПочтовыйПрофиль.ПортPOP3 = Константы.ПортСервераPOP3Обмена.Получить(); ПочтовыйПрофиль.Пользователь = Константы.ПользовательСервераPOP3Обмена.Получить(); ПочтовыйПрофиль.Пароль = Константы.ПарольПользователяPOP3Обмена.Получить(); ПочтовыйПрофиль.ВремяОжидания = Константы.ВремяОжиданияСервера.Получить(); Почта = Новый ИнтернетПочта(); Попытка Почта.Подключиться(ПочтовыйПрофиль); Исключение Сообщить("ОБМЕН: Ошибка при подключении к почтовому профилю! |Обмен не выполнен! ", СтатусСообщения.ОченьВажное); Возврат; КонецПопытки; Иначе Почта = Новый Почта(); Попытка Почта.Подключиться(); Исключение Сообщить("ОБМЕН: Ошибка при подключении к почтовому профилю пользователя! |Обмен не выполнен! ", СтатусСообщения.ОченьВажное); Возврат; КонецПопытки; КонецЕсли; МассивСообщений = Новый Массив; Если ИспользоватьSMTP Тогда ВсеСообщения = Почта.Выбрать(Ложь); Иначе ВсеСообщения = Почта.Выбрать(Ложь, Ложь); КонецЕсли; //Отбираем среди всех писем те, которые имеют тему "1С:Обмен". //Маленькое, но важное замечание: //считаем, что все полученные письма с темой "1С:Обмен" предназначены //именно для текущего узла, //т.е. что у разных узлов в плане обмена РАЗНЫЕ электронные адреса. Для Каждого Сообщение Из ВсеСообщения Цикл Если Лев(Сообщение.Тема, 8 ) <> "1С:Обмен " Тогда Продолжить; КонецЕсли; Попытка МассивСообщений.Добавить(Сообщение); //Вложение письма сохраняем на диске. //Аккуратную проверку вложения оставим пока "за кадром." Вложение = Сообщение.Вложения; ИмяФайлаСообщения = КаталогВременныхФайлов() + Вложение.Name; ДанныеОбмена = Вложение.Данные; ДанныеОбмена.Записать(ИмяФайлаСообщения); //С помощью объектов ЧтениеXML и ЧтениеСообщения читаем данные //обновления из сохраненного файла. Перед записью обновлений в ИБ //устанавливаем параметр сеанса ИдетОбменРаспределеннойБазы в Истина. //Затем читаем изменения в ИБ: ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения). //Попутно сохраняем сообщения в массиве, чтобы потом их все сразу удалить. ЧтениеXML = Новый ЧтениеXML(); ЧтениеXML.ОткрытьФайл(ИмяФайлаСообщения); ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); ЧтениеСообщения.НачатьЧтение(ЧтениеXML); ПараметрыСеанса.ИдетОбменРаспределеннойБазы = Истина; ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения); ЧтениеСообщения.ЗакончитьЧтение(); ЧтениеXML.Закрыть(); Если Константы.ВыводитьСообщенияОбмена.Получить() Тогда Сообщить("ОБМЕН: Данные обмена приняты ",СтатусСообщения.Информация); КонецЕсли; Исключение Сообщить("ОБМЕН: Ошибка при получении данных обмена: " + ОписаниеОшибки(), СтатусСообщения.ОченьВажное); КонецПопытки; //После того, как чтение данных обмена закончено, возвращаем //параметру сеанса ИдетОбменРаспределеннойБазы значение Ложь. ПараметрыСеанса.ИдетОбменРаспределеннойБазы = Ложь; Попытка УдалитьФайлы(ИмяФайлаСообщения); Исключение //если не получилось, ну и ладно КонецПопытки; КонецЦикла; Если ИспользоватьSMTP Тогда Почта.УдалитьСообщения(МассивСообщений); КонецЕсли; Почта.Отключиться(); КонецПроцедуры

Теперь про то, для чего нужен параметр сеанса ИдетОбменРаспределеннойБазы.
Дело в том, что при чтении данных методом ПланыОбмена.ПрочитатьИзменения() происходит вызов
процедур-обработчиков события ПередЗаписью() изменяемых/добавляемых объектов. И если при записи
какого-либо объекта в процедуре обработчике параметр Отказ будет установлен в значение Истина, то
при выполнении ПланыОбмена.ПрочитатьИзменения() возникнет исключение, и, соответственно, обмен
выполнен не будет. Значение параметра сеанса ИдетОбменРаспределеннойБазы может быть
проанализированно в процедурах-обработчиках, дабы избежать подобной ситуации.
С выходом редакции 12 (хотя я могу ошибаться в версиях), актуальность этого метода несколько
устарелаА, поскольку у объектов появилось свойство ПараметрыОбмена , у которого, в свою . Это свойство принимает значение Истина, когда идет
сохранение данных через план обмена.

Теперь в интерфейсе на нашей панели добавляем еще одну кнопку, на которую вешаем вызов этой
процедуры. Запускаем Предприятие и наслаждаемся.
Почти все сделано, осталась малость: заставить наши процедуры выполняться в автоматическом режиме.
Шаг 4. Настройка автоматического обмена

Итак, мы почти вплотную приблизились к цели нашего повествования. Остался всего один шаг: запустить
выполнение процедур обмена в автоматическом режиме. Приступим.

Добавим константу ИнтервалАвтообменаРаспределеннойБазы типа Число(5,0).

В настройки пользователя добавим параметр ВыполнятьОбменРаспределенныхБаз. Для конфигурации
"Управление торговлей" это делается так:

* В план видов характеристик "НастройкиПользователей" добавим предопределенную
характеристику ВыполнятьОбменРаспределенныхБаз типа Булево.
* В форме элемента справочника "Пользователи" настраиваем изменение этого параметра (как это
сделать можно посмотреть в модуле формы, по аналогии с остальными параметрами).

В модуль рбРаспределеннаяБаза добавляем процедуру:

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

в модуль приложения:

Процедура ПроверитьПодключениеАвтообмена() Экспорт Если нпПолучитьЗначениеПоУмолчанию(глТекущийПользователь, "ВыполнятьОбменРаспределенныхБаз ") И Константы.ИнтервалАвтообменаРаспределеннойБазы.Получить() > 0 Тогда ПодключитьОбработчикОжидания("ВыполнитьАвтообмен ", Константы.ИнтервалАвтообменаРаспределеннойБазы.Получить()); Иначе ОтключитьОбработчикОжидания("ВыполнитьАвтообмен "); КонецЕсли; КонецПроцедуры Процедура ВыполнитьАвтообмен() Экспорт рбВыполнитьОбмен(глТекущийПользователь); ОтключитьОбработчикОжидания("ВыполнитьАвтообмен "); Если нпПолучитьЗначениеПоУмолчанию(глТекущийПользователь, "ВыполнятьОбменРаспределенныхБаз ") И Константы.ИнтервалАвтообменаРаспределеннойБазы.Получить() > 0 Тогда ПодключитьОбработчикОжидания("ВыполнитьАвтообмен ", Константы.ИнтервалАвтообменаРаспределеннойБазы.Получить()); КонецЕсли; КонецПроцедуры Процедура ОтключитьАвтообмен() Экспорт ОтключитьОбработчикОжидания("ВыполнитьАвтообмен "); КонецПроцедуры

в процедуру ПриНачалеРаботыСистемы() модуля приложения добавим такие строки:

(после подключения торгового оборудования)
...
ПараметрыСеанса.ИдетОбменРаспределеннойБазы = Ложь; ПроверитьПодключениеАвтообмена();

Добавим на нашу панель еще пару кнопок для управления процессом: на одну вешаем процедуру
ПроверитьПодключениеАвтообмена(), на другую - ОтключитьАвтообмен()

Запускаем предприятие, настраиваем свойства пользователя и интервал автообмена и все!

Теперь при заходе в базу под этим-самым-настроенным пользователем будет запускаться обработчик
ожидания ВыполнитьАвтообмен(). Естественно, в периферийной базе тоже нужно настроить пользователя
для обмена.

Еще одно маленькое, но важное замечание:

Во всей, созданной нами прелести, присутствует одна неприятность: изменение конфигурации. При
получении периферийной базой сообщения, в котором будут содержаться изменения конфигурации, оно
будет принято, но возникнет исключительная ситуация. При этом измененная конфигурация будет
загружена. Для обновления конфигурации БД необходимо выгнать всех пользователей, зайти в
конфигуратор и выполнить обновление конфигурации БД (перед этим неплохо сделать выгрузку данных). К
сожалению, это неизбежное зло. Можно немного облегчить себе жизнь, написав коротенький bat-файл
примерно такого содержания:

1cv8.exe CONFIG /F<путь к ИБ> /N<Пользователь> /P<Пароль> /UpdateIBCfg

И еще одно замечание:

К сожалению, xml-файлы не отличаются компактностью, но, к счастью, прекрасно сжимаются. Можно в
процедуры отправки и получения сообщений добавить упаковку-распаковку файлов. COLOR="#666666">Делать это можно либо внешним архиватором, либо используя ВК, например Wheel.AddIn
(http://1c.proclub.ru/modules/mydownloads/personal.php?cid=81&lid=2714) .
С выходом 10 (кажется) редакции, предыдущее предложение несколько устарело, поскольку в платформу
были встроенны средства сжатия файлов по алгоритму ZIP. Т.е. теперь есть возможность сжимать файлы
без использования ВК.