Почему в документе Отражение зарплаты в бухучете появляется призрачный реквизит и как его найти

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

При разработке или доработке конфигураций на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с загадочными ситуациями, когда путь к данным на форме указывает на реквизит, которого, на первый взгляд, не существует в дереве метаданных. Особенно часто это проявляется в сложных типовых решениях, таких как Бухгалтерия предприятия 3.0 или Зарплата и управление персоналом 3.1. Одной из таких «загадок» является реквизит РегистрацияВНалоговомОргане в табличной части НачисленныйНДФЛ документа ОтражениеЗарплатыВБухучете.

Разберем подробно, почему возникает эффект «призрачного реквизита», как платформа 1С управляет составом данных формы и где на самом деле скрываются эти данные. Проанализируем ситуацию по шагам, чтобы в будущем подобные вопросы не ставили нас в тупик.

Анализ структуры данных формы vs Метаданные

Первым делом рассмотрим классическую ситуацию: мы открываем форму документа в конфигураторе, выбираем элемент управления (поле ввода в табличной части) и смотрим в его свойства. В поле ПутьКДанным мы видим четкую структуру: Объект.НачисленныйНДФЛ.РегистрацияВНалоговомОргане. Однако, переходя в дерево метаданных к самому документу ОтражениеЗарплатыВБухучете, в составе реквизитов табличной части НачисленныйНДФЛ мы обнаруживаем только стандартный набор полей, среди которых нужного нам реквизита нет.

Почему так происходит? В управляемом приложении 1С данные формы (структура Объект) не всегда на 100% идентичны структуре объекта метаданных в базе данных. Рассмотрим основные причины возникновения такого несоответствия:

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

Где искать «убийцу-садовника»: практические шаги

Проанализируем ситуацию, как это сделал автор темы, и выясним, где же скрываются данные. Для этого выполним следующую последовательность действий:

Шаг 1. Проверка вкладки «Данные» в редакторе формы

Откроем форму документа ОтражениеЗарплатыВБухучете. Обратим внимание на правую верхнюю часть окна редактора форм. Именно там находится дерево Реквизиты. Развернем ветку Объект, далее найдем табличную часть НачисленныйНДФЛ. Проанализируем список колонок здесь. Если РегистрацияВНалоговомОргане присутствует в этом списке, значит, платформа считает его частью объекта.

Шаг 2. Анализ расширений

Если в основном дереве метаданных реквизита нет, проверим список подключенных расширений. Для этого перейдем в меню: Конфигурация -> Расширения конфигурации. Проанализируем каждое расширение на предмет заимствования документа ОтражениеЗарплатыВБухучете. Если документ заимствован, проверим состав его табличных частей в расширении. Скорее всего, «призрак» обнаружится именно там.

Шаг 3. Использование глобального поиска

Чтобы окончательно развеять сомнения, воспользуемся глобальным поиском (нажмем Ctrl + Shift + F). В строке поиска введем имя реквизита РегистрацияВНалоговомОргане. В параметрах поиска укажем поиск по всей конфигурации, включая свойства. Результаты поиска покажут нам:

Программное управление реквизитами

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


// Пример программного добавления колонки в таблицу формы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    ДобавляемыеРеквизиты = Новый Массив;
    ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("РегистрацияВНалоговомОргане", Новый ОписаниеТипов("СправочникСсылка.РегистрацииВНалоговыхОрганах"), "Объект.НачисленныйНДФЛ"));
    
    ИзменитьРеквизиты(ДобавляемыеРеквизиты);
    
    // После этого реквизит станет доступен в пути к данным, 
    // хотя в метаданных документа его не будет.
КонецПроцедуры

Однако, в типовой Бухгалтерии предприятия, реквизит РегистрацияВНалоговомОргане обычно является полноценным реквизитом табличной части, так как он критически важен для формирования отчетности по НДФЛ в разрезе различных налоговых инспекций (ИФНС). Если вы его не видите, скорее всего, вы смотрите не в ту табличную часть или используете версию конфигурации, где этот учет вынесен в отдельные регистры, а на форме отображается через механизм связей.

Выясним причину на уровне архитектуры

В документе ОтражениеЗарплатыВБухучете данные часто попадают путем синхронизации из ЗУП. Платформа 1С оптимизирует хранение этих данных. Если в вашей базе ведется учет только по одной регистрации в налоговом органе, система может скрывать или не использовать данный реквизит через механизм Функциональных опций.

Проанализируем связь с функциональными опциями:

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

Итоги расследования

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

Как справедливо заметил автор темы, иногда достаточно просто «выпить кофе» и внимательнее взглянуть на правую панель редактора форм, где развернутая структура табличной части покажет все скрытые от беглого взгляда поля.

← На главную