Мухи и котлеты


"Мухи - отдельно, котлеты - отдельно". Статья и внешняя обработка 7.7

   С чем может ассоциироваться название статьи?
   Ну, наверно, мухи - насекомые - жуки - ошибки программы; котлеты, соответственно, еда, пища, - наполнение - сама программа.
   А можно и так: мухи - это код, котлеты - данные. Код сидит на данных, и зачастую очень сильно с ними перемешан. :)))                     

   Значит, будем заниматься "дезинфекцией", отделять код и данные, изменяя их общую дислокацию.

   Этим мы достигаем несколько целей:

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

   Код, понятное дело, оставим на его родной закладке "Модуль". А вот данные (постоянные), описанные в коде, как то: строковые, числовые, типа "дата" "константы", вспомогательные и на форме диалога списки значений, таблицы значений, описания их структур можно вынести в другое место,  куда нибудь, совсем недалеко, по-соседству, например, на закладку "Диалог" в определенный слой формы.
Или, нет... как-то там проблематично хранить сами данные, только если зарезервировать под это сохранение настройки отчета, или всё хранить в реквизитах формы типа "Текст". Ну, тогда пойдем другим путем, направо. А справа у нас таблицы-макеты. Тут, вроде, все наглядно и удобно.  
   Таблица-макет доступна в любом исполняемом контексте: ГлобальныйМодуль - общие таблицы,
локальные модули - встроенные макеты-таблицы.
   Границы использования хранимых данных расширяются до границ текущего контекста, без объявления дополнительных общих переменных, - в любой процедуре (насколько это возможно без ущерба производительности) обращаемся к таблице-макету и получаем их заново.
   Также, встроенную таблицу-макет можно легко скрыть с глаз долой, во внешний файл, без ущерба для ее использования, - это, м.б. определенным способом  защиты (с натяжкой, конечно) кода, который, при этом остается открытым, доступным для изменений, но который без прилагаемой таблицы-макета работать не будет.

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

   Для хранения данных используем атрибут ячеек таблицы-макета "Текст", для адресации ячеек удобным текстовым представлением - наименованиями областей и секций. Можно было бы использовать  метод Расшифровка(), который бОльше подходит для хранения сложных типов данных, однако, в большинстве своем, атрибута "Текст" хватит (с преобразованием чисел и дат) и на описания структур и на начальную постоянную информацию.
 
   В прилагаемой к статье обработке-примере за получение данных отвечает претендующая на универсальность процедура ПолучитьДанныеИзТаблицы(), адресация и способ хранения данных с примерами описан в таблице-макете "Котлета". :)
 
   Замечание. Встроенные таблицы-макеты м.б. недоступны в теле функций  и процедур, вызываемых из формул диалога, т.е. метод ИсходнаяТаблица() их может и не увидеть. Варианты решения этой проблемы: использовать общие таблицы, использовать внешние макеты, использовать встроенные макеты с ложным закрытием формы, встроенные макеты определить заранее. 

Изменения от 12.03.2009

Теперь в таблице можно хранить объекты ИБ. Добавлены обработка для формирования таких таблиц и еще одна, -  "Журналы документа" родившаяся в результате отладки.

Успехов в реализации Ваших идей!

-