Передача параметров в процедуру и отказ от модальности #723366


#0 by eandrs
Суть такова: необходимо передать параметр в типовую процедуру, имеющую большой уровень вложенности от места вызова, не изменяя промежуточные типовые процедуры. Для наглядности: КонецПроцедуры Идеи? Предложения?
#1 by eandrs
Да, я таки зафейлил с самого начала. // Мой модуль
#2 by Анютик
непонятно, где все эти процедуры выполняются?
#3 by Анютик
и откуда идет вызов первой процедуры с "МойПараметр"
#4 by eandrs
Допустим, ПроцедураПервая - в модуле некоторой формы некоторой обработки. Остальные вложенные вызовы - в типовых модулях. От первого вызова ПроцедураПервая до ПроцедураТиповаяВложеннаяСтоПятьдесятПервая - множество промежуточных вложенных вызовов других типовых функций, в которые я бы не хотел впиливать свой параметр.
#5 by Анютик
в смысле речь идет не об управляемом приложении? я имела в виду на клиенте или на сервере процедуры:)
#6 by Адский плющ
Казалось бы причем тут отказ от модальности...
#7 by eandrs
Мне кажется - это неважно. Или это что-то меняет?
#8 by eandrs
Без отказа от модальности - я знаю, как это сделать.
#9 by eandrs
Если конкретно - да, на определённом уровне вложенности кот уходит на сервер.
#10 by Анютик
это был мой второй вопрос:) КОТ НА СЕРВЕРЕ:))) отдохните, завтра будет легче. А вообще это существенно откуда и куда идет вызов. Грубо, если все процедуры работают на клиенте, можно в какой-то фиктивный реквизит формы значение запихать. Если на сервере - в глобальную переменную попробовать. Если код блуждает клиент-сервер-клиент...тут надо думать, вероятно никак без переделки всех функций. Кстати да, а модальность-то при чем?:)))
#11 by eandrs
Процедуры в общих модулях, доступа к реквизитам формы оттуда нет. Глобальные переменные как раз на клиентах и лежат. В варианте без отказа от модальности - можно обойтись временным хранилищем, помещая нужный параметр в хранилище до вызова типового кота и, удаляя после окончания этого вызова. С отказом от модальности это не прокатывает.
#12 by eandrs
У кого-то выполняется код, а мой кот - он ходит, да)).
#13 by Анютик
я для примера спросила. Вы говорите, что неважно где код(кот), а я попыталась объяснить, что важно.
#14 by Анютик
отказ от модальности чего? окна формы обработки?
#15 by eandrs
Не обижайтесь). Я просто уточнял, что прокатит, а что нет)
#16 by Анютик
какие обиды?:) я пытаюсь понять, что вы делаете)))
#17 by eandrs
Отказ от модальности - это в типовом коде работы с присоединенными файлами в УТ11 (проверка и установка расширения для работы с файлами, помещение файло на сервер для веб-клиента и т.п.). Ранее всё это было через модальные вызовы. Теперь там всё сделано на ОписаниеОповещения, соответственно - я не могу гарантированно "вовремя" удалить свой параметр из временного хранилища, что не есть хорошо.
#18 by Torquader
А причём здесь отказ от модальности ? Если у вас выполняется сначала одна процедура, а потом другая - то можно в хранилище что-то сохранить. А если между вызовом первой и второй может быть пауза или вторую не вызовут, то вы потеряете только память на запихивании в хранилище. А если вторую вызовут два раза ? Просто, если что-то выполняется на сервере без контекста, то возникает вопрос - как понять, чей вызов пришёл, если будет вызываться с двух рабочих мест, где параметры, которые мы хотим передать, разные. Если же они одинаковые, то его можно задать один раз при запуске программы.
#19 by eandrs
Ладно. Совсем подробно объясню. Есть типовой механизм работы с присоединенными файлами. Есть общая форма, запиленная под этот механизм. В форму внесены мои доработки. Один дополнительный реквизит. Запись присоединенного файла в базу и создание соответствующего элемента справочника делает типовой код. Содержащий длинную цепочку вызовов. Мне нужно передать значение моего реквизита в процедуру, осуществляющую непосредственную запись элемента справочника в базу. Править всю цепочку модулей от формы до записи - не хочеца. В случае использования модальных вызовов - последовательность вызовов линейна - т.е. можно поместить значение реквизита во временное хранилище перед вызовом типового кода, потом в процедуре записи - считать его и установить у объекта, после завершения типового кода - убрать из временного хранилища, чтобы потом он не был использован для другого присоединённого файла. Для случая отказа от модальности такая схема не будет работать, т.к. значение из временного хранилища может быть удалено раньше (и так скорее всегда и будет), чем будет произведена запись элемента справочника. Кончил и закурил.
#20 by eandrs
"возникает вопрос - как понять, чей вызов пришёл, если будет вызываться с двух рабочих мест, где параметры, которые мы хотим передать, разные." - эту часть я совсем не понял.
#21 by eandrs
Up
#22 by Фокусник
неужели нет сквозного параметра (через все эти процедуры) с типом "Структура" ?
#23 by Рэйв
У одного меня создается впечатление, что ТС хочет передать параметр и что бы там он "както так" сам обработался?
#24 by Рэйв
потому что "както так" ему писать лениво:-)
#25 by Фокусник
насколько я понял, ТС хочет не менять промежуточные процедуры, а только "финишную"
#26 by Рэйв
Как жалкот , что в 1С нет классов и инкапсуляции:-))
#27 by eandrs
См.
#28 by eandrs
Да, именно так. То, что в длинной портянке типовых вызовов - меня мало интересует. А, зная страсть разработчиков УТ11 к "а почему-бы не перепилить ещё разок вот этот-вот механизм" - не хочется каждый раз участвовать в этом акробатическом номере.
#29 by eandrs
Нет. Нету там структуры. "Других писателей у меня для Вас нет".
#30 by Torquader
Разговор о том, что если у пользователя открыто несколько форм, то где гарантия, что мы не перепутаем вызовы вообще, если мы не можем узнать, из какой формы нас вызвали. P.S. Если есть имя файла, то почему нельзя вместо него, например, передать структуру - особенно - если его "в пути" никто не трогает. А в процедуре проверить - если строка, то всё в порядке, если не строка, то это наш вызов. Жаль что в 1с нет объектов, которые преобразуются в строку с вызовом функции преобразования.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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