gifts2017

Обмен данными РИБ средствами COMConnector (файловый вариант ИБ)

Опубликовал Alexey Dikikh (Liris) в раздел Администрирование - Сервисные утилиты

Долгое время искал решение, которое позволило бы выполнять обмен данными на периферийном узле, без запуска отдельного сеанса. Дело даже не в отдельном сеансе, а в постоянно мешающем окошке, которое нельзя свернуть.
Эта публикация - итог не продолжительных экспериментов с COMConnector и JS.
* Вторая версия реализована на AutoIT

Суть скрипта проста: подключиться к ИБ (с использованием COMConnector) и выполнить обмен данными. Никаких лишних окон не открывается, обмен выполняется быстро.  Кассы построены на Intel Atom D2500HN с 2Гб ОЗУ; скрипт на такой кассе выполняется ~12 сек (в зависимости от размера сообщений). 

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

Скрипт пишет подробный лог выполняемых действий в отдельный файл. Предусмотрено перемещение лога "в архив" при достижении размера лог-файла определенного размера (по-умолчанию 512000 байт).

Общее описание алгоритма работы:

  1. Скрипт запускается;
  2. Проверяет: завершен ли предыдущий сеанс работы или нет. Если завершен, скрипт продолжит работу. Иначе - прекращаем какие-либо дальнейшие действия, останавливаем скрипт;
  3. Подключается к ИБ (с использованием COMConnector);
  4. Выполняет процедуры обмена (по узлам плана обмена ПоМагазину);
  5. Отключается от базы;

В боевой работе не долго, всего пару дней. Ошибок не появлялось.

Продавцы довольны - нет лишних окошек на экране. Управленцы и финансовая служба - счастливы; сведения с периферии приходят вовремя.

Настроить скрипт просто. Откройте файл скрипта с помощью любого текстового редактора и укажите свои настройки:

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

Скрипт должен находится в папке, в которую имеет доступ пользователь, от имено которого будет закускаться задание (задается в планировщике Windows). Лог-файл будет создаваться в той же папке.

Обновление от 11.09.2013. Добавлена обработка ошибок при установке соединения с ИБ. 

Обновление от 10.09.2015. Полностью переработан скрипт.
Реализован на AutoIT. В первой версии не хватало информативности для пользователя и кое каких сервисных функций.

Функции скрипта (версия 2):

  • Запуск процедуры ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы;
  • Проверка на обновление конфигурации БД;
  • Применение изменений конфигурации БД;
  • Информирование пользователя (показывает текущее состояние);
  • Работа с параметрами командной строки;
  • Настройка через файл *.ini;
  • Самостоятельно определяет возможность запуска (проверяет работающие процессы Windows);
  • Ведет подробный журнал работы (в текстовом файле)

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

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

  • LogfileName - Имя файла, в который будет записываться журнал работы. Файл будет создан в папке с программой;
  • RetailIBConn - Строка подключения к базе данных. Проверял только на файловой версии. Строка должна выглядеть так: File=D:\Retail\;Usr=ИмяПользователяДляОбмена;Pwd=ПарольПользователяДляОбмена;
  • V8exePath - Пусть к исполняемому файлу актуальной версии платформы. Пример:"C:\Program Files\1cv8\8.3.6.2014\bin\1cv8.exe"
  • ComConnectorObj - Строка с наименованием COMConnector. Например: V83.COMConnector
  • ArcLogfileName - Строка с шаблоном имени файла, в который будет помещены устаревшие записи журнала работы. Желательно оставить что-то подобное retail_exchange_DDMMYYYY_log.old. Важно в имени иметь символы даты DDMMYYYY. Не проверял как будет вести себя программа без них :-)
  • LogMaxSize - Значение, которое устанавливает максимальный размер журнала работы (в байтах). Пример: 512000
  • PIDFileExt - Строка, устанавливает расширение для файла-флага. Пример: pid
  • ShowTrayTip - Параметр устанавливает режим уведомлений для пользователя. Если значение 1, то уведомления будут показываться
  • UpdateRS - Параметр разрешает запуск процедуры ЗапасыСервер.ОбновлениеРегистраСведенийИнформативныеОстаткиТоваровДляМагазинов(). Если значение 1, то перед обменом данными будет обновлен РС
  • ApplyCfg - Параметр разрешение на первый запуск клиентского приложения после применения изменений конфигурации. Если значение 1, то после применения изменений будет запущено клиентское приложение. Эта опция проверялась не достаточно хорошо. Поэтому, используйте на свой страх и риск.

Программа принимает параметры командной строки: ShowTrayTip, UpdateRS, ApplyCfg. Достаточно указать эти ключевые слова в командной строке, программа их примет при работе.Параметры командной строки имеют приоритет перед параметрами, указанными в *.ini.
Например: RetailExchange.exe ShowTrayTip UpdateRS

Кто желает доработать под себя эту простую утилиту, добро пожаловавать на GitHub

Компилятор и все необходимое для сборки можно найти на официальном сайте AutoIT

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

Наименование Файл Версия Размер Кол. Скачив.
Скрипт обмена РИБ
.js 9,07Kb
11.09.13
54
.js 1.1 9,07Kb 54 Скачать
Архив (версия 2)
.zip 434,82Kb
10.09.15
3
.zip 2 434,82Kb 3 Скачать
Архив (версия 2) для платформы x64
.zip 463,59Kb
10.09.15
3
.zip 2 463,59Kb 3 Скачать

См. также

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

Комментарии

1. Алексей Башкевич (sam013) 06.09.13 13:32
Скачал попробовал.
Что то делает, но файл выгрузки не формируется.

[06.09.2013 13:30:42] Сформирован новый лог-файл
[06.09.2013 13:30:42] Старт обработки.
[06.09.2013 13:30:42] Создан новый PID-файл: 908
[06.09.2013 13:30:42] Попытка подключения к информационной базе по строке подключения File=D:\DEV\1CGB\work2;Usr=Obmen;Pwd=123;
[06.09.2013 13:30:47] Выполнение процедуры ОбновлениеРегистраСведенийИнформативныеОстаткиТоваровДляМагазинов
[06.09.2013 13:30:47] Выполнение процедуры обмена. Этот узел: Розница, редакция 2.0 (МВ )
[06.09.2013 13:30:47] Освобождение области памяти, отведенной под v8ComConnector
[06.09.2013 13:30:47] Удален PID-файл D:\temp\Obmen\908.pid
[06.09.2013 13:30:47] Обработка завершена.

В ручном режиме обмен работает, файл формирует
2. Alexey Dikikh (Liris) 06.09.13 14:01
(1)
Может не настроены регламентные задания? Сниму скрины своих настроек, покажу как настроено у меня.
3. Алексей Башкевич (sam013) 06.09.13 14:12
(2) Liris,
Настроены.
Скриншот прилагаю.
Прикрепленные файлы:
4. Alexey Dikikh (Liris) 06.09.13 17:05
(3) Думаю, мне понятно, почему у тебя не выполняется выгрузка. Ты запускаешь в Центральной ноде? Или в периферийной? Теоретически, должно работать в обоих случаях, но на Центральной ноде я не проверял, только на базе магазина работает.
В плане обмена периферийной базы должно быть два элемента:
- предопределенный элемент, узел текущей базы. Эта нода игнорируется скриптом при выгрузке;
- второй элемент, узел центральной базы данных. Это тот узел, изменения по которому должны выгружаться

В логе видно, что выгрузка не происходила, сообщения о выполнении обмена не вывелось. Вот пример моего процесса:
[06.09.2013 20:00:00] Старт обработки.
[06.09.2013 20:00:00] Создан новый PID-файл: 3960
[06.09.2013 20:00:00] Попытка подключения к информационной базе по строке подключения
[06.09.2013 20:00:04] Выполнение процедуры ОбновлениеРегистраСведенийИнформативныеОстаткиТоваровДляМагазинов
[06.09.2013 20:00:05] Выполнение процедуры обмена. Этот узел: Новосибирск - РОЙЯЛ ПАРК ТРК (A1 )
[06.09.2013 20:00:05] Вызов процедуры ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы. Узел КПЕ Розница (РБ )
[06.09.2013 20:00:17] Освобождение области памяти, отведенной под v8ComConnector
[06.09.2013 20:00:17] Удален PID-файл D:\1CScripts\3960.pid

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

Если что-то упустил, дай знать. Интересно разобраться, почему у тебя не работает.
У меня заработало на всех магазинах. Не потребовалось предварительной подготовки ИБ.
5. Alexey Dikikh (Liris) 09.09.13 13:43
(3)Проблему решил.
Наименования узлов, периферийного и центрального, имели одинаковое имя. Переделал скрипт, чтобы сравнивал по коду узла.
6. Денис Кузнецов (kuza_87) 01.11.13 20:32
(5) Liris, При подключении к ИБ произошла ошибка. Описание ошибки: Неверные или отсутствующие параметры соединения с информационной базой
Прикрепленные файлы:
скриптОбменаГБ.js
7. Alexey Dikikh (Liris) 02.11.13 05:25
(6) Добрый день, коллега.
Посмотрел приложенный скрипт. Как предложение:
1) переложить базу в папку с коротким путём;
2) убедиться, что база открывается в обычном режиме под указанным пользователем;
3) убедиться, что правильно настроили роли для пользователя: право внешнего соединения и полные права для обмена;
4) полный доступ на папку, в которой работает скрипт.
8. Alexey Dikikh (Liris) 02.11.13 05:33
(6) Приложите файл журнала (лог-файл).
Какая версия платформы?
Какая ОС?
9. Денис Кузнецов (kuza_87) 02.11.13 06:46
Платформа 8.3.3, ОС - Win7

[02.11.2013 09:45:30] Сформирован новый лог-файл
[02.11.2013 09:45:30] Старт обработки.
[02.11.2013 09:45:30] Удален PID-файл G:\install\1с\Работа алисон\автосервис\1920.pid
[02.11.2013 09:45:30] Создан новый PID-файл: 5504
[02.11.2013 09:45:30] Попытка подключения к информационной базе по строке подключения
[02.11.2013 09:45:31] При подключении к ИБ произошла ошибка. Описание ошибки: Неверные или отсутствующие параметры соединения с информационной базой
[02.11.2013 09:45:31] Скрипт завершает работу из-за ошибки
10. Alexey Dikikh (Liris) 02.11.13 07:11
(9) Предполагаю, версия Платформы всему виной.
Найдите в скрипте строку v8ComConnector = WScript.CreateObject("V82.COMConnector");
Вместо V82 напишите V83, запишите изменения и попробуйте запустить скрипт повторно.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа