[Обучаловка] Преимущества класса «Перехватчик» внешней компоненты «1С++»

Публикация № 73221

Разработка - Инструментарий разработчика

Ликбез для «штатных» программистов по классу «Перехватчик» внешней компоненты «1С++»

В системе 1С 7.7 при интерактивных действиях пользователя, таких как открытие формы документа или справочника, запись документа или ввод нового элемента справочника или документа, возникают одноименные системные события. Штатные средства предоставляют разработчику возможность программной обработки этих событий. Для этого в языке 1С 7.7 зарезервированы названия и синтаксис для системных предопределенных процедур. Вызов таких процедур (если они определены в конфигурации) производится неявно самой системой 1С перед обработкой того или иного интерактивного действия пользователя. Исключение составляют только предопределенные процедуры модуля документа, такие как «ОбработкаПроведения» или «ОбработкаУдаленияПроведения». Их отличие только в том, что вызываются они системой, как при интерактивных действиях, так и при программной инициации этих событий. Тело таких предопределенных процедур разработчик должен написать сам в соответствующих программных модулях конфигурации. Система же сама передает в предопределенную процедуру фактические значения принимаемых процедурой параметров, если они есть, которые можно использовать в теле этих процедур для программной обработки события, например, для выдачи предупреждающих сообщений или отмены выполнения действия того системного события (с помощью системной функции «СтатусВозврата»), которое  вызвало данную предопределенную процедуру.

Поясним сказанное на простом примере. Допустим, мы хотим, чтобы введенные документы в базу могли интерактивно изменять только авторы этих документов. Для этого в модуле формы каждого вида документа нам нужно определить (если это еще не было сделано) такую предопределенную процедуру (пока пустую):

Процедура ПриЗаписи()

КонецПроцедуры

Затем в теле этой процедуры необходимо написать примерно такой код, который будет проверять, совпадает ли автор документа с текущим пользователем системы, и если нет, то отменит выполнение действия этого системного события:

Если ((ПустаяСтрока(СокрЛП(Врег(ИмяПользователя())))=0) И (СокрЛП(Врег(ТекущийДокумент().Автор))<>Врег("<>")) И (ПустаяСтрока(СокрЛП(Врег(ТекущийДокумент().Автор)))=0)) И (СокрЛП(Врег(ТекущийДокумент().Автор))<>СокрЛП(Врег(ИмяПользователя()))) Тогда
Предупреждение("Изменение этого документа Вам запрещено, так как Вы не являетесь его автором",5);
СтатусВозврата(
0);
Возврат;
КонецЕсли;

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

Так это работает, но имеет ряд недостатков. Ведь в случае необходимости выполнять какие-либо свои действия при возникновении тех или иных событий в базе данных для тех или иных объектов метаданных, разработчик, использующий только штатные возможности 1С, вынужден вставлять свой код (вызов тех или иных функций глобального модуля, например, написанных разработчиком для этих целей) во все предопределенные процедуры всех необходимых объектов метаданных, коих может быть довольно много. Что довольно не удобно и нудно, если не сказать больше;-)

Но и это еще не беда. А теперь представьте, что после установки типового обновления конфигурации, разработчику каждый раз приходится заново, помимо того, что вставлять в глобальный модуль дописанные им функции, так еще и опять во все необходимые модули объектов метаданных во все нужные предопределенные процедуры опять вставлять свой код. Т.е. при типовом обновлении конфигурации (а, например, с бухгалтерией это происходит довольно часто), разработчику каждый раз приходится проделывать одну и ту же неблагодарную работу.

А при разработке новых объектов метаданных (тех же документов, справочников и т.д.) разработчику также нельзя забывать о вставке своего кода в предопределенные процедуры в модулях этих объектов.

Все это довольно неудобно для разработчика и, соответственно, чревато ошибками и пустой тратой своего времени. Да и для заказчика это все тоже чревато. Ведь подобные масштабные изменения типовой, когда программисту после каждого обновления нужно выполнять кучу действий, сулят зависимость от разработчика, если он фикси, или дополнительные расходы, если это фри или фра, при обновлениях типовых конфигурации.

