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