Задача 101.65991

Задача :101.65991

2018-12-14 21:25:05
Краткое описание :
Онлайн-кассы - новые реквизиты в ФФД 1.05 и 1.1
Описание :
Приходный кассовый ордер
Что измененно :

В соответствии с прилагаемым Приказом ФНС России от 21.03.2017 N ММВ-7-20/229@ начиная с версии 1.05 формата фискальных документов (ФФД) по сравнению с ФФД 1.0 добавляется ряд новых обязательных реквизитов. То есть как только кассовый аппарат обновлён до ФФД 1.05, или 1.1 - формирование этих реквизитов становится обязательным. Там же сказано, что ФФД 1.0 полностью прекращает своё действие 31.12.2018, поэтому сейчас клиенты массово обновляют свою ККТ.

Из новых реквизитов ФД для нас в первую очередь интерес представляют:
1212 "признак предмета расчета" - для каждой позиции чека, на данный момент 18 значений, см. Таблицу 29;
1214 "признак способа расчета" - для каждой позиции чека, 7 значений, см. Таблицу 28;
1215 "сумма по чеку (БСО) предоплатой (зачетом аванса и (или) предыдущих платежей)" - на весь чек;
1216 "сумма по чеку (БСО) постоплатой (в кредит)" - на весь чек;
1217 "сумма по чеку (БСО) встречным предоставлением".

Предлагается реализовать новые точки расширения для передачи расширенного набора данных в ККТ. Возможно, также пользовательскую настройку "Версия формата фискальных документов" с вариантами "1.0/1.05 и выше" - для выбора вызываемых точек (обсуждаемо).

epKO_isNotExistExtPoint_v1_05 - для определения версии ФФД (тогда не придётся добавлять настройку).
epKO_KKTInitConnection - новая точка расширения наверное пока не нужна.
epKO_KKTRegistration_v1_05 - добавить передачу реквизитов 1212 и 1214. Возможно, также ссылки на позицию накладной и распределения.
epKO_KKTDoneConnection_v1_05 - добавить передачу реквизитов 1215, 1216, 1217.

В системном интерфейсе регистрации показать все рассчитанные реквизиты, желательно с возможностью ручной корректировки.

Вычисление реквизитов:
1212 - для начала предлагаю формировать ТОВАР (1)/УСЛУГА (4)/ПЛАТЕЖ (10). Значение "ПЛАТЕЖ" (10) - только в случае, если реквизит 1214 равен "АВАНС" (3).

1214 - если нет распределения по позициям накладной, то каждая позиция ДО это либо "ПРЕДОПЛАТА 100%" (1), либо "ПРЕДОПЛАТА" (2), либо "АВАНС" (3). Такие платежи нужно разрешить регистрировать повторно (при отгрузке). То есть при регистрации устанавливать промежуточный статус, допускающий повторную регистрацию - например, "Зарегистрирован как предоплата/аванс".

"АВАНС" (3) - это когда заранее неизвестно за какой конкретно товар/услугу платят, например, при покупке подарочной карты, или при выборе услуги "аванс в счёт будущих поставок". Как вариант, можно определять по внешнему атрибуту к МЦ/услуге "Аванс", или добавить новое поле, или новое значение поля "Категория", или может есть что-то более подходящее в каталогах МЦ/услуг.

"ПРЕДОПЛАТА 100%" (1), или "ПРЕДОПЛАТА" (2) - на данном этапе определить не можем, поскольку сейчас у нас нет информации о распределённой сумме платежа по позициям ДО. Пока что предлагаю формировать 1, в ближайшее время доработать распределение по позициям ДО (в рамках отдельного ПиР).

"ПОЛНЫЙ РАСЧЕТ" (4) - когда позиция ПОЛНОСТЬЮ оплачена регистрируемым документом (с учётом предыдущих платежей) и дата регистрируемого платежа <= дате отгрузки. Передавать полное количество по накладной dKol (а не только оплаченное регистрируемым документом). При этом сумму предыдущих платежей по данной позиции нужно накапливать для реквизита 1215 (если дата регистрируемого платежа < дате отгрузки, то его тоже сюда включать).

"ЧАСТИЧНЫЙ РАСЧЕТ И КРЕДИТ" (5) - когда позиция ЧАСТИЧНО оплачена регистрируемым документом (с учётом предыдущих платежей) и дата регистрируемого платежа <= дате отгрузки. Передавать полное количество по накладной dKol (а не только оплаченное). При этом сумму предыдущих платежей по данной позиции нужно накапливать для реквизита 1215 аналогично предыдущему пункту, а неоплаченную сумму по данной позиции - накапливать для реквизита 1216.

"ПЕРЕДАЧА В КРЕДИТ" (6) - когда позиция полностью НЕ оплачена и дата отгрузки равна дате регистрируемого платежа. Передавать полное количество по накладной dKol. При этом ВСЮ сумму по данной позиции нужно накапливать для реквизита 1216.
Здесь необходимо ещё решить вопрос как быть в случае передачи товара вообще без оплаты - формировать платёж на сумму 0? Сейчас так сделать не получается.

"ОПЛАТА КРЕДИТА" (7) - когда дата регистрируемого платежа > даты отгрузки. Передавать оплаченное регистрируемым документом количество dKol.


1215, 1216 - накопленные соответствующие суммы по всем позициям с реквизитом 1214 = "ПОЛНЫЙ РАСЧЕТ" (4), или "ЧАСТИЧНЫЙ РАСЧЕТ И КРЕДИТ" (5), или "ПЕРЕДАЧА В КРЕДИТ" (6).

1217 - пока предлагаю формировать 0.

См. также описание примеров во вложенном файле (они годовой давности, но в основном правильные, если найдём более актуальные документы - будем добавлять сюда).
Как измененно :

Для поддержки поддержки формата ФФД 1.05 или 1.1 реализованы следующие точки расширения:

1. Проверка поддержки формата ФФД 1.05 или 1.1 При существовании обработчика, а значит поддержке новых форматов, точка должна возвращать false.
ExtensionPoint epKO_isNotExistExtPoint_v1_05;

2. Регистрация оплаченной позиции документа для ФФБ 1.05
ExtensionPoint epKO_KKTRegistration_v1_05
(wTiDk, // Тип документа
wOperation, // Тип операции (0-не определен; 1-продажа; 2-возврат продажи; 3-покупка; 4-возврат покупки)
wObjMethod, // Признак предмета расчета
wCalcMethod : word; // Признак способа расчета
sAdmPass, // Пароль администратора системы
sOperatorPass, // Пароль оператора для ККТ
sNamePos : string; // Наименование мц/услуги
dKol, // Количество
dPrice, // Цена
dTaxRate, // Ставка
dSumTax, // Сумма налога
dSumTaxForOne: double; // Не округленная сумма налога за 1 позицию
bModeTax : boolean; // Входимость налога
wDistrType : word; // Тип распределения (1 - по ДО; 2 - по накладной/акту)
cDistrPos : comp; // Ссылка на позицию распределения (для типа 1 ссылка на PlDgDist; для типа 2 ссылка на SpSopHoz)
pObject : pointer); // Ссылка на драйвер кассового аппарата

3. Завершение регистрации ККТ для ФФБ 1.05
ExtensionPoint epKO_KKTDoneConnection_v1_05
(cDoc : comp; // NREC документа
sAdmPass, // Пароль администратора системы
sOperatorPass : string; // Пароль оператора для ККТ
wPaymentType : word; // Тип оплаты (0 - наличные; 1- банковская карта)
dSumPrePay, // Сумма по чеку (БСО) предоплатой (зачетом аванса и/или предыдущих платежей)
dSumPostPay, // Сумма по чеку (БСО) постоплатой (в кредит)
dSumConsider : double; // Сумма по чеку (БСО) встречным предоставлением
pObject : pointer; // Ссылка на драйвер кассового аппарата
pStr : iObjExtStr); // Объект работы со строками


В случае, если реализована точка расширения №1 и она возвращает значение False, это означает что регистрация в ККТ будет выполнятся с учетом нового формата.
В этом случае, в окне распределения по спецификациям накладной/акта, а так же по спецификации ДО,в позициях оплаты, появится поле "ККТ", которое может принимать значения "Да" или "Нет". Значение "Да", означает что данная позиция была обработана в ККТ. Данные поля можно редактировать вручную, а так же оно автоматически устанавливается в занчение "Да", после выполнения регистрации по позициям.
В окне регистрации в ККТ для каждой позиции были добавлены поля "Предмет расчета" и "Способ расчета". Данные поля определяются для каждой позиции и передаются в точку расширения №2.
Так же в окне появились поля "Сумма по чеку предоплатой" и "Сумма по чеку постоплатой". Данные поля накапливают суммы по всем позициям и передаются в точку расширения №3.
Поле "Сумма по чеку предоплатой" накапливает по позициям оплаты суммы которые были зарегистрированы ранее (позиции распределения со значением поля "ККТ" = "Да").
Поле "Сумма по чеку постоплатой" накапливает по позициям суммы, которых не хватает до полной оплаты позиции.