Внешняя компонента «1С++» (http://www.1cpp.ru) включает в себя класс «Перехватчик», при грамотном использовании возможностей которого, разработчик может избежать всех этих проблем. Более того, построить такое решение, программно обрабатывающее системные события, например, для расширения штатных возможностей контроля прав пользователей, которое можно будет повторно устанавливать (и довольно просто) в разные конфигурации разных заказчиков, а при обновлении типовых тех же заказчиков, также просто и быстро подключать его заново.

Не говоря уже о том, что простота установки и универсальность подобных разработок позволят поставить на поток продажу этих решений, а внедрение может быть произведено и «опытными» пользователями из штата заказчика, без необходимости участия разработчика. А это значит и удешевление стоимости решения для заказчика, и увеличение прибыли для разработчика, за счет продажи не только своих услуг, но и своих готовых «коробочных» универсальных решений большому числу потенциальных покупателей вне зависимости от удаленности и местонахождения покупателя и разработчика.

Итак, покажем, как реализуется, с помощью класса «Перехватчик» внешней компоненты «1С++», тот функционал, который мы реализовали штатными возможностями в начале статьи.

Для начала нам необходимо скачать эту внешнюю компоненту с сайта http://www.1cpp.ru. Последнюю стабильную сборку можно взять тут: http://www.1cpp.ru/images/3/32/Icpp-latest.rar. Из скачанного архива нужно распаковать файл «1cpp.dll» в папку конфигурации или в папку «Bin» платформы 1С 7.7.

Затем в глобальном модуле в предопределенной процедуре «ПриНачалеРаботыСистемы()» прописываем загрузку этой внешней компоненты:

ЗагрузитьВнешнююКомпоненту("1cpp.dll");

После чего создаем обработку с именем «defcls», в теле которой пишем такой код:

//# класс КлассПерехватСобытий = КлассПерехватСобытий@MD
//# {};

Это объявление пользовательского класса 1С++, код которого будет обрабатывать системные события 1С, а экземпляры этого класса будут создаваться системной функцией «СоздатьОбъект» с параметром "КлассПерехватСобытий", а также указание того факта, что код этого класса будет находиться в обработке с именем «КлассПерехватСобытий».

Теперь собственно создаем обработку с именем «КлассПерехватСобытий», в которой и будем реализовывать весь функционал, о котором мы говорим.

Но прежде чем мы начнем, нужно еще в глобальном модуле в предопределенной процедуре «ПриНачалеРаботыСистемы()» после кода загрузки внешней компоненты написать такие строчки:

НастройкиВК = СоздатьОбъект("УправлениеНастройками");
НастройкиВК.Установить("ПерехватитьСобытияГК",1);
ПерехватчикСобытийГМ = СоздатьОбъект("КлассПерехватСобытий");
Перехватчик = СоздатьОбъект("Перехватчик");
Перехватчик.ПерехватитьСобытияГлобальногоМодуля(ПерехватчикСобытийГМ);

Т.е. этим кодом мы включаем перехват событий, создаем экземпляр нашего пользовательского класса «КлассПерехватСобытий» и назначаем его обработчиком системных событий глобального модуля, для того чтобы отлавливать этим экземпляром нашего класса события открытия форм в 1С.

Вот теперь можем заниматься реализацией самого пользовательского класса, который будет обрабатывать необходимые нам события. Т.е. открываем программный модуль обработки «КлассПерехватСобытий» и пишем такой код:

Перем КонтФормы Экспорт, Док Экспорт;

Процедура
СобытиеГМ_ПриОткрытии(Конт,ФлагЧтенияНастройки) Экспорт
КонтФормы = Конт;
Попытка
Док = КонтФормы.ТекущийДокумент();
Исключение
Возврат;
КонецПопытки;
ПерехватчикСобытийГК=СоздатьОбъект("КлассПерехватСобытий");
ПерехватчикСобытийГК.КонтФормы=КонтФормы;
ПерехватчикСобытийГК.Док=Док;
Перехватчик = СоздатьОбъект("Перехватчик");
Перехватчик.ПерехватитьСобытияГК(КонтФормы,ПерехватчикСобытийГК);
КонецПроцедуры

Функция
Событие_ПриЗаписи() Экспорт
Рез=1;
Если ((ПустаяСтрока(СокрЛП(Врег(ИмяПользователя())))=0) И (СокрЛП(Врег(Док.Автор))<>Врег("<>")) И (ПустаяСтрока(СокрЛП(Врег(Док.Автор)))=0)) И (СокрЛП(Врег(Док.Автор))<>СокрЛП(Врег(ИмяПользователя()))) Тогда
Рез=0;
Предупреждение(
"Изменение этого документа Вам запрещено, так как Вы не являетесь его автором",5);
Иначе
Перехватчик = СоздатьОбъект("Перехватчик");
Рез = Перехватчик.ВыполнитьОригинальноеСобытиеГК(КонтФормы,"ПриЗаписи");
КонецЕсли;
Возврат
Рез;
КонецФункции

В данном случае идея такова, мы будем перехватывать событие открытия любых форм 1С, процедура «СобытиеГМ_ПриОткрытии» (мы помним, что в предопределенной процедуре «ПриНачалеРаботыСистемы()» мы создали экземпляр нашего класса и указали, что он будет перехватывать события глобального модуля, а соответственно и специальное событие «СобытиеГМ_ПриОткрытии»). В этой процедуре мы фактически для каждой открытой формы документа будем создавать новый экземпляр нашего пользовательского класса и назначать его обработчиком системных событий, но уже форм и только для документов. Попутно заполняя глобальные переменные этого класса контекстом формы документа и собственно документа, события которого мы перехватываем, чтобы в классе иметь возможность обращаться к тому документу и его форме. Т.е. для каждой открытой формы документа при ее открытии мы создаем новый экземпляр нашего класса, который будет обрабатывать события именно этой формы именно этого документа. Соответственно при возникновении события «ПриЗаписи», вернее перед ним, будет вызываться обработчик этого события определенный в нашем пользовательском классе, т.е. функция «Событие_ПриЗаписи()». В которой мы уже проверяем является ли текущий пользователь автором документа и в зависимости от этого, или отменяем выполнение действий данного события (возвращая ноль в функции-обработчике события «Событие_ПриЗаписи()», что эквивалентно вызову системной функции «СтатусВозврата» с параметром ноль в штатных предопределенных процедурах) и предупреждаем пользователя об этом или наоборот – разрешаем, возвращая единицу,  и выполняем те действия, что определены в штатной предопределенной процедуре формы документа «ПриЗаписи()» , если она, конечно, есть.

Вот собственно и вся реализация. Стоит, конечно, понимать, что приведенные здесь примеры кода носят чисто иллюстративный и обучающий характер, в «боевых» условиях код будет несколько сложнее и лучше организован. Во всяком случае, хотелось бы на это надеяться;-)

Итак, мы имеем две новые обработки и пару строк в глобальном модуле. Т.е. нам не надо во все модули форм всех видов документов в предопределенную процедуру «ПриЗаписи()» вписывать свой код, нам не надо, при обновлении конфигурации опять проделывать эту работу, а надо будет только вставить заново пару строк в глобальный модуль в процедуру «ПриНачалеРаботыСистемы()». Установка же в новую конфигурацию тоже будет проста, закинули файл внешней компоненты (dll’ку) в папку с конфигурацией или с платформой, вставили две обработки «defcls», «КлассПерехватСобытий» и прописали несколько строк в глобальный модуль. Т.е. человек слегка знакомый с конфигуратором вполне может это сделать и без разработчика, особенно, если разработчик написал небольшую инструкцию по установке.

Так что возможность перехватывать события 1С в пользовательских классах, определять свои обработчики этих перехваченных событий, управлять выполнением самих событий и выполнением штатных предопределенных процедур этих событий в объектах метаданных конфигурации с помощью класса «Перехватчик» внешней компоненты «1С++» предоставляет, по истине, революционные возможности для разработчика, которыми грех не воспользоваться.

Подробную документацию по классу «Перехватчик» Вы можете почитать тут:
http://www.1cpp.ru/docum/icpp/html/Hooker.html


Примеры проектов использующих возможности класса «Перехватчик»:

Универсальная подсистема «Дополнительные права для документов»
//infostart.ru/public/22202/

Универсальная подсистема «Сканы документов»
//infostart.ru/public/70831/

Универсальная подсистема «Фабрика событий» + «Доп. права доков» + «Сканы доков»
//infostart.ru/public/71084/

Универсальная подсистема «Подписи/согласования документов»
//infostart.ru/public/73774/

Undo или в помощь операторам
//infostart.ru/public/20038/

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. Утюг 56 21.07.10 09:33 Сейчас в теме
Отчего-то не исполняется в классе функция Событие_ПриЗаписи().
3. Утюг 56 21.07.10 10:19 Сейчас в теме
(1) Не работала на 1с++ 3.0.1.22. Скачал 3.2.1.0 - заработало.
2. marsohod 121 21.07.10 09:54 Сейчас в теме
Во многих типовых есть глобальная функция глПроверкаРазрешенияРедактирования(Контекст), которая вызывается из ПриОткрытии()
1С++ вещь хорошая, только приведенный пример использования кажется не очень удачным...
4. artbear 1173 21.07.10 10:43 Сейчас в теме
(2) Это не выход - 1) т.к данную функцию нужно вставлять в собственные документы
2) не во всех типовых, если не ошибаюсь, она есть.
А мой Перехватчик работает независимо от кода конфы :)

(3) Странно, от версии 1С++ данный код не должен зависеть.
6. Утюг 56 21.07.10 11:45 Сейчас в теме
(4) Попробовал 2.5.0.7 - тоже не работает.
7. venger 2086 21.07.10 12:25 Сейчас в теме
(6) Лучше брать свежую сборку.....
5. artbear 1173 21.07.10 10:48 Сейчас в теме
(0) ИМХО небольшая неточность
если штатный обработчик (в модуле формы документа) вернет СтатусВозврата(0), т.е. будет установлен запрет записи, то этот запрет не сработает :(
Исправить нужно так:
Функция Событие_ПриЗаписи() Экспорт
Иначе
Перехватчик = СоздатьОбъект("Перехватчик");
Рез = Перехватчик.ВыполнитьОригинальноеСобытиеГК(КонтФормы,"ПриЗаписи"); // ДОБАВИЛ Рез =
КонецЕсли;
Возврат Рез;
КонецФункции
ЗЫ хотя, может быть, я уже и забыл собственную реализацию Перехватчика :)
8. venger 2086 21.07.10 12:44 Сейчас в теме
(5) Все верно, поправил. Правда стоит в штатных предопределенных писать так:

СтатусВозврата(0);
Возврат;


Так как код в штатной предопределенной после "СтатусВозврата(0);", если не будет команды выхода из процедуры "Возврат;", - выполнится.
Но это уже к 1С++ отношения не имеет - это штатные вещи;-)
9. gucci76 346 21.07.10 13:05 Сейчас в теме
А как запретить проводить документ подобным способом? Допустим кадрам можно создавать документ, а проводить нельзя.
При настройке прав, если разрешить Ввод нового, то первый раз документ сможет проводиться. А нужно чтобы совсем не проводился, но создавался.
10. gucci76 346 21.07.10 13:19 Сейчас в теме
Я так понял это ответ на мой вопрос: "Исключение составляют только предопределенные процедуры модуля документа, такие как «ОбработкаПроведения» или «ОбработкаУдаленияПроведения». Их отличие только в том, что вызываются они системой, как при интерактивных действиях, так и при программной инициации этих событий. "
т.е. никак!
11. venger 2086 21.07.10 14:00 Сейчас в теме
(10) Нет - можно, счас напишу пример, немного терпения;-)
12. gucci76 346 21.07.10 14:07 Сейчас в теме
Жду!
Держу мышку над плюсиком :)
13. venger 2086 21.07.10 14:15 Сейчас в теме
(12) Я просто немного усложнил и отредактировал условие проверки авторства документов в статье (еще и раскрасить надо было), в связи с тем, что а вдруг пользователи в системе не определены совсем. Получилось громоздко, но прикольно;-)
З.Ы. Чтобы увидеть изменения нужно жмакнуть "Очистить кеш публикации (beta)" справа в меню
14. gucci76 346 21.07.10 14:48 Сейчас в теме
что то не получается с перехватом ПриЗаписи, а про ОбработкаПроведения ваще не видно перехватчика.
15. venger 2086 21.07.10 14:53 Сейчас в теме
(14) А вот как ловить "ОбработкуПроведения":
Сначала в глобальный модуль в процедуру "ПриНачалеРаботыСистемы()" после кода включения перехвата еще надо дописать код включения перехвата событий модуля документа для всех видов доков:
Для Сч=1 По Метаданные.Документ() Цикл
	Перехватчик.СнятьПерехватСобытийПроведенияДокумента(СокрЛП(Метаданные.Документ(Сч).Идентификатор));		
	Перехватчик.ПерехватитьСобытияПроведенияДокумента(СокрЛП(Метаданные.Документ(Сч).Идентификатор),ПерехватчикСобытийГМ);
КонецЦикла;


А потом в класс перехвата событий дописать такую функцию:
Функция Событие_ОбработкаПроведения(КонтДока, ДопПарам) Экспорт
	Сообщить("Ловим: ОбработкаПроведения");
	Рез=1;
	Если КонтДока.ГрупповаяОбработка()<=0 Тогда
		Если (1=1) Тогда // Какое-то условие
	        Рез=0;
	        Предупреждение("Проводить этот документ Вам запрещено",5);
	    КонецЕсли;
	КонецЕсли;
	Если Рез=1 Тогда
		Перехватчик = СоздатьОбъект("Перехватчик");
		Рез = Перехватчик.ВыполнитьОригинальноеСобытиеГК(КонтДока,"ОбработкаПроведения",ДопПарам);
	КонецЕсли;
    Возврат Рез;
КонецФункции
Показать
16. venger 2086 21.07.10 14:55 Сейчас в теме
(14) +15, Что-то плохо отобразился код включения перехвата проведения, повторю так:

Для Сч=1 По Метаданные.Документ() Цикл
Перехватчик.СнятьПерехватСобытийПроведенияДокумента(СокрЛП(Метаданные.Документ(Сч).Идентификатор));
Перехватчик.ПерехватитьСобытияПроведенияДокумента(СокрЛП(Метаданные.Документ(Сч).Идентификатор),ПерехватчикСобытийГМ);
КонецЦикла;
17. venger 2086 21.07.10 14:55 Сейчас в теме
(14) +16, Тоже обрезается, а если просто текстом:
Для Сч=1 По Метаданные.Документ() Цикл
Перехватчик.СнятьПерехватСобытийПроведенияДокумента(СокрЛП(Метаданные.Документ(Сч).Идентификатор));
Перехватчик.ПерехватитьСобытияПроведенияДокумента(СокрЛП(Метаданные.Документ(Сч).Идентификатор),ПерехватчикСобытийГМ);
КонецЦикла;
18. venger 2086 21.07.10 14:56 Сейчас в теме
(14) +17, Да что такое, хорошо, попробуем так:
Для Сч=1 По Метаданные.Документ() Цикл
	Перехватчик.СнятьПерехватСобытийПроведенияДокумента(
			СокрЛП(Метаданные.Документ(Сч).Идентификатор));		
	Перехватчик.ПерехватитьСобытияПроведенияДокумента(
		СокрЛП(Метаданные.Документ(Сч).Идентификатор),ПерехватчикСобытийГМ);
КонецЦикла;
20. venger 2086 21.07.10 15:02 Сейчас в теме
(14) Итого, все по порядку, после действий проделанных в статье, чтобы включить перехват проведения, надо в глобальный модуль в процедуру "ПриНачалеРаботыСистемы()" после кода включения перехвата еще дописать код включения перехвата событий модуля документа для всех видов доков:
Для Сч=1 По Метаданные.Документ() Цикл
	Перехватчик.СнятьПерехватСобытийПроведенияДокумента(
			СокрЛП(Метаданные.Документ(Сч).Идентификатор));		
	Перехватчик.ПерехватитьСобытияПроведенияДокумента(
		СокрЛП(Метаданные.Документ(Сч).Идентификатор),ПерехватчикСобытийГМ);
КонецЦикла;


После чего, в классе-обработке перехвата событий дописать такую процедуру:
Функция Событие_ОбработкаПроведения(КонтДока, ДопПарам) Экспорт
	Сообщить("Ловим: ОбработкаПроведения");
	Рез=1;
	Если КонтДока.ГрупповаяОбработка()<=0 Тогда
		Если (1=1) Тогда // Какое-то условие
	        Рез=0;
	        Предупреждение("Проводить этот документ Вам запрещено",5);
	    КонецЕсли;
	КонецЕсли;
	Если Рез=1 Тогда
		Перехватчик = СоздатьОбъект("Перехватчик");
		Рез = Перехватчик.ВыполнитьОригинальноеСобытиеГК(КонтДока,"ОбработкаПроведения",ДопПарам);
	КонецЕсли;
    Возврат Рез;
КонецФункции
Показать


Соответственно, при проведении какого-либо документа Вы увидите сообщение "Ловим: ОбработкаПроведения". Если да, то все Ок.

Только надо учесть, что проверка на авторство при проведении бессмысленна, так как автор сменился при записи, которое всегда перед проведением произойдет. И еще, при программном проведении документа (групповая обработка документов какая-нибудь) это событие тоже будет отлавливаться...
MadDAD; SirYozha; +2 Ответить
19. gucci76 346 21.07.10 14:57 Сейчас в теме
Перехватчик.СнятьПерехватСобытийПроведенияДокумента(СокрЛП(Метаданные.Документ(Сч).Идентификатор));
{Глобальный модуль(1142)}: Поле агрегатного объекта не обнаружено (СнятьПерехватСобытийПроведенияДокумента)
:cry: :cry: :cry:
21. venger 2086 21.07.10 15:03 Сейчас в теме
(19) Вы понимаете, что я в комментах привожу код который надо дописать, к коду в статье?
22. gucci76 346 21.07.10 15:07 Сейчас в теме
Вот что у меня в глобальнике:
ЗагрузитьВнешнююКомпоненту("1CPP.dll");
НастройкиВК = СоздатьОбъект("УправлениеНастройками");
НастройкиВК.Установить("ПерехватитьСобытияГК",1);
ПерехватчикСобытийГМ = СоздатьОбъект("КлассПерехватСобытий");
Перехватчик = СоздатьОбъект("Перехватчик");
Перехватчик.ПерехватитьСобытияГлобальногоМодуля(ПерехватчикСобытийГМ);
Для Сч=1 По Метаданные.Документ() Цикл
Перехватчик.СнятьПерехватСобытийПроведенияДокумента(
СокрЛП(Метаданные.Документ(Сч).Идентификатор));
Перехватчик.ПерехватитьСобытияПроведенияДокумента(
СокрЛП(Метаданные.Документ(Сч).Идентификатор),ПерехватчикСобытийГМ);
КонецЦикла;
24. venger 2086 21.07.10 15:10 Сейчас в теме
(22) В глобальнике все верно
23. gucci76 346 21.07.10 15:07 Сейчас в теме
26. venger 2086 21.07.10 15:13 Сейчас в теме
(23) Идем далее, в обработках (объявление классов и сам класс) что?
29. gucci76 346 21.07.10 15:18 Сейчас в теме
(26) в глобальнике выдает ошибку. до обрбаотки не доходил.
25. gucci76 346 21.07.10 15:12 Сейчас в теме
Перехватчик.СнятьПерехватСобытийПроведенияДокумента(СокрЛП(Метаданные.Документ(Сч).Идентификатор));
{Глобальный модуль(1142)}: Поле агрегатного объекта не обнаружено (СнятьПерехватСобытийПроведенияДокумента)
осталась ошибка в глобальнике
27. venger 2086 21.07.10 15:14 Сейчас в теме
(25) У Вас версия ВК свежая?
28. gucci76 346 21.07.10 15:17 Сейчас в теме
31. venger 2086 21.07.10 15:20 Сейчас в теме
(28) А скиньте md'шку в почту, адрес скинул в личке...
30. gucci76 346 21.07.10 15:20 Сейчас в теме
ВРУ!
Скачать скачал, но стояла старая. Ща проверю
32. venger 2086 21.07.10 15:23 Сейчас в теме
(30) Там еще нюанс может быть при смене версий компонент, с какой-то версии изменен порядок чтения и хранения настроек ВК в реестре, если что, то говорите, будем разбираться...
33. gucci76 346 21.07.10 15:23 Сейчас в теме
Спасибо заработало.
Плюсую!!!!!
34. venger 2086 21.07.10 15:39 Сейчас в теме
(33) Пожалуста, кстати, если еще подождете (несколько дней, плюс-минус), то я как раз дописываю новую подсистему, в которой в том числе и отлов "ОбработкиПроведения" ловится и можно будет посмотреть на реальном примере, там еще кое-что интересное будет, но не буду все рассказывать, а то не интересно будет;-)
56. venger 2086 03.08.10 13:57 Сейчас в теме
(33),(54) А вот, как и обещал в 34-м посте, новая подсистема, которая и событие "ОбработкаПроведения" ловит, в том числе:
Универсальная подсистема «Подписи/согласования документов»
http://infostart.ru/public/73774/
35. Ёпрст 1036 21.07.10 15:58 Сейчас в теме
Я б всё же, для начала, все классы делал внешними.
Гораздо проще изменять и тестить.
А уж только потом, в мд встраивал.
ev-kov; dav405; venger; artbear; +4 Ответить
36. venger 2086 21.07.10 16:35 Сейчас в теме
(35) А внешние файлы чем предлагаешь редактировать - не блокнотом же?
37. Арчибальд 2708 21.07.10 16:44 Сейчас в теме
(36) Ну ты сказал :D
В одноэсине меню файл-открыть
А потом Текст-Текст модуля
39. venger 2086 21.07.10 16:49 Сейчас в теме
38. venger 2086 21.07.10 16:48 Сейчас в теме
(35), +36, Или имеется ввиду внешние отчеты/обработки?
40. Ish_2 1048 21.07.10 19:15 Сейчас в теме
Мда... "Всё равно 7.7 не брошу , потому что он хороший".
Не стал ты нашим.
За стойкость +1.
41. venger 2086 21.07.10 20:47 Сейчас в теме
(40) Не, просто, как говорится:

Пока гром не грянет – мужик не перекрестится.

