Как выполнить групповую замену счета дебета в документе "Операция" в 1С:Бухгалтерия 3.0?

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

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

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

Причина сложности: отсутствие табличной части в документе

Проанализируем структуру метаданных конфигурации. Документ Операция (в конфигураторе — ОперацияБух) не имеет собственных реквизитов табличной части для хранения строк проводки. Отображаемая в пользовательском интерфейсе таблица — это виртуальное представление записей регистра бухгалтерии Хозрасчетный, регистратором которых выступает сам документ.

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

Способ 1. Программная замена счета через набор записей регистра

Рассмотрим основной программный подход. Чтобы изменить проводки, сформированные ручной операцией, необходимо обратиться к регистру бухгалтерии Хозрасчетный, прочитать набор записей с отбором по конкретному регистратору и перезаписать строки с новым значением счета.

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


// Пример программной замены счета дебета 62.01 на другой счет
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Хозрасчетный.Регистратор КАК Регистратор
    |ИЗ
    |	РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
    |ГДЕ
    |	Хозрасчетный.СчетДт = &СтарыйСчет
    |	И Хозрасчетный.Период МЕЖДУ &ДатаНачала И &ДатаКонца";

Запрос.УстановитьПараметр("СтарыйСчет", ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01"));
Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДатаНачала));
Запрос.УстановитьПараметр("ДатаКонца",   КонецДня(ДатаКонца));

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

СчетНовый = ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.02"); // Укажите нужный счет
СчетСтарый = ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01");

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

Разберем ключевые особенности написания данного кода:

  1. Отбор по регистратору: Установка отбора в свойстве НаборЗаписей.Отбор.Регистратор гарантирует перезапись движений только конкретного документа.
  2. Режим загрузки данных: Установка свойства ОбменДанными.Загрузка = Истина отключает выполнение подсистемных проверок при записи, что важно при работе в закрытых периодах или при обходе некоторых правил БСП.
  3. Анализ субконто: При смене счета с разной аналитикой дополнительно требуется очищать или заполнять коллекцию СубконтоДт или СубконтоКт.

Способ 2. Использование специальных обработок и типового поиска и замены

Посмотрим на варианты решения задачи без написания нового кода:

  1. Универсальная обработка "Поиск и замена значений": Входит в состав типовых обработок для администраторов. В качестве заменяемого объекта выбирается конкретный счет плана счетов (например, 62.01), а в качестве замещающего — правильный счет. Область поиска ограничивается документами Операция. Механизм корректно перезаписывает ссылки в регистрах.
  2. Внешние обработки для группового редактирования движений: В сообществе 1С существуют готовые обработки, позволяющие отбирать записи регистра Хозрасчетный по произвольным фильтрам и выполнять групповую замену счетов Дт/Кт и их субконто напрямую в движениях документов.

Методологические рекомендации по исправлению ошибок

Выясним, как правильно поступить с точки зрения ведения бухгалтерского учета:

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

← На главную