Выгрузка актуальных остатков

Здравствуйте.

В True API есть группа методов создания заданий на выгрузку (dispenser/tasks) и метод скачивания результирующего файла (dispenser/results/{resultId}/file). Может кто-нибудь поделиться опытом работы с данными методами?

В моем случае все попытки получить выгрузку оказались безуспешными. Выгрузка не формировалась из-за ошибки исполнения и превышения лимита попыток на выполнение. (статус FAILED)

или  в систему

Жирный текст
Прикрепить файл
К новым комментариям
Метод https://markirovka.crpt.ru/api/v3/true-api/dispenser/results (п.8.4) получилось протестировать. Результат был примерно такой:
{
    "list": [
        {
            "id": "5a734942-65cf-4504-8370-5f793f4a5663",
            "available": "NOT_AVAILABLE",
            "dataStartDate": "2021-11-12T00:00:00",
            "dataEndDate": "2021-11-12T00:00:00",
            "downloadStatus": "SUCCESS",
            "downloadingTime": 0,
            "fileDeleteDate": "2022-01-11T07:20:01.685",
            "generationStartDate": "2021-11-12T07:20:01.029",
            "generationEndDate": "2021-11-12T07:20:01.031",
            "notEditable": false,
            "taskId": "6170d314-9748-48e3-a477-d818020dd28a"
        }
    ]
}
{
    "error_message": "Выгрузка недоступна(статус = NOT_AVAILABLE)"
}
Надо делать новую выгрузку, судя по датам в ответе на первый запрос. Но пока такая задача не требуется. В пункте 8.1 много вариантов для создания выгрузки.
31.10.2022 06:59
Попробовал метод https://markirovka.crpt.ru/api/v3/true-api/dispenser/tasks (п.8.1.3), но получил ошибку 400.
Да и вообще, описание метода в документации (Описание True API, версия 141.0) не соответствует реальности: после добавления всех обязательных параметров метод возвращал ошибку и требовал недостающие параметры: page, size и pg.
31.10.2022 07:00
Максим Кузнецов, здравствуйте, а уточните, пожалуйста, что именно вы указываете в запросе https://markirovka.crpt.ru/api/v3/true-api/dispenser/tasks? Конкретно в теле запроса.
31.10.2022 07:03
В прошлый раз не было достаточно времени "поиграться" с данным методом, сегодня откорректировал содержимое BODY и параметры и получил результат:
{
    "list": [
        {
            "id": "6370d318-9558-48e3-a477-d814020dd28a",
            "name": "Ошибки обработки документов ON_NSCHFDOPPRMARK_2LT-11000XXXXXX_2LT-11000XXXXXX_20211110_fb95adb5-c335-4cd1-85a0-c3dda4942782",
            "createDate": "2021-11-12T07:19:41.401",
            "currentStatus": "COMPLETED",
            "dataStartDate": "2021-11-12",
            "dataEndDate": "2021-11-12",
            "orgInn": "XXXXXXXXXX",
            "periodicity": "SINGLE",
            "productGroupCode": 17,
            "productGroups": [
                {
                    "id": "8",
                    "name": "milk"
                },
                {
                    "id": "14",
                    "name": "furs"
                },
                {
                    "id": "6",
                    "name": "electronics"
                },
                {
                    "id": "19",
                    "name": "antiseptic"
                },
                {
                    "id": "9",
                    "name": "bicycle"
                },
                {
                    "id": "20",
                    "name": "petfood"
                },
                {
                    "id": "1",
                    "name": "lp"
                },
                {
                    "id": "7",
                    "name": "pharma"
                },
                {
                    "id": "2",
                    "name": "shoes"
                },
                {
                    "id": "11",
                    "name": "alcohol"
                },
                {
                    "id": "13",
                    "name": "water"
                },
                {
                    "id": "25",
                    "name": "meat"
                },
                {
                    "id": "16",
                    "name": "ncp"
                },
                {
                    "id": "24",
                    "name": "vegs"
                },
                {
                    "id": "4",
                    "name": "perfumery"
                },
                {
                    "id": "10",
                    "name": "wheelchairs"
                },
                {
                    "id": "23",
                    "name": "softdrinks"
                },
                {
                    "id": "3",
                    "name": "tobacco"
                },
                {
                    "id": "22",
                    "name": "nabeer"
                },
                {
                    "id": "17",
                    "name": "bio"
                },
                {
                    "id": "12",
                    "name": "otp"
                },
                {
                    "id": "15",
                    "name": "beer"
                },
                {
                    "id": "5",
                    "name": "tires"
                },
                {
                    "id": "21",
                    "name": "seafood"
                }
            ],
            "timeoutSecs": 300
        }
    ]
}

Все равно метод немного странный: код товарной группы фигурирует и в BODY, и в параметрах...
Пока не понимаю до конца, что получил в результате, и зачем это нам может быть нужно :)
P.S. В ответе перед размещением на сайте были изменены на нереальные значения: id ЭДО Лайт, ИНН и номер УПД
31.10.2022 07:01
Максим Кузнецов,  Да, у меня тоже выходит в ответе массив из товарных групп, хотя он не является обязательным параметром по документации) вероятно, это еще пофиксят.
Видимо, если неясно по какой причине был отклонен документ, то выгрузка должна показать детальный список ошибок)
31.10.2022 07:04
Как-то писал процедуры в разное время, они работали по-разному для обуви и табака.
&НаКлиенте
Процедура Авторизация(Команда)
    Если ВидМаркировки = "ПолучениеМаркировокОбуви" Тогда
        СтендМаркировки = "ismp.crpt.ru";
        GetЗапросТекст = "/api/v3/auth/cert/key";
    ИначеЕсли ВидМаркировки = "ПолучениеМаркировокТабака" Тогда
        СтендМаркировки = "markirovka.crpt.ru";
        GetЗапросТекст = "/api/v3/true-api/auth/key"; // "/api/v3/auth/simpleSignIn/key"; // "https://ismotp.crptech.ru/api/v3/true-api/auth/key",0)
    Иначе
        Сообщить("СтендМаркировки пустой");
    КонецЕсли;
    хСоединение = Новый HTTPСоединение(СтендМаркировки,443,,,,,Новый ЗащищенноеСоединениеOpenSSL);
    Запрос = Новый HTTPЗапрос(GetЗапросТекст);
    хОтвет = хСоединение.ВызватьHTTPМетод("GET",Запрос);
    Если хОтвет.КодСостояния <> 200 ТОгда
        Сообщить("Ошибка. Код ответа " + хОтвет.КодСостояния);
        Возврат;
    КонецЕсли;
    Сообщение = хОтвет.ПолучитьТелоКакСтроку("UTF-8");
    //десериализуем данные о клиенте из JSON
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(Сообщение);
    ОборудованиеJSON = ПрочитатьJSON(ЧтениеJSON);
    ЧтениеJSON.Закрыть();
    УИД = ОборудованиеJSON.uuid;
    Данные = ОборудованиеJSON.data;
    Файл = Новый ЗаписьТекста("D:\ылоапыпаорп\Temp\ЗагрузкиВыгрузки\curl_api.txt");
    Файл.ЗаписатьСтроку(Данные);
    Файл.Закрыть();
    Объект.УИД = СокрЛП(УИД);
    Сообщить("Подпишите данные в файле на сайте и вставьте в NotePad для изменения n r");
КонецПроцедуры
Процедура ПолучитьТокенНаСервере()
    Текст = Новый ТекстовыйДокумент;
    ПолноеИмяФайла = "D:\ылоапыпаорп\Temp\ЗагрузкиВыгрузки\curl_api.txt";
    Текст.Прочитать(ПолноеИмяФайла);
    КоличествоСтрок = Текст.КоличествоСтрок();
    Данные = "";
    Для Счетчик = 1 по КоличествоСтрок Цикл
        ТекСтрока = Текст.ПолучитьСтроку(Счетчик);
        Данные = Данные + ТекСтрока;
    КонецЦикла;
    Если ВидМаркировки = "ПолучениеМаркировокОбуви" Тогда
        ПриефиксЗапроса = "/api/v3/auth/cert/";
        СтендМаркировки = "ismp.crpt.ru";
    ИначеЕсли ВидМаркировки = "ПолучениеМаркировокТабака" Тогда
        ПриефиксЗапроса = "/api/v3/true-api/auth/simpleSignIn";
        СтендМаркировки = "markirovka.crpt.ru";
    Иначе
        Сообщить("СтендМаркировки пустой");
    КонецЕсли;
    Соединение = Новый HTTPСоединение(СтендМаркировки,443,,,,,Новый ЗащищенноеСоединениеOpenSSL);
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type", "application/json; charset=UTF-8");
    Заголовки.Вставить("Accept", "application/json");
    Запрос = Новый HTTPЗапрос(ПриефиксЗапроса,Заголовки);
    ЗаписьJOIN = Новый ЗаписьJSON;
    ЗаписьJOIN.УстановитьСтроку();
    ДанныеДляЗапроса = Новый Структура;
    ДанныеДляЗапроса.Вставить("uuid",Объект.УИД);
    ДанныеДляЗапроса.Вставить("data",Данные);
    ЗаписатьJSON(ЗаписьJOIN,ДанныеДляЗапроса);
    СтрокаДляЗапроса = ЗаписьJOIN.Закрыть();
    //Формируем ответ клиенту
    Запрос.УстановитьТелоИзСтроки(СтрокаДляЗапроса,КодировкаТекста.UTF8,
    ИспользованиеByteOrderMark.НеИспользовать);
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
    Если Ответ.КодСостояния <> 200 Тогда
        Сообщить("Ошибка. Код ответа " + Ответ.КодСостояния);
        ЧтениеJSON = Новый ЧтениеJSON;
        Сообщение = Ответ.ПолучитьТелоКакСтроку("UTF-8");
        ЧтениеJSON.УстановитьСтроку(Сообщение);
        СообщениеJSON = ПрочитатьJSON(ЧтениеJSON);
        ЧтениеJSON.Закрыть();
        Сообщить(СообщениеJSON.error_message);
        Возврат;
    КонецЕсли;
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
    Токен = ПрочитатьJSON(ЧтениеJSON, Ложь).token;
    Объект.Токен = СокрЛП(Токен);
    Константы.Токен.Установить( Объект.Токен);
КонецПроцедуры
&НаКлиенте
Процедура ПолучениеМаркировокОбуви()
    сайт = "ismp.crpt.ru";
    хСоединение = Новый HTTPСоединение(Сайт,443,,,,,Новый ЗащищенноеСоединениеOpenSSL);
    //Запрос = новый HTTPЗапрос("/api/v3/facade/identifytools/list?cisStatus=INTRODUCED&limit=10000");
    Запрос = новый HTTPЗапрос("/api/v3/facade/identifytools/listV2?cisStatus=INTRODUCED&limit=10000");
    запрос.Заголовки.Вставить("Authorization","Bearer "+Объект.Токен);
    хОтвет = хСоединение.ВызватьHTTPМетод("GET",Запрос);
    Если хОтвет.КодСостояния <> 200 Тогда
        Сообщить("Ошибка. Код ответа " + хОтвет.КодСостояния);
        ЧтениеJSON = Новый ЧтениеJSON;
        Сообщение = хОтвет.ПолучитьТелоКакСтроку("UTF-8");
        ЧтениеJSON.УстановитьСтроку(Сообщение);
        СообщениеJSON = ПрочитатьJSON(ЧтениеJSON);
        ЧтениеJSON.Закрыть();
        Сообщить(СообщениеJSON.error_message);
        Возврат;
    Иначе
        Сообщить("200 ОК");
    КонецЕсли;
    Сообщение = хОтвет.ПолучитьТелоКакСтроку("UTF-8");
    //десериализуем данные о клиенте из JSON
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(Сообщение);
    ОборудованиеJSON = ПрочитатьJSON(ЧтениеJSON);
    ЧтениеJSON.Закрыть();
    Результат = ОборудованиеJSON.results;
    //паралельно Сразу запишем это и в ТЧ и в файл
    РазделительСтрок = ";so";
    СтрокаЗаписи = "";
    Файл = Новый ЗаписьТекста("D:\ылоапыпаорп\Temp\ЗагрузкиВыгрузки\curl_api.csv",КодировкаТекста.ANSI,РазделительСтрок,ЛОЖЬ);
    Объект.ТаблицаВыбывших.Очистить();
    Для Каждого Строка Из Результат Цикл
        НоваяСтрока = Объект.ТаблицаВыбывших.Добавить();
        НоваяСтрока.КИ = Строка.cis;
        НоваяСтрока.gtin = Строка.gtin;
        НоваяСтрока.sgtin = Строка.sgtin;
        НоваяСтрока.Товар = Строка.productName;
        НоваяСтрока.Статус = Строка.status;
        СтрокаЗаписи = СтрокаЗаписи + Строка.gtin + РазделительСтрок + Строка.productName + РазделительСтрок + Строка.status+ РазделительСтрок + """" + Строка.cis + """" + Символы.ПС;
    КонецЦикла;
    Файл.Записать(СтрокаЗаписи);
    Файл.Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура ПолучениеМаркировокТабака()
    /// /api/v3/true-api/dispenser/tasks&limit=15
    сайт = "markirovka.crpt.ru"; // ismotp.crptech.ru ismotp.crptech.ru/api/v3/true-api – /facade/identifytools/listV2
    хСоединение = Новый HTTPСоединение(Сайт,443,,,,,Новый ЗащищенноеСоединениеOpenSSL);
    СсылкаНастраницу = "/api/v3/true-api/dispenser/tasks"; // фильтрация КИ по табаку owner="2901289060
    Запрос = новый HTTPЗапрос(СсылкаНастраницу);
    Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    Запрос.Заголовки.Вставить("Authorization","Bearer "+ТокенGET()); // Объект.Токен
    // Чтение тела запроса из файла
    СтрокаJson = ПолучитьТелоЗапросаИзФайла();
    СтрокаJson = СтрЗаменить(СтрокаJson,Символы.ВК," ");
    СтрокаJson = СтрЗаменить(СтрокаJson,Символы.ПС," ");
    Запрос.УстановитьТелоИзСтроки(СтрокаJson,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать);
    хОтвет = хСоединение.ОтправитьДляОбработки(Запрос); //хОтвет = хСоединение.ВызватьHTTPМетод("POST",Запрос);
    Если хОтвет.КодСостояния <> 200 Тогда
        Сообщить("Ошибка. Код ответа " + хОтвет.КодСостояния);
        ЧтениеJSON = Новый ЧтениеJSON;
        Сообщение = хОтвет.ПолучитьТелоКакСтроку("UTF-8");
        ЧтениеJSON.УстановитьСтроку(Сообщение);
        СообщениеJSON = ПрочитатьJSON(ЧтениеJSON);
        ЧтениеJSON.Закрыть();
        Сообщить(СообщениеJSON.error_message);
        Возврат;
    Иначе
        Сообщить("200 ОК");
    КонецЕсли;
    Сообщение = хОтвет.ПолучитьТелоКакСтроку("UTF-8");
    //десериализуем данные о клиенте из JSON
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(Сообщение);
    ОборудованиеJSON = ПрочитатьJSON(ЧтениеJSON);
    ЧтениеJSON.Закрыть();
КонецПроцедуры
31.10.2022 07:05
Задайте вопрос команде Сообщества

Если у вас есть вопросы, связанные с работой Честного Сообщества или предложения по развитию нашей платформы, то напишите нам!

Если у вас вопросы, связанные с маркировкой, то задайте вопрос тут.

Ваше сообщение отправлено

Ожидайте ответ на электронную почту, указанную в обращении

Наверх
Войти в Cообщество
Впервые в сообществе? Зарегистрироваться
Войти через:
Регистрация в Сообществе
Регистрация участника оборота
Уже зарегистрированы?
или
Войти через GoogleВойти через Vk

Нажимая кнопку «Зарегистрироваться»,
Вы принимаете условия Пользовательского соглашения.

Регистрация Партнера/Интегратора
Уже зарегистрированы?
Регистрация Партнера/Интегратора
Уже зарегистрированы?

Нажимая кнопку «Зарегистрироваться»,
Вы принимаете условия Пользовательского соглашения.

Регистрация Партнера/Интегратора
Уже зарегистрированы?
Уже зарегистрированы?

Нажимая кнопку «Зарегистрироваться»,
Вы принимаете условия Пользовательского соглашения.

Регистрация в Сообществе

Редактировать изображение партнера/интегратора
Восстановление пароля
Проверьте почту

На почту отправлено письмо со ссылкой восстановления пароля

Восстановление пароля