Вот и я, пока не приперло, откладываю углубленное изучение снеговика, тем более лето, жара, после работы на море и т.д. и т.п.;-)
44. Ish_2 1048 22.07.10 07:49 Сейчас в теме
(41) Понял в чем дело. Слушай как надо :
Утром - море , вечером - снеговик.
Идеальный распорядок для взрослого мужчины.
46. venger 2086 22.07.10 11:18 Сейчас в теме
(44) Я пробовал утром бегать на море, но не долго это продолжалось;-) А вечером, после обеда в квартиру солнце светит через окна и жара такая в квартире, что только после 8-ми вечера можно находится;-)
42. SirYozha 197 22.07.10 05:58 Сейчас в теме
Спасибо за ликбез, классная вещь!
Только пришлось добавить одну строку в глобальном модуле, чтобы заработало - необходимо сначала включить настройку ПерехватитьСобытияГК:
НастройкиВК = СоздатьОбъект("УправлениеНастройками");
НастройкиВК.Включить("ПерехватитьСобытияГК");
НастройкиВК.Установить("ПерехватитьСобытияГК",1);
ПерехватчикСобытийГМ = СоздатьОбъект("КлассПерехватСобытий");
Перехватчик = СоздатьОбъект("Перехватчик");
Перехватчик.ПерехватитьСобытияГлобальногоМодуля(ПерехватчикСобытийГМ);
45. venger 2086 22.07.10 11:16 Сейчас в теме
(42) Установить в =1 и включить ведь одно и тоже...
43. SirYozha 197 22.07.10 06:40 Сейчас в теме
47. JohnyDeath 295 22.07.10 12:18 Сейчас в теме
ПолуОФФ
По-хорошему, надо б еще ТурбоБЛ сразу включать:
НастройкиВК.Установить("EnableTurboBL",1);
48. venger 2086 22.07.10 12:49 Сейчас в теме
(47) Это для отлова событий FormEx, насколько я понимаю?
49. artbear 1173 22.07.10 13:13 Сейчас в теме
(47) 1) ТурбоБЛ - реальное ускорение работы 1С
2) с помощью ТурбоБЛ можно обращаться к методам группового контекста - типа КонтФормы.Печать()
ЗЫ без ТурбоБЛ не мыслю работы с 1С++ :)
58. Борода 20.10.10 23:55 Сейчас в теме
(47) (49) я правильно понял, что по умолчанию ускорение модулей отключено ? :o
(0) растолкуйте параметры при перехвате ошибок исполнения и как его правильно подключить. Что-то не взлетает... :(
50. anton.fly7 149 31.07.10 10:36 Сейчас в теме
Скажите, а обработку defcls и обработки самих классов можно как то хранить не в самой конфиге, а внешними?
51. venger 2086 02.08.10 11:41 Сейчас в теме
52. anton.fly7 149 02.08.10 20:32 Сейчас в теме
(51) в мануале http://www.script-coding.info/1cpp.html не нашел, а есть ли перехват события ПослеОбработкиПроведения ?
53. venger 2086 02.08.10 20:44 Сейчас в теме
(52)
в мануале http://www.script-coding.info/1cpp.html не нашел


Вы что - издеваетесь? Там черным по серому описывается как организовать все во внешних файлах;-)))
54. anton.fly7 149 02.08.10 22:24 Сейчас в теме
(53) я имел ввиду событие ПослеОбработкиПроведения
55. venger 2086 03.08.10 10:36 Сейчас в теме
(54) После нет, есть до. Тут в предидущих комментах описано как или в мануале к перехватчику - ссылка в статье...
57. fastwriter 6 09.08.10 09:26 Сейчас в теме
Плюсанул. Статьи, подобные этой, кроме всего прочего, способствуют профессиональному росту широких масс 1ц-программистов. Спасибо авторам.
59. nicxxx 236 02.11.10 09:06 Сейчас в теме
Если грузится еще turbomd.dll, то ее надо грузить до 1С++, иначе - не отлавливается событие ПриЗаписи
60. artbear 1173 02.11.10 10:19 Сейчас в теме
(59) Это ты откуда взял? какая версия turbomd.dll у тебя?
61. nicxxx 236 02.11.10 13:45 Сейчас в теме
62. artbear 1173 02.11.10 14:57 Сейчас в теме
(61) это старая версия. Иди на форум 1cpp.ru, раздел 1С++, ТурбоМД и прочие, в верхних прикрепленных ветках есть спец.ветка.
ЗЫ нужна версия 1.0.0.1 (обрати внимание на номер, это верно) от 2006 года.
63. nicxxx 236 03.11.10 02:51 Сейчас в теме
а, ну я уже обратил внимание :) а почему он меньше в 4 раза стал?
64. nll.jojo 20.01.12 15:21 Сейчас в теме
65. simply1 5 16.11.12 13:05 Сейчас в теме
Тем, кто до сих пор поддерживает 7.7 - описание очень актуально и доходчиво!

Автору - спасибо!

ИХМО, переменная "Док" - лишняя и зря занимает память.
Если убедились, что это документ, то "КонтФормы.ТекущийДокумент()" будет достаточно.
66. vadimlp77 29 24.09.13 17:26 Сейчас в теме
не понял как при перехвате проведения отменить само проведение. Подскажите кто нить, плиз
у меня вот такое

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

что дописать чтобы по условию можно было не проводить док ?
68. artbear 1173 24.09.13 19:47 Сейчас в теме
(66) vadimlp77,
Верни 0 в своей функции Событие_ОбработкаПроведения
и документ не проведется.
69. vadimlp77 29 24.09.13 20:49 Сейчас в теме
(68) artbear, спасибо, уже разобрался по обоим вопросам
67. vadimlp77 29 24.09.13 17:57 Сейчас в теме
подскажите плиз
как в обработке события "ПриОткрытии" определить какая конкретно форма открывается, я имею в виду, что у справочника может быть несколько форм. Мне нужно видеть какая форма открывается. Спасибо.
70. Alex_1066 03.10.14 13:25 Сейчас в теме
Спасибо за статью - понятно и доходчиво и отдельное спасибо всем за комменты...
Оставьте свое сообщение

См. также

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

Коллективная разработка на 1С версии 7.7 и Git

Статья Программист Нет файла v7.7 Россия Windows Бесплатно (free) Инструментарий разработчика Разработка внешних компонент

В данной статье я не буду рассматривать работу с системой контроля версий Git, для этого есть специальные ресурсы, например http://git-scm.com/book/ru. Я только расскажу тем, кто привык и любит Git, подружить старую добрую 7-ку и систему контроля версий Git.

17.09.2013    16222    s.nek    12       

ADODB Строка подключения

Статья Программист Нет файла v7.7 v8 1cv8.cf Windows Бесплатно (free) Инструментарий разработчика Внешние источники данных

Я очень люблю SQL, иногда слишком сильно и поэтому бываю предвзятым. Создать запрос к базе данных из 1С через ADODB не просто, а очень просто. Но есть одно обстоятельство, которое мне всегда мешало жить - это ConnectionString. Конечно, есть сайт http://www.connectionstrings.com/, но...

25.01.2011    48477    awk    13       

Онлайн-курс "Подготовка к экзамену 1С:Эксперт и 1С:Профессионал по технологическим вопросам" с 7 по 24 апреля 2020 г. Промо

На курсе вы получите практические навыки решения задач производительности 1С, в том числе характерных для высоконагруженных информационных систем (более 1000 пользователей). Подготовка к экзамену – только одна из составляющих курса. 70% слушателей приходят за знаниями, которые позволят расти и зарабатывать, делать сложные задачи на крупных проектах.

16450 рублей

Управление ИТ-проектами. Модуль 2: продвинутый онлайн-курс по классическим методам управления проектами. Вебинары проходят с 12 марта по 11 июня 2020 года. Промо

Продвинутый онлайн-курс по классическому управлению ИТ-проектами позволит слушателям освоить инструменты из PMBoK® и 1С:Технологии корпоративного внедрения и научиться их применять для проектов любого масштаба. Курс включает в себя 12 вебинаров и 12 видеолекции, разбор кейсов и рекомендации экспертов по проектам слушателей. Ведущая курса - Мария Темчина.

от 13000 рублей

Удобный просмотр содержания шапки любого документа

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Россия Бесплатно (free) Инструментарий разработчика

При постоянном добавлении реквизитов в документ часто приходится искать подходящее место на форме, что, собственно, занимает много времени. Данное решение позволит выделить часть реквизитов в один блок.

04.02.2010    8854    83    ShEvOvIcH    16       

Сдача регламентированной отчетности из программ 1С Промо

Сдача регламентированной отчетности из программ "1С" во все контролирующие органы без выгрузок и загрузок в другие программы. Для групп компаний действуют специальные предложения.

от 1500 руб.

Редактор формы для 7.7 + Настройка привязок

Инструменты и обработки Программист Компонента, плагин (dll, vbs,..) v7.7 1cv7.md Россия Бесплатно (free) Инструментарий разработчика

Позволяет редактировать форму из предприятия. Настраивать простые привязки формы.

03.07.2009    32820    635    Ёпрст    72       

Загрузка правил обмена в КД 1.0

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v7.7 КД Windows Бесплатно (free) Инструментарий разработчика Обмен через XML 1С7.7<->1C7.7

Обработка позволяет загрузить правила конвертации, сформированные в конфигурации Конвертация Данных 1.0 обратно в конфигурацию

27.05.2009    12689    182    Ctrl P    14       

​​​​​​​CorelDRAW Graphics Suite 2019 Промо

CorelDRAW – пакет профессиональных инструментов для редактирования фотографий, разработки дизайна, создания макетов страниц и векторных иллюстраций

Обработки для просмотра таблиц, списков, справочников, документов, регистров. Групповая обработка справочников и документов.

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v77::ОУ v77::БУ v77::Расчет 1cv7.md Windows Бесплатно (free) Инструментарий разработчика Универсальные обработки Работа с интерфейсом

Для работы мне нужен был ряд возможностей в 1С, которых я не нашёл в обработках в инете, хотя нашёл какие-то обработки. Пришлось написать эти обработки "для себя". Для того, чтобы ими могли пользоваться люди без особых знаний конфигураций 1С, мне пришлось сделать доработки "для людей", что сделало использование гораздо более удобным, в том числе и мне :о). Желаю успехов.

13.05.2009    17830    1034    legcc    16       

INFOSTART MEETUP Krasnodar. 14 февраля 2020 г. Промо

Краснодар станет первым в 2020 году местом, где пройдет региональная встреча IT-специалистов сообщества Инфостарт. Тема мероприятия - управление и технологии автоматизации учета на платформе "1С: Предприятие". Стоимость участия - 5000 рублей. Цена действительна до 26.12.2019.

AddGlobMD (Добавление/изменение кода модулей 1С)

Инструменты и обработки Программист Приложение (exe) v77::ОУ v77::БУ v77::Расчет 1cv7.md Windows Бесплатно (free) Инструментарий разработчика

При использовании AddGlobMD совместно с 1С++ и FormEx, появляются потрясающие возможности по изменению конфигураций 1С! Данная программа позволяет добавлять/изменять код модулей 1C MD, ERT и изменять формулы кнопок, Применяется для случаев, когда надо внести изменения без изменения оригинальных конфигураций и внешних обработок, например: 1) Надо временно для себя добавить код, чтобы пользователей не выгонять. 2) Кто пользуется только типовыми конфигурациями (нет своих программистов), можно без изменения типовой ускорить работу 1С, простой загрузкой 1С++ v3. 3) Удобно для тестов (разные варианты). 4) Добавление в глобальный модуль переменных, процедур требуемых для обработок, написанных сторонними разработчиками. 5) Создавать аддоны к типовым конфигурациям (исправление ошибок или дополнительный функционал).

10.04.2009    11582    395    slavapil    20       

Настройка курсоров на триггерах для 1C 7.7+Selta+Postgresql

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Linux Бесплатно (free) Инструментарий разработчика Внешние источники данных

В новых версиях Selta начиная с 1.0.6 (SQL базы 1С 7.7 в Postgresql) начал применяться более продвинутый подход к SQL-курсорам (пересоздание курсоров основано на триггерах), однако выставлять триггеры на таблицы вручную неудобно. Обработка под 1С77 с использованием 1С++ решает эту небольшую проблему.

07.04.2009    21924    51    Djelf    2       

INFOSTART MEETUP Kazan. 13 марта 2020 г. Промо

Инфостарт продолжает путешествие по России. Следующая остановка - Казань. Тема мероприятия - управление и технологии автоматизации учета на платформе "1С: Предприятие". Ждем всех: докладчиков и участников! Стоимость участия - 5 500 рублей. Цена действительна до 30.01.2020

5 500

SciColorer - расширенный текстовый редактор для конфигуратора 1С

Инструменты и обработки Программист Компонента, плагин (dll, vbs,..) v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free) Инструментарий разработчика

Плагин SciColorer - альтернативный текстовый редактор для конфигуратора 1С на основе компоненты Scintilla с множеством функций современной среды разработки.

05.04.2009    24970    1427    metaeditor    85       

Интерактивный курс Изготовление Интернет-магазина - Выгрузка прайс-листа из 1С:Торговля и склад 7.7

Инструменты и обработки Программист Приложение (exe) v7.7 1С7:ТиС Россия Windows Бесплатно (free) Инструментарий разработчика

Вы узнаете как сделать Интернет-магазин и систему мобильной торговли в 5 шагов. Предназначено для новичков, а также будет интересно для опытных пользователей. Вам не нужны знания HTML, PHP, MySQL и др. чтобы организовать свой Интернет-магазин и начать заниматься электронной коммерцией. Система мобильной торговли предназначена для оптовых организаций всех видов, которая позволяет обрабатывать заявки покупателей напрямую с интернет-сайта.

30.03.2009    10122    306    astracrypt    1       

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Движения документа по регистрам оперативного учета

Инструменты и обработки no Внешняя обработка (ert,epf) v77::ОУ 1cv7.md Windows Бесплатно (free) Инструментарий разработчика Печатные формы документов

Простой, но наглядный отчет, позволяющий просматривать движения документа заданного вида по регистрам оперативного учета. Предназначен для работы в любой конфигурации на платформе "1С:Предприятие 7.7".

21.02.2009    12725    330    OlegTor    15       

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

1С++Класс: ШаблонHTML

Инструменты и обработки Программист Компонента, плагин (dll, vbs,..) v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free) Инструментарий разработчика

1С++Класс: ШаблонHTML Вывод информации по секциям в заранее подготовленный html-файл. CSS для 1С ;)

09.12.2008    7748    69    buzzzard    12       

Открыто голосование за доклады на INFOSTART MEETUP Krasnodar Промо

Выбирайте и голосуйте за самые интересные доклады, лучшие из них попадут в окончательную программу митапа. Голосование продлится до 30 января 2020 года.

Тестирование SQL проблем

Инструменты и обработки Системный администратор Программист Приложение (exe) v7.7 v8 1cv8.cf 1cv7.md Windows Бесплатно (free) Инструментарий разработчика

Предназначена для выявления статистики ожидания блокировок и транзакций. Вещь крайне полезная! НЕ МОЯ!!! Думаю, можно плюсовать, а то теряется она на просторах, а ведь реально - стоящая вещь (а еще лучше писать сюда, насколько удалось улучшить систему)

06.11.2008    38185    1425    vde69    79       

Базовый курс по управлению ИТ-проектами. Курс проходит с 26 февраля по 22 апреля 2020 года. Промо

Отличительная черта курса - органичное сочетание трех вещей: 1.Теория проектного управления (PMI®+Agile Alliance+Российские ГОСТ+Методологии от 1С); 2. Опыт внедрения продуктов 1С (опыт франчайзи и успешных компаний + тренды Infostart Event и Agile Days); 3. Разбор реальных проблем и рекомендации экспертов по проектам слушателей. Мы будем фиксироваться на тех инструментах, которые реально оказываются полезными в практике руководителей проектов внедрения. Ведущая курса - Мария Темчина.

от 11000 рублей

DBEng32 (8.0.1.2, Share) – выполнение прямых запросов и в монопольном режиме для DBFной версии 1С:Предприятие 7.7 в среде 1С++

Инструменты и обработки Программист Компонента, плагин (dll, vbs,..) v7.7 1cv7.md Россия Windows Бесплатно (free) Инструментарий разработчика Разработка внешних компонент

Решение проблемы выполнения прямых запросов в монопольном режиме и исправление ошибки “CodeBase –56” для DBFной версии 1С:Предприятие 7.7. Тестирование проводилось в 1С++ версии 2.0.3.7 с применением “Microsoft OLE DB Provider for Visual FoxPro 9.0” версии 1.2 от 16/05/2008. Время выполнения запроса по методике, описанной в http://infostart.ru/profile/2905/blogs/482/ составляет 28-30 секунд.

23.08.2008    26441    213    hogik    50       

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Анализатор кода 1с v7.7

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free) Инструментарий разработчика

Внешняя обработка для 7.7, позволяющая проанализировать код модуля. Это всего лишь инструмент, дающий возможность разобраться в порядке вызовов процедур и в том, как та или иная переменная получает свое значение. Используется внешняя компонента ActiveMD.

18.07.2008    10133    414    Майкопчанин    27       

[XLS to MXL]

Инструменты и обработки no Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Бесплатно (free) Инструментарий разработчика Разработка внешних компонент Загрузка и выгрузка в Excel

Конвертирование листов Excel в табличный документ 1С (mxl) с сохранением форматирования

10.03.2008    21373    659    Ужас бухгалтера    12