"Переменная не определена" при вызове функции из расширения

1. 1234ru 19.11.24 16:41 Сейчас в теме
В пустую конфигурацию добавлено расширение (активно, безопасный режим отключен), версия платформы - 8.3.24.

Далее в модуль приложения основной конфигурации добавлена процедура, где вызывается одна из функций расширения (код вызова взят из примера документации к расширению):

Процедура ПриНачалеРаботыСистемы()
	Результат = КоннекторHTTP.GetJson("https://api.myip.com");
	Сообщить(Результат);
КонецПроцедуры


В конфигураторе такой алгоритм не проходит проверку с вот такой ошибкой:

{МодульУправляемогоПриложения(3,14)}: Переменная не определена (КоннекторHTTP)
Результат = <<?>>КоннекторHTTP.GetJson("https://api.myip.com"); (Проверка: Тонкий клиент)


С расширением точно всё в порядке, это общедоступная библиотека, проверенная сообществом.

Почему же возникает ошибка?
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
11. spacecraft 19.11.24 17:48 Сейчас в теме
(5) читаем:
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>true</ExternalConnection>
<ClientOrdinaryApplication>true</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
<Privileged>false</Privileged>

Это общий модуль с флагом только Сервер
С клиента нет доступа. Сначала необходимо перейти на сервер через общий модуль с флагами "Сервер" и "Вызов сервера" и уже через него вызывать нужный метод.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Sashares 35 19.11.24 16:57 Сейчас в теме
(1) А не надо вызывать серверный модуль на клиенте.
4. 1234ru 19.11.24 17:21 Сейчас в теме
А не надо вызывать серверный модуль на клиенте


Так ошибка при проверке в конфигураторе, а не при запуске приложения.
Разве конфигуратор - это клиент?
6. user2107184 19.11.24 17:25 Сейчас в теме
(4) Действительно - чего это такого удумал конфигуратор? Где ж это видано - проверять код на работоспособность???
8. 1234ru 19.11.24 17:43 Сейчас в теме
Еще раз перечитал сообщение, обратил внимание на фразу "(Проверка: Тонкий клиент) ".
Как-то я не подумал, что конфигуратор будет работать в режиме тонкого клиента.
Добавил директиву &НаСервере, ошибка ушла.
9. user2107184 19.11.24 17:44 Сейчас в теме
(8)
Как-то я не подумал, что конфигуратор будет работать в режиме тонкого клиента.
Ржем всем коллективом: я и пиво.
10. 1234ru 19.11.24 17:46 Сейчас в теме
Ну да, вам-то смешно. А начинающим программировать в 1С не до смеха...
13. user2107184 19.11.24 21:26 Сейчас в теме
(10) Так может тогда и не начинать?
14. Sashares 35 19.11.24 21:48 Сейчас в теме
(13) Как вы от конкурентов заранее избавляетесь)))
15. user2107184 19.11.24 22:27 Сейчас в теме
(14) Так если бы то были конкуренты - я бы только помог бы!
А то в основном это набор индивидуумов, по которым судят как о всей профессии в целом, так и о самой 1С. А нам потом еще это все за ними убирать (вместо того, чтобы заниматься интересным делом). Нас уже и так не хватает на эту уборку.

Поэтому, если уж не получается увеличивать количество профессиональных дворников - то надо уменьшать количество маргинальных мусорящих. (Лучше один раз пристрелить жену, чем каждую неделю стрелять её любовников)

// Или как сказал Лужков - "Стоимость квадратного метра в Москве увеличиваться не будет! Будет уменьшаться квадратный метр."
user1863362; lefthander; Sashares; +3 Ответить
18. 1234ru 23.11.24 13:54 Сейчас в теме
(15) Вспомните окончание поговорки:
на словах ты - Лев Толстой, а на деле - ...
Прикрепленные файлы:
19. user2107191 23.11.24 14:17 Сейчас в теме
(18) Ну мало ли что на заборах пишут... Да и лучше быть Львом Толстым, чем паролем от компьютера МарьИванны.
12. spacecraft 19.11.24 17:59 Сейчас в теме
(8) точно такого же эффекта можно добиться, просто удалив этот код.
Будет работать одинаково )
user1863362; user2107184; +2 Ответить
17. 1234ru 23.11.24 13:50 Сейчас в теме
(3)
Тогда такой вопрос: почему в модулях форм и общих команд можно вызывать серверные процедуры напрямую из клиентских, а в модуле приложения нельзя?

// Модуль общей команды - так можно

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	СходитьНаСервер(); // Выполняется успешно
КонецПроцедуры

&НаСервере
Процедура СходитьНаСервер()
	Сообщить("Идем на сервер.");
КонецПроцедуры  
Показать


// Модуль приложения - нельзя, "Процедура или функция с указанным именем не определена (СходитьНаСервер)"

Процедура ПриНачалеРаботыСистемы()        
	 СходитьНаСервер();
КонецПроцедуры       

&НаСервере
Процедура СходитьНаСервер()
	Сообщить("Сходили на сервер");
КонецПроцедуры
Показать
20. lefthander 23.11.24 14:23 Сейчас в теме
(17) Уж если все таки хотите быть программистом 1С -начните сначала, все чему Вас учили раньше забудьте как страшный сон.
23. 1234ru 26.11.24 14:12 Сейчас в теме
(20)
Уж если все таки хотите быть программистом 1С -начните сначала, все чему Вас учили раньше забудьте как страшный сон.

Ну, не хотелось бы забывать 15+ лет веб-разработки, пригодится еще :) Но я знал, что 1С - это совсем другое, поэтому сделал ровно так, как вы написали - начал сначала.

Очень помогло, что у 1С есть официальные курсы. Это выгодно ее отличает от других технологий, где курсов миллион, а какие взять - непонятно.

Действительно не похоже на все, что я знал раньше, тут соглашусь. Очень большая предметно-ориентированная часть. Но в ней и сила.

Особенно меня впечатлили SQL-запросы на русском языке. В принципе, почему бы и нет? Но с непривычки немного забавляет :)
22. Sashares 35 23.11.24 15:05 Сейчас в теме
(17) Потому что это модуль приложения, он только клиентский.
Начните с Радченко хотя бы.
user1863362; +1 Ответить
24. 1234ru 26.11.24 14:12 Сейчас в теме
(22)
Потому что это модуль приложения, он только клиентский.
Начните с Радченко хотя бы.

Я начал с того, что пошел на официальный сайт 1С и спросил там в чате у оператора поддержки, с чего нужно начинать изучение 1С программистам. Оператор рекомендовал мне пройти учебные курсы в количестве четырех штук, которых достаточно для уровня 1С:Профессионал. Что я и сделал.

На курсах разбирается клиент-серверная архитектура, рассказывается про директивы &НаКлиенте и &НаСервере на примере процедур модулей форм. Однако не объясняется, что так можно делать не во всех модулях. То, что модуль приложения - сугубо клиентский и из него нельзя вызывать сервер, там не рассказывали.
Sashares; +1 Ответить
7. spacecraft 19.11.24 17:41 Сейчас в теме
(1)
код вызова взят из примера документации к расширению

в примере так и указано использовать в модуле управляемого приложения?
Ошибка связана с тем, что КоннекторHTTP по все видимости серверный общий модуль и с клиента не видим. О чем 1С и сообщает.
2. user2107184 19.11.24 16:54 Сейчас в теме
Слышь, Фамилия, что такое КоннекторHTTP в твоём воображении?
11. spacecraft 19.11.24 17:48 Сейчас в теме
(5) читаем:
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>true</ExternalConnection>
<ClientOrdinaryApplication>true</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
<Privileged>false</Privileged>

Это общий модуль с флагом только Сервер
С клиента нет доступа. Сначала необходимо перейти на сервер через общий модуль с флагами "Сервер" и "Вызов сервера" и уже через него вызывать нужный метод.
16. 1234ru 23.11.24 13:42 Сейчас в теме
(11)
Сначала необходимо перейти на сервер через общий модуль с флагами "Сервер" и "Вызов сервера" и уже через него вызывать нужный метод.


Спасибо за наводку. Это надо обдумать.

Однако у меня возник вопрос: почему модуль библиотеки нельзя вызвать, например, из модуля общей команды? Ведь там тоже есть серверный контекст. Однако библиотека из него не видна:

{ОбщаяКоманда.СходитьНаСервер.МодульКоманды(15,14)}: Переменная не определена (КоннекторHTTP)
Результат = <<?>>КоннекторHTTP.GetJson("https://api.myip.com"); (Проверка: Сервер)

Почему так?

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	СходитьНаСерверПростоТак(); // Выполняется успешно
	ОтправитьHTTPЗапрос(); // Ошибка 
КонецПроцедуры

&НаСервере
Процедура СходитьНаСерверПростоТак()
	Сообщить("Идем на сервер просто так");
КонецПроцедуры      

&НаСервере
Процедура ОтправитьHTTPЗапрос()
	Результат = КоннекторHTTP.GetJson("https://api.myip.com");
	Сообщить(Результат);       
	// Ошибка:
	// Переменная не определена (КоннекторHTTP)
	// Результат = <<?>>КоннекторHTTP.GetJson("https://api.myip.com"); (Проверка: Сервер)
КонецПроцедуры
Показать
21. lefthander 23.11.24 14:25 Сейчас в теме
(2) Нормальный модуль, у меня на ЕРП вполне работает. претензий нет. ;)
25. 1234ru 26.11.24 14:12 Сейчас в теме
(21) А не подскажете кое-что по этому расширению?

Как так получается, что в дереве конфигурации расширения общий модуль называется БОНД_Коннектор, а в алгоритмах обращение идет под именем КоннекторHTTP? Открыл модуль, там это название нигде не встречается.

Как это организовано?
Прикрепленные файлы:
26. user2107191 26.11.24 14:14 Сейчас в теме
(25)
КоннектоHTTP = Вычислить("БОНД_Коннектор");
28. 1234ru 26.11.24 14:19 Сейчас в теме
(26)
КоннектоHTTP = БОНД_Коннектор;

Это где такое?
27. lefthander 26.11.24 14:18 Сейчас в теме
(25) без понятия, я использую его как общий модуль, а не как расширение ;)
ЗЫ вот тут тоже можно почитать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот