gifts2017

Подключаемые внешние отчеты в ЗиК (без изменения конфигурации (ну или почти без изменения :-) )).

Опубликовал Илья (gucci76) в раздел Программирование - Практика программирования

1С почему то решила, что в бухгалтерии нужны подключаемые внешние отчеты, а в ЗиК нет.
А зря. С этим механизмом можно было бы сделать много очень полезных доработок документов без изменения конфигурации. И не только!

1С почему то решила, что в бухгалтерии нужны подключаемые внешние отчеты, а в ЗиК нет.
А зря. С этим механизмом можно было бы сделать много очень полезных доработок документов без изменения конфигурации. И не только!

Долгое время меня мучила мысль как реализовать этот механизм с минимальными изменениями конфигурации.


Первое решение было дополнительная кнопка на форме, запускающая внешний отчет ("запускалка"), который ищет в определенном месте наличие дополнительных отчетов для этого вида документа.
Но минус этого решения легкая потеря кнопки при обновлении, т.к. в анализе конфигурации изменения видны только в Диалоге, а что именно в нем поменялось непонятно. Приходилось каждый раз при обновлении восстанавливать мои кнопки. Подробнее об этом здесь:
http://www.zik1c.ru/Otchet/Ot4_Integ.shtml

Не так давно привлекло мое внимание статья: http://infostart.ru/public/73221/ (venger).
Она натолкнула меня на мысль использовать "перехватчик" чтобы подключить внешние отчеты к документу.

Вот как я это сделал.
0. Сначала подключил "перехватчик" как рассказано в статье venger-а.
1. Добавил новую константу (Константа.КаталогВнешнихФорм), в которой указывается путь к папке с дополнительными отчетами и их "запускалкой". Т.к. дополнительные отчеты в большинстве своем универсальные, то их можно использовать сразу для нескольких баз и доработав один изменения вступят в силу во всех базах.
2. в глобальнике в процедуру глДействия(КонтекстДокумента,СписокДействий) Экспорт добавил запуск "запускалки" (извиняюсь за тавтологию ) - всего 2 строчки.

ИначеЕсли Действие = "Дополнительно" Тогда 
ОткрытьФорму("Отчет",КонтекстДокумента,СокрЛП(Константа.КаталогВнешнихФорм)+"\StarterExtForms.ert");

которая запускает мою старую обработку ищущую доп. отчеты для нужного документа.

2. В обработке КлассПерехватСобытийРеализация,

Процедура СобытиеГМ_ПриОткрытии(Конт, ФлагЧтенияНастройки) Экспорт

Попытка
СписокДействий = Конт.СписокДействий; 
Если СписокДействий.РазмерСписка() <> 0 Тогда
Конт.СписокДействий.ДобавитьЗначение("----------------------"); 
КонецЕсли; 
Конт.СписокДействий.ДобавитьЗначение("Дополнительно"); 
Если СписокДействий.РазмерСписка() = 1 Тогда
Конт.СписокДействий.ДобавитьЗначение("----------------------"); 
КонецЕсли;
Исключение

КонецПопытки;
КонецПроцедуры // СобытиеГМ_ПриОткрытии

Теперь это выглядит как показано на рисунках внизу.

Однако в справочниках нет кнопки ДЕЙСТВИЯ или подобной, поэтому там приходится применять нетиповую кнопку.

Как и для дополнительных возможностей (в меню сервис) мои дополнительные отчеты тоже состоят из самого отчета *.ert и его описания *.efd. Но я расширил немного описание, теперь в нем можно указать пользователя и НазваниеНабораПрав для которых отчет может запускаться, а так же обязательно надо указать из какого объекта метаданных можно запустить этот отчет. Пример описания (*.efd):

Название=Перепровести документ 
Пользователь=1С,А_Плюс
Права=Полные права,Кадры
Метаданные=Документ.БольгичныйЛист

Если в метаданных указать Документ.Все, тогда отчет будет запускаться из всех документов.


Перечислю что же можно реализовать через эти подключаемые отчеты/обработки:
Из справочника Сотрудники:
- печать всевозможных отчетов только для текущего сотрудника, например расчетые листки за несколько периодов, отчет по использованным отпускам, посмотреть суммы действующих постоянных надбавок, перейти в общий журнал документов с включенным отбором по текущему сотруднику, перейти в журнал расчетов.

Из документов:
- печать любых дополнительных произвольных неунифицированных форм для текущего документа; можно изменить/сохранить/перепровести документ любого периода с неизменением записей в журнале расчетов; можно написать обработки произвольного (нетипового) заполнения содержимого документа

Из журнала расчетов зарплаты:
- быстрый переход в общий журнал документов с установленным отбором по текущему сотруднику, расчетные листки по текущему сотруднику за несколько периодов, отчет табель отработанного времени, создать перерасчет оплаты по табелю.....

и многое многое другое. Если кому интересно могу в комментарии написать, что уже сделано.

ВНИМАНИЕ! ПРЕДЛАГАЮ (пока) ЖЕЛАЮЩИМ УСТАНОВИТЬ НА ВАШЕЙ БАЗЕ ЭТО РЕШЕНИЕ ПЛЮС ДОПОЛНИТЕЛЬНЫЕ ОТЧЕТЫ/ОБРАБОТКИ ДЛЯ РАСШИРЕНИЯ ВОЗМОЖНОСТЕЙ ЗИК!

ЖЕЛАЮЩИЕ ПИШИТЕ В ЛИЧКУ!

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

Наименование Файл Версия Размер
StarterExtForms.ert 77
.ert 222,00Kb
09.10.14
77
.ert 222,00Kb Скачать
GoJurnal.zip 19
.zip 13,29Kb
09.10.14
19
.zip 13,29Kb Скачать
GoJurnalDok.zip 22
.zip 13,36Kb
09.10.14
22
.zip 13,36Kb Скачать

См. также

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

Комментарии

1. Kapitan911 Юрий (Kapitan911) 20.12.10 09:04
Хорошая идея с глДействия(...)
Только не вижу смысла морочится с ВК, ради того чтобы не менять саму процедуру в ГМ ...
В глобальник все равно лезть - чтоб ВК подкличать....
Проще сразу глДействия(...) изменить и все
2. Илья (gucci76) 20.12.10 09:18
(1) Чем же проще?
Надо каждый в документ добавлять дополнительный текст. У меня после обновления надо вернуть изменения только в глобальник в двух местах: ПриНачалеРаботы и глДействия. А еслм без ВК тогда в каждый документ надо входить и восстанавливать.
А в моем решении кнопка Действия "преображается" для всех документов.
На мой взгял быстрее в глобальнике два места подправить, чем в нескольких документах одно. Тем более глобальник все равно надо править, чтобы увеличить быстродействие ЗиК. ИМХО.
3. Епрст (Ёпрст) 20.12.10 11:26
Через глДействия некрасиво.
Надо было сделать полный аналог Тис-а , например.
Добавил динамически кнопку, по которой список + подмена формулы в кнопке печать..
4. Илья (gucci76) 20.12.10 15:05
(3) Чем некрасиво?
"Добавил динамическую кнопку" (треуголник вершиной вниз?) - это с помощью турбоМД?
Я с турбоМД не разобрался еще. А при обновлении много надо будет действий сделать чтобы вернуть "динамическую кнопку"?
И как указать кнопке место расположения ее с помощью турбоМД?
5. Епрст (Ёпрст) 20.12.10 15:11
(4) Тем, что рядом есть кнопка Печать.
Думаешь, будешь звонить всем пользователям и говорить - уважаемые, по кнопке действия можно еще что-то распечатать ?
Тебе в ответ - дык кнопка печать же есть.
6. Епрст (Ёпрст) 20.12.10 15:13
(4) а при чем тут турбомд вообще ?
Формексом созаешь всё что нужно, в том числе и сам контрол, если он отсутствует и сам обработчик печати.
+ грузишь доп глобальник со всеми методами от Тиса для работы с внеш. печ формами, т.е весь механизм целиком.
Итого - имеешь полный аналог.
7. Илья (gucci76) 20.12.10 15:14
(5) Понятно чем удобнее кнопка как в ТиС.
(3) а про динамическую кнопку???
8. Илья (gucci76) 20.12.10 15:16
А как узнать где надо разместить динамическую кнопку? Она же в разным местах располагается, в зависимости от документа
9. Илья (gucci76) 20.12.10 15:19
(5) По действиям можно не только печатную форму сделать, но и нетиповое заполнение документа или еще какой доп. расчет запустить (например расчет продления отпуска из-за больничного). Поэтому к кнопке Печать привязывать думаю тоже некрасиво.
10. Илья (gucci76) 20.12.10 15:22
Как вариант можно сделать невидимую кнопку и привязать к ней F<X>. Тогда можно просто нажать F<X> и запустится обработка. Но я не знаю как привязать кнопку на клавиатуре кнопке на форме.
11. Епрст (Ёпрст) 20.12.10 15:40
(7) ДобавитьАтрибут - добавляешь кнопку-стрелочку для выбора списка вн. печ форм.
(8) получаешь координаты кнопки печать, через получитьКоординаты (по заголовку кнопки определяешь, что это она).
+ лепишь новую кнопку рядом (можно сжать размер кнопки печать и втиснуть свою стрелочку.

Итого - полный аналог.
12. Илья (gucci76) 20.12.10 16:31
Еще раз упомяну, что ДопДействия могут формировать НЕ ТОЛЬКО печатную форму, а еще например можно перепровести документ прошлого периода. Так что ПЕЧАТЬ не всегда несет верную смысловую нагрузку. В документе Начисление заработной платы, вообще нет кнопки печать.
Еще, если нет у кнопки идентификатора, можно получить ее координаты?
Я, конечно понимаю, что с точки зрения программирования Ваш вариант красивей, но на мой взгляд труднее его реализовать в ЗиК.
А вот есть ли возможность с помощью формекс привязать кнопку на клавитуре к кнопке на форме?
13. Епрст (Ёпрст) 20.12.10 16:46
(12)
Вот именно, если "печать" будет в этой кнопке (действия) и рядом будет лежать кнопка печать - это в двойне абсурд!
Если нет кнопки печать - добавить её динамически
Формексу фиолетово, есть идентификатор у контрола, или его нет.
14. Илья (gucci76) 20.12.10 16:52
(13) А если надо только перепровести документ тогда добавлять какую кнопку? Печать?
И можно ли формексом добавить команду????
15. Илья (gucci76) 20.12.10 16:53
Это ЗиК - здесь все не так как в других конфах. В ЗиК набор прав не всегда влияет на возможные действия!
16. Илья (gucci76) 20.12.10 16:55
Объяснить пользователям про доплнительные возможность кнопки Дейстия не сложно. А если пользователь дуб, то он и новую кнопку (как в ТиС) проигнорирует.
17. Епрст (Ёпрст) 20.12.10 17:05
+13 А чего трудного в реализации ?
Ты же даже перехватчик задействовал..
!
18. Илья (gucci76) 20.12.10 17:47
(17) Нужно анализировать наличие кнопки печать, если есть то действуем по твоему алгоритмы (ничего, что на ты?), а если нет кнопки печать? А если надо не только печатать?
19. Епрст (Ёпрст) 20.12.10 18:04
(18) ну и ?
Нет кнопки печать - динамически её создаешь и размещаешь её в подвальчике, рядышком с остальными кнопками.
20. Епрст (Ёпрст) 20.12.10 18:06
+19 ну вот смотри, например,
http://infostart.ru/public/79515/
или
http://infostart.ru/public/20885/
или
http://infostart.ru/public/20038/

там всё делается динамически - и контролы создаются с формулами,и меню и тулбары..
21. Илья (gucci76) 20.12.10 18:21
(19) а если не надо печатать?
И еще в очередной раз интересуюсь можно ли формексом назначить кнопке команду????????????????????????
(20) обязательно посмотрю на досуге!!!! Спасибо за науку!
22. Епрст (Ёпрст) 20.12.10 20:36
23. Илья (gucci76) 20.12.10 21:54
24. Ivan Shtukaturov (alaudit) 27.03.13 16:19
"Надо каждый в документ добавлять дополнительный текст. ... А еслм без ВК тогда в каждый документ надо входить и восстанавливать.
А в моем решении кнопка Действия "преображается" для всех документов.
На мой взгял быстрее в глобальнике два места подправить, чем в нескольких документах одно. Тем более глобальник все равно надо править, чтобы увеличить быстродействие ЗиК. ИМХО"

Глубоко копнул, а сама идея - хорошая поддерживаю. Будем пробовать!
25. Илья (gucci76) 27.03.13 18:07
Удачи.
Не поздно ли?
Уже 7.7 практически не актуально. Все уже на "Восьмерке" )))
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа