Как организовать печать чеков из 1С 7.7 на фискальном регистраторе VikiPrint-57F через 1С 8.3 или напрямую?

Программист 1С v7.7 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

При работе в устаревших конфигурациях на платформе 1С 7.7 часто возникает техническая сложность: современные фискальные регистраторы (ККТ), такие как VikiPrint-57F, не имеют штатных обработок обслуживания для версии 7.7. В данной ситуации разработчики часто рассматривают вариант использования 1С 8.3 Розница в качестве "прослойки" для печати чеков. Рассмотрим подробно, как реализовать такую связку, проанализируем различные способы интеграции и выясним, какой из них наиболее эффективен.

Вариант 1. Использование 1С 8.3 Розница как фискального сервера через COM-соединение

Этот метод подразумевает, что 1С 8.3 запущена параллельно с 1С 7.7. Основной учет ведется в старой программе, а при необходимости пробить чек 1С 7.7 обращается к 1С 8.3 через механизм OLE (COM-соединение).

Разберем по шагам алгоритм реализации данного метода:

  1. В конфигурации 1С 8.3 создаем специальную процедуру (или используем существующую в модуле), которая будет принимать параметры чека (состав товаров, цены, количество).
  2. В 1С 7.7 инициализируем подключение к базе 1С 8.3.
  3. Передаем данные и вызываем команду печати.

Рассмотрим пример кода на стороне 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.

Вариант 2. Файловый обмен данными (DBF или текстовые файлы)

Рассмотрим ситуацию, предложенную автором темы: использование DBF-файла для обмена. 1С 7.7 записывает данные о продаже в файл, а 1С 8.3 "подхватывает" их и печатает чек.

Внимание: проанализируем риски этого метода!

Использование DBF в реальном времени чревато критическими ошибками блокировок. Если 1С 7.7 пытается записать новую строку, а 1С 8.3 в этот же момент считывает файл для печати, возникнет конфликт доступа (ошибка "File access denied").

Если вы все же решили использовать файловый обмен, рекомендуем использовать механизм "файлов-флагов":

  1. 1С 7.7 создает уникальный текстовый файл (например, sale_123.json или .txt).
  2. 1С 8.3 в фоновом режиме (через обработку ожидания) мониторит папку обмена.
  3. Как только файл найден, 1С 8.3 считывает его, пробивает чек и перемещает файл в папку "Архив".

Вариант 3. Прямое подключение VikiPrint-57F к 1С 7.7

Выясним причину, по которой многие отказываются от прямой работы ККТ с 1С 7.7. Считается, что драйверов не существует. Однако это заблуждение. Устройства серии Viki Print работают по протоколу Пирит. Существует внешняя компонента (DLL), которая позволяет обращаться к кассе напрямую из 1С 7.7.

Посмотрим на пример работы с компонентой напрямую:


// Загрузка компоненты драйвера
Если ЗагрузитьВнешнююКомпоненту("Pirit.dll") <> 1 Тогда
    Сообщить("Ошибка загрузки драйвера кассы!");
КонецЕсли;

Касса = СоздатьОбъект("AddIn.PiritFR");
// Далее используются методы драйвера: ОткрытьЧек, НапечататьСтроку, ЗакрытьЧек
Касса.Password = "30"; // Стандартный пароль
Касса.Connect();

Этот путь гораздо эффективнее, так как исключает необходимость запуска тяжелой конфигурации 1С 8.3 только ради одной функции печати. Однако стоит учитывать, что для работы с кодами маркировки ("Честный ЗНАК") в 1С 7.7 придется самостоятельно дописывать формирование тегов чека (например, тег 1162).

Вариант 4. Современный подход через HTTP-сервисы

Если инфраструктура позволяет, разберем самый надежный метод интеграции между разными платформами. В 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. Если вам нужно быстрое решение "здесь и сейчас" и вы не боитесь сложностей с драйверами — используйте прямое подключение к 7.7 через компоненту протокола "Пирит".
  2. Если вам важна поддержка актуальных требований ФНС (маркировка, форматы фискальных данных 1.2) — настраивайте HTTP-сервис в 1С 8.3. Это обеспечит максимальную стабильность.
  3. Избегайте DBF-обмена в розничной торговле, так как в моменты пиковых нагрузок (очередь на кассе) система может дать сбой из-за блокировки файлов, что приведет к простою магазина.

При использовании 1С 8.3 как посредника, не забудьте про утилиту ComProxy. Она позволяет разделить один порт ККТ, если к кассе нужно обращаться одновременно из драйвера производителя и из 1С.

← На главную