gifts2017

Вызов любой функции во внешнем отчете/обработке при открытии

Опубликовал Владимир Буоц (vbuots) в раздел Программирование - Практика программирования

Небольшой, но "Супер" полезный "приёмчик" для разработчиков 1с. Те, кто используют у себя в программе (1с77) некое "подобие" шедулера, меня поймут.

Смысл в том, чтобы можно было используя одну обработку, вызывать в ней на выполнение любую процедуру или функцию (поддерживается передача сколь угодно много параметров).

Например:

СписПарам = СоздатьОбъект("СписокЗначений");
СписПарам.Установить("OUT_Balance2");
СписПарам.Установить(Agent,СпрТП.ТекущийЭлемент());
СписПарам.Установить(Client,СпрКонтр.ТекущийЭлемент());
// . . . .
ОткрытьформуМодально("Отчет", СписПарам, КаталогИБ()+"ExtForms\OnOpen.ert");

P.S. модуль универсален!Wink

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
OnOpen
.ert 50,50Kb
27.12.11
22
.ert 50,50Kb 22 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Епрст (Ёпрст) 27.12.11 22:20
Ну и нафига всё это ?
Про Шаблон - это боян чистой воды, и еще - процедуру в нём не выполнишь, так что, поправь описалово.
mayer; artbear; +2 Ответить
2. Владимир Буоц (vbuots) 28.12.11 09:39
Боян? Может быть. На инфостарте не видел ничего подобного. Смысл выполнять проц. не вижу! Функция - универсальнее. Нафига это? может подать идею, может для неопытных спец. Решать не мне, см рис. как я это применяю!
3. Дмитрий Касминюк (Vortigaunt) 28.12.11 11:34
А я бы сделал немного по другому. На форму бросается, допустим, реквизит типа число. И текст с формулой вида "УстДоступность()". В модуле формы описыается функция УстДоступность(), которая в зависимости от значения числового реквизита выполняет какое-то действие (при значении 0 - ничего не делается). При после открытия формы обработки методом ОткрытьФорму("Обработка.НашаОбработка",КонтФормы); Через контекст (КонтФормы.НашЧисловойРеквизит = НужноеЧисло) устанавливается значение числового реквизита. А затем выполняется метод "КонтФормы.Форма.Обновить(0)". При обновлении формы срабатывает Функция "УстДоступность()" и отрабатывает нужный сценарий.
Я таким образом вызывал процедуры модуля формы документа, которые нужны при заполнении табличной части. Правда больше 1 строки таким способом не заполнишь.
4. Юрий Осипов (yuraos) 28.12.11 12:29
Один БАЛЛ!
Я наблюдаю в словах автора признаки гениального безумства!
(в положительном смысле)
:))))))))))))
Предлагаю альтернативу,
предоставляемую ВК FormEx:
ВК поставляет объект "Сервис",
имеющий помимо много прочего пару полезных методов к теме:
ВыполнитьПроцедуру / CallAsProcedure

Синтаксис: ВыполнитьПроцедуру(Контекст, ИмяПроцедуры, СписокАргументов)

Параметры:

Контекст - тип: ГрупповойКонтекст. Контекст, в котором необходимо выполнить процедуру. Необязательный. По умолчанию - текущий контекст. 
ИмяПроцедуры - тип: Строка. Имя процедуры. 
СписокАргументов - тип: СписокЗначений. Список значений, содержащий аргументы процедуры. Если размер списка меньше, чем количество аргументов процедуры, то в оставшиеся аргументы передаются пустые значения. Лишние значения игнорируются. Значения по умолчанию игнорируются. Необязательный. По умолчанию - пустой список. 
Возвращает: результат выполнения метода в виде числа: 1 в случае успеха, 0 в противном случае.

Описание: Метод предназначен для выполнения процедуры в заданном контексте.

Пример:

Перем Конт;
Сервис = СоздатьОбъект("Сервис");
Если ОткрытьФорму("Обработка.Демо", Конт) = 1 Тогда
        Список = СоздатьОбъект("СписокЗначений");
        Список.ДобавитьЗначение("Первый параметр");
        Список.ДобавитьЗначение("Второй параметр");
        Список.ДобавитьЗначение("Третий параметр");
        Сервис.ВыполнитьПроцедуру(Конт, "Выполнить", Список);
КонецЕсли;

...Показать Скрыть

и
ВыполнитьФункцию / CallAsFunction 

Синтаксис: ВыполнитьФункцию(Контекст, ИмяФункции, СписокАргументов, Результат)

Параметры:

Контекст - тип: ГрупповойКонтекст. Контекст, в котором необходимо выполнить функцию. Необязательный. По умолчанию - текущий контекст. 
ИмяФункции - тип: Строка. Имя функции. 
СписокАргументов - тип: СписокЗначений. Список значений, содержащий аргументы функции. Если размер списка меньше, чем количество аргументов функции, то в оставшиеся аргументы передаются пустые значения. Лишние значения игнорируются. Значения по умолчанию игнорируются. Необязательный. По умолчанию - пустой список. 
Результат - тип: Любой. Переменная, в которую записывается результат выполнения функции. 
Возвращает: результат выполнения метода в виде числа: 1 в случае успеха, 0 в противном случае.

Описание: Метод предназначен для выполнения функции в заданном контексте.

Пример:

Перем Конт, Рез;
Сервис = СоздатьОбъект("Сервис");
Если ОткрытьФорму("Обработка.Демо", Конт) = 1 Тогда
        Список = СоздатьОбъект("СписокЗначений");
        Список.ДобавитьЗначение("Первый параметр");
        Список.ДобавитьЗначение("Второй параметр");
        Список.ДобавитьЗначение("Третий параметр");
        Сервис.ВыполнитьФункцию(Конт, "Выполнить", Список, Рез);
КонецЕсли;
Сообщить("Результат выполнения функции: " + Рез);
...Показать Скрыть
5. Юрий Осипов (yuraos) 28.12.11 12:47
Ёпрст пишет:

Ну и нафига всё это ?

Про Шаблон - это боян чистой воды, и еще - процедуру в нём не выполнишь, так что, поправь описалово.

Поддерживаю, но не во всем:
Неплохо бы для порядка описать зверюг, окружающих ШАБЛОН(tFunction):
LocalConnect();
....
LocalDisconnect();
;))))))))))))))))
6. Епрст (Ёпрст) 28.12.11 14:20
Ну, ознакомься с баяном, что ли :
http://my1c-archive.narod.ru/knowhow/shablon.html

а так, выкини из описалова, что можно выполнять процедуру.
В шаблоне работают только функции!
7. Владимир Буоц (vbuots) 28.12.11 14:57
(6) а так, выкини из описалова, что можно выполнять процедуру.
В шаблоне работают только функции!

Выкинул
8. Владимир Буоц (vbuots) 28.12.11 14:58
(5) yuraos,
LocalConnect();
....
LocalDisconnect();
Ах - да это не относится к обработке :)
9. Виктор Клименко (dicwork) 28.12.11 23:52
Чесно говоря не могу придумать для чего это можна приспособить в ежедневной работе программиста 1С.
10. Юрий Осипов (yuraos) 29.12.11 00:03
(9) dicwork,
это больше для извращенцев ...
... таких как я ;)))))
Ну позарез нужно бывает иногда
в обобщенных алгоритмах
разные методы в контексте вызвать
(в зависимости от погоды в конторе) !!!
ЗЫ
Скромность - не порок, но средство для сокрытия оных.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа