Долго бьюсь сам над подобной задачей. Валидация чека из Атола на стороне Честного знака не проходила.
Как оказалось. ЧЗ нужен полный код маркировки со всеми хвостами и разделителями.
У нас маркировка приходит не с 1С, а с сервиса Tradex, там свои нюансы.
Маркировку дают в xml, но из-за наличия всяких недопустимых символов, были проблемы с разбором файла (в моем случае средствами simpleXml). Приходилось пересохранять файл с заменой на валидные символы (в частности по CS разделителю крипто части), при добавлении в отгрузку делать обратную замену и дополнительно контролировать <> & и т.д. через htmlspecialchars с флагом double_encode = false.
Как мне видится. самый простой вариант, если из сервиса на сайт маркировка будет приходить в base64, а перед добавлением в отгрузку достаточно его декодировать. В этом случае ничего потеряться не должно.
В Атол, если посмотреть обработчик кассы v5, будет передаваться маркировка именно таким способом.
Лично для меня нерешенным остался вопрос, когда в заказе выкупается меньшее число позиций, чем было в корзине изначально. В этом случае проблема возникает с удалением лишних позиций из заказа "Штрих-кодов больше чем количества товара". И варианта кроме как удалить товар из заказа и добавить его заново и в ручную проставить нужную маркировку на нашел
Как оказалось. ЧЗ нужен полный код маркировки со всеми хвостами и разделителями.
У нас маркировка приходит не с 1С, а с сервиса Tradex, там свои нюансы.
Маркировку дают в xml, но из-за наличия всяких недопустимых символов, были проблемы с разбором файла (в моем случае средствами simpleXml). Приходилось пересохранять файл с заменой на валидные символы (в частности по CS разделителю крипто части), при добавлении в отгрузку делать обратную замену и дополнительно контролировать <> & и т.д. через htmlspecialchars с флагом double_encode = false.
Как мне видится. самый простой вариант, если из сервиса на сайт маркировка будет приходить в base64, а перед добавлением в отгрузку достаточно его декодировать. В этом случае ничего потеряться не должно.
В Атол, если посмотреть обработчик кассы v5, будет передаваться маркировка именно таким способом.
| Код |
|---|
private function buildPositionGs1mMarkCode(array $item): array{
return [
self::MARK_CODE_TYPE_GS1_M => base64_encode($item['marking_code']),
];
} |