//****************************************************************************** // ПолучитьТаблицуМетодов(Информатор, СсылкаКонтекст) // // Параметры: // Информатор, СсылкаКонтекст // // Возвращаемое значение: // ТаблицаЗначений // // Описание: // Вовзращат таблицу методов // Функция ПолучитьТаблицуМетодов(Информатор, СсылкаКонтекст) Результат = Информатор.ПолучитьТаблицуМетодов(СсылкаКонтекст); Результат.НоваяКолонка("Индекс"); Результат.ВыбратьСтроки(); Пока Результат.ПолучитьСтроку() = 1 Цикл Результат.Индекс = НРег(СокрЛП(Результат.NameEng)); КонецЦикла; Возврат Результат; КонецФункции // ПолучитьТаблицуМетодов() //****************************************************************************** // ПолучитьНомерПоследнейСтрокиТелаМодуля(Текст) // // Параметры: // Текст // // Возвращаемое значение: // Число // // Описание: // Возвращает номер последней строки тела модуля (до блока инициализации) // Функция ПолучитьНомерПоследнейСтрокиТелаМодуля(Текст) Результат = СтрКоличествоСтрок(Текст); Пока Результат >= 1 Цикл СтрокаМодуля = СтрПолучитьСтроку(Текст, Результат); Стр = НРег(СокрЛП(СтрЗаменить(СтрЗаменить(СтрокаМодуля, " ", ""), СимволТабуляции, ""))); Если (Лев(Стр, 14) = "конецпроцедуры") или (Лев(Стр, 12) = "конецфункции") Тогда Прервать; КонецЕсли; Результат = Результат - 1; КонецЦикла; Возврат Результат; КонецФункции // ПолучитьНомерПоследнейСтрокиТелаМодуля() //****************************************************************************** // Событие_ОбработкаПроведения(СсылкаКонтекст, Параметр) // // Параметры: // СсылкаКонтекст, Параметр // // Возвращаемое значение: // Число // // Описание: // Вызывается при проведении документа // Функция Событие_ОбработкаПроведения(СсылкаКонтекст, Параметр) Экспорт Результат = 1; //--------------------------------------------------------------------------------------------- // Приходится использовать вот такую странную конструкцию. // Побочный эффект - невозможность прерывания проведения Информатор = СоздатьОбъект("Информатор"); ТаблицаМетодов = ПолучитьТаблицуМетодов(Информатор, СсылкаКонтекст); НомерСтроки = 0; //--------------------------------------------------------------------------------------------- // Если есть родной метод ОбработкаПроведения, то вызовем его Если ТаблицаМетодов.НайтиЗначение("обработкапроведения", НомерСтроки, "Индекс") = 1 Тогда КоличествоПараметров = ТаблицаМетодов.ПолучитьЗначение(НомерСтроки, "NParams"); ИсходныйТекстМодуля = Информатор.ПолучитьТекстМодуля(СсылкаКонтекст); НомерПоследнейСтрокиТелаМодуля = ПолучитьНомерПоследнейСтрокиТелаМодуля(ИсходныйТекстМодуля); //--------------------------------------------------------------------------------------------- // Сначала тело модуля ТекстМодуля = ""; Для НомерСтрокиМодуля = 1 По НомерПоследнейСтрокиТелаМодуля Цикл ТекстМодуля = ТекстМодуля + СтрПолучитьСтроку(ИсходныйТекстМодуля, НомерСтрокиМодуля) + РазделительСтрок; КонецЦикла; //--------------------------------------------------------------------------------------------- // Добавим к нему собственный метод ТекстМодуля = ТекстМодуля + " | Функция __ОбработкаПроведения__(Параметр) Экспорт | СтатусВозврата(1); | |"; Если КоличествоПараметров = 1 Тогда ТекстМодуля = ТекстМодуля + " | ОбработкаПроведения(Параметр); |"; Иначе ТекстМодуля = ТекстМодуля + " | ОбработкаПроведения(); |"; КонецЕсли; ТекстМодуля = ТекстМодуля + " | Возврат СтатусВозврата(); | КонецФункции |"; //--------------------------------------------------------------------------------------------- // И добавим блок инициализации модуля Для НомерСтрокиМодуля = НомерПоследнейСтрокиТелаМодуля + 1 По СтрКоличествоСтрок(ИсходныйТекстМодуля) Цикл ТекстМодуля = ТекстМодуля + СтрПолучитьСтроку(ИсходныйТекстМодуля, НомерСтрокиМодуля) + РазделительСтрок; КонецЦикла; Модуль = СоздатьОбъект("ВыполняемыйМодуль"); Модуль.НазначитьКонтекст(СсылкаКонтекст); Модуль.УстановитьМодуль(ТекстМодуля); Если Модуль.КомпилироватьМодуль() = 0 Тогда Предупреждение("Неудачная попытка компиляции модуля!"); Возврат 0; КонецЕсли; Модуль.ВыполнитьМодуль(); Модуль.ПрисоединитьТекущийМодуль(); Результат = Модуль.__ОбработкаПроведения__(Параметр); КонецЕсли; Возврат Результат; КонецФункции // Событие_ОбработкаПроведения()