Можно ли из глобального модуля выполнить процедуру модуля формы документа? #145194


#0 by Pavel_A
Работает ОбработкаОжидания. Она может вызывать только процедуры глобального модуля... А надо, чтобы выполнялась процедура Открытого в данный момент документа. Пробовал FormEx - использовать Сервис.АктивныйКонтекст(Конт), но не запускается ВыполнитьПроцедуру(Конт, "ПроцедураГлобальногоМодуля", Список).
#1 by Думаю
можно так: в глобальном модуле ОткрытьФорму, в модуле формы в процедуру ПриПовторномОткрытии вставляем вызов нужной процедуры
#2 by GrayT
Форма.ОбработкаОжидания в модуле формы документа не пробовал?
#3 by GrayT
+2 Но если очень хочется из глобальника - попробуй
#4 by Pavel_A
Чего-то недопонимаю я :-( В модуле формы дока в ПриОткрытии пишу Форма.ОбработкаОжидания("_Процедура",1); и в модуле формы и в глобальнике есть _Процедура, но не срабатывает ни там ни там...
#5 by Pavel_A
А как получить пеерменную типа ТекущийДокумент для ОткрытьФорму? Для этого он должен быть сохранен?
#6 by GrayT
4) А у меня работает. Правда в глобальнике у меня нет такой процедуры
#7 by Pavel_A
Не работало потому, что процедура была с параметрами... Убрал параметры - заработало. Спасибо за наводку! Вот только секунда - многовато, хотя бы половинку бы... Ради этого и использовал FormEx - там в ОбработкаОжидания время в миллисекундах задается.
#8 by GrayT
За ФормЕХ не скажу. Меньше секунды на WHS извернуться можно наверное..... Зачем так мало?
#9 by Pavel_A
Идет обмен данных между копиями 1С на терминальном сервере через константу. ОбработкаОжидания проверяет эту константу. Данные могут поступать до 3 раз в секунду - не хотелось бы задержку иметь при обработке... Но делать похоже нечего - вставил в процедуру глобальника, которую вызывает формексовская ОбработкаОжидания сообщить(Шаблон("[ФункцияМодуля]")); Так она вызывается глобальная, а не модуля формы... А вот если просто из модуля формы вызвать эту процедуру глобальника, то сообщить(Шаблон("[ФункцияМодуля]")); действительно работает :-)
#10 by Pavel_A
Под "Так она вызывается глобальная..." имел ввиду, что ФункцияМодуля вызывается из глобального модуля, а не из модуля формы документа.
#11 by GrayT
"обмен данных между копиями 1С на терминальном сервере через константу".... много думал. Решил оставить надежду разгадать это ребус.
#12 by Pavel_A
:-))) Имеем: сервер терминалов, на который законнектились несколько пользователей и работают только в 1С. Задача: передать из одной "служебной" 1С другим пользователям в остальные терминальные сессии некие данные, которые генерирует "служебная" 1С (задача, копия 1С - как кому удобнее). Пробую: Служебная 1С заносит данные в константу (т.к. работа с ней вроде быстрее, чем со справочником)- в остальных сессиях, где запущены 1С эта константа проверяется ОбработкойОжидания. Загвоздка состоит только в том, что при появлении данных в константе действия должны производится с документом, а формексовская обработка ожидания, где время в миллисекундах, запускает только процедуру глобального модуля, а хотелось бы запустить процедуру модуля формы открытого в данный момент документа. Это можно сделать по Вашей наводке с помощью Форма.ОбработкаОжидания, но тогда периодичность 1 секунда, а данные поступают ~3 раза в секунду. Может это изврат и Вы что-нибудь придложите дельное и простое? Похоже придется переносить уже написанные и работающие процедуры модуля формы документа в глобальный модуль и работать с доком через контекст... О как!
#13 by GrayT
Ни чего не скажу, т.к. не понял нифига. Не, про передачу данных я понял. Не знаю что там за данные, но сильно меня смущает эта периодичность в 1/3 Гц. Если кто-то что-то не успеет обработать, надеюсь необратимых процессов не произойтет....
#14 by GrayT
А почему все жаждют 1С под пингвинов засунуть. И ни кому не пршло в голову из под QNX запустить :(
#15 by Pavel_A
Есть внешнее устройство, которое должно передавать данные во все запущенные терминальные сессии. "Проверяющие" 1С очищают константу после считывания. "Служебная" 1С проверяет, очищена ли константа и только после этого присваивает ей новое значение. Т.е. если данные не обработаны, то новые теряются и пользователь повторяет действие с внешним устройством :-) Т.к. пользователей несколько - данные могут идти сплошным потоком, эмпирически измеряно ~3 раза в секунду. Т.к. раньше пользователь был один - работа шла напрямую, без служебной 1С и были написаны процедуры модуля формы документа. Теперь пользователей несколько и все должны получать эти данные. Вот такой изврат.
#16 by Pavel_A
Вобщем спасибо всем! Кончил извращаться ;-) Пока все получается, как писал : Занес в глобальную переменную темпДок номер текущего документа и в глобальнике в прощедуре, вызываемой обработкой ожидания: А в модуле формы в ПриПовторномОткрытии обрабатываем Параметр он же Список. Завтра все доделаю... и напишу о новых проблемах :-) Еще раз спасибо GrayT и !
#17 by Pavel_A
"Занес в глобальную переменную темпДок номер текущего документа ..." - описка. Занес в глобальную переменную текДок номер текущего документа. а Конт - получен из Сервис.АктивныйКонтекст(Конт)
#18 by GrayT
Так я и подумал (про внешнее устройство)... "Проверяющие" 1С очищают константу" - Т.е. как только первое "проверяющее" очистит константу, остальные нервно будут курить бамбук? Что за устройство если не секрет? Недавно решали похожую проблему. Сделали на документах. Служебная 1Сина постоянно гонит доки и постепенно затирает их (оставляет 50 последних) Можно было на справочниках. Остальные смотрят доки по мере необходимости.
#19 by GrayT
+18 Доки выбрали из-за табличной части, а на справочниках пришлось бы заморачиваться с подчинением.
#20 by Pavel_A
У меня все проще. Купили несколько радиосканеров (без меня еще). Сэкономили на принимающих станциях - купили только одну, благо каждый сканер имеет свой префикс, который он добавляет к ШК, а станция может работать сразу с 8-ю сканерами. Ну а я получил гемор на свою задницу. Сначала нашел программу, которая занимает порт и отдает данные во все проги, которые к нему обращаются. Пищал от радости, пока не запустил одновременно пару пользователей. Оказалось, что все драйвера (Атол, Штрих-М, стандартый и переделанный scanopos) в момент успешного запуска процедуры ОбработкаВнешнегоСобытия "перещелкивают" фокус окна, так что если один пользователь набирал что-нить в доке, а другой в этот момент сканернул - у первого все набранное выделяется и следующее нажатие клавиши стирает то, что набрано. Если он вводил в момент сканирования другим пользователем число в числовое поле ввода, то срабатывает Ентер... А прогу эту уже хотели покупать - счастье мое, что я этого не сделал сразу :-). Пришлось вернуться к идее, от которой отказался, когда нашел прогу - использование одной служебной 1С, распределяющей данные в зависимости от префикса сканера по своим константам. Остальные копии 1С считывают эти константы и производят необходимые действия... Искал долго на форумах, но такой задачи никто не описывал (может плохо искал). Было бы очень интересно узнать, как кто справился с этой задачей, а то у меня уже нервный тик от нее, а шэф уже на меня косится...
#21 by Pavel_A
А как, если не секрет, а вас запускается служебная 1С-ина? Своим обученным морским свинкам я не могу этого доверить - потом сам же шишки получать буду... Хотелось бы сделать запуск автоматом при включении сервера. Прога, работающая с com-портом работала, как сервер, а что делать с 1С? Есть круглосуточно работающий сервер, но бывают перебои с электричеством - ночью могут вырубить часа на два, а бесперибойник держит только мин.15...
#22 by Pavel_A
+21 сорри читать "прога работала как сервис, а что делать с 1С?"
#23 by GrayT
В терминале не работаю, не понял - ОбработкаВнешнегоСобытия у одного влияет на окна второго пользователя? Командной строкой со спец юзверем при загрузке системы (nnCron кажись стоит)
#24 by Pavel_A
(23.1)В терминале получается, как будто несколько юзверей работают на одном компе одновременно, т.е. на одном компе запущено несколько копий 1С. При сканировании с любого сканера данные поступают в один ком-порт (станция то одна). Спец. прога делает ком-порт доступным для всех копий 1С. Драйвер сканера срабатывает в каждой копии 1С. Итого: ОбработкаВнСоб. запускается в каждой копии 1С при сканировании с любого сканера. Только данные копия 1С обрабатывает только, если префикс сканера наш, с которым в данный момент работает пользователь (сам пользователь в начале работы выбирает номер сканера). (23.2)Дык не охота конечно делать автоматический вход пользователя на сервер, но, думаю, уберу моник, клаву и мышку с сервака и сделаю так, как ты говоришь.
#25 by Pavel_A
+24 У меня винда 2003, а не линукс.
#26 by GrayT
Теперь въехал. Я бы удивился обратному :)
#27 by ТестПопытка
что за ерунда? может я не вьехал, но что мешает написать другую прогу, которая выбирала бы данные и скидывала бы в тхт, дбф, что угодно.. а из 1С только тогда, когда это нужно (из любой из терминальных сессий) выгребать отттуда данные.. 3 раза в секунду.. вам батенька похрен на сервер? лишь бы он что-то делал? извини может я не понял, но если я тебя понял правильно -ты извращенец..
#28 by Pavel_A
Написать другую прогу? :-) Я не программист. Даже не 1С программист, но вроде им постепенно становлюсь :-) Z сайт могу сделать, интернет магазин... дешево и сердито, с админкой. Скоро смогу и с 1С связать. А написать прогу, которая из com-порта хватает данные и скидывает в txt я не знаю как и у меня нет ни малейшего желания разбираться в этом... А если бы такая и была - что толку? все равно из 1С придется считывать данные из txt файла. Может я смогу в 1С определить, была ли запись в тхт без запуска ОбработкаОжидания? Я не знаю как... Идеально было бы иметь такую внешнюю компоненту - драйвер сканера, которая бы анализировала пришедшие ей данные, и, если первые несколько символов равны заданным пользователем символам в 1С, то запускалась бы ОбработкаВнешнегоСобытия, а если не равны, то нет. Если ты можешь написать такую ВК (изменить уже существующие), то готов обсудить это. Хотя в моем случае в "клиентских" 1С ОбработкаОжидания вызывает процедуру, в которой проверяется префикс сканера и если он не наш, то Возврат. Разве будет здесь нагрузка на сервер? У меня нету опыта использования ОбработкиОжидания...
#29 by Pavel_A
По идее при использовании драйверов от Атола и Штрих-М можно вообще убрать ОбработкуВнешнегоСобытия и получать данные со сканера через Сканер.ScanData. Надо подумать и поэкспериментировать с этим... Если бы удалось как-то узнать, что данные от сканера пришли... Пока только на уме ОбработкаОжидания или скрытый текст на форме документа, на который навешена функция, которая вызывается при каждом обновлении окна. Люблю я поизвращаться :-)
#30 by Pavel_A
+28 Голова задурена, надо на выходных напиться... там где ответ сморозил херню. Обработка ожидания проверяет свою константу, соответствующую номеру сканера, выбранному пользователем при начале работы. Если константа пустая, то Возврат, иначе обработка данных. Будут тормоза? использую ОбработкаОжидания из ВК FormEx.
#31 by Pavel_A
Оказалось, что у меня была старая версия FormEx. Скачал версию 2.0.1.1 и ВыполнитьПроцедуру заработала. В конечном счете сделал через Сервис.ОбработкаОжидания("ОбработкаСканера",300); А в глобальном модуле в ОбработкаСканера вызов Сервис.ВыполнитьПроцедуру(Конт, "ОбработкаДанных",Список), где Конт - контекс открытого документа, в котором хотят работать со сканером. Если кого интересуют подробности - пишите на мыло.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С