Встраивание ТС ПИоТ в 1с 7.7 нетиповую для работы с кассой Атол

25.12.25

Интеграция - ККМ

Встраиваем ТС ПИоТ в 1с 7.7. Предупреждаю: это не готовый вариант для встраивания, это только демонстрация, как с этим работать!

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Встраивание ТС Пиот в 1с 7.7 нетиповую для работы с кассой Атол
.zip 247,76Mb
0 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Качаем с сайта ESP драйвер и модуль, можно устанавливать на win 7x86, все работает.

В драйвере ТО в закладке свойств ККТ устанавливаем порт сервера GRPC: 4041, проверяем связь с ККТ.

Предупреждаю: это не готовый вариант для встраивания, это только демонстрация, как с этим работать!

Далее в 1С:

Процедура РазобратьСписок(Спис,Отступ="")
    Для пп=1 по Спис.РазмерСписка() Цикл
        Стр="";
        сс=Спис.ПолучитьЗначение(пп,Стр);
        Тип = ТипЗначенияСтр(сс);
        Если Тип = "СписокЗначений" Тогда
            Сообщить(Отступ+"Список: "+Стр+" "+сс.РазмерСписка());
            РазобратьСписок(сс," ");
        Иначе
            Сообщить(Отступ+"Знач: "+Стр+" "+ПреобразоватьСтрокуИзУТФ8(сс));
        КонецЕсли;
    Конеццикла;
    
КонецПроцедуры

Функция ПолучитьGUID()
    НТТРСистИнформ = СоздатьОбъект("AddIn.V7SysInfo");
    Возврат СокрЛП(НТТРСистИнформ.СоздатьGUID());
КонецФункции

Функция КодироватьBase64(Текст)
    Перем Алфавит;
    Перем Группа, Символ;
    Перем Значение, Разряд;
    Перем Символ6, Значение6;
    Перем Значение8, Символ8;
    Перем Текст64;
    
    // Подготовка алфавита и результата
    Алфавит = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    Текст64 = "";
          
    Группа = "";
    Для Номер=1 По СтрДлина(Текст) Цикл
    
    Символ = Сред(Текст, Номер, 1);
    Группа = Группа + Символ;
    
    Если ((СтрДлина(Группа) = 3) или (Номер = СтрДлина(Текст))) Тогда
        
        // Получение числового значения из 3-х символов
            Значение = 0;
            Разряд = 2;
            Пока Разряд >= 0 Цикл
                Символ8 = Сред(Группа, 3 - Разряд, 1);
                Значение8 = КодСимв(Символ8);
                Если Разряд = 1 Тогда
                    Значение8 = Значение8 * 256;
                ИначеЕсли Разряд = 2 Тогда
                    Значение8 = Значение8 * 256 * 256;
                КонецЕсли;
                Значение = Значение + Значение8;
                Разряд = Разряд - 1;
            КонецЦикла;
            
        // Получение 4-х символов из числового значения    
            Разряд = 3;
            Пока Разряд >= 0 Цикл
                Значение6 = Значение;
                Если Разряд = 3 Тогда
                    Значение6 = Цел(Значение6 / 64 / 64 / 64);
                    Значение = Значение - Значение6 * 64 * 64 * 64;
                ИначеЕсли Разряд = 2 Тогда
                    Значение6 = Цел(Значение6 / 64 / 64);
                    Значение = Значение - Значение6 * 64 * 64;
                ИначеЕсли Разряд = 1 Тогда
                    Значение6 = Цел(Значение6 / 64);
                    Значение = Значение - Значение6 * 64;
                КонецЕсли;      
                
                Если СтрДлина(Группа) < 3 Тогда
                    Если Значение6 = 0 Тогда
                        Значение6 = 64;
                    КонецЕсли;
                КонецЕсли;

                Символ6 = Сред(Алфавит, Значение6+1,1);
                Текст64 = Текст64 + Символ6;
                Разряд = Разряд - 1;
            КонецЦикла;    
                        
        Группа = "";    
        КонецЕсли;
    КонецЦикла;  
    
    Возврат Текст64;
    
КонецФункции 

