"Переменная не определена" при вызове функции из расширения
В пустую конфигурацию добавлено расширение (активно, безопасный режим отключен), версия платформы - 8.3.24.
Далее в модуль приложения основной конфигурации добавлена процедура, где вызывается одна из функций расширения (код вызова взят из примера документации к расширению):
В конфигураторе такой алгоритм не проходит проверку с вот такой ошибкой:
С расширением точно всё в порядке, это общедоступная библиотека, проверенная сообществом.
Почему же возникает ошибка?
Далее в модуль приложения основной конфигурации добавлена процедура, где вызывается одна из функций расширения (код вызова взят из примера документации к расширению):
Процедура ПриНачалеРаботыСистемы()
Результат = КоннекторHTTP.GetJson("https://api.myip.com");
Сообщить(Результат);
КонецПроцедуры
В конфигураторе такой алгоритм не проходит проверку с вот такой ошибкой:
{МодульУправляемогоПриложения(3,14)}: Переменная не определена (КоннекторHTTP)
Результат = <<?>>КоннекторHTTP.GetJson("https://api.myip.com"); (Проверка: Тонкий клиент)
Результат = <<?>>КоннекторHTTP.GetJson("https://api.myip.com"); (Проверка: Тонкий клиент)
С расширением точно всё в порядке, это общедоступная библиотека, проверенная сообществом.
Почему же возникает ошибка?
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
(5) читаем:
Это общий модуль с флагом только Сервер
С клиента нет доступа. Сначала необходимо перейти на сервер через общий модуль с флагами "Сервер" и "Вызов сервера" и уже через него вызывать нужный метод.
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>true</ExternalConnection>
<ClientOrdinaryApplication>true</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
<Privileged>false</Privileged>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>true</ExternalConnection>
<ClientOrdinaryApplication>true</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
<Privileged>false</Privileged>
Это общий модуль с флагом только Сервер
С клиента нет доступа. Сначала необходимо перейти на сервер через общий модуль с флагами "Сервер" и "Вызов сервера" и уже через него вызывать нужный метод.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(14) Так если бы то были конкуренты - я бы только помог бы!
А то в основном это набор индивидуумов, по которым судят как о всей профессии в целом, так и о самой 1С. А нам потом еще это все за ними убирать (вместо того, чтобы заниматься интересным делом). Нас уже и так не хватает на эту уборку.
Поэтому, если уж не получается увеличивать количество профессиональных дворников - то надо уменьшать количество маргинальных мусорящих. (Лучше один раз пристрелить жену, чем каждую неделю стрелять её любовников)
// Или как сказал Лужков - "Стоимость квадратного метра в Москве увеличиваться не будет! Будет уменьшаться квадратный метр."
А то в основном это набор индивидуумов, по которым судят как о всей профессии в целом, так и о самой 1С. А нам потом еще это все за ними убирать (вместо того, чтобы заниматься интересным делом). Нас уже и так не хватает на эту уборку.
Поэтому, если уж не получается увеличивать количество профессиональных дворников - то надо уменьшать количество маргинальных мусорящих. (Лучше один раз пристрелить жену, чем каждую неделю стрелять её любовников)
// Или как сказал Лужков - "Стоимость квадратного метра в Москве увеличиваться не будет! Будет уменьшаться квадратный метр."
(3)
Тогда такой вопрос: почему в модулях форм и общих команд можно вызывать серверные процедуры напрямую из клиентских, а в модуле приложения нельзя?
Тогда такой вопрос: почему в модулях форм и общих команд можно вызывать серверные процедуры напрямую из клиентских, а в модуле приложения нельзя?
// Модуль общей команды - так можно
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
СходитьНаСервер(); // Выполняется успешно
КонецПроцедуры
&НаСервере
Процедура СходитьНаСервер()
Сообщить("Идем на сервер.");
КонецПроцедуры
Показать// Модуль приложения - нельзя, "Процедура или функция с указанным именем не определена (СходитьНаСервер)"
Процедура ПриНачалеРаботыСистемы()
СходитьНаСервер();
КонецПроцедуры
&НаСервере
Процедура СходитьНаСервер()
Сообщить("Сходили на сервер");
КонецПроцедуры
Показать
(20)
Ну, не хотелось бы забывать 15+ лет веб-разработки, пригодится еще :) Но я знал, что 1С - это совсем другое, поэтому сделал ровно так, как вы написали - начал сначала.
Очень помогло, что у 1С есть официальные курсы. Это выгодно ее отличает от других технологий, где курсов миллион, а какие взять - непонятно.
Действительно не похоже на все, что я знал раньше, тут соглашусь. Очень большая предметно-ориентированная часть. Но в ней и сила.
Особенно меня впечатлили SQL-запросы на русском языке. В принципе, почему бы и нет? Но с непривычки немного забавляет :)
Уж если все таки хотите быть программистом 1С -начните сначала, все чему Вас учили раньше забудьте как страшный сон.
Ну, не хотелось бы забывать 15+ лет веб-разработки, пригодится еще :) Но я знал, что 1С - это совсем другое, поэтому сделал ровно так, как вы написали - начал сначала.
Очень помогло, что у 1С есть официальные курсы. Это выгодно ее отличает от других технологий, где курсов миллион, а какие взять - непонятно.
Действительно не похоже на все, что я знал раньше, тут соглашусь. Очень большая предметно-ориентированная часть. Но в ней и сила.
Особенно меня впечатлили SQL-запросы на русском языке. В принципе, почему бы и нет? Но с непривычки немного забавляет :)
(22)
Я начал с того, что пошел на официальный сайт 1С и спросил там в чате у оператора поддержки, с чего нужно начинать изучение 1С программистам. Оператор рекомендовал мне пройти учебные курсы в количестве четырех штук, которых достаточно для уровня 1С:Профессионал. Что я и сделал.
На курсах разбирается клиент-серверная архитектура, рассказывается про директивы &НаКлиенте и &НаСервере на примере процедур модулей форм. Однако не объясняется, что так можно делать не во всех модулях. То, что модуль приложения - сугубо клиентский и из него нельзя вызывать сервер, там не рассказывали.
Потому что это модуль приложения, он только клиентский.
Начните с Радченко хотя бы.
Начните с Радченко хотя бы.
Я начал с того, что пошел на официальный сайт 1С и спросил там в чате у оператора поддержки, с чего нужно начинать изучение 1С программистам. Оператор рекомендовал мне пройти учебные курсы в количестве четырех штук, которых достаточно для уровня 1С:Профессионал. Что я и сделал.
На курсах разбирается клиент-серверная архитектура, рассказывается про директивы &НаКлиенте и &НаСервере на примере процедур модулей форм. Однако не объясняется, что так можно делать не во всех модулях. То, что модуль приложения - сугубо клиентский и из него нельзя вызывать сервер, там не рассказывали.
(5) читаем:
Это общий модуль с флагом только Сервер
С клиента нет доступа. Сначала необходимо перейти на сервер через общий модуль с флагами "Сервер" и "Вызов сервера" и уже через него вызывать нужный метод.
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>true</ExternalConnection>
<ClientOrdinaryApplication>true</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
<Privileged>false</Privileged>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>true</ExternalConnection>
<ClientOrdinaryApplication>true</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
<Privileged>false</Privileged>
Это общий модуль с флагом только Сервер
С клиента нет доступа. Сначала необходимо перейти на сервер через общий модуль с флагами "Сервер" и "Вызов сервера" и уже через него вызывать нужный метод.
(11)
Спасибо за наводку. Это надо обдумать.
Однако у меня возник вопрос: почему модуль библиотеки нельзя вызвать, например, из модуля общей команды? Ведь там тоже есть серверный контекст. Однако библиотека из него не видна:
Почему так?
Сначала необходимо перейти на сервер через общий модуль с флагами "Сервер" и "Вызов сервера" и уже через него вызывать нужный метод.
Спасибо за наводку. Это надо обдумать.
Однако у меня возник вопрос: почему модуль библиотеки нельзя вызвать, например, из модуля общей команды? Ведь там тоже есть серверный контекст. Однако библиотека из него не видна:
{ОбщаяКоманда.СходитьНаСервер.МодульКоманды(15,14)}: Переменная не определена (КоннекторHTTP)
Результат = <<?>>КоннекторHTTP.GetJson("https://api.myip.com"); (Проверка: Сервер)
Результат = <<?>>КоннекторHTTP.GetJson("https://api.myip.com"); (Проверка: Сервер)
Почему так?
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
СходитьНаСерверПростоТак(); // Выполняется успешно
ОтправитьHTTPЗапрос(); // Ошибка
КонецПроцедуры
&НаСервере
Процедура СходитьНаСерверПростоТак()
Сообщить("Идем на сервер просто так");
КонецПроцедуры
&НаСервере
Процедура ОтправитьHTTPЗапрос()
Результат = КоннекторHTTP.GetJson("https://api.myip.com");
Сообщить(Результат);
// Ошибка:
// Переменная не определена (КоннекторHTTP)
// Результат = <<?>>КоннекторHTTP.GetJson("https://api.myip.com"); (Проверка: Сервер)
КонецПроцедуры
Показать
(21) А не подскажете кое-что по этому расширению?
Как так получается, что в дереве конфигурации расширения общий модуль называется БОНД_Коннектор, а в алгоритмах обращение идет под именем КоннекторHTTP? Открыл модуль, там это название нигде не встречается.
Как это организовано?
Как так получается, что в дереве конфигурации расширения общий модуль называется БОНД_Коннектор, а в алгоритмах обращение идет под именем КоннекторHTTP? Открыл модуль, там это название нигде не встречается.
Как это организовано?
Прикрепленные файлы:
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот