Введение
По долгу службы, порой требуется выяснить информацию по той или иной, новой, акцизной марки. Конечно, есть замечательный сервис check1.fsrar.ru, но он, к сожалению, дает не всю информацию.
У нас реализована система, которая "палит" чужие марки и спешит с докладом в телеграмм по утрам, но чтобы наказать нерадивого продавца, который решил "подзаработать", а также чтобы убрать данную бутылку с витрины, нужно понимать, что это за товар, однако check1, этой информации не дает.
Есть не плохой сервис public.fsrar.ru/checkmark, который выбирает данные из ЕГАИС по серии и номеру новой марки, но интерфейс реализован крайне топорно и если вы всё-таки хоть примерно знаете что за товар, то вы сможете ответить на вопросы сервиса "Это импортный товар", "Выберите вид продукции", "Выберите объём", но как было указано выше - мы не всегда знаем, что там за товар и приходилось "гадать" и выполнять повторные запросы, если выбор был неудачным (так как нет кнопки "назад"). Опять же, когда у вас есть полная марка, неудобно каждый раз, выделять из неё серию и номер.
Как работает сам сервис?
При открытии страницы сервиса, получается печенька (Cookie) с идентификатором сессии "PHPSESSID". После делается запрос капчи с этой печенькой на адрес: public.fsrar.ru/captcha, капча отражается пользователю.
После того, как пользователь ввел серию и номер с акцизной марки и капчу, делается POST запрос на адрес public.fsrar.ru/check_ajax3 (при этом, существуют архивные скрипты check_ajax2, check_ajax) с ранее полученной печенькой и параметрами: "ser" - серия марки, "num" - номер марки, "captcha" - собственно капча.
В ответ, сервис возвращается JSON структура, имеющая следующие свойства "error" - признак наличия ошибки (0/1), "total" - количество полученных записей, "rows" - массив результатов. При этом "rows" может отсутствовать в случае ошибки.
Каждый элемент массива, содержит соответствие, в качестве имени которого, используются цифры от 0 до 8. Один элемент называется "import".
Разберем, что в этих полях лежит:
"0" - Наименование вида алкогольной продукции. Например: Водка
"1" - Наименование алкогольной продукции. Например: Водка "РУССКАЯ ВАЛЮТА" (Код АП 0031632000001763849)
"2" - Объём. Например: 0,7000
"3" - Крепость (градус). Например: 38
"4" - Производитель (в том числе для импортной продукции). Например: Акционерное общество "Татспиртпром"
"5" - Идентификатор отслеживания (о нем дальше). Например: fe0ea3dcd566dc6aeef69bb85b0de70c
"6" - Поле не выясненного назначения, содержит 6 разных цифр. Значение строковое. Например: 001022
"7" - Вид ФСМ/АМ. Например: ФСМ. Водка до 0,75 л
"8" - Информация о продаже, включает в себя информацию об организации, адресе, номере и дате чека, тип операции, цена.
"import" - Признак импортного товара (0/1)
На основании этих данных, сервис строит дерево вопросов, пример которых был указан выше. После выбора конкретного вида алкогольной продукции и пр. Открывается карточка информации о товаре с информацией о продаже (в случае её наличия). Информация о списании продукции актом, отсутствует. На странице имеется ссылка "Посмотреть цепочку движения", которая открывает карту с точками движения товара поставщик > оптовик > грузополучатель. Эта цепочка, открывается в новой странице по адресу public.fsrar.ru/getchain, параметром "barcode" передается идентификатор отслеживания, полученный из свойства "5". Страница так-же открывается с печенькой, в противном случае - открывается пустая страница. В данную страницу, встроен JSON массив структур, со следующими свойствами:
"name" - Наименование организации. Может отсутствовать. Например: ООО "МЕГАПАК"
"inn" - ИНН организации. Может отсутствовать.
"kpp" - КПП организации. Может отсутствовать.
"address" - Адрес организации. Может отсутствовать.
"date" - Дата операции. Например: 2020-04-16T00:00:00
"type" - Тип операции, строковое значение (Отгружено/Произведено). Например: Произведено
"owner_id" - FS RAR ID организации (в интерфейсе не выводится).
"coords" - Вложенная структура с координатами X и Y, для построения точек карты.
"region" - Наименование региона организации. Например: Курская область
Все свойства, есть только в первой точке (произведено) и последней (последний владелец).
Реализация обработки
Сначала я просто реализовал вывод в табличном виде, результата запроса public.fsrar.ru/check_ajax3. Но как говорится, аппетит приходит во время еды кодинга и реализовал автоматическое получение информации из страницы отслеживания для каждого результата. Это конечно стоило производительности обработке (ибо сервера ЕГАИС не очень быстро эту информацию отдают), но в награду получаем огромный пласт информации, который позволяет анализировать более глубоко.
В качестве примера, был у меня такой случай: В ходе инвентаризации, выявлено несколько бутылок коньяка (одно наименование), но по информации check1, бутылки были проданы в сильно разнесенных географически местах (в том числе, в других городах). И было совершенно не понятно, как они все оказались в одном месте. Но так как в обработке вытаскивается информация о поставщике продукции, было выяснено, что все эти бутылки отгрузил один и тот же поставщик и что этот поставщик располагается в относительной близости от магазина. Без этой обработки, практически не возможно, это выяснить.
Возможности обработки:
1) Отображает информацию о товаре:
- Вид марки;
- Вид алкогольной продукции;
- Алкогольную продукцию (если нашел в базе - её, в противном случае отображается как получено с сервиса);
- Импортная или нет продукция;
- Объём, и градус продукции;
- Наименование производителя;
- Адрес и FS RAR ID производителя (только для отечественного товара);
2) Отображает информацию о поставщике:
- Представление (только если в вашей базе, найдена организация ЕГАИС по FS RAR ID)
- Адрес (если найдена организация по FS RAR ID, то из карточки организации ЕГАИС, в противном случае указывается регион и координаты)
- FS RAR ID (Эта информация скрыта в сервисе)
3) Отображает информацию о владельце:
- Наименование
- Адрес
- FS RAR ID (Эта информация скрыта в сервисе)
4) Отображает информацию о продаже:
- Признак что товар продан (Вычисляется обработкой)
- Данные места продажи (Наименование, адрес)
- Тип операции (продажа, возврат)
- Основание (Номер чека и дата)
- Цена продажи
5) Дополнительную информацию:
- Дата движения - поле в которое записывается максимальная дата по строке (Если продан, то дата продажи, в противном случае, дата поступления)
- Признак что, вероятно, бутылка ещё на заводе (вычисляется обработкой)
- Некое поле, назначение которого, мне не удалось определить, имеет значение 6 значное значение, например: 001087. (Эта информация скрыта в сервисе). Если что знает, напишите.
6) Для выделенных строк, получить данные в плоском виде (текстом), для удобной отправки через чаты
Вывод
В результате получился полезный инструмент, который позволяет достаточно быстро получать максимально доступную информацию и дающая возможность глубокого анализа, но есть небольшой минус - получение информации занимает хоть и не большое время, но уходит до 5 минут (в худшей ситуации), возможно придется подождать. Время обработки больше всего зависит от того, сколько результатов получено по основному запросу, так как на каждую строку результата, формируется ещё по одному запросу к "цепочке движения" товара.
Так-же не реализована поддержки "массива продаж", когда одна и та же позиция несколько раз продавалась возвращалась, обработка показывает не корректную информацию по продаже (возможно будет устранено в будущих версиях)
Обработка работает в основном в клиентском контексте, с небольшими вне контекстными вызовами сервера. Обработка должна работать на любой типовой конфигурацией с интеграцией ЕГАИС, но тестировалась на 1С:Розница 2.2.5.27 и 2.3.10.35. В обработке возможны ошибки, так что буду благодарен на баг-репорт.