![]() |
|
Работа с данными при помощи web-сервиса | ☑ | ||
---|---|---|---|---|
0
Самарасофт
18.08.17
✎
18:22
|
Добрый день.
Имеется web-сервис на стороне 1С, к которому идёт обращение через публикацию на IIS Один из методов - создание записи в документах и справочниках. Вот начало функции: Функция CreateNewObject(type, name, entityCollection) Перем Спр; таблица = ПолучитьТаблицуПоИмени(name); Если таблица = "Справочник" Тогда Спр = Вычислить("Справочники." + name); новыйОбъект = Спр.СоздатьЭлемент(); таблица = "Справочники"; ИначеЕсли таблица = "Документ" Тогда Спр = Вычислить("Документы." + name); новыйОбъект = Спр.СоздатьДокумент(); таблица = "Документы"; КонецЕсли; Возврат 322; Весь текст не привожу - много его. В двух словах - дальше идёт заполнение и запись создаваемого экземпляра. Беда в том, что при обработке экземпляров типа "Документы" наблюдается чрезвычайно опасное поведение: для документа ЗаказПокупателя и ЗаказПоставщику данный блок кода не отрабатывает, а для большинства других экземпляров(например, ЗаказНаПроизводство) вполне успешно проходит создание. Возврат ОписаниеОшибки() не помогает - ответ: 500 internal server error Прошу наставить на путь истинный, где искать причины ошибки. |
|||
1
Базис
naïve
18.08.17
✎
18:28
|
Пятница, пол седьмого. Сервер устал и хочет на набережную!
|
|||
2
lodger
18.08.17
✎
18:28
|
ну я так понимаю,
"Спр = Вычислить("Документы." + name);" - не срабатывает, т.к. name не равен имени метаданных. или еще хз, что. но! надо все это дело завернуть в попытку и в возврат пихать осмысленный код+текст ошибки. кстати, в IIS можно настроить выдачу подробностей, а не 500 internal server error : When 1C:Enterprise errors (when you are working with IIS web server 7.0 or 7.5) are displayed as 500 – internal server error. There is a problem with the resource you are looking for, and it cannot be displayed., change the parameter controlling the error display. To do this, open the error page parameters customization dialog: Control Panel – Administrative tools – IIS Services Manager – <Name of server> – Sites – <Default Web Site> – <Name of virtual application> – Error pages – Edit parameters. In the dialog that opens, set the If the server finds an error, return the following parameter to Detailed error messages. Then click OK. |
|||
3
lodger
18.08.17
✎
18:29
|
+(2) простите за английский, нашел это на международной морде 1с.
|
|||
4
Базис
naïve
18.08.17
✎
18:30
|
Времени ему не хватает, небось.
|
|||
5
Базис
naïve
18.08.17
✎
18:31
|
Логи писать и читать ещё можно, в ЖР и ТЖ.
|
|||
6
Самарасофт
18.08.17
✎
18:36
|
(2), Спасибо! Пытаюсь.
(4), таймауты все более, чем достаточны. Ошибка возвращается практически мгновенно +(1) версия платформы 8.1 //если это значимо... |
|||
7
Самарасофт
18.08.17
✎
18:38
|
(2), увы, не помогло, всё равно шарашит 500.
"Спр = Вычислить..." - работает на других документах: ЗаказНаПроизводство - работает ЗаказПокупателя - нет ЗаказПоставщику - нет |
|||
8
lodger
18.08.17
✎
18:41
|
(6) ну тогда
Попытка лялялял исключение ЗаписьЖурналаРегистрации("ВебСервис.ТвойВебсервис.ТвойМетод()", УровеньЖурналаРегистрации.Информация, , , "ахтунг, ругаца"+ТвоиПараметры+ОписаниеОшибки()); КонецПопытки; |
|||
9
Самарасофт
18.08.17
✎
18:42
|
(5), в журнал регистрации, судя по всему, 1С не пишет, т.к. дело до записи каких-либо данных не доходит
|
|||
10
Самарасофт
18.08.17
✎
18:43
|
(8), Спасибо, сейчас попробую.
|
|||
11
Базис
naïve
18.08.17
✎
18:45
|
Кто мешает писать свои отладочные сообщения на каждом этапе? Ещё есть замер производительности, в нём видны отработавшие куски кода. И 82 уже есть, и 83 - там с интеграционными технологиями получше.
|
|||
12
Самарасофт
18.08.17
✎
18:47
|
(11), 82 83 не даёт использовать бизнес-задача, увы.
Отладочные сообщения дали выявить, на какой строке падает: Спр = Вычислить("Документы." + name) |
|||
13
lodger
18.08.17
✎
18:51
|
(12) читать первые строки из (2) до просветления.
|
|||
14
Самарасофт
18.08.17
✎
18:58
|
(13), но как же name может быть не равен имени метаданных, если я туда через SOAP UI передаю "ЗаказПокупателя" - не работает.
Передаю "ЗаказНаПроизводство" - работает. Оба значения беру из конфигуратора <Объект>-Основные-Имя Но ведь что-то я явно делаю не так.. Подскажите, могут какие-либо процедуры на уровне модуля объекта влиять на корректность исполнения метода Вычислить()? |
|||
15
Самарасофт
18.08.17
✎
19:05
|
(8), увы, не получается отследить ошибку журналом регистрации - запись туда не производится.
обернул всё в попытку, прописал в исключении как Вы и сказали. Может быть, что некорректная работа метода Вычислить() вызывает прерывание выполнения всего кода? Как такое отловить в 1С? |
|||
16
Asmody
18.08.17
✎
19:09
|
Вынеси методы веб-сервиса в отдельный модуль, отлаживай как обычный код, хоть тестами покрой. В модуле самого сервиса оставь только функции-обертки.
|
|||
17
h-sp
18.08.17
✎
19:16
|
(15) ну сделай нормальный код
Спр = Документы[name]; что ты какое-то Вычислить? Какой-то херней страдаешь. |
|||
18
Самарасофт
18.08.17
✎
19:29
|
(16), (17), Спасибо, будем пробовать.
|
|||
19
Самарасофт
18.08.17
✎
19:49
|
(17), жаль, но описанное поведение сохранилось
|
|||
20
breezee
18.08.17
✎
19:56
|
(0) Ну если веб-сервис на стороне 1с - в 1с в конфигурации включите отладку для веб-есрвисов и по f10 проходитесь
|
|||
21
Asmody
18.08.17
✎
20:00
|
(19) Нет такого документа
|
|||
22
Самарасофт
21.08.17
✎
12:48
|
(2) Еще раз спасибо за совет. Настроили возврат значимого сообщения.
Для "ЗаказПоставщику": <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header/> <soap:Body> <soap:Fault> <faultcode>soap:Client</faultcode> <faultstring>Неизвестная ошибка. {Документ.ЗаказПоставщику(297,53)}: Переменная не определена (ФормированиеПечатныхФорм) по причине: {Документ.ЗаказПоставщику(297,53)}: Переменная не определена (ФормированиеПечатныхФорм) по причине: {Документ.ЗаказПоставщику(297,53)}: Переменная не определена (ФормированиеПечатныхФорм)</faultstring> <detail>Неизвестная ошибка. {Документ.ЗаказПоставщику(297,53)}: Переменная не определена (ФормированиеПечатныхФорм) по причине: {Документ.ЗаказПоставщику(297,53)}: Переменная не определена (ФормированиеПечатныхФорм) по причине: {Документ.ЗаказПоставщику(297,53)}: Переменная не определена (ФормированиеПечатныхФорм)</detail> </soap:Fault> </soap:Body> </soap:Envelope> Строка 297: ОбластьМакета.Параметры.ПредставлениеПоставщика = ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Поставщик, Шапка.Дата), "ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,"); Для "ЗаказПокупателя": <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header/> <soap:Body> <soap:Fault> <faultcode>soap:Client</faultcode> <faultstring>Неизвестная ошибка. {ОбщийМодуль.ОбщийДляНШ(9,118)}: Переменная не определена (РабочаяДата) по причине: {ОбщийМодуль.ОбщийДляНШ(9,118)}: Переменная не определена (РабочаяДата) по причине: {ОбщийМодуль.ОбщийДляНШ(9,118)}: Переменная не определена (РабочаяДата)</faultstring> <detail>Неизвестная ошибка. {ОбщийМодуль.ОбщийДляНШ(9,118)}: Переменная не определена (РабочаяДата) по причине: {ОбщийМодуль.ОбщийДляНШ(9,118)}: Переменная не определена (РабочаяДата) по причине: {ОбщийМодуль.ОбщийДляНШ(9,118)}: Переменная не определена (РабочаяДата)</detail> </soap:Fault> </soap:Body> </soap:Envelope> |
|||
23
France
21.08.17
✎
12:54
|
(22) расставить галочки "Сервер, Клиент" и тд и тп..
в модуле веб-сервиса указанные переменные не доступны.. |
|||
24
Вафель
21.08.17
✎
12:56
|
У тебя вообще нельзя объект на сервере создать. Слишком много клиентского кода в модуле
|
|||
25
Самарасофт
21.08.17
✎
13:24
|
(23) (24) Спасибо. Я правильно понимаю, что данную проблему можно будет решить путем проставления нужных галочек у модулей "Сервер, Клиент, ..." или путем реорганизации кода и добавления конструкций вида "#Если Клиент Тогда"?
|
|||
26
France
21.08.17
✎
13:27
|
(25) в том числе и проставление галочек... и, не нужно весь код в модуль сервиса.. лучше создать не один общий модуль, и работать через них..
|
|||
27
France
21.08.17
✎
13:27
|
хотя, может быть есть смысл смотреть в сторону OData, если нужно работать со всеми объектами 1С..
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |