|
Регламентное задание автоматически срабатывает с ошибками, а вручную без | ☑ | ||
---|---|---|---|---|
0
AnDoro
03.09.21
✎
13:36
|
Процедура по получению инфы с сайты по средствам html запроса. Работает, находится в общем модуле(Конфа для цен и учета остатков, поэтому разлочена и не обновляется (УТ для Казахстана(Тот же самый УТ))). Если регламентное задание, запустить вручную, все работает заказы создаются, но автоматом кидает ошибку:
Object field not found (data) {ОбщийМодуль.KaspiAPIЗапуск.Модуль(48)}: Для Каждого Значение Из ОбъектJSON.data Цикл Хотя этот объект, при отладке имеется, в случае, когда информации (новых заказов) нет, объект есть, но пустой. &НаСервере Процедура Запуск() Экспорт ТекДата = ТекущаяДата(); ИсхДата = Дата(1970, 1, 1); ДатаВМил = (ТекДата - ИсхДата) * 1000; ДатаВМилСтрока = СтрЗаменить(Строка(ДатаВМил), " ", ""); ДатаВмилНачало = ДатаВМил - 600 * 1000 * 100; ДатаВМилНачалоСтрока = СтрЗаменить(Строка(ДатаВмилНачало), " ", ""); ЗаголовокЗапроса = Новый Соответствие(); ЗаголовокЗапроса.Вставить("Content-Type", "application/vnd.api+json"); //ЗаголовокЗапроса.Вставить("Accept", "application/json"); ЗаголовокЗапроса.Вставить("X-Auth-Token", "Не покажу)"); HTTP = Новый HTTPСоединение("kaspi.kz",,,,,,Новый ЗащищенноеСоединениеOpenSSL()); Запрос = Новый HTTPЗапрос("/shop/api/v2/orders?page[number]=0&page[size]=20&filter[orders][state]=NEW&filter[orders][creationDate][$ge]=" + ДатаВМилНачалоСтрока + "&filter[orders][creationDate][$le]=" + ДатаВМилСтрока + "&filter[orders][status]=APPROVED_BY_BANK&include[orders]=user", ЗаголовокЗапроса); Результат = HTTP.Получить(Запрос); Сообщить(Результат.КодСостояния); ОтветJSON = Результат.ПолучитьТелоКакСтроку(); ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(ОтветJSON); ОбъектJSON = ПрочитатьJSON(ЧтениеJSON); ЧтениеJSON.Закрыть(); Для Каждого Значение Из ОбъектJSON.data Цикл ЗапросСост = Новый HTTPЗапрос("/shop/api/v2/orders/"+ Значение.id +"/entries", ЗаголовокЗапроса); РезСост = HTTP.Получить(ЗапросСост); ОтветСост = РезСост.ПолучитьТелоКакСтроку(); ЧтениеJSONСост = Новый ЧтениеJSON; ЧтениеJSONСост.УстановитьСтроку(ОтветСост); ОбъектСост = ПрочитатьJSON(ЧтениеJSONСост); ЧтениеJSONСост.Закрыть(); ЗапросСклад = Новый HTTPЗапрос("/shop/api/v2/orderentries/"+ ОбъектСост.data[0].id +"/deliveryPointOfService", ЗаголовокЗапроса); РезСклад = HTTP.Получить(ЗапросСклад); ОтветСклад = РезСклад.ПолучитьТелоКакСтроку(); ЧтениеJSONСклад = Новый ЧтениеJSON; ЧтениеJSONСклад.УстановитьСтроку(ОтветСклад); ОбъектСклад = ПрочитатьJSON(ЧтениеJSONСклад); ЧтениеJSONСклад.Закрыть(); Склад = ОбъектСклад.data.attributes.displayName; ЗапросТовар = Новый HTTPЗапрос("/shop/api/v2/orderentries/"+ ОбъектСост.data[0].id +"/product", ЗаголовокЗапроса); РезТовар = HTTP.Получить(ЗапросТовар); ОтветТовар = РезТовар.ПолучитьТелоКакСтроку(); //Сообщить(ОтветТовар); ЧтениеJSONТовар = Новый ЧтениеJSON; ЧтениеJSONТовар.УстановитьСтроку(ОтветТовар); ОбъектТовар = ПрочитатьJSON(ЧтениеJSONТовар); ЧтениеJSONТовар.Закрыть(); ///////////////////////// ЗапросАртикул = Новый HTTPЗапрос("/shop/api/v2/masterproducts/"+ ОбъектТовар.data.id +"/merchantProduct", ЗаголовокЗапроса); РезАртикул = HTTP.Получить(ЗапросАртикул); ОтветАртикул = РезАртикул.ПолучитьТелоКакСтроку(); //Сообщить(ОтветАртикул); ЧтениеJSONАртикул = Новый ЧтениеJSON; ЧтениеJSONАртикул.УстановитьСтроку(ОтветАртикул); ОбъектАртикул = ПрочитатьJSON(ЧтениеJSONАртикул); ЧтениеJSONАртикул.Закрыть(); //Значение.attributes.customer.lastName Наименование = Значение.attributes.customer.firstName + " " + Значение.attributes.customer.lastName; Количество = ОбъектСост.data[0].attributes.quantity; Итого = ОбъектСост.data[0].attributes.totalPrice; Цена = ОбъектСост.data[0].attributes.basePrice; Наим = ОбъектАртикул.data.attributes.name; Попытка Адрес = Значение.attributes.deliveryAddress.formattedAddress; Исключение Адрес = ""; КонецПопытки; Номер = Значение.attributes.customer.cellPhone; Ид = Значение.attributes.code; СозданныеЗаказы = СоздатьЗаказы(Наименование, Номер, Адрес, Наим, Цена, Итого, Количество, Склад, Ид); КонецЦикла; КонецПроцедуры |
|||
1
acht
03.09.21
✎
13:44
|
Во-первых, надо перед тем, как бросаться разбирать JSON таки проверить код возврата и убедится, что тот сервер не валяется с ошибкой 500 или не пытается показать тебе 404.
А во-вторых, регламентное выполняется на сервере под пользователем ОС кластера и назначенным пользователем 1С, а ручной запуск скорей всего - у тебя локально и под тобой. |
|||
2
AnDoro
03.09.21
✎
13:47
|
(1) Json Возвращает 200, тут все ок. А вот с сервером хороший довод, а как с этим бороться?
|
|||
3
acht
03.09.21
✎
13:57
|
(2) > как с этим бороться?
Ээээ, яростно? |
|||
4
AnDoro
03.09.21
✎
14:00
|
(3)То, что яростно то понятно ;) Имею ввиду, как заставить регламентное выполнятся автоматом на сервере?
|
|||
5
acht
03.09.21
✎
14:07
|
(4) УТ для Казахстана, оно ж УФ...
А как ты вручную запускаешь? |
|||
6
AnDoro
03.09.21
✎
14:11
|
(5) Через Админ. -> Обслуживание -> Регл. и фон. задания
|
|||
7
sTOd
03.09.21
✎
14:14
|
(6) А в ручную запускаешь под тем же пользователем что и в регламентном задании указан?
|
|||
8
AnDoro
03.09.21
✎
14:16
|
(7) Даже и нее знал, что там можно пользователя указать
|
|||
9
sTOd
03.09.21
✎
14:16
|
И про пользователя ОС тебе правильно сказали. Ты явно с полными правами запускаешь, а вот в фоне права могут быть ограничены.
|
|||
10
Кир Пластелинин
03.09.21
✎
14:41
|
(9) фоновые задание без пользователя запускаются под defuser`ом, которому назначается роль/роли из свойства самой конфы "Основные роли". в типовых там указаны зачастую роли с полными правами
|
|||
11
AnDoro
03.09.21
✎
16:26
|
(10) В итоге как мне присвоить права defuser'у или изменить пользователя?
|
|||
12
Кир Пластелинин
03.09.21
✎
16:59
|
(11) для начала надо либо отсечь, либо подтвердить ошибку по 1с-ным правам. проверить настройку журнала регистрации, что бы он регистрировал до уровня "информация" емнп. Если этот уровень не регистрировался, то потребуется автоматический запуск задания для фиксации события. после этого смотрим в ЖР события "Доступ" -> "Отказ в доступе".
|
|||
13
AnDoro
06.09.21
✎
06:41
|
(12)Пользователь "Неопределен", а про уровень "информация" емнп не совсем понял
|
|||
14
sTOd
06.09.21
✎
06:50
|
(8) Ну вы тут все крутые, так что пойду я своими делами заниматься. Нафиг эту благотворительность! Сами разберётесь.
|
|||
15
AnDoro
06.09.21
✎
08:00
|
(9)Так как расширить эти права?
|
|||
16
AnDoro
06.09.21
✎
08:18
|
Поменял пользователя на себя, осталось все по прежнему
|
|||
17
Смотрящий
06.09.21
✎
08:21
|
Object field not found (data)
{ОбщийМодуль.KaspiAPIЗапуск.Модуль(48)}: Для Каждого Значение Из ОбъектJSON.data Цикл У тебя отстутствует поле data при получении данных с сервера, видимо запрос обрабатывается но нет ничего нового и сервер возвращает пустой объект Тебе просто вставить проверку на присутствие этого поля в структуре, или что там у тебя, ОбъектJSON |
|||
18
AnDoro
06.09.21
✎
08:40
|
(17) Прикол в том, что объект присутствует в ответе, даже если новой информации нет он будет, но пустой.
|
|||
19
Смотрящий
06.09.21
✎
08:44
|
(18) Так нормально все. Отправляется запрос, сервер его обрабатывает и возвращает КодСостояния = 200 - корректно обработанный запрос
А вот что он в этом корректном запросе вернет - данные новые или "пустое" значение это уже как получиться |
|||
20
AnDoro
06.09.21
✎
08:49
|
(19) Проблема в том, что, когда запускаю вручную все нормально, ошибок нет(даже если пусто). А в автомате ошибка независимо от того есть новая информация или нет, как будто в фоне он не может ответ принять нормально, хоть и код 200
|
|||
21
acht
06.09.21
✎
08:54
|
(20) > хоть и код 200
Содержимое ответа сервера в случае ошибки покажи. |
|||
22
AnDoro
06.09.21
✎
08:55
|
(21)Отладчиком можно словить фоновое задание?
|
|||
23
Ёпрст
06.09.21
✎
09:01
|
(22) можно. Разрешаю
|
|||
24
Смотрящий
06.09.21
✎
09:02
|
(22)
Результат = HTTP.Получить(Запрос); Если Результат.КодСостояния = 200 Тогда ОтветJSON = Результат.ПолучитьТелоКакСтроку(); .... Иначе ЗаписьЖурналаРегистрации(<Параметры>); // И смотри в ЖР что он там возвращает КонецЕсли; |
|||
25
AnDoro
07.09.21
✎
06:38
|
(24)Оказалось из фона он все таки дает код 500
|
|||
26
acht
07.09.21
✎
10:19
|
(25) А писал бы ты код правильно, с проверкой ошибок, как тебе в (1) говорили - не было бы приступов телепатии на 4 дня.
Ну, каждый кузнец своего этого. |
|||
27
Смотрящий
07.09.21
✎
10:27
|
(25) Победил ?
|
|||
28
AnDoro
07.09.21
✎
10:34
|
(26) С кодом все в порядке, это все еще один код. Отличия только в запуске
|
|||
29
Галахад
гуру
07.09.21
✎
10:36
|
(28) Так себе код, если честно.
|
|||
30
AnDoro
07.09.21
✎
10:36
|
(27) Неа, появилось только больше вопросов. До этого грешил в сторону прав, а теперь вообще непонятно. вручную 200 и все выполняется, автоматом 500 и {"errors":[{"title":"Some error occurred when calling the api"}]}
|
|||
31
acht
07.09.21
✎
10:36
|
(28) А ну-ну. Ты бы этот 500 мгновеннно бы увидел прочитал ответ и понял бы в чем дело.
Ну, на форуме конечно посидеть не получилось бы. |
|||
32
acht
07.09.21
✎
10:37
|
(30) Что поставщик сервиса говорит?
|
|||
33
unbred
07.09.21
✎
10:37
|
у тебя фоновое как минимум по этой строке вывалится
Сообщить(Результат.КодСостояния); дальше не читал даже |
|||
34
Ёпрст
07.09.21
✎
10:38
|
(33) не, нормально там с сообщить, это жуёт в фоновом.
|
|||
35
unbred
07.09.21
✎
10:39
|
(34) у нас видимо разные фоновые.
у меня не жуёт |
|||
36
unbred
07.09.21
✎
10:40
|
всегда оборачиваю в #Если Клиент
|
|||
37
AnDoro
07.09.21
✎
10:40
|
(32) К поставщику вопросов нет, при ручном запуске все работает. Получается, что в фоновом запрос ломается
|
|||
38
acht
07.09.21
✎
10:41
|
(37) > К поставщику вопросов нет,
Что означает ошибка "Some error occurred when calling the api", елс у тебя нет вопросов к поставщику? |
|||
39
Ёпрст
07.09.21
✎
10:42
|
(35) не помню уже, посмотрю на досуге, может, тоже обёрнуто в директивы.
Но вроде, сообщить было фиолетово всегда. |
|||
40
acht
07.09.21
✎
10:42
|
(35) > видимо разные фоновые.
Да, твои неправильные |
|||
41
acht
07.09.21
✎
10:43
|
(39) На 8.2 разваливалось. в 8.3 работает
|
|||
42
AnDoro
07.09.21
✎
10:44
|
(38)Эта ошибка возникает при неправильном запросе. Например нет обязательных параметров или дата не верная
|
|||
43
Галахад
гуру
07.09.21
✎
10:46
|
На сервере скорее всего неразрывный пробел надо убрать.
|
|||
44
Kassern
07.09.21
✎
10:47
|
(42) прологируй свое рег задание куда нить и сверь отправленные данные с твоим ручным запуском.
|
|||
45
AnDoro
07.09.21
✎
10:48
|
(44)Сейчас попробую
|
|||
46
AnDoro
07.09.21
✎
10:48
|
(43)Не совсем понял
|
|||
47
Ёпрст
07.09.21
✎
10:49
|
Токен то хотя бы верный указываешь ?
|
|||
48
AnDoro
07.09.21
✎
10:49
|
(47)Да
|
|||
49
Ёпрст
07.09.21
✎
10:50
|
Вот это Г
ДатаВМилНачалоСтрока = СтрЗаменить(Строка(ДатаВмилНачало), " ", ""); замени на формат(хрень, "ЧГ=") |
|||
50
Галахад
гуру
07.09.21
✎
10:52
|
||||
51
Ёпрст
07.09.21
✎
10:53
|
и Дату в миллисекунды..нахрена 1970 год ?
Есть НачалоДня функция, если что. |
|||
52
AnDoro
07.09.21
✎
10:55
|
(51) Unix Timestamp
|
|||
53
Kassern
07.09.21
✎
10:57
|
(50) ну или просто СтрЗаменить(СтрокаСНеразрывнымПробелом,Символы.НПП,"");
|
|||
54
Галахад
гуру
07.09.21
✎
10:58
|
(53) Больше интересно почему на клиенте работало.
|
|||
55
acht
07.09.21
✎
11:01
|
(53) XMLСтрока
|
|||
56
Kassern
07.09.21
✎
11:03
|
(54) чудес не бывает. Если текст запроса будет совпадать полностью, а ответ сервера нет, то тогда проблема скорее всего в правах. Какая кстати версия платформы?
|
|||
57
Kassern
07.09.21
✎
11:04
|
(55) тоже как вариант
|
|||
58
AnDoro
07.09.21
✎
11:04
|
(56)8.3.17.1549
|
|||
59
AnDoro
07.09.21
✎
11:34
|
(49) Cудя по всему помогло
|
|||
60
Ёпрст
07.09.21
✎
11:35
|
||||
61
AnDoro
07.09.21
✎
11:39
|
(60)Неплохой вариант
|
|||
62
AnDoro
07.09.21
✎
11:41
|
Теперь вопрос офтопик. Из инфы из этого запроса создаются заказы, но с ними что-то не так 1Ска не хочет закрывать эти заказы, якобы ожидается оплата
|
|||
63
Kassern
07.09.21
✎
11:53
|
(62) наверное не из инфы запроса, а все таки из ответа сервера? А то что 1ска не хочет их закрывать, значит не все условия закрытия выполнены. Создай отдельную ветку.
|
|||
64
Ненавижу 1С
гуру
07.09.21
✎
11:55
|
(62) Как запрограммировали - так и работает. Смотрите порядок расчетов и график оплаты.
|
|||
65
AnDoro
07.09.21
✎
11:55
|
(63)Да, из ответа сервера
|
|||
66
Смотрящий
07.09.21
✎
12:19
|
(62) А ы поступленпии денег стоит заказ ?
|
|||
67
AnDoro
07.09.21
✎
13:09
|
(66)Да
|
|||
68
AnDoro
08.09.21
✎
09:00
|
Всем участвовавшим огромное спасибо!)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |