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