54-ФЗ: Онлайн-кассы для 1С 8.1 УТ 10.2

0. Atom74 Atom74 (Atom74) 21 14.04.17 22:25 Сейчас в теме
Доработан и адаптирован функционал работы ККТ по 54_ФЗ на УТ 10.2 платформы 8.1. Код полностью открыт и внесены комментарии для самостоятельной доработки. Протестировано на Атол 11Ф. Распространяется как есть.

Перейти к публикации

Комментарии
1. Андрей Карпов (karpik666) 475 18.04.17 16:22 Сейчас в теме
Ааа, понял, то есть доработка до ут 10.3 понятно
2. Андрей Карпов (karpik666) 475 18.04.17 17:27 Сейчас в теме
Идея хорошая, только обновите пожалуйста скриншоты, а то вообще не читаемо
3. Роман Булкин (windows98a) 80 19.04.17 10:51 Сейчас в теме
Здравствуйте. Реализован ли функционал по поводу отправки чеков на email и sms?
4. Atom74 Atom74 (Atom74) 21 19.04.17 13:55 Сейчас в теме
Функционал отправки чеков на e-mail и sms не реализован, т.к. не понятно кто должен отправлять ОФД или продавец.
5. Мария Макарова (user738495) 20.04.17 15:57 Сейчас в теме
Добрый день! У нас очень старая УТ 10.2.2.5 нет справочника "Обработки обслуживания ТО", вместо него обработка "Торговое оборудование". С какого релиза будет работать ваша обработка?
6. Мария Макарова (user738495) 20.04.17 16:38 Сейчас в теме
(5) вопрос отпал, не внимательно прочитала описание.
7. Мария Макарова (user738495) 21.04.17 13:48 Сейчас в теме
При выполнении тестирования выходит сообщение:
"Тест не пройден. Порт недоступен ('5 555' is not a valid integer value)"
Оказалось, что компонента подключается, но драйвер (см. код ниже) определяется как НеизвестныйОбъект. Можете подсказать в каком направлении двигаться?

попытка	    
ПрогИД = "AddIn.ATOL_KKM_1C82_54FZ";
ПодключитьВнешнююКомпоненту(ПрогИД);
Драйвер = Новый (ПрогИД);
исключение
....
конецПопытки
...Показать Скрыть
8. Андрей Карпов (karpik666) 475 21.04.17 21:30 Сейчас в теме
(7) видимо неправильно задается порт в настройках, либо там просто ошибка, плюс скорее всего нужно переделать механизм подключения на внешнюю DLL. Также следует помнить, что при изменении формата обмена с ОФД, вам нужно опять дорабатывать ут 10.2, плюс нужно добавить форму для ввода email или телефона покупателя.
9. Atom74 Atom74 (Atom74) 21 23.04.17 07:33 Сейчас в теме
1.Параметры подключения надо взять из настройки родных драйверов от ККМ. Проходит ли тест на родных драйверах?
2.Зарегистрировать компоненту FprnM1C82_54FZ.dll.
3.Все новшества можно взять из последней редакции 10.3.
10. Мария Макарова (user738495) 24.04.17 18:14 Сейчас в теме
спасибо, разобрались. был не верно указан порт.
11. Мария Макарова (user738495) 25.04.17 10:47 Сейчас в теме
Я так понимаю, что смена открывается пробитием первого чека, а как закрыть смену? обработка Закрытие смены не работает в данной конфигурации?
12. Atom74 Atom74 (Atom74) 21 25.04.17 18:47 Сейчас в теме
Закрытие и отчеты через драйвера ККМ.
13. irina petrovich (kat__) 25.04.17 19:00 Сейчас в теме
добрый день!
для Атол 55Ф подойдет?
14. Atom74 Atom74 (Atom74) 21 26.04.17 07:32 Сейчас в теме
15. L33tBot L33tBot (L33tBot1) 30.04.17 09:02 Сейчас в теме
Никто не знает как печатать чеки по отделам. В таблицах ККТ он есть, а в модулях 1с не могу найти.
16. L33tBot L33tBot (L33tBot1) 30.04.17 11:10 Сейчас в теме
(15) Разобрался! В модуль добавил, чеки печатает по отделам. Вот только с гашением по отделам не выводит. Как быть?
17. irina petrovich (kat__) 04.05.17 21:05 Сейчас в теме
Как должна выглядеть строка параметров в регистре? приведите пример? автоматическое формирование ее не работает.
18. Atom74 Atom74 (Atom74) 21 05.05.17 08:00 Сейчас в теме
{"#",4238019d-7e49-4fc9-91db-b6b951d5cf8e,
{13,
{
{"S","P_MachineName"},
{"S",""}
},
{
{"S","P_PortNumber"},
{"N",1003}
},
{
{"S","P_BaudRate"},
{"N",3}
},
{
{"S","P_Model"},
{"N",67}
},
{
{"S","P_AccessPassword"},
{"S",""}
},
{
{"S","P_Password"},
{"S","30"}
},
{
{"S","P_PrintTax"},
{"B",1}
},
{
{"S","P_PrintBarCodeText"},
{"B",1}
},
{
{"S","P_Scale"},
{"S","200"}
},
{
{"S","P_ScaleQR"},
{"S","300"}
},
{
{"S","P_WriteLogFile"},
{"B",0}
},
{
{"S","P_IPAddress"},
{"S","127.0.0.1"}
},
{
{"S","P_IPPort"},
{"S","6 220"}
}
}
}
19. Денис Воронин (Denver322) 05.05.17 23:00 Сейчас в теме
При попытке печатать чек из чека ККМ выдает ошибку

{Документ.ЧекККМ(1659)}: Значение не является значением объектного типа (ФискализироватьЧек)
ОшибкаТО = ОбработкаОбслуживания.ФискализироватьЧек(ОбъектДрайвера, ПараметрыЧека);

Проверил в отладчике , на момент вывода процедуры , не заполнена таблица

мДанныеСервера.Оборудование , соответственно не находит обработку обслуживания, закрепленную за кассой. Функция находится в Обработке ТОСервер.ПолучитьПараметрСервераТО(ИмяПараметра, ТипПараметра)

Вопрос, где и когда должна заполнятся таблица оборудования, что бы к моменту попытки печати чека, она была заполнена. И предусмотрен ли какой либо механизм в доработанной вами программе, или надо что то допиливать.
20. Atom74 Atom74 (Atom74) 21 06.05.17 08:43 Сейчас в теме
"ПриОткрытии()" формы документа "ЧекККМ" надо добавить:

ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
21. Atom74 Atom74 (Atom74) 21 06.05.17 09:09 Сейчас в теме
Еще добавить в модуль формы документа "ЧекККМ":

Процедура ОсновныеДействияФормыЧекККМ(Кнопка)

	Перем Ответ;
	Перем Отказ;

	Если ПровестиИРаспечататьЧекККМ(Ответ, Отказ, ЭтаФорма, Истина) Тогда
		ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ЧекККМ.Доступность = Ложь;
	Иначе
		Предупреждение(?(Отказ, "Возможны расхождения ИБ и ленты ФР! ", "") + Ответ);
	КонецЕсли;

КонецПроцедуры

Процедура ПодготовитьДанныеДляФискализацииЧека(ЧекККМ, ОбщиеПараметры, ДопДанные)
	
	ОбщиеПараметры = МенеджерОборудованияКлиентСервер.ПараметрыОперацииФискализацииЧека();

	ОрганизацияЧека = ЧекККМ.КассаККМ.Владелец;
	// Шапка
	ОбщиеПараметры.ДокументОснование = ЧекККМ;
	ОбщиеПараметры.ТипРасчета = ?(ЧекККМ.ВидОперации=Перечисления.ВидыОперацийЧекККМ.Продажа,
		Перечисления.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств,
		Перечисления.ТипыРасчетаДенежнымиСредствами.ВозвратДенежныхСредств);
	ОбщиеПараметры.Кассир = ЧекККМ.Ответственный.Наименование;
	ОбщиеПараметры.Электронно = Ложь; // Чек будет напечатан
	ОбщиеПараметры.Отправляет1СSMS = Ложь;
	ОбщиеПараметры.Отправляет1СEmail = Ложь;
	ОбщиеПараметры.ОрганизацияНазвание = ОрганизацияЧека.НаименованиеПолное;
	ОбщиеПараметры.ОрганизацияИНН = ОрганизацияЧека.ИНН;
	ОбщиеПараметры.ОрганизацияКПП = ОрганизацияЧека.КПП;
	ПорядокНалогообложения = Неопределено;
	ДопДанные.Свойство("ПорядокНалогообложения", ПорядокНалогообложения);
	ОбщиеПараметры.КодСистемыНалогообложения = МенеджерОборудованияКлиентСервер.КодСистемыНалогообложения
		(ОрганизацияЧека, ЧекККМ.Дата, ПорядокНалогообложения);  
	// Оплаты	
	ОплатыЧека = ЧекККМ.ПолучитьОбъект().ИтогиОплатПоТипам();
	СуммаТипаОплаты = ОплатыЧека.Получить(Перечисления.ТипыОплатЧекаККМ.Наличные);
	Если СуммаТипаОплаты <> 0 И СуммаТипаОплаты <> Неопределено Тогда
		СтрокаОплаты = Новый Структура();
		СтрокаОплаты.Вставить("ТипОплаты", 0);
		СтрокаОплаты.Вставить("Наименование", "Наличная оплата");
		СтрокаОплаты.Вставить("Сумма", СуммаТипаОплаты);
		ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты);
	КонецЕсли;
	СуммаТипаОплаты = ОплатыЧека.Получить(Перечисления.ТипыОплатЧекаККМ.ПлатежнаяКарта);
	Если СуммаТипаОплаты <> 0 И СуммаТипаОплаты <> Неопределено Тогда
		СтрокаОплаты = Новый Структура();
		СтрокаОплаты.Вставить("ТипОплаты", 1);
		СтрокаОплаты.Вставить("Наименование", "Платежная карта");
		СтрокаОплаты.Вставить("Сумма", СуммаТипаОплаты);
		ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты);
	КонецЕсли;
	СуммаТипаОплаты = ОплатыЧека.Получить(Перечисления.ТипыОплатЧекаККМ.БанковскийКредит);
	Если СуммаТипаОплаты <> 0 И СуммаТипаОплаты <> Неопределено Тогда
		СтрокаОплаты = Новый Структура();
		СтрокаОплаты.Вставить("ТипОплаты", 2);
		СтрокаОплаты.Вставить("Наименование", "Банковский кредит");
		СтрокаОплаты.Вставить("Сумма", СуммаТипаОплаты);
		ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты);
	КонецЕсли;
	// Товарные позиции
	Для Каждого СтрокаТовара Из ЧекККМ.Товары Цикл
		СтрокаЧека = МенеджерОборудованияКлиентСервер.ПараметрыФискальнойСтрокиЧека();
		
		// Обязательные поля
		СтрокаЧека.Наименование = СокрЛП(СтрокаТовара.Номенклатура.Наименование) + 
//			ФормированиеПечатныхФорм.ПредставлениеСерий(СтрокаТовара, "ХарактеристикаНоменклатуры", "СерияНоменклатуры") +
			" " + Строка(СтрокаТовара.ЕдиницаИзмерения); // Наименование предмета расчета
		СтрокаЧека.Количество = СтрокаТовара.Количество; // Количество предмета расчета 
		СтрокаЧека.Цена = СтрокаТовара.Цена; // Цена без учета скидок и наценок
		СтрокаЧека.Сумма = СтрокаТовара.Сумма; // Cтоимость предмета расчета с учетом скидок и наценок
		СтрокаЧека.СтавкаНДС = МенеджерОборудованияКлиентСервер.ПолучитьСтавкуНДСДляФискализацииЧека(СтрокаТовара.Номенклатура.СтавкаНДС); // Cтавка НДС в %
		СтрокаЧека.Штрихкод = СокрЛП(СтрокаТовара.ШтрихКод); // Штрихкод
		СтрокаЧека.НомерСекции = Склад.НомерСекции; // НомерСекции
		// Дополнительные реквизиты начиная с ФФД 1.1
		СтрокаЧека.КодПризнакаСпособаРасчета = 4;  // Код признака способа расчета (Таблица 25 документа ФФД)
		СтрокаЧека.КодПризнакаПредметаРасчета = ?(СтрокаТовара.Номенклатура.ВидНоменклатуры.ТипНоменклатуры = 
			Перечисления.ТипыНоменклатуры.Услуга,4,1); // Код признака предмета расчета   (Таблица 25 документа ФФД)

		ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека);
	КонецЦикла;

КонецПроцедуры

Функция ПоддерживаетсяВидТО(Вид) Экспорт

	Результат = Ложь;

	Если Вид = Перечисления.ВидыТорговогоОборудования.СканерШтрихКода
//	     Или Вид = Перечисления.ВидыТорговогоОборудования.СчитывательМагнитныхКарт
	     Или Вид = Перечисления.ВидыТорговогоОборудования.ДисплейПокупателя
	     Или Вид = Перечисления.ВидыТорговогоОборудования.ЭлектронныеВесы
	     Или Вид = Перечисления.ВидыТорговогоОборудования.ФискальныйРегистратор
	     Или Вид = Перечисления.ВидыТорговогоОборудования.ТерминалСбораДанных
//	     Или Вид = Перечисления.ВидыТорговогоОборудования.СчитывательRFIDМеток
//	     Или Вид = Перечисления.ВидыТорговогоОборудования.ЭквайринговаяСистема 
		 Или Вид = Перечисления.ВидыТорговогоОборудования.ККТ Тогда
		Результат = Истина;
	КонецЕсли;

	Возврат Результат;

КонецФункции // ПоддерживаетсяВидТО()
...Показать Скрыть
22. Atom74 Atom74 (Atom74) 21 06.05.17 09:20 Сейчас в теме
Поправил архив касательно документа "ЧекККМ".
Не хватало в модуле документа:
1.В процедуре "ПриОткрытии()" строчки "ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);"
2.Добавил "Процедура ПодготовитьДанныеДляФискализацииЧека(ЧекККМ, ОбщиеПараметры, ДопДанные)"
3.Добавил "Функция ПоддерживаетсяВидТО(Вид) Экспорт"
23. Денис Воронин (Denver322) 09.05.17 13:32 Сейчас в теме
Не совсем понятно зачем вы добавили процедуру ПодготовитьДанныеДляФискализацииЧека, если она не является экспортной и ни где не вызывается, скорее всего она должна быть в модуле документа, но это мелочи . Гораздо более тяжелый момент в следующем. У вас при каждом вызове чека подключается весь спектр оборудования, зарегистрированный в регистре сведений. За это отвечает "ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма) которая была добавлена в процедуру "ПриОткрытии". Когда выдается один чек в течении часа и зарегистрирован один ККМ это ещё терпимо, а если чеки идут потоком и ККМ штук 10-15, то постоянная задержка 5-8 секунд (замерял, разница во времени зависит от кол-ва оборудования) мягко говоря напрягает. Почему нельзя сформировать таблицу оборудования при старте системы и потом к ней обращаться ?
24. Денис Воронин (Denver322) 09.05.17 13:51 Сейчас в теме
У вас есть ошибка в общей форме ФормаНастройкиУниверсальныйДрайвер. Запись внесенных изменений не происходит. Там в процедуре ОбновитьНастраиваемыйИнтерфейс(ОписаниеИнтерфейса, ДополнительныеДействия, ПервыйЗапуск) необходимо изменить код

Неправильно



на

Правильно



Тогда внесенные пользователем изменения будут сохранены.
25. Atom74 Atom74 (Atom74) 21 11.05.17 23:00 Сейчас в теме
(23) Да, Вы правы "ПодготовитьДанныеДляФискализацииЧека" есть в модуле документа в модуле формы документа она не нужна.
Вызывать "ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма)" при каждом открытии чека надежней, мало ли что случилось с оборудованием во время работы, но если напрягает производительность то можно сформировать таблицу оборудования при старте.
26. Atom74 Atom74 (Atom74) 21 11.05.17 23:02 Сейчас в теме
27. Денис Воронин (Denver322) 17.05.17 09:55 Сейчас в теме
Вопрос. При печати чека наблюдается расхождение номера чека на ленте и номера чека, фиксируемого в ККТ и документе 1С. Как я понимаю, это происходит из за того, что на этом ККТ уже били чеки и счетчик отличается от начального значения. Каким образом можно выставить номер чека на ленте равным номеру фиксируемому в документе 1С ЧекККМ ? Поскольку этот номер в 1С возвращает непосредственно ККТ.
28. Виталий Юрьевич (kucher_v) 29.05.17 15:52 Сейчас в теме
Здравствуйте. Будет ли поддерживать ваш продукт аппарат Атол FPrint-22ПТК?
29. Соломон Инчи (solomon7) 11 08.06.17 11:23 Сейчас в теме
Здравствуйте! Очень хочу скачать ваше решение по 54-ФЗ: Онлайн-кассы для 1С 8.1 УТ 10.2, но стартмани в наличии всего 4,88, можно ли как то договориться о скидке на скачивание.
30. Alex Bah (bav) 19 13.06.17 11:15 Сейчас в теме
Подскажите, где взять FprnM1C82_54FZ.dll посвежее ?
Всё скачал с атоловского сайта - там нету
31. Atom74 Atom74 (Atom74) 21 13.06.17 15:04 Сейчас в теме
После установки пакета ДТО с сайта http://fs.atol.ru (Программное обеспечение\ДТО\8.x - KKT_8_14_02_02_Full.exe)
По умолчанию лежит тут: C:\Program Files (x86)\ATOL\Drivers8\1Cv82\FR-ATOL_54FZ.zip

Еще должен распространять 1С с новыми конфигурациями полной установки.
32. Андрей Тарлыков (Tarlich) 69 17.06.17 16:01 Сейчас в теме
33. Atom74 Atom74 (Atom74) 21 19.06.17 10:12 Сейчас в теме
Добавил ShtrihMkkt81.epf для Штрих-М, надо тестировать.
34. Андрей Ромашов (Zixxx) 20.06.17 18:55 Сейчас в теме
А документ КассоваяСмена есть или там он не нужен?
35. Atom74 Atom74 (Atom74) 21 21.06.17 07:35 Сейчас в теме
Не вижу необходимости в нем. Закрыть открыть смену можно и через драйвер ККТ.
36. Андрей Ромашов (Zixxx) 21.06.17 08:25 Сейчас в теме
(35) А пользователям как быть? Если пользователи работают с 1с лучше из нее делать. Например если запуск сторонних приложений залочен то смену уже не открыть
37. Atom74 Atom74 (Atom74) 21 21.06.17 09:57 Сейчас в теме
Если так, то нужен документ "Кассовая смена".
38. Андрей Ромашов (Zixxx) 21.06.17 12:03 Сейчас в теме
По требованиям еще вроде как список товаров должен печататься, это как-то тоже реализовано в типовых если не говорить о розничных продажах и чеках ККМ
39. Atom74 Atom74 (Atom74) 21 21.06.17 15:17 Сейчас в теме
Если сумма и ставка НДС по ПКО совпадает с суммой и ставкой НДС из документа основания, то табличная часть берется из этого документа.
40. Сергей (Vagner_Hate) 21 22.06.17 01:29 Сейчас в теме
Здравствуйте! Все подключили, но столкнулись с проблемой - при нажатии кнопки Настроить в форме списка регистра сведений "Торговое оборудование", если зайти внутрь и нажать кнопку "Тест устройства" выходит ошибка "Тест не пройден. Ошибка подключения к удаленному серверу: не указан IP-порт", хотя порт задан. Не подскажите, с чем может быть связано? Драйвера АТОЛ стоят версии 8.14.2.0
41. Сергей (Vagner_Hate) 21 22.06.17 02:02 Сейчас в теме
(40)Извиняюсь, разобрался. Помогло указание в поле Компьютер "127.0.0.1:6220".
Оставьте свое сообщение