Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Использование метода "ВыполнитьПроцедуру" (число прочтений - 1277 )
Winter
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 21
Зарегистрирован: 24. Сентября 2007
Пол: Мужской
Использование метода "ВыполнитьПроцедуру"
06. Июля 2009 :: 11:35
Печать  
Появилась задача реализовать возможность делать произвольные печатные формы для разных контрагентов. Устал каждый раз лезтьв конфигурацию, добавлять печатную форму, как то связывать ее с контрагентом... Решил сделать подчиненный справочнику "Контрагенты" справочник "ВнешниеПечатныеФормы" в котором указываю в каком документе эта печатная форма будет доступна, какая ее печатная форма и какой текст процедуры печати для этой формы. Но никак не получается загрузить модуль, точнее не загрузить модуль, а воспользоваться им.
Т.к. для разных документов модули могут быть разными решил загружать модуль только в момент выбора печати внешней формы. В модуле накладной пишу:

СервисРасшФормы = СоздатьОбъект("Сервис");
глДопМодуль = СервисРасшФормы.ДобавитьГлобальныйМодуль("#ЗагрузитьИзФайла "+СокрЛП(ВнешниеПечФормы.Модуль));
Если еПечФормы.Форма)) = 0 Тогда
     Сообщить("УПС");
КонецЕсли;
СервисРасшФормы.УдалитьГлобальныйМодуль(глДопМодульТекст);

В самом модуле пишу:

Процедура ВнещняяПечатнаяФорма(Конт) Экспорт
   Язык = ?(Константа.ФормыНаУкраинском = Да, "у", "");
   глУстПропись(Конт.Валюта,Язык);
   Таб = СоздатьОбъект("Таблица");
   ...
КонецПроцедуры

Но в отладке еПечФормы.Форма)) всегда возвращает 0. Причем сначала ругалась, пока в Значении выоза процедуры не прописал Конт и не исправил везде в тексте ссылку на Конт.

Что я делаю не так? И еще. Как мне правильно получить передаваемые в эту процедуру значения (в моем случае путь к файлу печатной формы)? Пока я модуле тупо пишу этот путь, хотя при вызове процедуры передаю эту информацию.
  
Наверх
IP записан
 
marg79
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 1
Зарегистрирован: 02. Октября 2008
Re: Использование метода "ВыполнитьПроцедуру"
Ответ #1 - 08. Июля 2009 :: 17:22
Печать  
Параметры процедуры передаются в списке значений, т.е. в "СервисРасшФормы.ВыполнитьПроцедуру(Контекст, "ВнещняяПечатнаяФорма", СокрЛП(ВнешниеПечФормы.Форма))" вместо "СокрЛП(ВнешниеПечФормы.Форма)" должно быть напр. "СЗ_Парам", а СЗ_Парам до этого:
СЗ_Парам = СоздатьОбъект("СписокЗначений");
СЗ_Парам.ДобавитьЗначение(Контекст);
СЗ_Парам.ДобавитьЗначение(СокрЛП(ВнешниеПечФормы.Форма));
и уже теперь:
СервисРасшФормы.ВыполнитьПроцедуру(Контекст,"ВнещняяПечатнаяФорма",СЗ_Парам);

Но использовать "ВыполнитьПроцедуру/Функцию" в текущем контексте формы у меня, например, не получилось. Действительно, всегда возвращает 0.

Выкрутилась недокументированными возможностями функции Шаблон. Только, поскольку Шаблон() нельзя использовать для процедур, видимо, нужно процедуру ВнешняяПечатнаяФорма переделать в функцию.
В Вашем случае будет в накладной например так:
Если Шаблон("[ВнещняяПечатнаяФорма(Контекст,СокрЛП(ВнешниеПечФормы.Форма))]") = 0 Тогда
  Сообщить("Печать не удалась!","!");
КонецЕсли;

А в доп.модуле:
Функция ВнещняяПечатнаяФорма(Конт,ИсхТабл) Экспорт
  Язык = ?(Константа.ФормыНаУкраинском = Да, "у", "");
  глУстПропись(Конт.Валюта,Язык);
  ТаблицаПечати = ИсхТабл+Язык+".mxl";
  Если ФС.СуществуетФайл(ТаблицаПечати) = 0 Тогда
     Возврат 0;
  КонецЕсли;
   Таб = СоздатьОбъект("Таблица");
  Таб.ИсходнаяТаблица(ТаблицаПечати);
  ...
  Возврат 1;
КонецФункции

Попробуйте что-нибудь вроде этого...
« Последняя редакция: 08. Июля 2009 :: 18:30 - marg79 »  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать