Почему БДРС? Так сложилось, что была и есть задумка сделать более универсальный механизм использования ДРС, урезанный вариант которого и представляет собой эта обработка.
Аббревиатуру БДРС придумал Николай Гусев ( //infostart.ru/profile/18469/ ), совместно с которым всё это и разрабатывается. Большое ему спасибо за придумку ряда процедур/функций, на базе которых «родился» данный вариант БДРС.
Пример практического использование БДРС (реально работающий у реального клиента) -
Задача для БП 3.0:
Есть организация, которая производит строительный песок (намывают из речки, складируют кучами на отведенной территории). Песок реализуется не в месяце производства, для его реализации песок необходимо просеять, погрузить и т.п. Это работы, которые должны быть реализованы вместе с песком, но в выданных «бумажных» документах покупателю показывать работы не нужно. Т.е. в документе реализации выписываются и песок (табличная часть «Товары») и работы (табличная часть «Услуги») по его реализации, а в печатных формах «Счет на оплату покупателю» «ТОРГ-12» и «Счет – фактура» должен выводиться только песок, цена и стоимость реализации которого равна сумме цены и стоимости как самого песка, так и цены и стоимости а работ по его реализации.
Такой, на первый взгляд, сложный способ выписки документов используется для того, чтобы получить выручку по работам, связанных с реализацией в том месяце, когда песок был продан. В этом месяце по этим работам собираются затраты на 20-м счете, соответственно должна быть их реализация. Просто увеличить стоимость продажи нельзя – затраты на 20 счете не закроются. При использовании данного метода клиент получает выручку и себестоимость как по реализованной продукции (неважно в каком периоде она была произведена), так и по работам текущего периода без изменения типовой конфигурации.
Решение задачи:
1. Настраивается ДР в элементе справочника «Номенклатура», с наименованием «Услуга в стоимость товара при печати» и типом справочник «Номенклатура». В этом ДР записываем для услуги товар, вместе с которым эта услуга должна продаваться. В нашем случае используется обработка «Настройка дополнительных реквизитов и сведений», в модуле которой находится БДРС. Шаблон используем из внешнего файла.
2. Создаются ВПФ (например, с помощью ""Конструктор внешних печатных форм"" от SeiOkami опубликованной на ИС) «Счет на оплату покупателю» «ТОРГ-12» и «Счет – фактура» в модуль которых скопирована БДРС, а при создании таблицы документа вставляется простой «кусок» кода (пример для счета на оплату):
в котором через БДРС получаем значение ДР и при его наличии изменяем результирующую таблицу. Время на создание ВПФ, создание и заполнение ДР в ИБ сокращается в разы. Имея эти файлы можно буквально за считанные минуты настроить работу по описанной схеме в базе БП 3.0 у любого клиента. Изменений типовой конфигурации (что важно) не требуется.
Файлы ВПФ и шаблона настройки реквизитов выложены бесплатно, как пример дальнейшего распространения БДРС на ИС. Для работы этих ВПФ необходимо приобрести БДРС, вставить в модуль ВПФ код БДРС и с помощью настройки из внешнего файла заполнить ДР для номенклатуры. Регистрируем ВПФ в дополнительных обработках – и можно работать.
Описание библиотеки работы с дополнительными реквизитами и сведениями (БДРС)
1. Назначение
БДРС предназначена для записи и чтения дополнительных реквизитов и сведений в конфигурациях на библиотеке стандартных подсистем (далее БСП) версий 2.2.3.*. Разрабатывалась в типовой конфигурации БП 3.0 релиз 3.0.33.20. Служит для облегчения написания внешних отчетов, обработок или печатных форм для конфигураций на поддержке. Может быть встроена в измененную конфигурацию – для этого в ней создается общий модуль с процедурами и функциями из модуля обработки «Настройка дополнительных реквизитов и сведений».
2. Описание поставки
БДРС поставляется в виде внешней обработки «Настройка дополнительных реквизитов и сведений» (далее обработка), в модуле которой находится сама библиотека, процедуры и функции которой начинаются с комментария:
//ТЕКСТ МОДУЛЯ ОБЪЕКТА ДЛЯ КОПИПАСТА В "СВОЮ" ОБРАБОТКУ>>>НАЧАЛО>>>
И заканчиваются комментарием:
//ТЕКСТ МОДУЛЯ ОБЪЕКТА ДЛЯ КОПИПАСТА В "СВОЮ" ОБРАБОТКУ<<<КОНЕЦ<<<.
Если БДРС встраивается в конфигурацию, процедуру «БДРС_ПолучитьДанныеИзМакета» вставлять не нужно – это служебная процедура для быстрой настройки ДРС через макеты обработки или внешние файлы настройки.
В модуле формы обработки расположены процедуры и функции для первоначального заполнения дополнительных реквизитов (далее ДР) и дополнительных сведений (далее ДС), которые будут использоваться в информационной базе (далее ИБ). Эти же процедуры и функции можно использовать в качестве примеров использования БДРС.
Обработка содержит шаблоны, в которые разработчик может прописать состав ДР и ДС, которые надо зарегистрировать в ИБ. Использование этого инструмента не обязательно. Он нужен для первоначальной регистрации ДРС, которые в принципе можно регистрировать и при начале работы создаваемой внешней печатной формы или отчета (в процедуре ПриСозданииНаСервере()). Обработка позволяет предварительно настроить и заполнить значения ДР и ДС для выбранных элементов справочников и документов.
Использование встроенных шаблонов не обязательно, в качестве шаблона можно использовать внешний файл формата mxl, установив флаг «Использовать внешний шаблон».
3. Описание обработки
При первом запуске обработки (см. рис. 1) в ИБ ничего не записывается, пользователь имеет возможность выбрать «Вид настройки», по которому будет произведено первоначальное заполнение плана видов характеристик «Дополнительные реквизиты и сведения» и справочника «Наборы дополнительных реквизитов и сведений». Настройка может быть выбрана из встроенных в обработку шаблонов или из внешнего файла формата mxl заданной структуры, описанной в шаблоне, вызываемом по кнопке «Создать файл шаблона» (Рис. 2). Работа с ДРС через шаблон обусловлена «жизненной необходимостью» обеспечить разработчику наличие и точное описание ДРС, которые затем им будут использоваться в коде.
Рисунок 1.
Рисунок 2.
Описание шаблона:
В первой строке записаны имена заголовков колонок таблицы для настройки , без пробелов и спец. символов - все названия заголовков предназначены для обработки настройки ДРС, изменять их нельзя – в противном случае обработка не сможет «прочитать» шаблон.
Имена колонок предназначены для хранения следующей информации:
- ДРС - строка «ДР» - дополнительный реквизит (ДР) или «ДС» - дополнительно сведение (ДС);
- ИмяОбъектаДРС - идентификатор объекта конфигурации, например, «НоменклатурныеГруппы»;
- ИмяДРС - строка с именем ДР или ДС, как её будет видеть пользователь (не должна содержать спец. Символов – это ограничения только для работы с ДРС через данную обработку, для правильной работы самой БДРС строка может быть любой);
- ТипДРС - строка с названем типа устанавливаемого ДР или ДС, например, «Булево», «Строка» или имя (идентификатор, как он задан в конфигураторе) справочника из разрешенных к выбору в ДР или ДС;
- ДлинаДРС - длина строкового или числового ДР или ДС;
- ТочностьДРС - точность числового ДР или ДС.
Кнопка «Открыть список ДРС» открывает форму списка плана видов характеристик «Дополнительные реквизиты и сведения» для просмотра зарегистрированных ДРС.
Работа с БДРС начинается после выбора вида настройки (поле «Вид настройки:» для встроенного шаблона или «Файл шаблона:» для внешнего файла) (Рис. 3 - настройка из встроенного шаблона).
Рисунок 3.
После выбора варианта настройки обработка записывает указанные в шаблоне ДР и ДС в план видов характеристик и справочник; так же становятся доступными элементы управления табличной частью обработки, куда выводятся (если есть в ИБ) строки с установленными ДР и ДС.
В подменю «Создать» устанавливаются кнопки добавления соответствующих ДРС. Выбор колонки «Ссылка» в строке табличной части открывает соответствующий документ или элемент справочника, к которому установлен ДР или ДС, выбор в остальных колонках – форму редактирования ДРС в соответствующей строке. На рисунке 4 показаны установленный ДР и создание нового:
Рисунок 4.
Списком установленных ДРС можно управлять с помощью соответствующих кнопок. При необходимости можно удалить установленные ДРС, причем удаление производится по отобранным строкам.
Есть особенность работы с ДС – для их удаления можно открыть реквизит для редактирования и очистить его значение. После записи ДС будет очищено. Удалить ДР таким способом не получится – запись в табличной части «Дополнительные реквизиты» после очистки значения реквизита останется до её удаления через эту обработку или удаления из формы документа (элемента справочника). Рис. 5 - список ДРС с выделенными строками.
Рисунок 5.
На рисунке 6 пример заполнения ДРС по настройке из файла:
Рисунок 6.
На рисунке 7 показано редактирование ДРС из формы элемента справочника (ДР и ДС установлены настройками из встроенных шаблонов):
Рисунок 7.
Здесь наглядно можно увидеть отличие ДР от ДС:
- ДР выводятся непосредственно в форму элемента справочника;
- ДС доступны по нажатию кнопки справа от "Записать" в отдельном окне.
Обработка может быть зарегистрирована в ИБ стандартным способом или открываться через "Файл" – "Открыт"ь.
4. Описание БДРС
Обработка не является необходимым условием работы с БДРС, она предназначена для облегчения первоначальной установки и заполнения ДРС в ИБ. Использование БДРС возможно и без наличия этой обработки и шаблонов первоначального заполнения, главное - наличие в модуле внешней обработки (или в общем модуле) процедур и функций, указанных в описании поставки.
Параметры, используемые при вызове основных процедур и функций БДРС, стандартизованы. Назначение параметров выше в описании шаблона.
Параметры ДРС, ПустаяСсылка, ИмяДРС, ТипДРС обязательны в любом случае, ДлинаДРС – обязателен для типов ДРС «Строка» и «Число» , ТочностьДРС – обязателен для типа «Число».
Основные команды БДРС:
- БДРС_НастроитьДРС( ДРС, ПустаяСсылка, ИмяДРС, ТипДРС, ДлинаДРС, ТочностьДРС) - Процедура первоначального заполнения ДРС.
Устанавливает ДР или ДС в ПВХ «ДополнительныеРеквизитыИСведения» и справочник «НаборыДополнительныхРеквизитовИСведений».
Использование процедуры не является обязательным – при первом вызове записи или чтения ПВХ и справочник заполнятся автоматом. БДРС_НастроитьДРС – следует вызывать, если значения ДРС в ИБ надо установить до начала их использования, например во ВПФ. При выполнении этой процедуры попутно проверяется и, в случае необходимости, устанавливается в Истина значение константы «ИспользоватьДополнительныеРеквизитыИСведения».
- БДРС_ЗаписатьДРС( ДРС, Ссылка, Значение, ИмяДРС, ТипДРС, ДлинаДРС, ТочностьДРС) –
Процедура записи ДРС. ДР записывается в табличную часть «ДополнительныеРеквизиты» справочника или документа. ДС в регистр сведений «ДополнительныеСведения». Попытка записать существующий ДРС приведет к его перезаписи. Если соответствующие ДР или ДС не были зарегистрированы в ПВХ и справочнике – они будут там зарегистрированы, а ДР или ДС записаны.
- БДРС_ПолучитьЗначениеДРС( ДРС, Ссылка, ИмяДРС, ТипДРС, ДлинаДРС, ТочностьДРС) –
Функция, возвращающая ДР или ДС для переданной в параметрах ссылке. Ссылка – обязательный параметр для вызова данной функции. Аналогично процедуре БДРС_ЗаписатьДРС в любом случае зарегистрирует ДРС в ИБ.
Дополнительные команды (ограниченное использование):
- БДРС_ПолучитьСсылкуПоДополнительномуРеквизиту( ИмяДРС, ЗначениеДР, ИмяОбъектаДРС, ТипДРС, ДлинаДРС, ТочностьДРС) –
Функция возвращает ссылку по ДР, имеет смысл только в случае, если в ИБ есть только одна запись соответствующего ИмяОбъектаДРС типа с данным значение БР. ЗначениеДР – обязательный реквизит. Если в ИБ существует несколько аналогичных записей, функция вернет ссылку на первую найденную.
- БДРС_ПолучитьСсылкуПоНаименованиюИЗначениюДопСвойства( ИмяДРС, Значение) –
Функция, аналогичная ПолучитьСсылкуПоДополнительномуРеквизиту, только работает с ДС. Возвращает ссылку на объект, для которого записано ДС.
Следует отметить, что все процедуры и функции БДРС объявлены со словом Экспорт, поэтому доступны так же, как и основные и дополнительные команды.
Примеры использования команд БДРС можно посмотреть в модуле формы обработки.