Почему не работает отбор по типу счета в документе Прочие затраты и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет IT и автоматизация бизнеса
← На главную

При разработке и доработке конфигурации «1С:Управление нашей фирмой» (УНФ) специалисты часто сталкиваются с ситуацией, когда добавление новых элементов в свойство Параметры выбора реквизита формы или объекта в Конфигураторе не приводит к ожидаемому результату в режиме «1С:Предприятие». Например, при попытке разрешить выбор счета с типом Кредиторы или Дебиторы в документе «Прочие затраты (расходы)» список доступных счетов в окне выбора остается ограничен стандартными значениями.

Разберем подробнее, почему возникают подобные ограничения платформы 1С:Предприятие и какими программными способами можно корректно настроить нужный отбор счетов.

Причины игнорирования параметров выбора из Конфигуратора

Проанализируем поведение платформы и архитектуру прикладных решений на базе управляемых форм:

  1. Программный приоритет формирования отборов: В типовых конфигурациях при открытии формы выбора списков или планов счетов логика обработки параметров часто переопределяется в процедуре ПриСозданииНаСервере самой формы выбора. Если форма принимает параметр Отбор, переданный из контекста вызова или сформированный жестко в коде, статические настройки из свойств элемента формы в Конфигураторе перекрываются.
  2. Механизмы модуля менеджера: В плане счетов может быть переопределена процедура ОбработкаПолученияДанныхВыбора в модуле менеджера. В этом случае платформенный отбор по свойству элемента формы игнорируется в пользу алгоритма, прописанного программистом.
  3. Методологические особенности документа: Документ «Прочие затраты (расходы)» предназначен для отражения расходов, не связанных напрямую с контрагентами. Счета типов Кредиторы и Дебиторы предусматривают ведение полнотекстовой аналитики в разрезе контрагентов и договоров (субконто). В документе затрат соответствующие реквизиты аналитики расчетов могут отсутствовать, поэтому типовая логика системы ограничивает выбор таких типов счетов.

Способ 1. Программное открытие формы выбора с кастомным отбором

Выясним, как обойти ограничение через программный код. Наиболее надежный способ — перехватить событие выбора поля формы Корреспонденция и сформировать структуру параметров с массивом допустимых типов счетов.

Для этого выполним следующие шаги:

  1. Для элемента формы Корреспонденция создадим событие НачалоВыбора.
  2. В обработчике события отменим стандартную обработку выбором СтандартнаяОбработка = Ложь.
  3. Сформируем массив нужных типов счетов из перечисления ТипыСчетов.
  4. Передадим этот массив в структуру отбора и откроем форму выбора программно через функцию ОткрытьФорму.

Посмотрим на пример реализации данного кода:


&НаКлиенте
Процедура КорреспонденцияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	МассивТипов = Новый Массив;
	МассивТипов.Добавить(ПредопределенноеЗначение("Перечисление.ТипыСчетов.Кредиторы"));
	МассивТипов.Добавить(ПредопределенноеЗначение("Перечисление.ТипыСчетов.ПрочиеДоходы"));
	МассивТипов.Добавить(ПредопределенноеЗначение("Перечисление.ТипыСчетов.ПрочиеОборотныеАктивы"));
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("Отбор", Новый Структура("ТипСчета", МассивТипов));
	
	ОткрытьФорму("ПланСчетов.Управленческий.ФормаВыбора", ПараметрыФормы, Элемент);
	
КонецПроцедуры

Способ 2. Реализация через расширение конфигурации

Чтобы оставить основную конфигурацию на полной поддержке поставщика, рекомендуется вынести логику в Расширение конфигурации. Для этого можно перехватить процедуру ПриСозданииНаСервере формы документа или формы выбора плана счетов.

Рассмотрим вариант доработки параметров выбора элемента формы в расширении с помощью аннотации &После:


&После("ПриСозданииНаСервере")
Процедура Расширение_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	МассивТипов = Новый Массив;
	МассивТипов.Добавить(ПредопределенноеЗначение("Перечисление.ТипыСчетов.Кредиторы"));
	МассивТипов.Добавить(ПредопределенноеЗначение("Перечисление.ТипыСчетов.ПрочиеДоходы"));
	
	НовыйПараметр = Новый ПараметрВыбора("Отбор.ТипСчета", МассивТипов);
	
	МассивПараметров = Новый Массив;
	МассивПараметров.Добавить(НовыйПараметр);
	
	Элементы.Корреспонденция.ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметров);
	
КонецПроцедуры

Альтернативные и методологические решения

Если задача заключается в отражении расчетов с контрагентами или сложных финансовых операций, проанализируем типовые альтернативы:

← На главную