|
http сервис. Не работает НайтиПоКоду и ТекстовыйДокумент.Записать(ВФайл) | ☑ | ||
---|---|---|---|---|
0
AnBlast
08.03.23
✎
10:54
|
Что-то непонятное мне происходит...
есть http-сервис который должен получить файл от стороннего ресурса и сохранить его в КаталогВременныхФайлов() и в Справочники.ХранилищеДополнительнойИнформации раньше все работало. потом этот сервис долго не использовался, а за это время база переехала на другой сервак (как и раньше под SQL, релизы те же, винда такая же) и все сломалось... Скорее всего дело в настройках базы, но совершенно непонятно куда копать и что мы смогли сломать при переезде. Может кто сталкивался? помогите, плиз. |
|||
1
JeHer
08.03.23
✎
11:11
|
А до 1С этот файл доходит? Брандмауэр винды, может, рубит?
|
|||
2
AnBlast
08.03.23
✎
11:18
|
не... я вижу по размеру пакета, что оно приходит.
но даже простейшая конструкция типа Спр = Справочники.ФизическиеЛица.НайтиПоКоду("0000070320"); валится по ошибке. причем ошибка пишется на английском object procedere called as function или как-то так |
|||
3
vicof
08.03.23
✎
11:26
|
"object procedere called as function"
хммм, что же это может быть?! |
|||
4
AnBlast
08.03.23
✎
11:28
|
(3) перевести не проблема )) проблема, что оно выдается на Спр = Справочники.ФизическиеЛица.НайтиПоКоду("0000070320");
|
|||
5
vicof
08.03.23
✎
11:42
|
Кэш?
Посмотреть сам сервис, насколько он отличается от бывшего. Думаю, это проблема не строки, а в целом процедуры. |
|||
6
AnBlast
08.03.23
✎
11:46
|
(5) сервис не меняли. машина, на котором развернут сервис та же и не менялась с того времени как все работало. Да и на ней не только этот сервис крутится, там туча всяких обменов...
а что значит "в целом процедуры"? типа контекст не тот? |
|||
7
ДедМорроз
08.03.23
✎
11:47
|
Где-то вместо функции определили процедуру.
И до вашего кода просто не доходит вообще. |
|||
8
AnBlast
08.03.23
✎
11:51
|
(7) не... я ставлю точку остановки на входе в процедуру метода POST. раньше ничего нет... и прям в этот момент, еще до выполнения любого кода, смотрю через Вычислить выражение результат выполнения Спр = Справочники.ФизическиеЛица.НайтиПоКоду("0000070320"); И оно пишет "object procedere called as function"
|
|||
9
AnBlast
08.03.23
✎
11:53
|
причем обычно жеж 1С ругается не на английском... а тут ошибка похожая на 1Сную, но на английском. Значит возможно это ругается сервис, а не 1С. но так ли это и как это пофиксить???
|
|||
10
ДедМорроз
08.03.23
✎
12:03
|
Так в поле Вычислить нужно функцию вызывать
Тот же поиск,но без присвоения сделай |
|||
11
Сергиус
08.03.23
✎
12:20
|
(2)Справочники.ФизическиеЛица имеет тип СправочникМенеджер?
|
|||
12
AnBlast
08.03.23
✎
12:22
|
(10) ну я не на столько еще 1С забыл ))
(11) да |
|||
13
JeHer
08.03.23
✎
12:24
|
Кусочек кода бы
|
|||
14
AnBlast
08.03.23
✎
12:36
|
Функция DocValidPOST(HTTPСервисЗапрос)
ЗаписьЖурналаРегистрации("Запрос", УровеньЖурналаРегистрации.Информация, , , "Получены данные"); Попытка Результат = HTTPСервисЗапрос.ПолучитьТелоКакСтроку(); ИмяФайла = КаталогВременныхФайлов() + "zzz_txt_" + Формат(ТекущаяДата(), "ДФ=yyyyMMdd_ччММсс") + ".txt"; Док = новый ТекстовыйДокумент; Док.УстановитьТекст(Результат); Док.Записать(ИмяФайла); //ВОТ ТУТ ВАЛИТСЯ НомерБрони = ""; RequestId = HTTPСервисЗапрос.Заголовки["X-Document-Request-Trace-Id"]; Если ЗначениеЗаполнено(RequestId) Тогда Поз = СтрНайти(RequestId, "/"); Если Поз <> 0 Тогда НомерБрони = Сред(RequestId, 1, Поз - 1); КонецЕсли; КонецЕсли; Если НомерБрони <> "" Тогда КарточкаБронирования = Справочники.ФизическиеЛица.НайтиПоКоду("0000070320"); //И ВОТ ТУТ ВАЛИТСЯ Если НЕ КарточкаБронирования.Пустая() Тогда НовЭл = Справочники.ХранилищеДополнительнойИнформации.СоздатьЭлемент(); НовЭл.Наименование = RequestId; НовЭл.Объект = КарточкаБронирования; НовЭл.Хранилище = Новый ХранилищеЗначения(HTTPСервисЗапрос.ПолучитьТелоКакСтроку(), Новый СжатиеДанных(9)); НовЭл.Записать(); КонецЕсли; КонецЕсли; Исключение ЗаписьЖурналаРегистрации("Запрос ", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки()); КонецПопытки; РезультатСтруктура = Новый Структура("success",true); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON, РезультатСтруктура); СтрокаДляОтвета = ЗаписьJSON.Закрыть(); Ответ = Новый HTTPСервисОтвет(200); Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета); Возврат Ответ; КонецФункции |
|||
15
ДедМорроз
08.03.23
✎
13:05
|
А после каталога разделитель пути ?
А справочник ФизическиеЛица точно есть ? |
|||
16
AnBlast
08.03.23
✎
13:17
|
(15) КаталогВременныхФайлов() возвращает C:\Users\USR1CV8.Server\AppData\Local\Temp\
конечно есть... Этот код работал осенью... потом сервис не использовался, а сама база тестовая в которой дело происходит (в продакшн сервис не попал) переподнималась из бэкапа А сервер где крутятся сервисы http не менялся и ничего с ним не делалось вообще |
|||
17
Сергиус
08.03.23
✎
13:26
|
(14)[ КарточкаБронирования = Справочники.ФизическиеЛица.НайтиПоКоду("0000070320"); //И ВОТ ТУТ ВАЛИТСЯ]
Как определили, что именно здесь валится? Попробуйте ради проверки использовать КарточкаБронирования = Справочники.ФизическиеЛица.ПустаяСсылка(), ошибка исчезнет или будет такая же? |
|||
18
AnBlast
08.03.23
✎
13:35
|
(17) Ошибка исчезнет...
А если найти по коду (код точно есть), то пишет Error calling context method (НайтиПоКоду) но функция сваливается еще раньше на Док.Записать(ИмяФайла); - object procedere called as function |
|||
19
Сергиус
08.03.23
✎
13:45
|
(18)Версия платформы 1с какая? Пробовали сделать переопубликацию сервиса? ИМХО, похоже на какую-то ошибку на уровне платформы именно, применительно к данной публикации.
|
|||
20
AnBlast
08.03.23
✎
13:51
|
(19) 8.3.10 и не менялась последние 3 года точно. Осенью все работало
сервис там https и перепубликацию не пробовал... и не очень хочется. Но видать придется |
|||
21
Сергиус
08.03.23
✎
18:52
|
(20)Сами же пишете в (0), что был переезд на другой сервак.
|
|||
22
rudnitskij
08.03.23
✎
19:17
|
(14) А какое имя файла возвращает?
|
|||
23
rudnitskij
08.03.23
✎
19:38
|
(14) "ИмяФайла = КаталогВременныхФайлов() + "zzz_txt_" + Формат(ТекущаяДата(), "ДФ=yyyyMMdd_ччММсс") + ".txt"" - вот это чему равно?
|
|||
24
Злопчинский
08.03.23
✎
20:57
|
(23) я хз как там форматы в восьмерке, но прикольно будет если время с двоеточием.. хотя, думаю что все же - без...
|
|||
25
rudnitskij
08.03.23
✎
21:08
|
(24) судя по ошибкам на английском, мог измениться формат даты, из-за чего ошибку выкидывает попытка записи файла с именем, которое не разрешается системой. Плюс лишние точки в пути к файлу тоже смущают("КаталогВременныхФайлов() возвращает C:\Users\USR1CV8.Server\AppData\Local\Temp\")
|
|||
26
Сергиус
09.03.23
✎
02:38
|
(24)Формат(ТекущаяДата(), "ДФ=yyyyMMdd_ччММсс") - в таком формате никакого двоеточия не может быть
|
|||
27
Сергиус
09.03.23
✎
02:40
|
(25)[C:\Users\USR1CV8.Server\AppData\Local\Temp\] - такой путь вполне себе проходит, точка в имени каталога допустима.
|
|||
28
Сергиус
09.03.23
✎
02:45
|
(14)
Док = новый ТекстовыйДокумент; Док.УстановитьТекст(Результат); Док.Записать(ИмяФайла); Проверьте, чтобы в этом блоке нигде не было какого-то скрытого текста, например если пролистать вправо экран. На всякий случай, выделите, удалите и пропишите руками заново. |
|||
29
JeHer
09.03.23
✎
04:15
|
Права, права
|
|||
30
AnBlast
09.03.23
✎
10:48
|
(21) не переезд, а прибили старую тестовую базу и подняли на ее место новую
(23) C:\Users\USR1CV8.Server\AppData\Local\Temp\zzz_txt_20230309_090344.txt (28) проверил, нету там ничего (29) права на что? на запись в каталог? проверил... |
|||
31
AnBlast
09.03.23
✎
11:55
|
(29) ну таки да... права
дал пользователю админские права и все заработало. При этом тут сервис https и у него свой пользователь. Права ему давались по аналогии с пользователем, под которым работают другие http (не https) сервисы. Видать для https надо что то еще, что не требуется для http Буду искать что... Всем Спасибо! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |