Вызов процедуры из модуля объекта по имени в переменной
Доброго всем здоровья!
Друзья,прошу помочь. В модуле документов есть несколько процедур печати: ПечатьИмя1,ПечатьИмя2,ПечатьИмя3 и т.д. В общем модуле в процедуре известен объект,назову его: ЭтотДокумент и в переменной определяется имя печатной формы,например:Имя2,то есть в какой=то переменной мы имеем имя процедуры ,пусть,ПФ="ПечатьИмя2". Как обратиться к процедуре объекта ПечатьИмя2? Через Выполнить не получается. Спасибо.
Друзья,прошу помочь. В модуле документов есть несколько процедур печати: ПечатьИмя1,ПечатьИмя2,ПечатьИмя3 и т.д. В общем модуле в процедуре известен объект,назову его: ЭтотДокумент и в переменной определяется имя печатной формы,например:Имя2,то есть в какой=то переменной мы имеем имя процедуры ,пусть,ПФ="ПечатьИмя2". Как обратиться к процедуре объекта ПечатьИмя2? Через Выполнить не получается. Спасибо.
По теме из базы знаний
- Виртуальные глобальные контейнеры переменных
- Создаем свою библиотеку для OneScript
- Консоль кода с поддержкой объявления процедур и функций, с дополнительными функциями отслеживания и вывода значений
- Запуск фонового задания с прогрессом во внешней обработке независимо от места вызова на Библиотеке стандартных подсистем
- Библиотека процедур и функций для технологической платформы "1С: Предприятие 7.7"
Найденные решения
(1) а почему через выполнить не получается?
этот код отрабатывает выдает
этот код отрабатывает
ИмяФункции = "ФамилияИмяОтчество";
ФИО = Неопределено;
Выполнить("ФИО = ФизическиеЛицаКлиентСервер." + ИмяФункции + "(""Фамилия Имя Отчество"")");
Сообщить(ФИО);
Структура
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) а почему через выполнить не получается?
этот код отрабатывает выдает
этот код отрабатывает
ИмяФункции = "ФамилияИмяОтчество";
ФИО = Неопределено;
Выполнить("ФИО = ФизическиеЛицаКлиентСервер." + ИмяФункции + "(""Фамилия Имя Отчество"")");
Сообщить(ФИО);
Структура
(2)Если бы так просто. Имя печатной формы определяется в общем модуле программно и помещается в переменную ИмяПФ. А процедуры печати находятся в модуле документов и надо из общего модуля вызвать,например печать ТТН документа Реализации и т.д.
Если напрямую,то вызов был бы так ДокументОбъект.ПечатьТТН или ДокументОбъект.ПечатьТорг12, а необходима конструкция ДокументОбъект.ИмяПФ,а так нельзя. ИмяПФ-не процедура,а переменная в которой содержится имя вызываемой процедуры.
Если напрямую,то вызов был бы так ДокументОбъект.ПечатьТТН или ДокументОбъект.ПечатьТорг12, а необходима конструкция ДокументОбъект.ИмяПФ,а так нельзя. ИмяПФ-не процедура,а переменная в которой содержится имя вызываемой процедуры.
(5) наверно нужен универсальный метод, когда имена команд печати неизвестны заранее. Чтобы каждый раз не править общий модуль.
Хотя можно использовать единую точку входа в каждом документе, в которую и передавалось бы имя вызываемой команды. И уже в ней вызывалась нужная команда.
Хотя можно использовать единую точку входа в каждом документе, в которую и передавалось бы имя вызываемой команды. И уже в ней вызывалась нужная команда.
(8)Альфа-Авто 4.1 ,древняя. Получение печатных форм зашито в dll. Все печатные формы получаются стандартно через обращение к защищенной функции зфПечать.
Все процедуры печати в документах начинаются со слова Печать+ИмяФормы.
Цель замены функции зфПечать в том,что в ней много не нужных проверок.
В исходной функции эти действия и другие зашиты в компоненте DLL и обрабатываются вызовом
Рез = ОбработкаЗащиты.Компонента.зфПечать(пЭтотОбъект, пНазваниеПечатнойФормы, пКоличествоЭкземпляров, пНаПринтер, пДокумент);
Делаю новую функцию
Все процедуры печати в документах начинаются со слова Печать+ИмяФормы.
Цель замены функции зфПечать в том,что в ней много не нужных проверок.
В исходной функции эти действия и другие зашиты в компоненте DLL и обрабатываются вызовом
Рез = ОбработкаЗащиты.Компонента.зфПечать(пЭтотОбъект, пНазваниеПечатнойФормы, пКоличествоЭкземпляров, пНаПринтер, пДокумент);
Делаю новую функцию
Функция зфПечатьУ(ЭтотОбъект, НазваниеПечатнойФормы="", КоличествоЭкземпляров, НаПринтер, Документ) Экспорт
// вызывается из форм всех документов
// в модулях документов процедуры печатных форм называются:
// ПечатьТТН,ПечатьТорг12,ПечатьАкта и т.д. Документы разные Альфа Авто
// пусть Выбрали печать Реализация автомобилей
пЭтотОбъект = ЭтотОбъект;
// 1 Восстанавливаем название печатной формы,например: Торг12
пНазваниеПечатнойФормы = ВосстановитьЗначение(пЭтотОбъект.Ссылка.Метаданные().Имя+"ПечатнаяФорма");
// пНазваниеПечатнойФормы="Реализация автомобилей"
// 2 Обращаемся в процедуру модуля документа и в структуре получаем имена всех печатных форм
СтруктураПечатныхФорм = пЭтотОбъект.ПолучитьСписокПечатныхФорм();
//Ключ Значение
//"РеализацияАвтомобилей" "Реализация автомобилей"
//"ТОРГ12_17112018" "ТОРГ-12 (Товарная накладная с подписями)"
//"ТОРГ12" "ТОРГ-12 (Товарная накладная)"
//"ТТН" "1-Т (Товарно-транспортная накладная)" //ВыпП = Представление(пЭтотОбъект)+"."+ИмяПФ+"()";
// 3 Ищем название печ. формы по значению структуры
Для Каждого ПечатнаяФорма Из СтруктураПечатныхФорм Цикл
Если ПечатнаяФорма.Значение = НазваниеПечатнойФормы Тогда
ИмяПФ= ПечатнаяФорма.Ключ;
КонецЕсли;
КонецЦикла;
// не нашли - пробуем найти название печ. формы по ключу структуры
Для Каждого ПечатнаяФорма Из СтруктураПечатныхФорм Цикл
Если ПечатнаяФорма.Ключ = НазваниеПечатнойФормы Тогда
ИмяПФ = ПечатнаяФорма.Ключ;
КонецЕсли;
КонецЦикла;
ИмяПФ = "Печать"+ИмяПФ;
// 4 в переменной ИмяПФ получили значение ПечатьРеализацияАвтомобилей
// 5 Теперь надо обратится к функции модуля объекта пЭтотОбъект ПечатьРеализацияАвтомобилей.
// функция вернет таб.документ,то есть печатную форму.
// вот как это сделать ,я не знаю.
КонецФункции
Показать
Для модуля объекта так же работает
Для модуля менеджера надо по другому...
ДокументОбъект = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
ИмяФункции = "ВременныеТаблицыДанныхДокумента";
ВременныеТаблицы = Неопределено;
Выполнить("ВременныеТаблицы = ДокументОбъект." + ИмяФункции + "();");
Сообщить(ВременныеТаблицы);
МенеджерВременныхТаблиц
Для модуля менеджера надо по другому...
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот