Как исправить задвоение субконто Регистрация в налоговом органе на счете 68.01 после обновления БП КОРП

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

При обновлении конфигурации 1С:Бухгалтерия предприятия КОРП до версий 3.0.167 и 3.0.168 многие технические специалисты столкнулись с неприятной ситуацией: на счете 68.01 (и его субсчетах 68.01.1, 68.01.2) дублируется аналитика Регистрация в налоговом органе. Это приводит к тому, что старые остатки числятся на одном субконто, а новые документы при проведении начинают заполнять другое, пустое субконто. В результате учет «разъезжается», а отчетность по НДФЛ формируется некорректно.

В этой статье мы подробно разберем причины возникновения этой коллизии, проанализируем механизмы изменения плана счетов и изучим пошаговый алгоритм восстановления корректных данных с помощью программного кода.

Выясняем причины возникновения проблемы

Ситуация обусловлена масштабными изменениями в архитектуре учета НДФЛ, которые фирма 1С внедряет для поддержки налоговой реформы 2025 года. Проанализируем основные факторы, которые приводят к «сдвигу» аналитики:

  1. Упразднение субсчетов: Начиная с релиза 3.0.167, происходит консолидация учета НДФЛ. Разработчики отказываются от разделения на 68.01.1 и 68.01.2, переводя все расчеты (включая прогрессивные ставки 15%, 18% и т.д.) на единый счет 68.01.
  2. Подготовка под КБК: Для реализации учета по разным КБК в рамках одного счета 1С жестко фиксирует позиции субконто. В типовой конфигурации субконто Регистрация в налоговом органе теперь имеет строго определенный индекс.
  3. Конфликт с кастомизацией: Если в вашей базе (даже в КОРП-версии) через Конфигуратор была вручную включена настройка Подразделения на счете 68.01, это меняет коллекцию субконто. При отработке обработчиков обновления система «видит» несоответствие типов или индексов и добавляет системное субконто заново, сдвигая ваше заполненное субконто на третью позицию (в индекс 3), в то время как системным становится пустое субконто во второй позиции (индекс 2).

Таким образом, мы получаем ситуацию, когда в плане счетов отображаются два идентичных по названию вида субконто, но для системы это разные объекты с разными данными в регистре бухгалтерии.

Шаг 1: Программный перенос данных между субконто

Если обновление уже выполнено и документы начали проводиться с заполнением нового (пустого) субконто, нам необходимо «схлопнуть» данные. Проанализируем программный метод решения этой задачи. Нам потребуется обработка, которая прочитает наборы записей регистра бухгалтерии Хозрасчетный и перенесет значения из третьего субконто во второе, если оно не заполнено.

Рассмотрим пример кода для реализации этой процедуры:


// Определяем период, за который нужно исправить данные
НачДата = Объект.Период.ДатаНачала;
КонДата = Объект.Период.ДатаОкончания;

Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    Хозрасчетный.Регистратор КАК Докум,
    |    Хозрасчетный.Период КАК Период
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
    |ГДЕ
    |    Хозрасчетный.Период МЕЖДУ &НачДата И &КонДата
    |    И (Хозрасчетный.СчетДт.Код ПОДОБНО ""68.01%"" ИЛИ Хозрасчетный.СчетКт.Код ПОДОБНО ""68.01%"")
    |УПОРЯДОЧИТЬ ПО
    |    Период";

Запрос.УстановитьПараметр("НачДата", НачДата);
Запрос.УстановитьПараметр("КонДата", КонДата);

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

сч6801 = ПланыСчетов.Хозрасчетный.НДФЛ; // Ссылка на счет 68.01

Пока Выборка.Следующий() Цикл
    
    // Создаем набор записей для конкретного документа
    Проводки = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
    Проводки.Отбор.Регистратор.Установить(Выборка.Докум);
    Проводки.Прочитать();
    
    Модифицировано = Ложь;
    
    Для каждого Запись из Проводки Цикл
        
        // Проверяем Дебет
        Если Запись.СчетДт = сч6801 Тогда
            // Если второе субконто пустое, а третье заполнено — переносим
            Если не ЗначениеЗаполнено(Запись.СубконтоДт2) И ЗначениеЗаполнено(Запись.СубконтоДт3) Тогда
                Запись.СубконтоДт2 = Запись.СубконтоДт3;
                Модифицировано = Истина;
            КонецЕсли;
        КонецЕсли;
        
        // Проверяем Кредит
        Если Запись.СчетКт = сч6801 Тогда
            Если не ЗначениеЗаполнено(Запись.СубконтоКт2) И ЗначениеЗаполнено(Запись.СубконтоКт3) Тогда
                Запись.СубконтоКт2 = Запись.СубконтоКт3;
                Модифицировано = Истина;
            КонецЕсли;
        КонецЕсли;
        
    КонецЦикла;
    
    Если Модифицировано Тогда
        // Записываем набор с флагом ОбменДанными.Загрузка = Истина, 
        // чтобы не срабатывали лишние подписки и контроли
        Проводки.ОбменДанными.Загрузка = Истина;
        Проводки.Записать();
    КонецЕсли;
    
КонецЦикла;

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

Шаг 2: Устранение ошибок индексации и итогов

Разберем ситуацию, когда при попытке перепроведения документов или записи набора записей возникает ошибка "Дублирование индекса в итогах по субконто". Это происходит из-за того, что механизм расчета итогов 1С не может корректно обработать две записи с одинаковым видом субконто в разных индексах.

Проанализируем шаги для исправления этой ошибки:

  1. Зайдите в раздел Администрирование — Обслуживание — Регламентные операции — Управление итогами.
  2. Отключите использование итогов для Регистра бухгалтерии (Хозрасчетный).
  3. Выполните групповое перепроведение проблемных документов за период (или выполните код переноса данных, описанный выше). Без активных итогов проверка индексов не будет блокировать запись.
  4. После завершения правок снова включите использование итогов.
  5. Выполните Тестирование и исправление базы данных с включенными опциями "Пересчет итогов" и "Реиндексация таблиц информационной базы".

Шаг 3: Официальные патчи и профилактика

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

Если вы только готовитесь к обновлению на релиз 3.0.168.x, рекомендуется предварительно выполнить следующие действия:

  1. Снимите флаг Подразделения в конфигураторе на счете 68.01, если он был поставлен вручную.
  2. Убедитесь, что в разделе Функциональность включена или выключена опция Обособленные подразделения в соответствии с реальным учетом организации (в КОРП-версии это критично для автоматической расстановки субконто).
  3. Проверьте, нет ли «зависших» расширений, которые влияют на структуру плана счетов.

Заключение

Ситуация с задвоением субконто Регистрация в налоговом органе — это временная техническая сложность, связанная с переходом на новую модель учета НДФЛ. Основная задача программиста в данном случае — вернуть данные из «сдвинутого» третьего субконто в системное второе. Использование приведенного выше скрипта совместно с временным отключением итогов позволяет решить проблему без потери аналитических данных за прошлые периоды.

Помните, что любые манипуляции с регистром бухгалтерии напрямую через НаборЗаписей требуют обязательного создания резервной копии базы данных перед началом работ!

← На главную