Во многих типовых конфигурациях от 1С используются понятия дополнительных свойств и категорий объектов.
Данные категории позволяют, без внесения дополнительных изменений в конфигурацию, сущетвенно расширить возможности системы. Но в данной статье речь несколько о ином. А именно, как с помощью данных механизмов, ПРОГРАММНО расширить функциональность конфигурации с внесением МИНИМАЛЬНОГО количества изменений.
Для примера рассмотрим две прикладных задачи реализованные в конфигурации БП КОРП 2.0:
Задача 1. При редактировании документа "Списание с расчетного счета", необходимо, в зависимости от индивидуальных настроек пользователя, включать (отключать) автозаполнение поля "Назначение платежа".
Задача 2. При проведении множества расчетных документов, в зависимости от дополнительного свойства документа "Отражать в УСН", формировать (или отключать формирование) проводок по регистрам учета УСН.
Методика решения задач (на конфигурации Бухгалтерия предприятия, редакция 2.0 (2.0.29.9))
Предварительно, для решения обоих задач, внесем в нашу конфигурацию небольшую доработку - новый общий модуль "РаботаСДополнительнымиХарактеристикамиОбъектов". Сделаем это путем объединения основной конфигурации с поставляемым файлом.
Решение задачи №1
- находим наиболее удобное место для внесения изменений в конфигурацию. По-моему, это процедура "СформироватьНазначениеПлатежа" модуля формы документа "СписаниеСРасчетногоСчета". Данная процедура запускается на исполнение при изменении вида операции документа, либо договора контрагента.
- теперь, в самом начале процедуры добавим следующую вставку
//-------------------
// Автоформирование назначения платежа будет опционально
СписокХарактеристикПользователя = Новый СписокЗначений;
СписокХарактеристикПользователя.Добавить("ХарактеристикаРедактироватьНазначениеПлатежа", "Авторедактирование назначения платежа",ЛОЖЬ); // Параметр Ложь - не устанавливать флаг при автодобавлении характеристики
СтруктураХарактеристикПользователя = РаботаСДополнительнымиХарактеристикамиОбъектов.ПолучитьЗначениеБУЛЕВОЙХарактеристикиПользователя(СписокХарактеристикПользователя);
Если НЕ СтруктураХарактеристикПользователя.ХарактеристикаРедактироватьНазначениеПлатежа Тогда
Возврат;
КонецЕсли;
//-------------------
При исполнении данного кода, будет произведен поиск дополнительной характеристики текущего пользователя "Авторедактирование назначения платежа". В случае ее отсутствия, вышеупомянутая характеристика будет создана автоматически. Третий параметр функции определяет необходимость автоматической установки флага.
На основании значения данной характеристики, принимаем решение о выполнении дальнейших действий по редактированию поля "Назначения платежа"
Проверка функционирования:
- Открыть любой документ "Списание с расчетного счета", изменить Вид операции. Назначение платежа меняться не должно.
- Открыть Сервис - Настройки пользователя. В группе СПЕЦИАЛИЗИРОВАННЫЕ, установить флаг "Авторедактирование назначения платежа". Повторить действия по редактированию документа "Списание с расчетного счета". Назначение платежа должно измениться.
Таким образом, задача решена с минимальными трудозатратами...
Решение задачи №2
- находим наиболее удобное место для внесения изменений в конфигурацию. По-моему, это функция "СформироватьСтруктуруШапкиДокумента" общего модуля конфигурации "ОбщегоНазначения". Данная процедура запускается на исполнение при проведении расчетных документов. Заменяем строку 1089 на следующую вставку
// -------------------------------------------------------
// Необходимо учесть, что движения по УСН (доходы) отражаются, в некоторых организациях,
// не по всем документам. Это определяется:
// 1. дополнительной характеристикой организации
// 2. дополнительной характеристикой документа
// 1. определяем: используется ли по данной организции особый порядок учета УСН
ДополнительноеСвойство = РаботаСДополнительнымиХарактеристикамиОбъектов.НайтиСоздатьДополнительнуюКатегориюОбъекта(ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Организации, "Особый порядок УСН");
// Проверим, установленно ли дополнительное свойство Организации "Особый порядок УСН" (должно соответствовать принятой учетной политике)
ОсобыйПорядокУСН = РаботаСДополнительнымиХарактеристикамиОбъектов.ПроверитьУстановкуДополнительногоСвойстваТипаБулево(СтруктураШапкиДокумента.Организация, ДополнительноеСвойство);
// Массив определяет перечень документов с условным движением регистра "Книга учета дох.-расходов"
МассивУсловныхДокументов = Новый Массив;
МассивУсловныхДокументов.Добавить("ПоступлениеНаРасчетныйСчет");
МассивУсловныхДокументов.Добавить("СписаниеСРасчетногоСчета");
МассивУсловныхДокументов.Добавить("ПриходныйКассовыйОрдер");
МассивУсловныхДокументов.Добавить("РасходныйКассовыйОрдер");
Отражать_в_УСН = Истина;
Если ОсобыйПорядокУСН И НЕ МассивУсловныхДокументов.Найти(СтруктураШапкиДокумента.ВидДокумента) = Неопределено Тогда
ДополнительноеСвойство = РаботаСДополнительнымиХарактеристикамиОбъектов.НайтиСоздатьДополнительнуюКатегориюОбъекта(ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Документы,"Отражать в УСН");
// 2. Проверим, установленно ли дополнительное свойство документа "Отражать в УСН"
Отражать_в_УСН = РаботаСДополнительнымиХарактеристикамиОбъектов.ПроверитьУстановкуДополнительногоСвойстваТипаБулево(СтруктураШапкиДокумента.Ссылка, ДополнительноеСвойство);
КонецЕсли;
СтруктураШапкиДокумента.Вставить("ОтражатьВНалоговомУчетеУСНДоходы", Отражать_в_УСН);
// -------------------------- центр(-)-----------------------------
Проверка функционирования:
- По организации, применяющей упрощенную систему налогообложения, провести любой документ "Поступление на расчетный счет".
- После проведения, у организации появился дополнительный реквизит "Особый порядок УСН" (см. рис. 2). Установим галочку
- У документа "Поступление на расчетный счет" появился дополнительный реквизит "Отражать в УСН" (см. рис.3). Его пока не устанавливаем.
- еще раз перепроведем выбранный документ "Поступление на расчетный счет". При этом, записи в книгу доходов не производится (см. рис 4)
- Если у документа установить флаг дополнительного реквизита "Отражать в УСН" (см. рис 5) и перепровести документ, то происходит запись в регистр учета УСН. (см. рис 6)
Таким образом, задача решена с минимальными трудозатратами