Итак, начнем с небольшого предисловия. Есть конфигурация Комильфо: Салон Красоты, поддержка которой была прекращена несколько лет назад, но в салоне, который относится к моей организации, она до сих пор используется. Как вы прекрасно знаете, государство обязало фирмы, работающие с наличными деньгами в принудительном порядке использовать онлайн кассы. И вот, руководство салона решило приобрести Атол 11Ф, но оказалось, что он не поддерживается данной конфигурацией. Тут стоит сказать несколько слов, о принципе работы с торговым оборудованием, который заложен в эту конфигурацию: как и, наверное, во всех конфигурациях от франчайзи 1С-Рарус, список доступного торгового оборудования «зашит» в специальной библиотеке, соответственно, без участия Раруса что-либо добавить в нее не представляется возможным. На просьбу добавить функционал для работы с Атол 11-Ф, была озвучена стоимость работ на 100 часов (а мы все, примерно, представляем сколько стоит 1 час работы крупного франчайзи) и руководство решило, что справится своими (т.е. моими) силами. Все, с предисловием закончили, теперь можно переходить к сути.
Я не буду останавливаться на подключении самого оборудования, так как все эти процедуры, уже были подробно описаны тут и тут. Было решено пойти по пути наименьшего сопротивления — взять готовый функционал из типовых конфигураций и перенести его. Как раз в феврале вышел свежий релиз УПП 1.3, в котором была реализована поддержка онлайн ККМ. Из УПП 1.3 нам понадобятся следующие объекты:
-
Обработки — ТОСервер и ТОНастройка.
-
Справочники — КассыККМ, ТорговоеОборудование и ОбработкиОбслуживанияТО.
-
Документы — КассоваяСмена. В текущих релизах УПП, он сделан на управляемых формах, поэтому если вы не хотите переписывать его на обычные формы, то не забудьте включить использование управляемых форм в толстом клиенте в обычном режиме.
-
Перечисления – ТООшибкиОбщие, СтатусыКассовойСмены, ТипыРасчетаДенежнымиСредствами.
-
Регистры сведений – ТорговоеОборудование.
-
Общие формы – ФормаНастройкиУниверсальныйДрайвер, ПараметрыФискализации.
-
Общие модули – МенеджерОборудованияВызовСервера, МенеджерОборудованияКлиентСервер, МенеджерОборудованияКлиент, МенеджерОборудованияСервер, МенеджерОборудованияКлиентСерверПереопределяемый, МенеджерОборудованияКлиентПовтИсп, КассовыеСменыКлиент, КассовыеСменыВызовСервера.
В модуле обычного приложения:
-
Определяем новые глобальные переменные:
Перем глПодключаемоеОборудование Экспорт;
Перем глСерверТО Экспорт;
-
В процедуре
ПриНачалеРаботыСистемы()
прописываем подготовку данных для работы торгового оборудования:
МенеджерОборудованияКлиент.ПриНачалеРаботыСистемы()
-
Прописываем функцию для взаимодействия с ТО:
Функция ПолучитьСерверТО() Экспорт
Если глСерверТО = Неопределено Тогда
глСерверТО = Обработки.ТОСервер.Создать();
КонецЕсли;
Возврат глСерверТО;
КонецФункции // ПолучитьСерверТО()
Далее, идем в документ, который отвечает за печать чека, в моем случае это был документ «Чек».
При открытии документа подключаем работу с ТО:
ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
При закрытии – отключаем:
ПолучитьСерверТО().ОтключитьКлиента(ЭтаФорма);
Так же нам необходимо внешнее событие :
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Не ВводДоступен() Тогда
Возврат;
КонецЕсли;
ПолучитьСерверТО().ОбработатьВнешнееСобытие(Источник, Событие, Данные, ЭтаФорма);
КонецПроцедуры // ВнешнееСобытие()
И функция для поддержки ТО:
Функция ПоддерживаетсяВидТО(Вид) Экспорт
Результат = Ложь;
Если Вид = Перечисления.ВидыТорговогоОборудования.СканерШтрихКода
Или Вид = Перечисления.ВидыТорговогоОборудования.СчитывательМагнитныхКарт
Или Вид = Перечисления.ВидыТорговогоОборудования.ДисплейПокупателя
Или Вид = Перечисления.ВидыТорговогоОборудования.ЭлектронныеВесы
Или Вид = Перечисления.ВидыТорговогоОборудования.ФискальныйРегистратор
Или Вид = Перечисления.ВидыТорговогоОборудования.ТерминалСбораДанных
Или Вид = Перечисления.ВидыТорговогоОборудования.ЭквайринговаяСистема
Или Вид = Перечисления.ВидыТорговогоОборудования.ККТ Тогда
Результат = Истина;
КонецЕсли;
Возврат Результат;
КонецФункции // ПоддерживаетсяВидТО()
Теперь меняем процедуру, которая отвечает за печать самого чека.
Процедура ОсновныеДействияФормыПробитьЧекНовый(Кнопка)
Перем Ответ;
Перем Отказ;
Если ПровестиИРаспечататьЧек(Ответ, Отказ, Истина) Тогда
флПробит = Истина;
Попытка
ЭтотОбъект.Записать();
Исключение
КонецПопытки;
ПраваДоступа.НеДоступностьРедактированияЭлементовНаФорме(ЭлементыФормы);
ЭлементыФормы.ДействияФормы.Доступность = Ложь;
ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ПробитьЧекНовый.Доступность = Ложь;
Иначе
Предупреждение(?(Отказ, "Возможны расхождения ИБ и ленты ФР! ", "") + Ответ);
КонецЕсли;
КонецПроцедуры
И добавляем в модуль документа две функции:
Функция ПровестиИРаспечататьЧек(Ответ, Отказ, РучнойРежимПечати = Ложь) Экспорт
Результат = Истина;
Ответ = "";
Попытка
Записать();
Исключение
Ответ = "Ошибка при попытке проведения документа!";
Отказ = Истина;
Результат = Ложь;
Возврат Результат;
КонецПопытки;
Если ФлПробит Тогда
Возврат Результат;
КонецЕсли;
Если КассаККМ.ФормироватьНефискальныеЧеки
И КассаККМ.РучнойРежимФормирования
И Не РучнойРежимПечати Тогда
Возврат Результат;
КонецЕсли;
МассивФР = ПолучитьСерверТО().ПолучитьСписокУстройств(
Перечисления.ВидыТорговогоОборудования.ФискальныйРегистратор,
КассаККМ);
МассивККТ = ПолучитьСерверТО().ПолучитьСписокУстройств(
Перечисления.ВидыТорговогоОборудования.ККТ,
КассаККМ);
МассивФУ = Новый Массив();
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивФУ, МассивФР);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивФУ, МассивККТ);
ФУ = Неопределено;
СписокФУ = Новый СписокЗначений();
Вид = Неопределено;
Представление = Неопределено;
Для каждого ФУ Из МассивФУ Цикл
ПолучитьСерверТО().ПолучитьПредставлениеУстройства(ФУ, Вид, Представление);
СписокФУ.Добавить(ФУ, Представление);
КонецЦикла;
КоличествоФУ = СписокФУ.Количество();
Если КоличествоФУ = 0 Тогда
Ответ = "";
Отказ = Истина;
Результат = Истина;
Возврат Результат;
ИначеЕсли КоличествоФУ = 1 Тогда
ФУ = СписокФУ[0].Значение;
Иначе
ФУ = СписокФУ.ВыбратьЭлемент("Необходимо выбрать фискальное устройство");
Если ФУ = Неопределено Тогда
Ответ = "Операция отменена пользователем.";
Отказ = Истина;
Результат = Ложь;
Возврат Результат;
Иначе
ФУ = ФУ.Значение;
КонецЕсли;
КонецЕсли;
ОшибкаТО = Перечисления.ТООшибкиОбщие.ПустаяСсылка();
//У меня, организация не занимается продажей алкоголя, поэтому чтобы не переносить лишнее, было решено сразу установить "Ложь".
//Если у вас есть торговля алкоголем, тогда надо дополнительно перенести подсистему ИнтеграцияЕГАИС и смотреть, как реализовано
//взаимодействие с ЕГАИС в документе ЧекККМ, функция ПровестиИРаспечататьЧек.
ИспользуетсяРегистрацияВЕГАИС = Ложь;
ВидФУ = ПолучитьСерверТО().ПолучитьВид(ФУ);
Если ВидФУ = Перечисления.ВидыТорговогоОборудования.ККТ Тогда
ОписаниеПКС = КассовыеСменыВызовСервера.ОписаниеПоследнейКассовойСмены(ФУ);
Если ОписаниеПКС = Неопределено ИЛИ ОписаниеПКС.Статус = Перечисления.СтатусыКассовойСмены.Закрыта Тогда
Ответ = "Кассовая смена не открыта";
Отказ = Истина;
Результат = Ложь;
Возврат Результат;
КонецЕсли;
Результат = ФискализироватьЧек(ФУ, Ответ, Отказ);
Если Результат Тогда
ЧекПробитНаККМ = Истина;
Попытка
Записать(РежимЗаписиДокумента.Запись);
Исключение
Ответ = "Не удалось записать документ с установленными параметрами пробитого чека.";
Отказ = Истина;
Результат = Ложь;
КонецПопытки;
КонецЕсли;
Возврат Результат;
КонецЕсли;
ДопДанные = Новый Структура;
НомерСменыККМ = Число(СвязныйЧек.НомерСмены); //Номер смены (известен для копии чека)
НомерЧекаККМ = Число(СвязныйЧек.НомерЧека);
ТаблицаТоваров = ОплатаЧеком.Выгрузить();
ОшибкаТО = ПолучитьСерверТО().ПечатьЧека(ФУ, "", НомерЧекаККМ, НомерСменыККМ,ТаблицаТоваров, Ссылка.СуммаДокумента,0,Ложь, ДопДанные);
Если НЕ ЗначениеЗаполнено(ОшибкаТО) Тогда
ЧекПробитНаККМ = Истина;
Попытка
Записать(РежимЗаписиДокумента.Запись);
Исключение
Ответ = "Не удалось записать документ с установленными параметрами пробитого чека.";
Отказ = Истина;
Результат = Ложь;
КонецПопытки;
Иначе
Ответ = ПолучитьСерверТО().ПолучитьТекстОшибкиФРТО(ОшибкаТО);
Отказ = Истина;
Результат = Ложь;
КонецЕсли;
Возврат Результат;
КонецФункции // ПровестиИРаспечататьЧек()
Функция ФискализироватьЧек(ФУ, Ответ, Отказ)
Ответ = "";
Отказ = Ложь;
Результат = Истина;
ПараметрыЧека = Неопределено;
ПодготовитьДанныеДляФискализацииЧека(Ссылка, ПараметрыЧека);
ОбъектДрайвера = Неопределено;
ОбработкаОбслуживания = Неопределено;
ПолучитьСерверТО().ПолучитьОбъектДрайвера(ФУ, ОбработкаОбслуживания, ОбъектДрайвера);
ОшибкаТО = ОбработкаОбслуживания.ФискализироватьЧек(ОбъектДрайвера, ПараметрыЧека);
Если ЗначениеЗаполнено(ОшибкаТО) Тогда
Ответ = ОбъектДрайвера.ОписаниеОшибки;
Отказ = Истина;
Результат = Ложь;
КонецЕсли;
Возврат Результат;
КонецФункции
И одну процедуру:
Процедура ПодготовитьДанныеДляФискализацииЧека(ЧекККМ, ОбщиеПараметры)
ОбщиеПараметры = МенеджерОборудованияКлиентСервер.ПараметрыОперацииФискализацииЧека();
ОрганизацияЧека = ЧекККМ.КассаККМ.Владелец;
// Шапка
ОбщиеПараметры.ДокументОснование = ЧекККМ;
Если ЧекККМ.ХозОперация = Перечисления.РежимЧека.Чек Тогда
ОбщиеПараметры.ТипРасчета = ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств");
ИначеЕсли ЧекККМ.ХозОперация = Перечисления.РежимЧека.ЧекНаВозврат Тогда
ОбщиеПараметры.ТипРасчета = ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ВозвратДенежныхСредств")
Иначе
Сообщить("Копии чека, больше не используются!");
Возврат;
КонецЕсли;
ОбщиеПараметры.Кассир = ЧекККМ.Ответственный.Наименование;
ОбщиеПараметры.Электронно = Ложь; // Чек будет напечатан
ОбщиеПараметры.Отправляет1СSMS = Ложь;
ОбщиеПараметры.Отправляет1СEmail = Ложь;
ОбщиеПараметры.ОрганизацияНазвание = ОрганизацияЧека.ПолноеНаименование;
ОбщиеПараметры.ОрганизацияИНН = ОрганизацияЧека.ИНН;
ОбщиеПараметры.ОрганизацияКПП = ОрганизацияЧека.КПП;
ПорядокНалогообложения = Неопределено;
ДопДанные.Свойство("ПорядокНалогообложения", ПорядокНалогообложения);
ОбщиеПараметры.КодСистемыНалогообложения = МенеджерОборудованияКлиентСервер.КодСистемыНалогообложения
(ОрганизацияЧека, ЧекККМ.Дата, ПорядокНалогообложения);
// Оплаты
ОплатыЧека = ЧекККМ.ПолучитьОбъект().ИтогиОплатПоТипам();
СуммаТипаОплаты = ОплатыЧека.Получить(Перечисления.ВидыОплаты.Наличные);
Если СуммаТипаОплаты <> 0 И СуммаТипаОплаты <> Неопределено Тогда
СтрокаОплаты = Новый Структура();
СтрокаОплаты.Вставить("ТипОплаты", 0);
СтрокаОплаты.Вставить("Наименование", "Наличная оплата");
СтрокаОплаты.Вставить("Сумма", СуммаТипаОплаты);
ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты);
КонецЕсли;
СуммаТипаОплаты = ОплатыЧека.Получить(Перечисления.ВидыОплаты.Безналичные);
Если СуммаТипаОплаты <> 0 И СуммаТипаОплаты <> Неопределено Тогда
СтрокаОплаты = Новый Структура();
СтрокаОплаты.Вставить("ТипОплаты", 1);
СтрокаОплаты.Вставить("Наименование", "Платежная карта");
СтрокаОплаты.Вставить("Сумма", СуммаТипаОплаты);
ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты);
КонецЕсли;
// Товарные позиции
Для Каждого СтрокаТовара Из ЧекККМ.ОплатаЧеком Цикл
СтрокаЧека = МенеджерОборудованияКлиентСервер.ПараметрыФискальнойСтрокиЧека();
// Обязательные поля
СтрокаЧека.Наименование = СтрокаТовара.Номенклатура.Наименование; // Наименовнование предмета расчета
СтрокаЧека.Количество = СтрокаТовара.Количество; // Количество предмета расчета
СтрокаЧека.Цена = СтрокаТовара.Цена; // Цена без учета скидок и наценок
СтрокаЧека.Сумма = СтрокаТовара.Сумма; // Cтоимость предмета расчета с учетом скидок и наценок
СтрокаЧека.СтавкаНДС = МенеджерОборудованияКлиентСервер.ПолучитьСтавкуНДСДляФискализацииЧека
(СтрокаТовара.Номенклатура.СтавкаНДС, ПорядокНалогообложения); // Cтавка НДС в %
//СтрокаЧека.Штрихкод = СокрЛП(СтрокаТовара.ШтрихКод); // Штрихкод
// Дополнительные реквизиты начиная с ФФД 1.1
СтрокаЧека.КодПризнакаСпособаРасчета = 4; // Код признака способа расчета (Таблица 25 документа ФФД)
СтрокаЧека.КодПризнакаПредметаРасчета = ?(СтрокаТовара.Номенклатура.Услуга,4,1); // Код признака предмета расчета (Таблица 25 документа ФФД)
ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека);
КонецЦикла;
КонецПроцедуры
Ну и последнее, что нам осталось, в общем модуле КассовыеСменыВызовСервера, в процедуре
ПослеВыполненияКомандыФискальнымУстройством(ПараметрыКоманды) Экспорт
В части, где выполняются действия с обработанными чеками после закрытия смены, прописать свою обработку для закрытия смены.
Если (ПараметрыКоманды.ВыполняемаяКоманда = "CloseShift" ИЛИ ПараметрыКоманды.ВыполняемаяКоманда = "ЗакрытьСмену")
И ПараметрыКоманды.ОбрабатыватьЧекиККМ = Истина Тогда
//ЗакрытиеКС = Обработки.ЗакрытиеКассовойСмены.Создать();
//ЗакрытиеКС.Дата = КассоваяСменаОбъект.Дата;
//ЗакрытиеКС.КассаККМ = КассоваяСменаОбъект.КассаККМ;
//ЗакрытиеКС.ОбработкаЧековККМ(Справочники.Склады.ПустаяСсылка());
ЗакрытиеКС = Обработки.ЗакрытиеСмены.Создать();
ЗакрытиеКС.ОбработкаЧековККМ(КассоваяСменаОбъект.Дата, КассоваяСменаОбъект.КассаККМ.Владелец);
КонецЕсли;
Ах да, не знаю исправили эту ошибку или нет, но в феврале, при закрытии смены, всегда выдавало ошибку:
Ошибка вызова метода <ОбъектДрайвера.ЗакрытьСмену>.
Ошибка при вызове метода контекста (XMLЗначение): Несоответствие типов (параметр номер ‘2’)
Все дело было в функции
ПолучитьПараметрыСостоянияСменыИзXMLПакета(Данные, НомерСмены)
в общем модуле МенеджерОборудованияВызовСервера. Необходимо заменить на следующий код:
Функция ПолучитьПараметрыСостоянияСменыИзXMLПакета(Данные, НомерСмены) Экспорт
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(Данные);
ЧтениеXML.ПерейтиКСодержимому();
Параметры = МенеджерОборудованияКлиентСервер.ПараметрыНормализуемыхФискальныхДанных();
Параметры.НомерСменыККТ = НомерСмены;
Если ЧтениеXML.Имя = "StatusParameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Если ЧтениеXML.Прочитать() И ЧтениеXML.Имя = "Parameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Параметры.КоличествоНепереданныхФД = Число(ЧтениеXML.ЗначениеАтрибута("BacklogDocumentsCounter"));
Параметры.НомерПервогоНепереданногоФД = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentFirstNumber");
BacklogDocumentFirstDateTime = ЧтениеXML.ЗначениеАтрибута("BacklogDocumentFirstDateTime");
Если ЗначениеЗаполнено(BacklogDocumentFirstDateTime) Тогда
Параметры.ДатаПервогоНепереданногоФД = XMLЗначение(Тип("Дата"), BacklogDocumentFirstDateTime);
Иначе
Параметры.ДатаПервогоНепереданногоФД = Дата(1,1,1);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Параметры;
КонецФункции
Спасибо Алексею Васильеву.
Вот и все. Теперь через новую Обработку подключения оборудования загружаем обработки обслуживания и добавляем наш Атол 11Ф.
Время затраченное на обдумываение и реализацию, составило 2 рабочих дня и еще пару дней на отладку. Естественно, что в статье я не привожу полный код из перенесенных модулей и документов, но сразу скажу — в перенесенном «как есть» виде, он будет выдавать ошибки. Некоторые процедуры надо будет убрать, некоторые немного переделать, но все это быстро поддается отладке. Надеюсь, что данная статья будет вам полезна, если вы столкнетесь с похожей ситуацией. В случае возникновения каких-либо вопросов, можно задать их через ЛС.
P.S. На двух последних скриншотах полностью показаны все новые объекты, которые я переносил из УПП. Так как я решил сделать задел на будущее и полностью перейти на типовую работу с ТО, то объектов в подсистеме несколько больше, чем указано в статье.
P.P.S. Компания 1С, очень трепетно относится к лицензионному соглашению, а так как при доработке конфигурации используется код из УПП, то будет не лишним напомнить, что у вас должна быть приобретена лицензия на этот программный продукт.
Судя по описанию, у вас точно данный код взлетел? в конфигурации автосалон от рарус нет большинства реквизитов, не описали, как будет вводиться email и номер телефона. Как я помню нет реквизита ответственный, а вместо него автор. У кассы ккм нет реквизитов формировать не фискальные чеки. Также у вас применяются документа приходный кассовый ордер и расходный?
(1) Не скажу насчёт Автосалона, но для Комильфо Салон Красоты точно работает. С февраля все чеки печатаются только через 11ф, на сайте ОФД видны. Отправка чека по смс и на почту, пока не была реализована в текущих релизах, в УПП этих возможностей точно нет. Понятно, что код для разных конфигураций не будет совпадать с точностью до реквизита. Статья, по большей части, носит рекомендательный характер — откуда и какие именно части взять, которые отвечают за работу с онлайн кассами и доделать их под свои конфигурации.
(2) ааа, я думал автосалон тогда наверное да. Не думал вывести на форму реквизиты «Электронный чек» и «Вводить email или номер клиента», для настройки отправки чеков?
Обожаю замечательный стиль в коде:
1.
и вот это тоже, замечательно
2.
3.
4. Надо было бы отметить, что код для обычного приложения.
(4) с учётом того что выложено бесплатно и даже не за стартмани — и за это огромное спасибо. Автору от меня плюс.
(3) Конечно думал, но пока такой срочной необходимости в электронных версиях чеков нет.
(7) это с какой стороны посмотреть. Автор лично вам ничем не обязан, и мог бы не тратить на подготовку публикации ни пяти минут, ни одной. Тем не менее он это сделал и вы можете брать и пользоваться его кодом как полностью, так и заменяя то, что вас не устраивает, при этом вы не платите ни копейки. В целях понимания логики работы он достаточно полезный, на универсальное и рабочее во всех случаях решение не претендует — это по сути полуфабрикат. Поэтому извините, но неконструктивно. Как по мне — так лучше с «найтипокоду», чем вообще ничего и каждый будет ковыряться самостоятельно.
(4) Со вторым замечанием согласен, в первым нет, но поправил, третье — это код самих разработчиков 1С, четвертое — вы невнимательно читали, там где перечислены объекты для переноса, сказано про обычное приложение.
(0)
Какое-то время назад я, разрабатывая индивидуальную конфигурацию для одной из организаций, решил использовать некоторые механизмы (давно отлаженные и отработанные) из типовой конфигурации от 1С. Но, поскольку, в организации шла борьба за чистоту программного обеспечения, решил проконсультироваться в компании 1С: будет ли нарушением лицензионного соглашения использование в собственной (индивидуальной) конфигурации объектов и (или) фрагментов кода из типовой конфигурации 1С? Ответ был однозначным: использование объектов, а также фрагментов программного кода типовых конфигурации без приобретения коробочного продукта с конфигурацией, фрагменты которой были использованы, является нарушением лицензионного соглашения с компанией 1С.
Таким образом, для того, чтобы использовать вышеприведенную методику подключения ККТ онлайн и сохранить чистоту программного обеспечения в плане лицензирования, потребуется как минимум приобретение коробочного продукта 1С:УПП, рекомендованная цена которого на дату публикации составляет 223 000 руб. Стоит призадуматься…
(12) Да, я тоже думал на этот счет, но так как у меня есть лицензионная УПП + ИТС, то проблем не возникло. На всякий случай, добавил этот момент в статью. Спасибо.
(12) с одной стороны как бы да. С другой стороны ведь очевидно, что при условии доступности исходного кода никто не мешает переписать его до полной неузнаваемости, использовав вместо оригинальных конструкций синонимические, и другие имена. После такой модификации будет крайне сложно доказать что это один и тот же код.
(12) Это все равно, что создать лицензию на алфавит. Абсурдность такой позиции («использование … фрагментов программного кода») очевидна и не доказуема с юридической точки зрения.Автору большой и жирный +
(14) (15) И тем не менее… Как бы абсурдно это ни звучало…
(16) Я же не против этого. Я только обращаю, Ваше, внимание на то, что строка кода «Пока Выборка.Следующий() Цикл», является фрагментом используемым в типовых конфигурациях 1с. Со всеми вытекающими последствиями.Вывод сделайте сами
(17) Синтаксические конструкции языка 1С под ограничения лицензионного соглашения не попадают, как и не охраняются законом о защите авторских прав, так как они являются неотъемлемой частью встроенного языка. Поэтому использование вышеприведенной конструкции никаких последствий не повлечет и повлечь не может.
Речь идет о фрагментах кода, выполняющих функционал, специфичный для определнной типовой конфигурации 1С. Естественно, написать такой же функционал самостоятельно — можно, а просто взять и скопировать из типовой конфигурации — нет, так как см. (16).
(18) Отлично, что не попадает мы знаем, но более интересно (и не только мне) будет прочитать, какие существуют формализованные критерии оценки программного кода, который попадает под лицензионное соглашение? Только не общие слова.
(19) Поизучайте материал по ссылке из (16). «Общие слова» именно оттуда.
В документации Атолла есть подробное описание интерфейса драйвера. Куча примеров для многих языков. Можно формировать чеки даже из Excel. К чему этот ажиотаж по 54ФЗ?
(21) в основном стоит задача подключиться к кассе стандартными средствами без своих велосипедов или с минимальными, используя уже имеющиеся наработки для обычных касс.
с выходом ут10.3.43 с поддержкой ффд 1.05 и прочих статья несколько устарела (
(21) Здравствуйте, примеры из эксель находятся тут?
C:Program Files (x86)ATOLDrivers8SamplesFprnMExcel2000ExcelEx.xls
Они точно под 54фз или только под древние драйвера?
(24) Примеры описывают взаимодействие с интерфейсом драйвера. И к 54ФЗ имеют косвенное отношение.
Из опыта: на кассе успешно регистрируются операции, декларируемые в примерах; данные успешно уходят ОФД.
А можете напрямую обратиться к разработчику программы Комильфо — ООО «УмКо», тел 8(8422) 27 27 80, у них есть готовый модуль.
(18) не получится «просто взять и скопировать» — не взлетит код
все алгоритмы приходится адаптировать и модифицировать под свою конфигурацию.
короче говоря, не стоит заморачиваться.
Добрый день. Подскажите будет ли работать Ваша программа FR_Atol_Shtrih.exe с ККМ АТОЛ-92 F