При работе в устаревших конфигурациях на платформе 1С 7.7 часто возникает техническая сложность: современные фискальные регистраторы (ККТ), такие как VikiPrint-57F, не имеют штатных обработок обслуживания для версии 7.7. В данной ситуации разработчики часто рассматривают вариант использования 1С 8.3 Розница в качестве "прослойки" для печати чеков. Рассмотрим подробно, как реализовать такую связку, проанализируем различные способы интеграции и выясним, какой из них наиболее эффективен.
Этот метод подразумевает, что 1С 8.3 запущена параллельно с 1С 7.7. Основной учет ведется в старой программе, а при необходимости пробить чек 1С 7.7 обращается к 1С 8.3 через механизм OLE (COM-соединение).
Разберем по шагам алгоритм реализации данного метода:
Рассмотрим пример кода на стороне 1С 7.7 для инициализации соединения:
// Создание объекта связи с 1С 8.3
V8 = СоздатьОбъект("V83.COMConnector");
ПутьКБазе = "File=""C:\Bases\Retail"";Usr=""Admin"";";
Попытка
База8 = V8.Connect(ПутьКБазе);
Сообщить("Связь с 1С 8.3 установлена успешно");
Исключение
Предупреждение("Не удалось подключиться к 1С 8.3: " + ОписаниеОшибки());
КонецПопытки;
После установки соединения мы можем вызывать функции 1С 8.3. Важно понимать, что в "Рознице" 2.2 или 2.3 работа с оборудованием реализована через подсистему БПО (Библиотека подключаемого оборудования). Нам потребуется передать структуру товаров и вызвать методы пробития чека. Главный плюс этого подхода — полная поддержка 54-ФЗ и маркировки средствами 1С 8.3.
Рассмотрим ситуацию, предложенную автором темы: использование DBF-файла для обмена. 1С 7.7 записывает данные о продаже в файл, а 1С 8.3 "подхватывает" их и печатает чек.
Внимание: проанализируем риски этого метода!
Использование DBF в реальном времени чревато критическими ошибками блокировок. Если 1С 7.7 пытается записать новую строку, а 1С 8.3 в этот же момент считывает файл для печати, возникнет конфликт доступа (ошибка "File access denied").
Если вы все же решили использовать файловый обмен, рекомендуем использовать механизм "файлов-флагов":
sale_123.json или .txt).Выясним причину, по которой многие отказываются от прямой работы ККТ с 1С 7.7. Считается, что драйверов не существует. Однако это заблуждение. Устройства серии Viki Print работают по протоколу Пирит. Существует внешняя компонента (DLL), которая позволяет обращаться к кассе напрямую из 1С 7.7.
Посмотрим на пример работы с компонентой напрямую:
// Загрузка компоненты драйвера
Если ЗагрузитьВнешнююКомпоненту("Pirit.dll") <> 1 Тогда
Сообщить("Ошибка загрузки драйвера кассы!");
КонецЕсли;
Касса = СоздатьОбъект("AddIn.PiritFR");
// Далее используются методы драйвера: ОткрытьЧек, НапечататьСтроку, ЗакрытьЧек
Касса.Password = "30"; // Стандартный пароль
Касса.Connect();
Этот путь гораздо эффективнее, так как исключает необходимость запуска тяжелой конфигурации 1С 8.3 только ради одной функции печати. Однако стоит учитывать, что для работы с кодами маркировки ("Честный ЗНАК") в 1С 7.7 придется самостоятельно дописывать формирование тегов чека (например, тег 1162).
Если инфраструктура позволяет, разберем самый надежный метод интеграции между разными платформами. В 1С 8.3 "Розница" можно опубликовать HTTP-сервис.
Проанализируем преимущества:
Для реализации в 1С 7.7 потребуется использовать объект WinHttp.WinHttpRequest.5.1 для отправки POST-запросов. Пример структуры запроса:
Запрос = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
Запрос.Open("POST", "http://server/retail/hs/kkm/print", 0);
Запрос.SetRequestHeader("Content-Type", "application/json");
ДанныеЧека = "{ ""price"": 100, ""quantity"": 1, ""name"": ""Товар комиссионный"" }";
Запрос.Send(ДанныеЧека);
Если Запрос.Status = 200 Тогда
Сообщить("Чек отправлен в очередь печати");
КонецЕсли;
Выясним, какой метод лучше подходит под ваши задачи:
При использовании 1С 8.3 как посредника, не забудьте про утилиту ComProxy. Она позволяет разделить один порт ККТ, если к кассе нужно обращаться одновременно из драйвера производителя и из 1С.