Имя: Пароль:
1C
1С v8
Вызов экспортной функции из общего модуля при внешнем соединении.
0 Дарья Чекалова
 
22.05.17
13:13
Добрый день, участники форума!
   При решении задачи столкнулась с проблемой. Есть у компании своя база "Почтовик". И захотелось начальству оттуда отправлять уведомления сотрудникам о том, что у них до конца года есть неотгулянный отпуск больше 14 дней.
   Все данные хранятся в ЗУПе. И есть там есть модуль "ОстаткиОтпусков", где есть функция  ОстатокОтпускаСпискаСотрудниковНаДату(МассивСотрудников,ДатаОстатков). Она возвращает таблицу со списком сотрудников и их отпусков (сотрудник - ссылка на справочник). Т.к. все ссылки возвращаются COM-объектом,
в своем общем модуле я добавила функцию, которая вернет точно такую же таблицу, но сотрудник будет текстовым полем.
   И вот после всех подготовительных работ, в своем почтовике я создаю COM-соединение с ЗУПом:
   БазаЗУП = Новый COMОбъект("V83.COMConnector");
   Соединение = БазаЗУП.Connect(СтрокаСоединения);
   Дальше пытаюсь вызвать свою процедуру:
   Таблица = Соединение.ПолучитьОстатокОтпускаСпискаСотрудниковНаДатуДляПочтовика ().
   К базе подключается, но при вызове процедуры говорит: "Ошибка инициализации модуля. Переменная режимДиалогаВопрос" не определена.
   Очень мало работала с COM-соединением, поэтому не могу найти решение. В гугле есть похожая информация, но мне не помогает (например, галочки в свойствах модуля).
   Заранее спасибо за помощь!
1 Ц_У
 
22.05.17
13:16
(0) зачем вопрос задавать? режимдиалога для клиентского вызова
2 h-sp
 
22.05.17
13:20
(0) вы наверно там вопрос задали. Не надо этого делать.
3 Дарья Чекалова
 
22.05.17
13:20
(1) В своей функции я вопросов не задаю, в типовых функциях тоже не нашла. Есть вообще в модулях, но как это может повлиять, не знаю... Да, забыла уточнить. Почтовик на управляемых формах, а ЗУП на обычных.
4 Ц_У
 
22.05.17
13:22
(3) не важно на каких формах, во внешнем соединении не может быть вызова процедур с директивой &НаКлиенте т.к. интерфейсная часть отсутствует
5 Ц_У
 
22.05.17
13:24
(3) И еще.. ну соединили соединение, а дальше куда оно потопало искать процедуру?
6 h-sp
 
22.05.17
13:24
(3) Таблица = Соединение.ПолучитьОстатокОтпускаСпискаСотрудниковНаДатуДляПочтовика ().  здесь вы забыли имя общего модуля указать. У вас эта функция ПолучитьОстатокОтпускаСпискаСотрудниковНаДатуДляПочтовика где-то в безвоздушном пространстве нависает?
7 Дарья Чекалова
 
22.05.17
13:26
(6) Она в нашем общем модуле. После многих манипуляций, я поставила у него галочку "Глобальный". Насколько я знаю, в этом случае необязательно указывать название модуля
8 Lexey_
 
22.05.17
13:27
(7) ну вот в этом модуле и надо искать режимДиалогаВопрос
9 Дарья Чекалова
 
22.05.17
13:27
(5) Да, сразу искать процедуру. А в ЗУПе нет директив. Там же все в одну кучу.
10 Ц_У
 
22.05.17
13:28
(7) зачем галку?
Соединение.<ИмяМодуля>.ПолучитьОстатокОтпускаСпискаСотрудниковНаДатуДляПочтовика ()
11 Дарья Чекалова
 
22.05.17
13:28
(8) В нем нет этого. В том - то и дело. Этот модуль отдельный, там нет ничего лишнего. Только то, что касается данной задачи.
12 Дарья Чекалова
 
22.05.17
13:29
(10) Я экспериментировала. Без галки тоже не работало.
13 Ц_У
 
22.05.17
13:30
(11) хватит галок сервер и внешнее соединение
14 h-sp
 
22.05.17
13:32
(12) ну вы пройдитесь по впашему общему модулю и выкиньте нахрен все вопросы оттуда. У вас же ошибка как раз: есть переменная режимДиалогаВопрос в вашем общем модуле.

Если знали, что будете этот общий модуль по кому запускать, вот нафига вы туда вопросов насовали?
15 Дарья Чекалова
 
22.05.17
13:38
Кажется нашла... Обращение было к другому модулю, где есть вопрос... Перенесла эти процедуры сюда же
16 AlexYAT
 
22.05.17
13:38
Если модуль Ваш, то проще будет закрыть все диалоговые строки блоками
#Если НаКлиенте Тогда
Вопрос("...", РежимДиалогаВопрос....);
#КонецЕсли
17 Дарья Чекалова
 
22.05.17
13:39
А если мне в COM соединении нужно в ЗУПе создать еще одно COM-соединение. Это логически корректно, или не очень?
18 h-sp
 
22.05.17
13:42
(17) зачем?
19 Ц_У
 
22.05.17
13:45
(17) проще создать два "тут" чем одно "там"
20 Дарья Чекалова
 
22.05.17
13:48
(18) Хмм... Есть данные, которых нет в ЗУПе. Они лежат в базе PostgreSQL. И чтобы их получить, прописаны запросы через такое же COM-Соединение (параметры - данные из ЗУПа).
21 Дарья Чекалова
 
22.05.17
13:50
(19) Да, скорее всего так и надо делать. Буду пробовать.
22 Дарья Чекалова
 
22.05.17
13:50
Отпишусь, как будут результаты. Всем спасибо за мозговой штурм!
23 h-sp
 
22.05.17
13:50
(20) должно прокатить, попробуйте.

ну или из зуп взять эти параметры и вызвать постгре отсюда.
24 Ц_У
 
22.05.17
13:51
(21) или попробовать вызвать готовую процедуру из зупа, которая подключается и вернуть эти данные
25 Дарья Чекалова
 
22.05.17
13:57
(24) Сейчас я так и делаю, но так все-таки не прозрачно. Сейчас выскакивает ошибка "Поле объекта не обнаружено "Ссылка". Хотя при работе с этими функциями напрямую в ЗУПе, все корректно.
26 Ц_У
 
22.05.17
13:58
(25) возможно ссылка больше не ссылка а комобъект.
27 TormozIT
 
гуру
22.05.17
14:16
Проверка компиляции в режиме внешнего соединения должна отобразить все ошибки, которые могут возникнуть при инициализации модуля в режиме внешнего соединения.
28 Дарья Чекалова
 
22.05.17
14:21
(26) Прошу прощения, ошибка со ссылкой - плод моей невнимательности (колонка по-другому называется).