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