pvase писал(а) 29. Июня 2011 :: 12:45:Есть задача, сделать 2 разных модуля проведения, в зависимости от даты документа? Может есть какие уже решения? Переписывать все модули как не хочеться, было бы хорошо, просто, чтобы подгружать Или модуль 1 или Модуль 2 в Зависимости от значения ДатаДок.
(Под модулем документа подразумевается все процедуры и функции модуля, а также предопределенные ОбработкаПроведения и ОбработкаУдаленияПроведения).
Мне довелось искать ошибку при проведении в какой-то из типовых конфигураций. В конце концов была задействована функция из глобального модуля строк эдак на 1000, изобилующая различными ответвлениями по условиям. Условия, в основном, строились на анализе реквизитов проводимого документа.
Я вспомнил это потому, что пока добирался домой от клиента в голове сложилась технология, которую я хочу предложить pvase для решения его задачи.
Итак:
1. В справочнике МодулиПроведения со структурой:
- имя МД или блока МД (строка, 30, 0);
- тип документа (строка, 30, 0);
- текст МД или блока МД (неограниченная строка);
- дата МД (дата);
- условия применения (неограниченная строка)
хранить МД, очищенные от всяких условий. Условия применения этого модуля описать в пятом реквизите. Таким образом модули очень "облегчатся" и уже не будут сильно тормозить при компилировании. На самом деле вы сами удивитесь, насколько небольшая часть гигантских функций реально отрабатывает в реальных условиях!
Но хочу предложить самым смелым пойти дальше: разбить реальные, очищенные МД на типовые составляющие, которые "склеивать" по мере необходимости. Тут уже - простор фантазии.
2. Создать примитивненький редактор, позволяющий изменить МД, хранящийся в справочнике (собственно, это просто форма элемента).
3. В модуле проведения перед всеми существующими уже строками записать заветное #ЗагрузитьИзФайла. Наиболее педантичным - предлагаю дальше в МД описать все модули, хранящиеся в справочнике, имеющие отношение к данному документу со всеми условиями их применения (своего рода справка).
4. В глобальнике создать функцию, типа МоеПроведениеДокумента() и применить его везде вместо Провести().
Кажется, ничего не упустил. Если что - подредактирую позже.