Предмет расчета определяется следующим образом: если позиция является МЦ, то она принимает значение = 1 (товар), если позиция является услугой, то она принимает значение = 4 (услуга), а если к товару или услуге указанной в позиции спецификации существует внешний строковый атрибут "Аванс" который принимает значение "1", атрибут то предмет расчета принимает значение = 10 (Аванс)
Способ расчета может принимать следующие значения:
1) Предоплата 100% (значение = 1) - когда существует только распределение по спецификации ДО и позиция полностью распределена (с учетом предыдущих оплат). При этом количество передается целиком, а сумма предыдущих оплат накапливается в поле "Сумма по чеку предоплатой".
2) Предоплата (значение = 2) - когда существует только распределение по спецификации ДО и позиция не полностью распределена. При этом количество передается с учетом предыдущих оплат, а сумма предыдущих оплат накапливается в поле "Сумма по чеку предоплатой".
3) Аванс (значение = 3) - для позиции с признаком предмета расчета - "Аванс".
4) Полный расчет (значение = 4) - когда позиция спецификации накладной/акта полностью распределена (с учетом предыдущих оплат) и дата регистрируемого платежа меньше либо равна дате накладной/акта. При этом количество по позиции передается полное, а сумма предыдущих оплат накапливается в поле "Сумма по чеку предоплатой".
5) Частичный расчет и кредит (значение = 5) - когда позиция спецификации накладной/акта распределена частично (с учетом предыдущих оплат) и дата регистрируемого платежа меньше либо равна дате накладной/акта. При этом количество по позиции передается полное, сумма предыдущих оплат накапливается в поле "Сумма по чеку предоплатой", а неоплаченная сумма по позиции накапливается в поле "Сумма по чеку постоплатой".
6) Передача в кредит (значение = 6) - на данный момент режим не обрабатывается.
7) Оплата кредита (значение = 7) - когда есть распределение по позиции спецификации накладной/акта и дата регистрируемого платежа больше даты отгрузки. При этом этом количество передается оплаченное непосредственно этим платежом.

В окне регистрации в ККТ, все поля кроме "Позиция", "%НДС" и "Вх." являются редактируемыми.

После нажатия на кнопку "Продолжить" (окно регистрации в ККТ), все отобранные позиции передаются в ККТ с помощью точки расширения №2. Для каждой позиции передается так же ее тип распределения и ссылка на позицию распределения. В частности если распределение по позициям ДО, то передается значение "1" и ссылка на запись PlDgDist.NRec. А если распределение по позициям накладной/акта, то предается значение "2" и ссылка на запись SpSopHoz.Nrec.
По завершении обработки всех позиций, вызывается точка расширения №3, которая кроме основных параметров передает сумму по чеку предоплатой и сумму по чеку постоплатой. Сумма по чеку встречным представлением на данный момент не используется и передается значение ноль.

После завершения обработки, в документе выполняется установка соответствующего статуса.
Для документа должны быть заведены как минимум два статуса в группе исполняемых статусов.
1) "Регистрация аванса/предоплаты ККТ" (наименование может быть указано любое) со значением в поле код = 5.
2) "Завершена регистрация ККТ" (наименование может быть указано любое) со значением в поле код = "4".
В случае, если по документу была зарегистрирована хотя бы одна позиция со значениями способа расчета "предоплата 100%", "предоплата" или "аванс", то в документе будет устанавливаться статус №1. При этом из данного статуса разрешена повторная регистрация ККТ.
В противном случае, после выполнения регистрации, в документе устанавливается статус №2.

Название продукта Название компонента Тип Последняя версия Дата выхода
F_DISTPLF_DISTPLRES9.1.75.02018-12-14 21:25:05
F_DISTPLF_DISTPLRES9.1.075.0
F_PLPORF_PLPORRES9.1.121.02018-12-14 21:25:05
F_SOPRHOZF_SOPRHOZRES9.1.98.02018-12-14 21:25:05
F_SOPRHOZF_SOPRHOZRES9.1.098.0