Учет и Финансы · 11 мин
Как скопировать субконто проводки в 1С
Как скопировать субконто проводки в 1С: Бухгалтерия и написать код в 1С 8.3. Копирование аналитики через обработчики, запросы и типовые механизмы.
Субконто — это аналитические разрезы проводки: контрагенты, договоры, номенклатура, подразделения и другие объекты, заданные в плане видов характеристик «Виды субконто хозрасчетные». Задача скопировать субконто возникает, когда нужно перенести аналитику из одной проводки в другую, заполнить корреспондирующую сторону движения или сформировать новые проводки на основе существующих данных.
Способ копирования зависит от контекста: в типовой «1С:Бухгалтерии» часть операций выполняется штатными средствами, а в собственных разработках и доработках субконто переносят программно — через коллекцию Субконто набора записей регистра бухгалтерии. Ниже разобраны оба подхода с конкретными примерами кода для платформы 1С 8.3.
Важно понимать, что набор аналитики жёстко привязан к счёту: у счёта 60.01 есть субконто «Контрагенты» и «Договоры», а у счёта 10.01 — «Номенклатура», «Партии» и «Склады». Скопировать субконто «как есть» можно только между счетами с совпадающими видами аналитики, иначе платформа выдаст ошибку или значение просто не запишется.
Что такое субконто и где оно хранится в проводке
В регистре бухгалтерии «Хозрасчетный» каждая проводка содержит дебетовую и кредитовую стороны, и у каждой стороны — своя коллекция субконто. В коде доступ к ней выглядит так: Проводка.СубконтоДт и Проводка.СубконтоКт. Коллекция индексируется видами субконто из плана видов характеристик.
Какие именно виды аналитики доступны, определяет счёт: они перечислены в табличной части «Виды субконто» плана счетов. У одного счёта может быть от нуля до трёх видов субконто в типовой конфигурации (предел можно расширить в свойствах плана счетов, но это доработка, требующая аккуратности).
При чтении проводки через запрос субконто возвращаются в полях вида СубконтоДт1, СубконтоДт2 и так далее, а в виртуальных таблицах — через параметры отбора по видам субконто. Это важно учитывать, если копирование строится на выборке из движений другого документа.
Когда копирование субконто возможно, а когда нет
Главное условие успешного копирования — вид субконто должен присутствовать у счёта-получателя. Если попытаться записать значение по виду субконто, которого у счёта нет, платформа при записи набора либо выдаст ошибку, либо молча проигнорирует значение в зависимости от способа обращения. Поэтому перед присвоением корректно проверять наличие вида субконто у целевого счёта.
Второе ограничение — тип значения. Вид субконто имеет строго определённый состав типов: например, «Договоры» принимает только ссылку на справочник договоров. Передать туда строку или документ нельзя. При переносе аналитики между разными счетами убедитесь, что типы значений совместимы.
Третий момент — признаки учёта счёта (количественный, валютный). Копирование субконто не переносит суммы, количество и валюту: эти реквизиты проводки заполняются отдельно и только если соответствующий признак включён у счёта.
Как скопировать субконто программно в 1С 8.3
Базовый приём — перебрать коллекцию видов субконто счёта-источника и присвоить значения в проводку-получатель. Ниже универсальный фрагмент для копирования дебетовой аналитики одной проводки в дебет другой проводки с тем же счётом:
Для Каждого ВидСубконто Из ПроводкаИсточник.СчетДт.ВидыСубконто Цикл
ПроводкаПриемник.СубконтоДт[ВидСубконто.ВидСубконто] =
ПроводкаИсточник.СубконтоДт[ВидСубконто.ВидСубконто];
КонецЦикла;
Если счета различаются, добавьте проверку наличия вида субконто у счёта-получателя. Найти его можно перебором табличной части ВидыСубконто целевого счёта:
Функция ЕстьВидСубконто(Счет, ВидСубконто)
Для Каждого Строка Из Счет.ВидыСубконто Цикл
Если Строка.ВидСубконто = ВидСубконто Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
Для переноса аналитики из дебета в кредит (типичная ситуация при формировании обратной проводки или корреспонденции) меняются только коллекции: читаете из СубконтоДт, пишете в СубконтоКт. Сами значения — ссылки на справочники — переносятся без преобразований.
// Копирование субконто между проводками с проверкой
Для Каждого ВидСубконто Из ПроводкаИсточник.СчетДт.ВидыСубконто Цикл
Если ЕстьВидСубконто(ПроводкаПриемник.СчетДт, ВидСубконто.ВидСубконто) Тогда
ПроводкаПриемник.СубконтоДт[ВидСубконто.ВидСубконто] = ПроводкаИсточник.СубконтоДт[ВидСубконто.ВидСубконто];
КонецЕсли;
КонецЦикла;Копирование субконто при формировании движений документа
Перенос аналитики из шапки или табличной части документа
Частая задача в обработчике ОбработкаПроведения — заполнить субконто из реквизитов самого документа. Здесь копирование сводится к прямому присвоению: Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = Контрагент;. Обращение по предопределённому элементу плана видов характеристик — самый читаемый и надёжный способ.
Копирование из движений другого документа
Если новый документ должен повторить аналитику уже проведённого (например, сторно или корректировка), сначала запросом выбираются проводки документа-основания вместе с полями СубконтоДт1, СубконтоДт2, СубконтоДт3. Затем значения присваиваются новым проводкам. Порядковые номера полей соответствуют порядку видов субконто у счёта, поэтому при смене счёта логику нумерации нужно перепроверить.
Альтернатива — метод Скопировать() у набора записей регистра бухгалтерии: он полностью дублирует движения документа-основания, включая субконто. Такой подход подходит для сторнирования, но требует последующей корректировки сумм и периода.
- 1Запросом выберите проводки документа-основания с полями СубконтоДт1–СубконтоДт3 и СубконтоКт1–СубконтоКт3
- 2Создайте новые проводки в наборе записей своего документа и укажите счета
- 3Присвойте субконто по видам, проверяя их наличие у целевых счетов
- 4Заполните суммы, количество и валюту отдельно — они не копируются вместе с субконто
- 5Запишите движения и проверьте результат через проведение документа и отчёт «Обороты по счёту»
Как скопировать субконто без программирования
В типовой «1С:Бухгалтерии» ручного инструмента «скопировать субконто проводки» нет, но есть обходные пути. Операцию, введённую вручную, можно скопировать целиком: в списке операций выберите нужную и нажмите «Скопировать» (F9). Новая операция унаследует все проводки вместе с аналитикой — останется поправить дату, суммы и при необходимости отдельные субконто.
Документы, формирующие проводки (поступления, реализации, требования-накладные), также копируются кнопкой «Скопировать» в списке. При этом аналитика подтягивается из реквизитов документа, а после проведения копии проводки будут содержать те же субконто, что и у оригинала.
Для пакетного переноса аналитики между базами используют обработки выгрузки-загрузки данных или конвертацию данных, но это уже инструменты администратора, требующие тестирования на копии базы.
Способы скопировать субконто
Подходит для разового повторения проводок без программирования; не подходит для пакетной обработки и переноса между разными видами документов
Гибкий способ для обработчиков и внешних обработок; требует проверки видов субконто и прав на доработку
Быстро дублирует все движения основания, включая аналитику; пригоден для сторно, но суммы и период нужно править вручную
Проверка результата и типичные ошибки
После записи движений откройте проведённый документ и перейдите к его проводкам (команда «Показать проводки» или Дт/Кт). Убедитесь, что аналитика заполнена по каждой стороне и совпадает с ожидаемой. Дополнительно постройте отчёт «Обороты по счёту» или «Анализ субконто» — пустая аналитика там видна сразу.
Самая распространённая ошибка — присвоение субконто до указания счёта проводки. Коллекция субконто привязана к счёту, поэтому сначала заполняйте СчетДт/СчетКт, и только потом аналитику. При смене счёта ранее заполненные субконто могут быть очищены платформой.
Вторая ошибка — обращение к субконто по числовому индексу без учёта порядка видов у конкретного счёта. Порядок видов субконто у счетов 60.01 и 62.01 различается, и код, работавший для одного счёта, на другом запишет аналитику «не туда». Надёжнее обращаться по значению вида субконто, а не по индексу.
Как проверить результат
У каждой стороны заполнены все виды субконто счёта
Пустая аналитика или ошибка при записи набора
Обороты отражаются по нужному контрагенту, договору или номенклатуре
Обороты висят на пустом значении субконто
Значения совпадают по всем общим видам субконто
Часть аналитики потеряна из-за отсутствия вида у целевого счёта
FAQ
Можно ли скопировать субконто между счетами с разным набором аналитики?
Да, но перенесутся только те виды субконто, которые есть у обоих счетов. Перед присвоением проверяйте наличие вида субконто у счёта-получателя перебором его табличной части «Виды субконто», иначе значение будет потеряно или вызовет ошибку записи.
Почему после присвоения субконто в коде аналитика остаётся пустой?
Чаще всего счёт проводки был установлен после заполнения субконто — платформа при этом очищает аналитику. Вторая причина: у счёта нет указанного вида субконто. Проверьте порядок строк кода и состав видов субконто счёта в плане счетов.
Как скопировать проводки целиком вместе с субконто без кода?
Используйте копирование документа или ручной операции клавишей F9 в списке. Копия унаследует все проводки и аналитику; останется исправить дату, суммы и отличающиеся реквизиты. Для массового переноса потребуется обработка или доработка.
Переносятся ли суммы и количество вместе с субконто?
Нет. Субконто — это только аналитика. Сумма, количество, валюта и валютная сумма — отдельные ресурсы проводки, которые заполняются самостоятельно и только при включённых признаках учёта у счёта.
Как обратиться к конкретному субконто в коде?
Через коллекцию проводки по значению вида субконто: Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты]. Такой способ устойчив к порядку видов субконто у счёта, в отличие от обращения по числовому индексу.
Опасно ли копировать движения методом Скопировать() у набора записей?
Сам метод безопасен, но он дублирует всё: суммы, период, счета и аналитику. Если не скорректировать копию, получите задвоение оборотов. Используйте его для сторнирования с обязательной заменой знаков сумм и проверкой на тестовой базе.
Что важно запомнить
Субконто копируется присвоением значений по видам субконто, при этом счёт проводки заполняется первым, а наличие вида субконто у целевого счёта проверяется заранее. Для разового повторения проводок достаточно копирования документа клавишей F9; для пакетных задач используйте программный перенос с последующей проверкой через отчёты по аналитике.