Доброго времени суток, уважаемые коллеги.
Иногда при разработке новых объектов метаданных случается ситуация, когда разработчик сомневается в правильности каких-то расчетов. Постановщики же задачи из числа мирных пользователей не всегда могут точно сформулировать то, что они хотят и зачастую понимание начинает приходить только когда уже начинается работа и именно в рабочей базе. Не знаю почему так, но иногда бывает (и это хорошо, что у Вас не бывает). Эта статья для тех, у кого бывает.
В 1С 7.7 была интересная возможность - заменить модуль формы или модуль объекта на текст из каталога ExtForms.
Это позволяло "на ходу" вносить изменения, не выгоняя пользователей из базы.
В 8.3 есть замечательнейший механизм расширений, который эту задачу реализует ещё лучше.
А если используется обычное приложение, да ещё с режимом совместимости (ну не все пока перешли на ERP), да пользователей не всегда хочется выгонять, а пересчитать нужно срочно (концепция вдруг поменялась - исключительно вымышленная ситуация).
Так вот, для таких случаев есть простой и не новый механизм.
Заключается он в том, что некоторую часть расчетов можно поместить во внешнюю обработку и вполне себе ее оттуда заполучить как из общего модуля.
Предположим, у нас есть внешняя обработка, которая "вживлена" в УПП.
В модуле этой обработки есть экспортная (!) функция, в которой "зашит" некий расчет
Функция РасчитатьВыпуск(НачДата,КонДата,Оргазация,Подразделение) Экспорт
.................
Итак, например, в модуле документа нам нужно посчитать именно этот "неустаканившийся" выпуск.
Находим нашу обработку.
внОбработка = Справочники.ВнешниеОбработки.НайтиПоКоду("000000473");
Сохраним ее двоичные данные (по сути это наша обработка), например, в каталог временных файлов
ПутьКФайлу = КаталогВременныхФайлов()+"врВнешняяОбработка.epf";
ДвоичныеДанные = внОбработка.ХранилищеВнешнейОбработки.Получить();
Если НЕ ДвоичныеДанные = Неопределено Тогда
Попытка
ДвоичныеДанные.Записать(ПутьКФайлу);
ФормаОбработки =ВнешниеОбработки.ПолучитьФорму(ПутьКФайлу);
ФормаОбработки.Открыть();
Результат = ФормаОбработки.РасчитатьВыпуск(НачДата,КонДата,Оргазация,Подразделение);
ФормаОбработки.Закрыть();
Исключение
КонецПопытки;
КонецЕсли;
Через двоичные данные получаем саму обработку, и сохраняем ее;
Открываем как обычную обработку. Причем, как в мультике "Следствие ведут колобки" - "Слон не нужен- нужен бумага" и нам сама обработка не нужна нужен момент обращения к ней. В момент открытия спокойно обращаемся к экспортным процедурам и функциям, расположенным в модуле этой обработки.
Вот такой простой способ, абсолютно не претендующий на новизну.