Функция ЗначениеВJSON(Объект,Форматированный="")
    
    Тип = ТипЗначенияСтр(Объект);
    Если Тип = "СписокЗначений" Тогда
        //то определим с ключами или без
        Если Объект.РазмерСписка() = 0 Тогда
            Тип = "СписокЗначенийбезКлючей";
        Иначе
            Ключ = "";
            Значение = Объект.ПолучитьЗначение(1,Ключ);
            Если ПустоеЗначение(Ключ) = 1 Тогда
                Тип = "СписокЗначенийбезКлючей";
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    
    Если Тип = "ТаблицаЗначений" Тогда
        
        сзКолонки = СоздатьОбъект("СписокЗначений");
        Для СчЦ = 1 По Объект.КоличествоКолонок() Цикл
            ИмяКолонки = Объект.ПолучитьПараметрыКолонки(СчЦ);
            сзКолонки.ДобавитьЗначение(ИмяКолонки);
        КонецЦикла;
        КоличКолонок = сзКолонки.РазмерСписка();
        
        Результат = "["+РазделительСтрок;
        КоличСтрок = Объект.КоличествоСтрок();
        Для СчСтрок = 1 По КоличСтрок Цикл
            
            Результат = Результат + " {";
            
            Для СчК = 1 По сзКолонки.РазмерСписка() Цикл
                
                Ключ = сзКолонки.ПолучитьЗначение(СчК);
                Значение = Объект.ПолучитьЗначение(СчСтрок,Ключ);
                Результат = Результат + "  " + ЗначениеВJSON(Ключ) + ": " + ЗначениеВJSON(Значение) + ?(СчК < КоличКолонок, ","+РазделительСтрок, "");
                
            КонецЦикла;
            
            Результат = Результат + РазделительСтрок + " }";
            Если СчСтрок < КоличСтрок Тогда
                Результат = Результат + ","+РазделительСтрок;
            КонецЕсли;
            Состояние("Обработка таблицы значений "+Окр(СчСтрок/КоличСтрок*100,2)+"%");
            
        КонецЦикла;
        
        Результат = Результат + РазделительСтрок + "]";
        Возврат Результат;

        
    ИначеЕсли Тип = "СписокЗначенийбезКлючей" Тогда //без ключей
        
        Количество = Объект.РазмерСписка();
        Результат = "[";
        
        Для н = 1 ПО Количество Цикл
            Результат = Результат + ЗначениеВJSON(Объект.ПолучитьЗначение(н)) + ?(н < Количество, ", ", "");
        КонецЦикла;
        
        Результат = Результат + "]";
        Возврат Результат;
        
    ИначеЕсли Тип = "СписокЗначений" Тогда //с ключами
        н = 0;
        Количество = Объект.РазмерСписка();
        Результат = "{";
        
        Для СчЦ = 1 По Количество Цикл
            Ключ = "";
            Значение = Объект.ПолучитьЗначение(СчЦ,Ключ);
            Результат = Результат + ЗначениеВJSON(Ключ) + ": " + ЗначениеВJSON(Значение) + ?(СчЦ < Количество, ", ", "");
        КонецЦикла;
        Результат = Результат + "}";
        Возврат Результат;
        
    //ИначеЕсли (Тип = "СтрокаТаблицыЗначений") Тогда
    //    
    //    Результат = "{";
    //    Колонки = Объект.Владелец().Колонки;
    //    Количество = Колонки.Количество();
    //    
    //    Для н = 0 ПО Количество - 1 Цикл
    //        Ключ = Колонки[н].Имя;
    //        Результат = Результат + ЗначениеВJSON(Ключ) + ": " + ЗначениеВJSON(Объект[Ключ]) + ?(н < Количество - 1, ", ", "");
    //    КонецЦикла;
    //    
    //    Результат = Результат + "}";
    //    Возврат Результат;
    //    
    //ИначеЕсли Тип = "ЭлементСпискаЗначений" Тогда
    //    Возврат ЗначениеВJSON(Объект.Значение);
        
    ИначеЕсли Тип = "Строка" Тогда
        Результат = СокрЛП(Объект);
        
        Результат = СтрЗаменить(Результат, "\",            "\\");
        Результат = СтрЗаменить(Результат, "/",            "\/");
        Результат = СтрЗаменить(Результат, """",           "\""");
        Результат = СтрЗаменить(Результат, "'",            "\u0027");//"\'"
        Результат = СтрЗаменить(Результат, Симв(13),       "\r");
        Результат = СтрЗаменить(Результат, СимволТабуляции,"\t");
        Результат = СтрЗаменить(Результат, Симв(10),       "\n");
        Результат = СтрЗаменить(Результат, Симв(29),       "\u001D");
        //Результат = СтрЗаменить(Результат, ".",               "\u002E");
        
        Возврат """" + Результат + """";
        
    ИначеЕсли Тип = "Число" Тогда
        Возврат Формат(Объект, "Ч");
        
    //ИначеЕсли Тип = "Перечисление" Тогда
    //    Возврат Формат(Объект, "БЛ=false; БИ=true");
        
    ИначеЕсли Тип = "Дата" Тогда
        Возврат ЗначениеВJSON(""+ДатаГод(Объект)+"-"+ДатаМесяц(Объект)+"-"+ДатаЧисло(Объект));
        
    ИначеЕсли Тип = "НеизвестныйОбъект" Тогда 
            Возврат "null";
        
    Иначе
        Возврат ЗначениеВJSON(Строка(Объект));
        
    КонецЕсли;    
    
КонецФункции // ЗначениеВJSON()


Функция Инициализация()
    wHTTP = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");             
    Скрипт= СоздатьОбъект("MSScriptControl.ScriptControl");
    Скрипт.language="javascript";
    Скрипт.AddObject("wHTTP",wHTTP);
    Скрипт.Eval("wHTTP.Option(2)=1251"); // установка кодировки страницы
    Скрипт.Eval("wHTTP.Option(4)=13056");//intSslErrorIgnoreFlags Игноировать ошбибки при SSL соединении
    Скрипт.Eval("wHTTP.Option(6)=true");//blnEnableRedirects Разрешить перенаправления
    Скрипт.Eval("wHTTP.Option(12)=true");//blnEnableHttpsToHttpRedirects Разрешить перенаправления с защищенного на не защиещенное соединение    
    
    Возврат wHTTP;
КонецФункции

//*******************************************
Процедура Сформировать()
    КонтрольнаяСуммаПО="d5b7df0fdfdfe745ecc0e3fe80091fc8"; //Контрольная сумма 1cv77.exe можно получить с помощью ТоталКомандера
    Клиент=СоздатьОбъект("СписокЗначений");
    Клиент.ДобавитьЗначение("1c Аптечная сеть","name");
    Клиент.ДобавитьЗначение("7.7","version");
    Клиент.ДобавитьЗначение(ПолучитьGUID(),"id");
    Клиент.ДобавитьЗначение(КонтрольнаяСуммаПО,"token");
    
    МаркаТ=СокрЛП(СтрЗаменить(Марка,Симв(10),"")); 
    МаркаТ=СокрЛП(СтрЗаменить(МаркаТ,Симв(13),"")); 
    МаркаТ=СокрЛП(СтрЗаменить(МаркаТ,Симв(29),"")); 
    
    Разделитель=Симв(29);
    Если Сред(СокрЛП(МаркаТ), 38)="" Тогда
        Маркировка = Лев(СокрЛП(МаркаТ), 31) + Разделитель + Сред(СокрЛП(МаркаТ), 32, 6);
    Иначе
        Маркировка = Лев(СокрЛП(МаркаТ), 31) + Разделитель + Сред(СокрЛП(МаркаТ), 32, 6) + Разделитель + Сред(СокрЛП(МаркаТ), 38);
    КонецЕсли;
    Сообщить(""+КодироватьBase64(СокрЛП(Маркировка)));
    
    Маркировка=КодироватьBase64(СокрЛП(Маркировка));
    СпМарка=СоздатьОбъект("СписокЗначений");
    СпМарка.ДобавитьЗначение(Маркировка);
    
      Спис=СоздатьОбъект("СписокЗначений");
      Спис.ДобавитьЗначение(СпМарка,"codes");
    Спис.ДобавитьЗначение(Клиент,"client_info");
    
    
    Параметры=ЗначениеВJSON(Спис);
    
    тхт=СоздатьОбъект("Текст");
    тхт.ДобавитьСтроку(Параметры);
    тхт.Записать(КаталогИБ()+"token.json");
    
    
    УРЛ="https://esm-emu.ao-esp.ru";
    //УРЛ="https://tspiot.sandbox.crptech.ru";
    //УРЛ="https://127.0.0.1:51401";
    Метод="/api/v1/codes/checkoffline"; 
    
    Соединение=Инициализация();
    Соединение.Open("POST", УРЛ+Метод, 0); 
    Соединение.setRequestHeader("Content-Type","application/json");
    Соединение.Send(СокрЛП(Параметры));
    //Соединение.Send();
    Статус = Соединение.status();
    СтатусТекст = Соединение.statusText();
    Рез = Соединение.ResponseText();
    
    Если Статус=200 Тогда
        Ответ=глРазборJSON(Рез);
        СрокДействия=Ответ.Получить("accessTokenExpiration");
    Иначе
        Предупреждение("Авторизация не удалась!"+РазделительСтрок+СтатусТекст);
        тхт=СоздатьОбъект("Текст");
        тхт.ДобавитьСтроку(Рез);
        тхт.Записать(КаталогИБ()+"token.txt");
    КонецЕсли;
    
    РазобратьСписок(Ответ);
    
    
КонецПроцедуры

Процедура Инфо()
    УРЛ="https://esm-emu.ao-esp.ru";
    УРЛ="https://tspiot.sandbox.crptech.ru";
    УРЛ="https://127.0.0.1:51401";
    Метод="/api/v1/info";
    
    Соединение=Инициализация();
    Соединение.Open("POST", УРЛ+Метод, 0); 
    Соединение.setRequestHeader("Content-Type","application/json");
    Соединение.Send();
    Статус = Соединение.status();
    СтатусТекст = Соединение.statusText();
    Рез = Соединение.ResponseText();
    
    Если Статус=200 Тогда
        Ответ=глРазборJSON(Рез);
        СрокДействия=Ответ.Получить("accessTokenExpiration");
    Иначе
        Предупреждение("Авторизация не удалась!"+РазделительСтрок+СтатусТекст);
        тхт=СоздатьОбъект("Текст");
        тхт.ДобавитьСтроку(Рез);
        тхт.Записать(КаталогИБ()+"token.txt");
    КонецЕсли;
    
    РазобратьСписок(Ответ);
КонецПроцедуры

Марка="0104601907002805215uNcZ0ERKH2s191F01392eIbT0hNA/vwWYACBeyx6V2l7Bb91AoYqD8HzBcGu0Qc=";

Вступайте в нашу телеграмм-группу Инфостарт

ТС ПИоТ 1с 7.7

См. также

Оптовая торговля Розничная торговля ККМ ЭДО и ОФД Обмен с ГосИС НДС 22% Системный администратор Программист Оперативный учет 7.7 Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Россия Платные (руб)

Поддерживается ТС ПИоТ. Передача дополнительных тегов в чек с 01.09.2025 согласно приказа от 26.03.2025 № ЕД-7-20/236@. Поддерживаются новые ставки НДС 5%, 7% и 22% при продаже через ККТ. Подключение фискального регистратора к 1С 7.7 в режиме онлайн-кассы в соответствии с 54-ФЗ. Поддержка актуальных версий драйверов ККТ: ДТО 10 и ДТО 8 для Атол, 5.16-5.20 для Штрих-М / Торговый баланс М (PosCenter). Поддержка операторов ЭДО: Сбис (Тензор), Контур.Диадок, ЭДО лайт, Калуга Астрал, Такском и пр. Поддержка оптовой и розничной продажи маркированной продукции (алкоголь, табак, обувь, лекарства, шины, одежда, белье, парфюмерия, молочная продукция, вода, пиво, автозапчасти, моторное масло и пр.). Поддержка онлайн и офлайн (через Локальный Модуль ЧЗ) проверки маркировки в разрешительном режиме (РР).

2999 руб.

28.03.2017    522348    4755    3638    

2564

Кассовые операции ККМ Системный администратор Программист Бухгалтер 1С:Предприятие 7.7 1С:Предприятие 8 1C:Бухгалтерия 1C77 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Программа для управления ККМ Атол и Штрих нового поколения (он-лайн ККТ под 54-ФЗ) с помощью текстового файла (ini файла) с изменениями включена 1 лицензия Для любых программ, которые умеют работать с текстовыми файлами. Внутри комплекта есть готовые к использованию обработки

6000 руб.

31.07.2017    182981    619    611    

217

ККМ Эквайринг/ридер магнитных карт НДС 22% Системный администратор Программист Оперативный учет 7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 Оптовая торговля, дистрибуция, логистика Россия Управленческий учет Платные (руб)

Данная обработка предназначена для работы с ККТ АТОЛ на платформе 5.0 с драйверами АТОЛ версии 10.10.8.0 и выше для 1С:Торговля и Склад 9.2 и 1С: Комплексная 4.5 (в соответствии с 54-ФЗ). Проста в установке и настройке. Реализован учет маркируемой продукции по ФФД 1.2. В поставку включена поддержка эквайринга на уровне драйверов (в данный момент – Сбер), реализован учет частичных оплат, добавлены эмуляторы кассы и эквайрингового терминала, добавлена обработка генерации тестовых кодов маркировки. Поддерживаются ставки НДС 5%, 7% и 22%.

3000 руб.

20.08.2020    31720    84    86    

77

Кассовые операции Розничная торговля ККМ Программист 1С:Предприятие 7.7 1С:Торговля и склад 7.7 Бухгалтерский учет Управленческий учет Абонемент ($m)

Обработка позволяет печатать чеки для кассы Штрих Online из 1С 7.7 (Торговля и склад). Есть возможность печать чеков из разных касс. Также можно подставить функционал в любую конфигурацию.

1 стартмани

18.02.2021    10680    4    Drfreeman    10    

1

Файловый обмен (TXT, XML, DBF), FTP ККМ Бухгалтер Пользователь Оперативный учет 7.7 1С:Торговля и склад 7.7 Бухгалтерский учет Управленческий учет Абонемент ($m)

Данная обработка предназначена для выгрузки файла из программы 1С: Предприятие 7.7 Конфигурации «Торговля и Склад 9.2» в файл CSV для загрузки в кассу МТС. Тестирование проводилось на релизах 937 и 998. В теории должна работать на всех типовых релизах конфигурации «Торговля и Склад 9.2».

1 стартмани

07.02.2021    11766    5    Kuzya_brаtsk    1    

7
Для отправки сообщения требуется регистрация/авторизация