При разработке и доработке конфигурации «1С:Управление нашей фирмой» (УНФ) специалисты часто сталкиваются с ситуацией, когда добавление новых элементов в свойство Параметры выбора реквизита формы или объекта в Конфигураторе не приводит к ожидаемому результату в режиме «1С:Предприятие». Например, при попытке разрешить выбор счета с типом Кредиторы или Дебиторы в документе «Прочие затраты (расходы)» список доступных счетов в окне выбора остается ограничен стандартными значениями.
Разберем подробнее, почему возникают подобные ограничения платформы 1С:Предприятие и какими программными способами можно корректно настроить нужный отбор счетов.
Проанализируем поведение платформы и архитектуру прикладных решений на базе управляемых форм:
ПриСозданииНаСервере самой формы выбора. Если форма принимает параметр Отбор, переданный из контекста вызова или сформированный жестко в коде, статические настройки из свойств элемента формы в Конфигураторе перекрываются.ОбработкаПолученияДанныхВыбора в модуле менеджера. В этом случае платформенный отбор по свойству элемента формы игнорируется в пользу алгоритма, прописанного программистом.Кредиторы и Дебиторы предусматривают ведение полнотекстовой аналитики в разрезе контрагентов и договоров (субконто). В документе затрат соответствующие реквизиты аналитики расчетов могут отсутствовать, поэтому типовая логика системы ограничивает выбор таких типов счетов.Выясним, как обойти ограничение через программный код. Наиболее надежный способ — перехватить событие выбора поля формы Корреспонденция и сформировать структуру параметров с массивом допустимых типов счетов.
Для этого выполним следующие шаги:
Корреспонденция создадим событие НачалоВыбора.СтандартнаяОбработка = Ложь.ТипыСчетов.ОткрытьФорму.Посмотрим на пример реализации данного кода:
&НаКлиенте
Процедура КорреспонденцияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
МассивТипов = Новый Массив;
МассивТипов.Добавить(ПредопределенноеЗначение("Перечисление.ТипыСчетов.Кредиторы"));
МассивТипов.Добавить(ПредопределенноеЗначение("Перечисление.ТипыСчетов.ПрочиеДоходы"));
МассивТипов.Добавить(ПредопределенноеЗначение("Перечисление.ТипыСчетов.ПрочиеОборотныеАктивы"));
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Новый Структура("ТипСчета", МассивТипов));
ОткрытьФорму("ПланСчетов.Управленческий.ФормаВыбора", ПараметрыФормы, Элемент);
КонецПроцедуры
Чтобы оставить основную конфигурацию на полной поддержке поставщика, рекомендуется вынести логику в Расширение конфигурации. Для этого можно перехватить процедуру ПриСозданииНаСервере формы документа или формы выбора плана счетов.
Рассмотрим вариант доработки параметров выбора элемента формы в расширении с помощью аннотации &После:
&После("ПриСозданииНаСервере")
Процедура Расширение_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
МассивТипов = Новый Массив;
МассивТипов.Добавить(ПредопределенноеЗначение("Перечисление.ТипыСчетов.Кредиторы"));
МассивТипов.Добавить(ПредопределенноеЗначение("Перечисление.ТипыСчетов.ПрочиеДоходы"));
НовыйПараметр = Новый ПараметрВыбора("Отбор.ТипСчета", МассивТипов);
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(НовыйПараметр);
Элементы.Корреспонденция.ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметров);
КонецПроцедуры
Если задача заключается в отражении расчетов с контрагентами или сложных финансовых операций, проанализируем типовые альтернативы:
Дебиторы и Кредиторы) корректнее использовать документы «Корректировка долга», «Списание долга» или «Взаимозачет». В них предусмотрен учет всех необходимых аналитик (субконто).