В практике сопровождения 1С нередко возникает ситуация, когда бухгалтер просит добавить аналитику на счет, которая на текущий момент отсутствует в типовой конфигурации. Однако спустя некоторое время разработчики 1С выпускают обновление, в котором это же субконто (с тем же типом данных) добавляется как системное. В результате на счете оказывается два субконто с одинаковым видом, например, Регистрации в налоговом органе. Это создает путаницу в отчетах и требует корректного переноса накопленных данных. Разберем подробно, как решить эту задачу и избежать типичных ошибок.
Прежде чем приступать к переносу, проанализируем, почему стандартные отчеты и операции могут вести себя некорректно. На уровне платформы 1С:Предприятие данные в регистре бухгалтерии хранятся не по названиям субконто, а по их индексам: Субконто1, Субконто2, Субконто3.
Когда мы добавляем второе субконто с тем же типом (например, СправочникСсылка.РегистрацииВНалоговомОргане), система распределяет их по разным колонкам в таблице базы данных. Однако стандартные механизмы компоновки данных и формы выбора при совпадении типов могут «запутываться», обращаясь к первому найденному индексу. Именно поэтому в оборотно-сальдовой ведомости (ОСВ) мы можем видеть странные результаты: расход с одного субконто отражается, а приход на другое — нет, либо данные «схлопываются».
Рассмотрим ситуацию, описанную в обсуждении. Бухгалтер пытался сделать перенос через вспомогательный счет 000, что привело к некорректному отображению в ОСВ. Выясним, как сделать это правильно одной строкой.
Для корректного переноса остатков выполним следующие шаги:
68.1.1.Важный нюанс: Не используйте промежуточные счета типа 000. Проанализируем почему: при использовании счета 000 вы создаете два разных движения. Если в системе есть путаница с индексами субконто одного типа, отчет может просто не «понять», что это разные поля. Запись «счета на счет» внутри одной проводки заставляет систему более жестко идентифицировать измерения регистра.
Если данных много и ручные операции делать нецелесообразно, рассмотрим программный метод. Этот способ наиболее надежен, так как мы можем явно обратиться к нужным индексам субконто. Выясним, как написать простой скрипт для этой задачи.
Нам потребуется создать внешнюю обработку и выполнить следующий код:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ХозрасчетныйДвиженияССубконто.Регистратор,
| ХозрасчетныйДвиженияССубконто.НомерСтроки,
| ХозрасчетныйДвиженияССубконто.СубконтоКт1,
| ХозрасчетныйДвиженияССубконто.СубконтоКт2
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ХозрасчетныйДвиженияССубконто
|ГДЕ
| ХозрасчетныйДвиженияССубконто.СчетКт = &Счет";
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.НДФЛ); // Пример для 68.1.1
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
// Проверяем номер строки, чтобы менять конкретную проводку
Если Запись.НомерСтроки = Выборка.НомерСтроки Тогда
// Предположим, Субконто2 - типовое, а Субконто1 - пользовательское
// Копируем значение из старого в новое
Запись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.РегистрацияВНалоговомОргане] = Выборка.СубконтоКт1;
КонецЕсли;
КонецЦикла;
НаборЗаписей.ОбменДанными.Загрузка = Истина;
НаборЗаписей.Записать();
КонецЦикла;
Важно: Перед запуском кода обязательно определите, под каким индексом (1, 2 или 3) находится ваше пользовательское субконто, а под каким — типовое. Это можно сделать в конфигураторе или через «Вывод списка» в плане счетов.
Посмотрим на ситуацию со стороны метаданных. Если конфигурация позволяет внесение изменений, мы можем временно поменять порядок субконто в плане счетов.
68.1.1.После этой манипуляции платформа часто начинает «видеть» типовое субконто как приоритетное. После переноса данных старое пользовательское субконто можно будет удалить.
Проанализируем специфику конкретно этого счета. Счет 68.1.1 (НДФЛ при исполнении обязанностей налогового агента) в типовых конфигурациях 1С тесно связан с регистрами накопления. Простого переноса данных в регистре бухгалтерии может быть недостаточно для корректного формирования отчетности (2-НДФЛ, 6-НДФЛ).
Данные в налоговые отчеты собираются не только из проводок, но и из регистра накопления Расчеты налогоплательщиков с бюджетом по НДФЛ. Если в ваших документах начисления зарплаты или выплаты была указана аналитика по «старому» субконто, то после его удаления в проводках могут остаться пустые значения.
Рекомендация: После программного или ручного переноса остатков по счету 68.1.1, проверьте соответствие данных в ОСВ и в специализированных отчетах по НДФЛ. Возможно, потребуется групповое перепроведение документов, чтобы они заполнили новое типовое субконто автоматически.
Как отмечалось в полезных сообщениях форума, после любых манипуляций с субконто одного и того же типа, крайне важно выполнить технические процедуры. Рассмотрим их последовательность:
Подведем итог: наиболее безопасным и быстрым способом для небольшого объема данных является прямая проводка внутри одного счета (Дебет 68.1.1 / Кредит 68.1.1) с заполнением разных колонок субконто. Для больших баз лучше воспользоваться программной обработкой с установленным флагом ОбменДанными.Загрузка = Истина, что позволит сохранить неизменными документы-регистраторы.