1с web клиент переменная не определена типузлаxml
Здравствуйте, коллеги! Сегодня поговорим о проблеме неопределенных переменных в 1С. Рядовой пользователь с данной ошибкой сталкиваться не должен, но если уж и произошло подобное при работе в типовой конфигурации 1С, которая никак не модифицировалась, возможно, у нас наклевывается проблема самого релиза, которая иссякнет при обновлении. В таком случае стоит связаться со специалистом, чтобы найти выход из ситуации.
Если же Вы сами занимаетесь разработкой и столкнулись с ошибкой, «Переменная не определена в 1С», то следует обратится к конфигуратору, найти, что за переменная и в какой именно момент не определена. Есть несколько вариантов решения, но нужно подбирать их с умом, ибо вполне возможно, что после неправильного исправления в одном месте, Вы получите кучу ошибок в других местах.
1. Проверка на определения 1С 8.3
Можно прописать перед ошибкой следующий код:
Если Не НашаПеременная = Неопределено Тогда
Соответственно, закрыв «Если» после, но тут как уже писалось нужно действовать аккуратно, возможно данная конструкция напрочь сломает весь последующий код. Гораздо лучше найти, где объявляется переменная и устранить ошибку.
2. Поиск объявления переменной 1С 8.3
Вполне возможен вариант, что ее просто забыли включить в передаваемые параметры функции или она не доступна в данном виде клиента. Такое случается, когда, например, обращаются из тонкого клиента к метаданным. В этом случае стоит переписать функцию или, возможно, объявить новую, но уже на сервере, которая вернет необходимые тонкому клиенту данные.
3. Обычная опечатка в программе 1С 8.3 Предприятие
Чтобы быстро в программе 1С 8.3 Предприятие проверить опечатка ли спровоцировала ошибку, просто скопируем переменную из объявления и вставим ее имя в то место, где случается ошибка. Можно сделать следующим образом, чтобы избежать таких ошибок в будущем:
Теперь, когда курсор останавливается на идентификаторе, все другие его упоминания будут выделены, как на следующем изображении:
Специалист компании ООО «Кодерлайн»
Дягилев Дмитрий Вадимович
Вас могут заинтересовать следующие статьи:
Соединение и выполнение некоторых API команд происходит успешно, если в параметрах команд простые типы (Число, Дата, Булево), а если в параметрах необходимо передать Массив, или структуру то вызов не проходит.
Скорей всего необходимо Объект 1с (Массив, Структуру и т.п.) перевести в Тип который ожидает сервис.
ОбъектXDTO = Сериализатор.ЗаписатьXDTO(Новый Массив());
Ответ=Client.getCurrencyList("demo_api", "demo@example.com", "demo",ОбъектXDTO);
в первых 3 параметрах указывается информация аутентификации, а в 4 параметр надо для этой функции передать пустой массив.
При этом при вызове функции выдается ошибка
"Ошибка установки соответствия префикса и URI пространства имен"
Видимо надо каким то образом указать, что мой массив принадлежит тому пространству имен который ожидает сервис. Не пойму как это сделать
Подключение к веб сервису:
ОпределениеТ=Новый WSОпределения("http://www.drebedengi.ru/soap/dd.wsdl");
WSСервис=ОпределениеТ.Сервисы[0];
Client=Новый WSПрокси(ОпределениеТ, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя);
За ранее хочу сказать, что с XDTO и сервисами только пытаюсь, что то делать, поэтому возможно неправильно использую термнилагию.
только один пакет "http://www.w3.org/2001/XMLSchema"
Пробовал написать вот так:
ПространствоИмен="http://www.w3.org/2001/XMLSchema";
Связывался с разработчиком, он говорит что этот параметр должен быть пустой, он служебный и заполнять его не надо.
Но при этом он ругается, что параметр не заполнен при вызове из 1с.
(6) 2 элемента ситуацию не спасло. все равно пишет
"Ошибка SOAP сервера: getCurrencyList: Parameter 'idList' must be an array"
попробовал записать этот объект в хмл вот такой код:
(9)
Первый вариант
"Ошибка при вызове метода объекта модели XDTO.
Второй вариант:
"Обязательный параметр не задан: :ddengiService:getCurrencyList(. idList. )"
Он посоветовал, поставить php там есть рабочий пример на пхп.
Пошел, ставить, поидее там же и будет видно какой должен быть XML запрос.
можешь сохранить в файл и дописать ипорт
смотри v8: Заполнение массива XDTO
82
targetNamespace="http://xml.apache.org/xml-soap"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
(16) Сохранил в файл, что ты указал. Далее в конфу в пакеты XDTO загрузил эту схему далее:
Ошибка:
как выглядит MAP в ХМЛ:
Что касается (14) (15) не совсем понял как импортировать это, поидее (16) уже готовый тип.
(18) Сохранил wsdl далее в какое место файла необходимо вставить:
Выдается ошибка при выполнении:
"Фатальная ошибка:
Extra content at the end of the document
Не совсем понял, для чего ты указываешь:
"Там в файле есть секция определяющая путь к первису и точки подключения"
Смотри v8: Заполнение массива XDTO
82 там после
импорт идет в секции типов Попробуй создать эту секцию со свои пространством имен
Добавил вот это:
В прокси появились доп. пакеты:
"http://schemas.xmlsoap.org/soap/encoding/"
Ошибка:
Несоответствие типов XDTO:
Тип 'Map' не найден
Тип объекта не является открытым
(29) ты указал на код "Set currency list"
поидее, это какая то запись в базу.
В параметрах надо указать "list" думаю это не тоже самое, что и "idList" в параметрах вызова операции getCurrencyList
Судя по всему Веб сервис там ожидает только числовые значения, т.к. выдается ошибка на какой то другой
Попробовал указать 0, тогда вызов проходит getCurrencyList (думал это уже не случится=)), но ответ приходит пустой.
Написал еще разработчику, может подскажет какими значениями надо заполнить параметр idList чтобы получить норм ответ.
Serginio1, а как то можно в схеме wsdl которую мы указываем, для параметра idList указать, что он не является обязательным?
Когда в конфу загружаешь по ссылке wsdl, то там у параметров показывается свойство: Возможно пустое, там оно везде Ложь
(34) Возможно ошибки были при возврате значения
v8: Заполнение массива XDTO
см 100 Там точно возвращался map а 1С не могла разобрать этот тип
(37) у меня возвращается Неопределено, и ошибки не выскакивает
Ошибка:
Ошибка разбора XML: - [79,28]
Фатальная ошибка:
Попробовал просто удалить эту строку idList, тогда параметр не требуется но при вызове функции, но сервер все равно выдает ошибку:
Т.е. это на стороне сервера.
(38) Знач проблема на сервере или что то нужно подставлять по умолчанию
minOccurs это для полей структуры. Хрень сморозил. Есть понятие возможно пустое значение, но туда передается anySimpleType
Нашел еще один варинат работы через SOAP клиент, с помощью , но результат тот же.
Ошибка:
"Произошла исключительная ситуация (Client): Client:Incorrect number of parameters supplied for SOAP request HRESULT=0x80070057: Параметр задан неверно.
- Client:Unspecified client error. HRESULT=0x80070057: Параметр задан неверно."
Уже можно указать "" в качестве параметра, но при попытке выполнить выдает:
Произошла исключительная ситуация (SoapMapper): SoapMapper:Restoring data into SoapMapper anyType failed HRESULT=0x8007000E: Недостаточно памяти для завершения операции.
- Client:Unspecified client error. HRESULT=0x8007000E: Недостаточно памяти для завершения операции.
Думал, мб с 1с что то. Сделал подключение через SoapClient с помощью AutoIT результат, тот же не удается выполнить команды.
(43) у меня что то проблемы с установкой PHP на комп, точнее с портом 80.
Пробовал Денвер, поидее ничего не надо прописывать, устанавливаешь и все.
Вообщем пока php код не могу выполнить.
Далее в коде пытаюсь выполнить:
Объект = Фабрика.Создать(Фабрика.Тип("http://www.w3.org/2001/XMLSchema-instance","nil"));
Это неопределено в отладчике.
А вот если присвоить это значение какомунибудь anyType она правильно прописывает.
"А вот если присвоить это значение какомунибудь anyType она правильно прописывает."
Возможно, но как это сделать, чтобы передать в параметр WS операции.
В XML файле получается так:
При вызове операции выдается ошибка.
Ошибка SOAP сервера: getCurrencyList: Parameter 'idList' must be an array
(69) Вообще то nillable="true" для anyType это не совсем то. Кстати, а что возвращает то сервис?
Ответ от разработчика:
"Вам нужно добиться, чтобы передаваемый XML был таким-же, как у PHP скрипта.
На самом деле не только у PHP скрипта, многие стандартные библиотеки, в частности под все мобильные устройства - тоже умеют это делать, т.к. независимые разработчики это реализовали в приложениях.
Каким должно быть значение параметра, чтобы 1с сгенерил такой XML - вам нужно разобраться."
(70) сервис вернет, поидее массив записей о движениях, вроде как.
"и что возвращает http://www.soapui.org"
Честно говоря не понял, для чего этот сервис.
"Нагрузочное тестирование веб сервисов" ?
странно, что он выдает ответ
Ошибка SOAP сервера: getCurrencyList: Parameter 'idList' must be an array
А какой эррай если передается nil?
Понимаю, что это не особо средствами 1с. Но все же, лучше чем ничего.
Огромное спасибо за помощь Serginio1
(81) А объекты ты можешь из XML ответа подгружать используя прокси фабрику.
(80) А 64 не подошел?
(86) Почему то при чтении выдает ошибку
в wsdl в шапке прописано
Стал разбираться с возможно пустой параметр. nillable в параметрах не прокатывает
в 1с для параметров городится структура г де у параметра указывается nillable например
Здравствуйте, коллеги! Сегодня поговорим о проблеме неопределенных переменных в 1С. Рядовой пользователь с данной ошибкой сталкиваться не должен, но если уж и произошло подобное при работе в типовой конфигурации 1С, которая никак не модифицировалась, возможно, у нас наклевывается проблема самого релиза, которая иссякнет при обновлении. В таком случае стоит связаться со специалистом, чтобы найти выход из ситуации.
Если же Вы сами занимаетесь разработкой и столкнулись с ошибкой, «Переменная не определена в 1С», то следует обратится к конфигуратору, найти, что за переменная и в какой именно момент не определена. Есть несколько вариантов решения, но нужно подбирать их с умом, ибо вполне возможно, что после неправильного исправления в одном месте, Вы получите кучу ошибок в других местах.
1. Проверка на определения 1С 8.3
Можно прописать перед ошибкой следующий код:
Если Не НашаПеременная = Неопределено Тогда
Соответственно, закрыв «Если» после, но тут как уже писалось нужно действовать аккуратно, возможно данная конструкция напрочь сломает весь последующий код. Гораздо лучше найти, где объявляется переменная и устранить ошибку.
2. Поиск объявления переменной 1С 8.3
Вполне возможен вариант, что ее просто забыли включить в передаваемые параметры функции или она не доступна в данном виде клиента. Такое случается, когда, например, обращаются из тонкого клиента к метаданным. В этом случае стоит переписать функцию или, возможно, объявить новую, но уже на сервере, которая вернет необходимые тонкому клиенту данные.
3. Обычная опечатка в программе 1С 8.3 Предприятие
Чтобы быстро в программе 1С 8.3 Предприятие проверить опечатка ли спровоцировала ошибку, просто скопируем переменную из объявления и вставим ее имя в то место, где случается ошибка. Можно сделать следующим образом, чтобы избежать таких ошибок в будущем:
Теперь, когда курсор останавливается на идентификаторе, все другие его упоминания будут выделены, как на следующем изображении:
Специалист компании ООО «Кодерлайн»
Дягилев Дмитрий Вадимович
Вас могут заинтересовать следующие статьи:
Здравствуйте, коллеги! Сегодня поговорим о проблеме неопределенных переменных в 1С. Рядовой пользователь с данной ошибкой сталкиваться не должен, но если уж и произошло подобное при работе в типовой конфигурации 1С, которая никак не модифицировалась, возможно, у нас наклевывается проблема самого релиза, которая иссякнет при обновлении. В таком случае стоит связаться со специалистом, чтобы найти выход из ситуации.
Если же Вы сами занимаетесь разработкой и столкнулись с ошибкой, «Переменная не определена в 1С», то следует обратится к конфигуратору, найти, что за переменная и в какой именно момент не определена. Есть несколько вариантов решения, но нужно подбирать их с умом, ибо вполне возможно, что после неправильного исправления в одном месте, Вы получите кучу ошибок в других местах.
1. Проверка на определения 1С 8.3
Можно прописать перед ошибкой следующий код:
Если Не НашаПеременная = Неопределено Тогда
Соответственно, закрыв «Если» после, но тут как уже писалось нужно действовать аккуратно, возможно данная конструкция напрочь сломает весь последующий код. Гораздо лучше найти, где объявляется переменная и устранить ошибку.
2. Поиск объявления переменной 1С 8.3
Вполне возможен вариант, что ее просто забыли включить в передаваемые параметры функции или она не доступна в данном виде клиента. Такое случается, когда, например, обращаются из тонкого клиента к метаданным. В этом случае стоит переписать функцию или, возможно, объявить новую, но уже на сервере, которая вернет необходимые тонкому клиенту данные.
3. Обычная опечатка в программе 1С 8.3 Предприятие
Чтобы быстро в программе 1С 8.3 Предприятие проверить опечатка ли спровоцировала ошибку, просто скопируем переменную из объявления и вставим ее имя в то место, где случается ошибка. Можно сделать следующим образом, чтобы избежать таких ошибок в будущем:
Теперь, когда курсор останавливается на идентификаторе, все другие его упоминания будут выделены, как на следующем изображении:
Специалист компании ООО «Кодерлайн»
Дягилев Дмитрий Вадимович
Вас могут заинтересовать следующие статьи:
Добра всем. Выскакивает такая ошибка (Переменная не определена (Справочники)) в тонком клиенте рабочей конфигурации. В толстом все хорошо работает. При этом в моей тестовой конфе срабатывает в тонком клиенте. Подскажите пожалуйста в чем может быть причина?
Рабочая конфигурация на клиент-сервере, вестимо. Зайди в конфигураторе в Параметры - Модули - Проверка и поставь галочки на Сервер и Тонкий Клиент.
не сработает на сервере, другую переменную там не найдет. я пробовал получить объект на сервере и его потом передавать. может что-то не так сделал. пример бы посмотреть или описание как это надо делать
Переменная не определена (ГУГОЛКлиент) переменная в данном случае это общий модуль на клиенте. как его передать параметром и есть ли смысл. Конкретнее опишу ситуацию Есть документ, в нем хранится ссылка на другой документ. при нажатии кнопки "печать" вызывается процедура общего модуля, которая другой процедурой выбирает принадлежащие документу печатные формы, потом проверяет некоторые условия и выводит форму выбора печатной формы.
ну выделите эту строчку, где справочники, как отдельную процедуру на сервере. А всё остальное пусть на клиенте.
я делал так : Конец Ругается тогда на : Ошибка преобразования данных XDTO Покурил интернет на эту тему, почистил кэш, сравнил версии, все равно та же история. Правильно ли я понимаю, что кэш чистим только на клиента,а сервер в данном случае ни при чем.
Подскажите, что сделать, чтобы данные из ссылки на документ использовать на клиенте, как к нему правильно обращаться и чем не подходит вариант
объект нельзя передавать туда обратно. Вариант вообще ничем не подходит. всё выбирайте на сервере в структуру. И эту структуру возвращайте.
(ОбщийМодуль.ГУГОЛКлиент.Модуль(236,12)>:Переменная не определена (Справочники) строка тебе показана, место показано. Отладчик запускать умеешь?
в целом все заработало. ошибка была совершено в другой процедуре модуля. и все таки подскажите как получить значение из справочника на клиенте?
дорогие форумчане, помощь человеку развивает вас, но троллинг только тратит ваше драгоценное время. спасибо вам. вопрос актуален. есть необходимость использовать значение справочника в процедуре, что на клиенте написана. куда почитать об этом?:)
Читайте также: