1С Бухгалтерия Предприятия 8.2: подключение 2х и более фискальных регистраторов
Небольшая инструкция по подключению 2х и более фискальных регистраторов в 1С 8.2, работающей в терминальном режиме (Etersoft Wine, Ubuntu Server 10.04).
Заходим в меню Сервис > Служебные > Подключение и настройка торгового оборудования:
Для каждого регистратора будем использовать отдельную обработку, в директории базы данных расположим обработку вида ShtrihMFiscalPrinters_v2.epf, а также ее копии ShtrihMFiscalPrinters_v2-1.epf, ShtrihMFiscalPrinters_v2-2.epf — сколько регистраторов, столько и обработок. Загружаем обработки из директории:
Справочник «Обработки обслуживания ТО» должен выглядеть так:
Добавляем регистраторы, каждому назначая отдельный обработчик:
Каждый из регистраторов работает на определенном COM порту. Когда пользователь запускает терминальный режим — стартует openbox а вместе с ним remserial для подключения к регистратором через TCP/IP. На машинах, к которым подключены регистраторы используется Windows и VSPE для проброса COM портов.
Естественно, для того, чтобы обработчики работали (а их разрабатывает 1С, поэтому и искать их нужно на сайте 1С кстати), должен быть установлен драйвер ШТРИХ-М ( \я использую версию 4.9.0.188 ). Регистратор 1:
Регистратор 2:
При создании приходного кассового ордера увидим сообщение для 1 из 2х регистраторов:
1С пытается подключить все торговое оборудование, но у нас оно подключено к 2м разным компьютерам.
Открываем конфигурацию и правим модуль объекта ТОСервер:
Необходимо закомментировать вывод сообщений об ошибке в функциях ПодключитьКлиента и ПодключитьОборудование.
Теперь у каждого из 2х пользователей чек будет пробиваться на том регистраторе, для которого проброшен COM порт. Т.е. на несколько организаций может быть несколько регистраторов.
Заходим в меню Сервис > Служебные > Подключение и настройка торгового оборудования:
Для каждого регистратора будем использовать отдельную обработку, в директории базы данных расположим обработку вида ShtrihMFiscalPrinters_v2.epf, а также ее копии ShtrihMFiscalPrinters_v2-1.epf, ShtrihMFiscalPrinters_v2-2.epf — сколько регистраторов, столько и обработок. Загружаем обработки из директории:
Справочник «Обработки обслуживания ТО» должен выглядеть так:
Добавляем регистраторы, каждому назначая отдельный обработчик:
Каждый из регистраторов работает на определенном COM порту. Когда пользователь запускает терминальный режим — стартует openbox а вместе с ним remserial для подключения к регистратором через TCP/IP. На машинах, к которым подключены регистраторы используется Windows и VSPE для проброса COM портов.
Естественно, для того, чтобы обработчики работали (а их разрабатывает 1С, поэтому и искать их нужно на сайте 1С кстати), должен быть установлен драйвер ШТРИХ-М ( \я использую версию 4.9.0.188 ). Регистратор 1:
Регистратор 2:
При создании приходного кассового ордера увидим сообщение для 1 из 2х регистраторов:
ЭЛВЕС-ФР-К: ошибка загрузки обработки обслуживания.
Проверьте корректность указания обработки обслуживания и ее версию.
Произошла ошибка при подключении торгового оборудования
1С пытается подключить все торговое оборудование, но у нас оно подключено к 2м разным компьютерам.
Открываем конфигурацию и правим модуль объекта ТОСервер:
Необходимо закомментировать вывод сообщений об ошибке в функциях ПодключитьКлиента и ПодключитьОборудование.
Функция ПодключитьКлиента(Клиент) Экспорт
Результат = мНетОшибки;
КонечныйРезультат = мНетОшибки;
Клиенты = ПолучитьПараметрСервераТО("Клиенты", "Соответствие");
Если Клиенты[Клиент] <> Неопределено Тогда
Возврат Результат;
КонецЕсли;
ВидТО = Неопределено;
Для Каждого ВидТО Из Перечисления.ВидыТорговогоОборудования Цикл
Если Клиент.ПоддерживаетсяВидТО(ВидТО) Тогда
Результат = ПодключитьОборудование(ВидТО, Клиент);
Если ЗначениеЗаполнено(Результат) Тогда
КонечныйРезультат = мОшибкаНеизвестно;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(КонечныйРезультат) Тогда
// Sergei_T
//ОписаниеОшибки = "Произошла ошибка при подключении торгового оборудования";
//Ошибка = ПолучитьТекстОшибкиТО(КонечныйРезультат);
//Сообщить(Ошибка, СтатусСообщения.Важное);
КонецЕсли;
Возврат КонечныйРезультат;
КонецФункции // ПодключитьКлиента()
Функция ПодключитьОборудование(Вид, Клиент)
Результат = мНетОшибки;
ПоследняяОшибка = мНетОшибки;
ТО = ПолучитьТО();
Клиенты = ПолучитьПараметрСервераТО("Клиенты", "Соответствие");
СтруктураПоиска = Новый Структура("Вид", Вид);
СтрокиТО = ТО.НайтиСтроки(СтруктураПоиска);
Если СтрокиТО.Количество() = 0 Тогда
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| РегТО.Идентификатор КАК Идентификатор,
| РегТО.Модель.Наименование КАК Наименование,
| РегТО.Модель КАК Модель,
| РегТО.Параметры КАК Параметры
|ИЗ
| РегистрСведений.ТорговоеОборудование КАК РегТО
|ГДЕ
| РегТО.Вид = &Вид
| И РегТО.Компьютер = &Компьютер
| И РегТО.Подключено
|");
Запрос.УстановитьПараметр("Вид" , Вид);
Запрос.УстановитьПараметр("Компьютер", ПолучитьИмяКомпьютераТО());
СтрокиТО = Запрос.Выполнить().Выгрузить();
СтрокаТО = Неопределено;
Для Каждого СтрокаТО Из СтрокиТО Цикл
Идентификатор = СтрокаТО.Идентификатор;
Наименование = СтрокаТО.Наименование;
Обработка = Неопределено;
Параметры = ?(ПустаяСтрока(СтрокаТО.Параметры),
Новый Структура(),
ЗначениеИзСтрокиВнутр(СтрокаТО.Параметры));
Модель = СтрокаТО.Модель.Модель;
мМодельПодключаемогоТО = Модель;
Результат = РаботаСТорговымОборудованием.ПолучитьОбработкуОбслуживанияТО(СтрокаТО.Модель, Обработка);
Если ЗначениеЗаполнено(Результат) Тогда
// Sergei_T
//Ошибка = ПолучитьТекстОшибкиТО(Результат);
//Сообщить(мМодельПодключаемогоТО + ": " + Ошибка, СтатусСообщения.Важное);
//ПоследняяОшибка = Результат;
Продолжить;
КонецЕсли;
Объект = Неопределено;
Результат = Обработка.СоздатьОбъектДрайвера(Объект, Модель, Параметры);
Если ЗначениеЗаполнено(Результат) Тогда
Ошибка = ПолучитьТекстОшибкиТО(Результат);
Сообщить(мМодельПодключаемогоТО + ": " + Ошибка, СтатусСообщения.Важное);
ПоследняяОшибка = Результат;
Продолжить;
КонецЕсли;
Результат = Обработка.Подключить(Объект);
Если ЗначениеЗаполнено(Результат) Тогда
мОписаниеОшибки = Объект.ОписаниеОшибки;
Ошибка = ПолучитьТекстОшибкиТО(Результат);
Сообщить(мМодельПодключаемогоТО + ": " + Ошибка, СтатусСообщения.Важное);
ПоследняяОшибка = Результат;
Продолжить;
КонецЕсли;
Оборудование = ТО.Добавить();
Оборудование.Вид = Вид;
Оборудование.Ссылки = 1;
Оборудование.Идентификатор = Идентификатор;
Оборудование.Наименование = Наименование;
Оборудование.Обработка = Обработка;
Оборудование.Объект = Объект;
Оборудование.ИмяИсточникаВнешнегоСобытия = Обработка.ПолучитьИмяИсточникаВнешнегоСобытия(Объект);
СообщенияКлиента = Клиенты[Клиент];
Сообщения = Обработка.ПолучитьОписаниеСобытий(Объект);
Сообщения.Колонки.Добавить("Идентификатор");
Сообщения.Колонки.Добавить("Вид");
Сообщения.ЗаполнитьЗначения(Идентификатор, "Идентификатор");
Сообщения.ЗаполнитьЗначения(Вид, "Вид");
Если НЕ ЗначениеЗаполнено(СообщенияКлиента) Тогда
Клиенты[Клиент] = Сообщения;
Иначе
Для Каждого СтрокаТаблицыИсточника Из Сообщения Цикл
СтрокаТаблицыПриемника = Клиенты[Клиент].Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТаблицыПриемника, СтрокаТаблицыИсточника);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Иначе
СтрокаТО = Неопределено;
Для Каждого СтрокаТО Из СтрокиТО Цикл
Если СтрокаТО.Ссылки = 0 Тогда
мМодельПодключаемогоТО = СтрокаТО.Объект.Модель;
Результат = СтрокаТО.Обработка.Подключить(СтрокаТО.Объект);
Если ЗначениеЗаполнено(Результат) Тогда
мОписаниеОшибки = СтрокаТО.Объект.ОписаниеОшибки;
Ошибка = ПолучитьТекстОшибкиТО(Результат);
Сообщить(мМодельПодключаемогоТО + ": " + Ошибка, СтатусСообщения.Важное);
ПоследняяОшибка = Результат;
Продолжить;
КонецЕсли;
СтрокаТО.ИмяИсточникаВнешнегоСобытия = СтрокаТО.Обработка.ПолучитьИмяИсточникаВнешнегоСобытия(СтрокаТО.Объект);
КонецЕсли;
СообщенияКлиента = Клиенты[Клиент];
Сообщения = СтрокаТО.Обработка.ПолучитьОписаниеСобытий(СтрокаТО.Объект);
Сообщения.Колонки.Добавить("Идентификатор");
Сообщения.Колонки.Добавить("Вид");
Сообщения.ЗаполнитьЗначения(СтрокаТО.Идентификатор, "Идентификатор");
Сообщения.ЗаполнитьЗначения(СтрокаТО.Вид, "Вид");
Если НЕ ЗначениеЗаполнено(СообщенияКлиента) Тогда
Клиенты[Клиент] = Сообщения;
Иначе
Для Каждого СтрокаТаблицыИсточника Из Сообщения Цикл
СтрокаТаблицыПриемника = Клиенты[Клиент].Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТаблицыПриемника, СтрокаТаблицыИсточника);
КонецЦикла;
КонецЕсли;
СтрокаТО.Ссылки = СтрокаТО.Ссылки + 1;
КонецЦикла;
КонецЕсли;
Возврат ПоследняяОшибка;
КонецФункции // ПодключитьОборудование()
Теперь у каждого из 2х пользователей чек будет пробиваться на том регистраторе, для которого проброшен COM порт. Т.е. на несколько организаций может быть несколько регистраторов.
Комментарии (5)
RSS свернуть / развернутьЯ всегда тащусь от русскоязычного синтаксиса 1С.
Пишу шабашку на С++ (вся документация к процессору на Аглицком)
и тут такой резкий контраст...
Markony
Mihael
Sergei_T
FREExLOADER
ahmetzyanov_d
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.