автор статьи: Владимир Камышников
Источник: http://hare.ru/
- Хранение нескольких табличных частей в одной. Данный метод имеет только один плюс, "1С-совместимо". Основной недостаток часто разные табличные части сильно отличаются форматом и составом полей;
- Хранение дополнительной информации путем "сворачивания" данных в строку. Никаких плюсов метод не имеет. Минусы очевидны: возможное нарушение ссылочной целостности;
- Хранение табличных частей вне информационной базы. Как и в предыдущем способе гарантировать, что восстановленная ссылка будет корректной, нельзя;
- Наконец есть правильный способ хранение табличных частей в служебных документах.
- делать практически неограниченное число табличных частей;
- избавиться от задач отображения таблицы значений;
- конфигурации остаться 1С-совместимой;
- трудозатраты на создание табличной части в типовом случае составляют около 5 (!) минут;
- ссылочная целостность отрабатывается системой;
Итак, рассмотрим технологию организации второй табличной части документа (пример в виде маленькой конфигурации приложен к статье, ссылка внизу страницы).
Первый шаг создание служебного документа. Он не должен проводится, не должен задействовать компоненты платформы и, лучше всего, не должен принадлежать никакому журналу.
Далее, в табличной части этого документа создаем необходимые реквизиты. Даже те, которые не должны отображаться. В поле "Синоним" указываем то название, которое должно отображаться в колонке. На рисунке 1 имеется реквизит табличной части "ОбъемПриДаннойТемп", который в колонке таблицы будет отображаться как "V при tc".
В поле "Комментарий" можно указывать команды форматирования таблицы (необычная фича, да?
- "Ширина=ХХХ;" установить ширину в ХХХ;
- "Скрыть;" скрыть колонку;
- "Иконка;" отображать иконки в колонке;
|
После этих операций можно смело утверждать, что с форматированием отображаемой таблицы мы справились.
Добавляем в родительский документ реквизит типа "Документ", и связываем его с только что созданным служебным документом. Через этот реквизит впоследствии мы сможем работать с дополнительной табличной частью.
|
В форму "главного" документа добавляем таблицу значений, при помощи которой будем отображать дополнительную табличную часть, и три кнопки стандартные "добавить-редактировать-удалить". При желании можно определить и другие операции со строками дополнительной табличной части копировать строку, и т.д.
|
Теперь нужно вставить необходимый код в глобальный модуль (см. конфигурацию-пример).
Для манипуляций с табличной частью в родительский документ необходимо добавить всго лишь три (!) строки:
Процедура ПриОткрытии() глХранилищеОткрыть(Контекст,ХранилищеПотери,ТаблицаПотерь); КонецПроцедуры |
В процедуру передаются три параметра Контекст, реквизит родительского документа, в котором содержится ссылка на служебный документ, и таблица значений на форме, которая отображает табличную часть.
При открытии происходит форматирование таблицы и заполнение её данными.
При закрытии происходит попытка удаления служебного документа (при необходимости). Второй параметр такой же, как и в первой функции:
Процедура ПриЗакрытии() глХранилищеУдалить(Контекст,ХранилищеПотери); КонецПроцедуры |
Ну и собственно сохранение табличной части. Параметры такие же как и в первой процедуре:
Процедура ПриЗаписи() глХранилищеСохранить(Контекст,ХранилищеПотери,ТаблицаПотерь); КонецПроцедуры |
Готово. Ну, за исключением ввода данных в таблицу. Для этого я позаимствовал из типовой конфигурации ИТРП универсальную процедуру ввода в таблицу значений (см. пример). Можно взять какую-нибудь другую универсальную процедуру ввода данных в ТЗ, или написать свою собственную кому как больше нравится.
Вот и все
Восьмерка лишается одного из своих основных козырей?
Начать дискуссию