новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума
apatyukov
Приватное сообщение

Доработать функцию формирования чеков Оранждата согласно изменениям законодательства УТ 10.3

5 |  0
8 сентября 2025 в 11:23:16 (2 дня 2 часа назад)
Текст задания
Доработать функцию формирования чеков
Согласно изменениям законодательства
https://orangedata.ru/news/item/novye-trebovaniya-k-kassovym-chekam-chto-izmenitsya-s-1-sentyabrya-2025-goda


// Формирует JSON-строку запроса
//
// Параметры:
// ПараметрыЗапроса - Структура параметров
// ID - Строка(1..64) - ID, который отправляется на сервер Orangedata для однозначной идентификации документа Идентификатор документа
// ИНН - Строка - ИНН организации, для которой пробивается чек
// Группа - Строка - Группа устройств, с помощью которых будет пробит чек, если ничего не передано будет установлено Main
// Ключ - Строка - Ключ, который должен использоваться для проверки подписи
// КонтактПокупателя - Строка - Телефон или e-mail покупателя, передается в сообщении на сервер
// ТаблицаТоваров - ТаблицаЗначений - таблица товаров, должна быть минимум одна строка
// Колонки:
//
// СуммаОплаты - Число - Сумма оплаты, отправляемая в чеке
// ПризнакРасчета - Число - 1 - Приход, 2 - Возврат прихода, 3 - Расход, 4 - Возврат расхода
// ТипОплаты - Число -
//
// Возвращаемое значение:
// <Тип.Вид> - <описание возвращаемого значения>
//
Функция СформироватьТелоЗапроса(ПараметрыЗапроса)

ИдДокумента = ПараметрыЗапроса.ID;
ИНН = ПараметрыЗапроса.ИНН;
Группа = ?(ПараметрыЗапроса.Свойство("Группа"), ПараметрыЗапроса.group, "Main");
//Группа = ?(ПараметрыЗапроса.Свойство("Группа"), ПараметрыЗапроса.Группа, "null");
Ключ = ПараметрыЗапроса.Ключ;
КонтактПокупателя = ПараметрыЗапроса.КонтактПокупателя;
ТаблицаТоваров = ПараметрыЗапроса.ТаблицаТоваров;
ПризнакРасчета = ПараметрыЗапроса.ПризнакРасчета;
СуммаОплаты = ПараметрыЗапроса.СуммаОплаты;
ТипОплаты = ПараметрыЗапроса.ТипОплаты;

ПараметрыЗакрытияЧека = Новый Структура("payments, taxationSystem");

МассивТоваров = Новый Массив;
Для Каждого СтрокаТЗ Из ТаблицаТоваров Цикл
СтруктураТовара = Новый Структура;
СтруктураТовара.Вставить("text", СтрокаТЗ.Наименование);
СтруктураТовара.Вставить("price", СтрокаТЗ.Цена);
СтруктураТовара.Вставить("quantity", СтрокаТЗ.Количество);
СтруктураТовара.Вставить("tax", ПолучитьКодСтавкиНДС(СтрокаТЗ.СтавкаНДС));
СтруктураТовара.Вставить("paymentMethodType", 1); // Признак способа расчета, 1214:1 – Предоплата 100% 2 – Частичная предоплата 3 – Аванс 4 – Полный расчет 5 – Частичный расчет и кредит 6 – Передача в кредит 7 – оплата кредита
СтруктураТовара.Вставить("paymentSubjectType", СтрокаТЗ.ПризнакПредметаРасчета); // Признак предмета расчета, 1212: 1 – Товар 2 – Подакцизный товар 3 – Работа 4 – Услуга,..

// Временно отключим
//Если ЗначениеЗаполнено(СтрокаТЗ.ЗначениеШтрихкода) Тогда
// СтруктураТовара.Вставить("nomenclatureCode", (СтрокаТЗ.ЗначениеШтрихкода));
//КонецЕсли;

МассивТоваров.Добавить(СтруктураТовара);
КонецЦикла;

СтруктураЗапроса = Новый Структура("id, Inn, group, content, key");
СтруктураЗапроса.ID = ИдДокумента;
СтруктураЗапроса.Inn = ИНН;
СтруктураЗапроса.group = Группа;
СтруктураЗапроса.key = Ключ;

СтруктураСодержимого = Новый Структура;
СтруктураСодержимого.Вставить("type", ПризнакРасчета); // Признак расчета (число): 1 - Приход, 2 - Возврат прихода, 3 - Расход, 4 - Возврат расхода
СтруктураСодержимого.Вставить("positions", МассивТоваров) ; // Список предметов расчета (Массив структур)
СтруктураСодержимого.Вставить("checkClose", ПараметрыЗакрытияЧека); // Параметры закрытия чека Структура п.2.1.1.3
СтруктураСодержимого.Вставить("customerContact", КонтактПокупателя); // !!!! Телефон или электронный адрес покупателя, 1008
//СтруктураСодержимого.Вставить("agentType"); // Признак агента, 1057. Битовое поле, где номер бита обозначает, что оказывающий услугу покупателю (клиенту) пользователь является:
// 0 – банковский платежный агент
// 1 – банковский платежный субагент
// 2 – платежный агент
// 3 – платежный субагент
// 4 – поверенный
// 5 – комиссионер
// 6 – иной агент
// Кассовый чек (БСО) может содержать реквизиты «признак агента» (тег 1057), только если отчет о регистрации и (или) текущий отчет о перерегистрации содержит реквизит «признак агента» (тег 1057), имеющий значение, идентичное значению реквизита «признак агента» (тег 1057) кассового чека.
// paymentTransferOperatorPhoneNumbers // Необязательное поле
// paymentAgentOperation // Необязательное поле
// paymentAgentPhoneNumbers
// paymentOperatorPhoneNumbers
// paymentOperatorName
// paymentOperatorAddress
// paymentOperatorINN
// supplierPhoneNumbers
// additionalUserAttribute
// additionalAttribute
// automatNumber Номер автомата, 1036
// settlementAddress
// settlementPlace
// customer
// customerINN

СтруктураОплаты = Новый Структура("type, amount");
// Система налогообложения, 1055:
// 0 – Общая, ОСН
// 1 – Упрощенная доход, УСН доход
// 2 – Упрощенная доход минус расход, УСН доход - расход
// 3 – Единый налог на вмененный доход, ЕНВД
// 4 – Единый сельскохозяйственный налог, ЕСН
// 5 – Патентная система налогообложения, Патент
ПараметрыЗакрытияЧека.taxationSystem = 1;
ПараметрыЗакрытияЧека.payments = Новый Массив;
ПараметрыЗакрытияЧека.payments.Добавить(СтруктураОплаты);

// Тип оплаты:
// 1 – сумма по чеку наличными, 1031
// 2 – сумма по чеку электронными, 1081
// 14 – сумма по чеку предоплатой (зачетом аванса и (или) предыдущих платежей), 1215
// 15 – сумма по чеку постоплатой (в кредит), 1216
// 16 – сумма по чеку (БСО) встречным предоставлением, 1217
СтруктураОплаты.type = ТипОплаты; // 14 - Зачет аванса. https://kontur.ru/ofd/news/6669
СтруктураОплаты.amount = СуммаОплаты; // Сумма оплаты

СтруктураЗапроса.content = СтруктураСодержимого;

Возврат JSON(СтруктураЗапроса);

КонецФункции
0
Отклики (5)
Чтобы добавить свое предложение, Вам необходимо авторизоваться либо зарегистрироваться.