Как в отчете «Список граждан для сверки с военкоматом» заменить адрес проживания на адрес по прописке?

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

При работе с программой 1С:Зарплата и управление персоналом 3.1 пользователи часто сталкиваются с необходимостью корректировки типовых печатных форм и отчетов под требования конкретных ведомств. Одной из таких задач является изменение вывода контактной информации в отчете «Список граждан для сверки с военкоматом». По умолчанию система выводит «Адрес места проживания», однако военкоматы нередко требуют указывать именно «Адрес по прописке» (регистрации). Рассмотрим подробно, почему простая правка макета не приносит результата и как решить эту задачу правильно с помощью программного кода и настроек системы.

Почему замена реквизита в макете не работает?

Разберем типичную ошибку начинающих разработчиков. Когда мы открываем макет отчета и меняем в ячейке параметр с АдресМестаПроживанияПредставление на АдресПоПропискеПредставление, мы ожидаем, что система автоматически подтянет нужные данные. Однако на практике поле остается пустым.

Выясним причину этого поведения: отчеты в современных конфигурациях на базе библиотеки стандартных подсистем (БСП) работают через систему компоновки данных (СКД). Макет — это лишь визуальная оболочка. Чтобы данные попали в параметр макета, они должны быть сначала получены в запросе или сформированы в программном коде, который этот макет заполняет. Если в наборе данных запроса поле «Адрес по прописке» отсутствует или не передается в структуру заполнения, замена имени параметра в макете ничего не даст — программе просто нечего туда передать.

Решение проблемы через механизм расширений

Наиболее корректным и безопасным способом изменения логики типового отчета является использование расширения конфигурации. Это позволяет не снимать основную конфигурацию с поддержки и сохраняет возможность легкого обновления программы.

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


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

Функция ПолучитьАдресПоФЛ(ФизическоеЛицо)
    Перем Адрес;
    Адрес = "";
    
    // Сначала найдем сотрудника, связанного с физлицом
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
    |	Сотрудники.Ссылка КАК Ссылка
    |ИЗ
    |	Справочник.Сотрудники КАК Сотрудники
    |ГДЕ
    |	Сотрудники.ФизическоеЛицо = &ФизическоеЛицо";
    
    Запрос.УстановитьПараметр("ФизическоеЛицо", ФизическоеЛицо);
    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Выборка.Следующий() Тогда
        // Используем программный интерфейс кадрового учета для получения данных
        МассивСотрудников = Новый Массив;
        МассивСотрудников.Добавить(Выборка.Ссылка);
        
        КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина, МассивСотрудников, "АдресПоПропискеПредставление", ТекущаяДата());
        
        Если КадровыеДанные.Количество() > 0 Тогда
            Адрес = КадровыеДанные[0].АдресПоПропискеПредставление;
        КонецЕсли;
    КонецЕсли;
    
    Возврат Адрес;
КонецФункции

Разберем, что именно делает этот код. Мы используем аннотацию &Вместо для переопределения стандартного метода. Ключевым моментом здесь является обращение к общему модулю КадровыйУчет и его функции КадровыеДанныеСотрудников. Это наиболее правильный способ получения личных данных в ЗУП 3.1, так как он учитывает права доступа (разрешенные выборки) и актуальность данных на конкретную дату.

Важные нюансы идентификаторов контактной информации

Обратите внимание на использование идентификатора поля. В разных версиях конфигурации или в зависимости от контекста обращения (через СКД или через программный интерфейс) идентификатор может называться АдресПоПропискеПредставление или АдресРегистрацииПредставление. Проанализируем, как это проверить. Если программный код возвращает пустое значение, попробуйте заменить АдресПоПропискеПредставление на АдресРегистрацииПредставление в параметрах функции КадровыеДанныеСотрудников.

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

Альтернативный способ: Обновление регистра строковых сведений

В современных релизах 1С:ЗУП 3.1 для повышения производительности отчетов данные часто берутся не напрямую из таблиц контактной информации, а из специального вспомогательного регистра — «Строковые сведения физических лиц». Если вы внесли изменения в адреса или доработали отчет, но видите старые данные, выполните следующие действия:

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

Эта операция заставит систему пересобрать текстовые представления адресов для всех сотрудников. Часто именно это действие помогает решить проблему «пустых полей», когда программная логика уже отлажена.

Новые возможности в последних версиях ЗУП (3.1.27 и выше)

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

Перейдите в раздел Настройка — Кадровый учет. В последних обновлениях в блоке настроек воинского учета появился флаг «Заполнять только адрес по прописке в документах электронного обмена». Хотя эта настройка в первую очередь ориентирована на файлы выгрузки, она задает вектор развития конфигурации в сторону унификации использования адреса регистрации в воинском учете. В будущем подобные переключатели могут появиться и для печатных форм отчетов.

Резюме для разработчика

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

  1. Создайте расширение, в котором будет перехвачена процедура формирования строк отчета.
  2. Используйте функцию КадровыйУчет.КадровыеДанныеСотрудников для получения реквизита АдресПоПропискеПредставление.
  3. Замените значение в параметре макета АдресМестаПроживанияПредставление полученными данными.
  4. Проверьте заполнение данных в карточках сотрудников и при необходимости обновите «Строковые сведения физических лиц».

Такой комплексный подход гарантирует корректный вывод данных в соответствии с требованиями военкомата и сохраняет чистоту типовой конфигурации.

← На главную