При разработке и доработке конфигураций на базе 1С с использованием механизма расширений программисты часто сталкиваются с неочевидным поведением системы. Проанализируем типичную ситуацию: вы переносите (заимствуете) регистр бухгалтерии из основной конфигурации в расширение. Однако, когда вы открываете конструктор запросов, выясняется, что стандартные реквизиты, такие как счет и субконто, просто пропали. Из-за этого невозможно выполнить отбор по счету или обратиться к значениям субконто визуальными средствами.
Рассмотрим подробнее, почему так происходит, выясним причину такого поведения платформы и разберем по шагам, как правильно отразить регистр бухгалтерии в расширении для полноценной работы.
Чтобы конструктор запросов в расширении корректно отображал все поля регистра бухгалтерии, платформе необходимо "понимать" всю цепочку связей метаданных. Недостаточно просто добавить сам регистр — нужно перенести и правильно настроить связанные с ним объекты. Выполним следующие шаги:
ПланВидовХарактеристик, который соответствует видам субконто вашего регистра бухгалтерии (например, ВидыСубконтоХозрасчетные). Добавьте его в расширение.ПланСчетов. Перейдите в его свойства в расширении. Вам необходимо установить галочки напротив свойств "Виды субконто" и "Макс. количество субконто". Убедитесь, что значения этих свойств установлены точно так же, как в основной конфигурации.После выполнения этих действий и обновления метаданных связь между объектами восстановится, и конструктор запросов должен начать отображать счета и субконто.
Остановимся подробнее на настройке корреспонденции. В свойствах заимствованного регистра бухгалтерии критически важна галочка "Корреспонденция". Проанализируем ситуацию: если в большинстве типовых конфигураций (например, в "1С:Бухгалтерия") система работает по принципу двойной записи, регистр использует поля СчетДт (счет дебета) и СчетКт (счет кредита).
Если при добавлении в расширение галочка "Корреспонденция" случайно слетит или вы забудете ее установить, регистр переключится в режим работы с одним измерением Счет и стандартным реквизитом ВидДвижения (Дебет/Кредит). Из-за этого архитектурного изменения все ваши старые запросы, обращающиеся к СчетДт или СчетКт, перестанут проходить синтаксический контроль и будут выдавать ошибки.
Даже если вы правильно заимствовали План Счетов и План Видов Характеристик, конструктор запросов в расширении может всё ещё не видеть субконто. Выясним причину: расширение "не знает" о типах данных, которые выступают в качестве значений этих субконто. Например, если субконто имеет тип справочника Контрагенты или ДоговорыКонтрагентов, то без добавления этих справочников в расширение конструктор не сможет с ними работать.
Чтобы не "раздувать" расширение и не заимствовать в него десятки справочников и документов только ради работы конструктора, разработчики используют проверенный обходной путь:
Посмотрим на пример того, как может выглядеть такой запрос:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ХозрасчетныйОстатки.Счет КАК Счет,
| ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
| ХозрасчетныйОстатки.СуммаОстаток КАК СуммаОстаток
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &СчетОтбора, , ) КАК ХозрасчетныйОстатки";
Запрос.УстановитьПараметр("Период", ТекущаяДата());
Запрос.УстановитьПараметр("СчетОтбора", ПланыСчетов.Хозрасчетный.РасчетыСПоставщиками);
На этапе выполнения в режиме "Предприятие" этот код отработает абсолютно корректно, несмотря на то, что конструктор внутри расширения "не видел" эти поля при визуальном редактировании.
Если вы выполнили все настройки, но расширение ведет себя непредсказуемо, стоит обратить внимание на два важных фактора:
1. Проверка безопасного режима. Если связь с объектами кажется "отлетевшей", проверьте настройки подключения расширения в режиме "1С:Предприятие" (меню "Функции для технического специалиста" - "Управление расширениями конфигурации"). Если расширение подключено в "Безопасном режиме", это может жестко ограничивать его функциональность и доступ к данным регистра.
2. Влияние обновлений основной конфигурации. Расширения жестко привязаны к структуре метаданных. Если всё работало, а после обновления 1С реквизиты пропали или появились ошибки, проанализируем изменения. Если в оригинальном Плане счетов изменилось максимальное количество субконто (например, разработчики 1С увеличили его с 2 на 3) или поменялись типы в ПВХ, расширение начнет конфликтовать. При запуске программы на это укажет системное предупреждение (значок колокольчика с ошибками применения расширения). В этом случае потребуется удалить заимствованные объекты из расширения и добавить их заново с обновленными свойствами.
Используйте эти методы в комплексе: правильно настраивайте свойства заимствованных объектов, не забывайте про галочку "Корреспонденция", а для сложных запросов применяйте лайфхак с внешними обработками, чтобы ваш код оставался чистым и рабочим.