Как массово изменить склад в документе «Операция, введенная вручную» в 1С:Бухгалтерии?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

В процессе работы с конфигурацией 1С:Бухгалтерия для Беларуси (редакция 2.1) или аналогичными решениями на базе «1С:Предприятие 8.3» пользователи часто сталкиваются с необходимостью массовой корректировки данных. Одной из самых сложных задач является изменение аналитики (например, Склада) в документах типа ОперацияБух (Операция, введенная вручную). Трудность заключается в том, что этот документ не имеет стандартного реквизита «Склад», а данные хранятся непосредственно в регистре бухгалтерии.

В этой статье мы подробно разберем, почему стандартный поиск реквизитов не дает результата, и изучим несколько способов решения проблемы: от настройки стандартных обработок до написания собственного алгоритма.

Почему склад не отображается в списке реквизитов?

Проанализируем структуру документа Операция. В отличие от «Поступления товаров и услуг» или «Реализации», где Склад является реквизитом шапки или табличной части, «Операция, введенная вручную» — это, по сути, «пустая оболочка». Основная ее задача — служить регистратором для записей в Журнале проводок (Регистр бухгалтерии).

Склад в данном случае является значением Субконто. На разных счетах (например, 10 или 41) Склад может занимать разную позицию: быть первым, вторым или третьим субконто. Именно поэтому при использовании обработки «Групповое изменение реквизитов» вы не видите поле «Склад» в списке доступных для изменения полей самого документа.

Способ 1: Использование группового изменения с отображением служебных объектов

Разберем по шагам, как заставить систему «увидеть» нужные нам данные. Часто пользователи не находят сам документ Операция в списке объектов обработки.

  1. Откроем обработку Групповое изменение реквизитов.
  2. Перейдем в раздел Дополнительные параметры (обычно это гиперссылка «Настройки» в нижней части окна).
  3. Установим флажок Показывать служебные объекты. Это критически важно, так как платформа часто классифицирует ручные операции как объекты, не предназначенные для простого редактирования пользователем.
  4. В поле «Выбирать элементы» теперь найдем Операции, введенные вручную.

Однако, даже выбрав документ, вы увидите только «Содержание» и «Организацию». Чтобы поменять склад, нам нужно работать не с документом, а с его движениями.

Способ 2: Прямое редактирование записей регистра бухгалтерии

Рассмотрим более продвинутый метод, который позволяет обойти ограничения документа. Вместо изменения самого документа, мы будем менять записи в регистре, которые он создал.

  1. В обработке «Групповое изменение реквизитов» в поле выбора объекта выберем Записи регистра бухгалтерии (Журнал проводок хозрасчетный).
  2. Настроим систему фильтров (отбор), чтобы не испортить лишние данные:
    • Регистратор.Тип Равно Операция, введенная вручную.
    • СчетДт (или СчетКт) Равно нужный вам счет (например, 41.1).
    • Субконто1 (или то, где у вас склад) Равно «Старый склад».
  3. В списке доступных для изменения реквизитов найдем соответствующее Субконто и укажем «Новый склад».

Важно: Перед выполнением этого действия обязательно выясните, каким по счету идет склад в плане счетов. Если на счете 41.1 Склад — это Субконто1, а вы попытаетесь изменить Субконто2, данные в базе не обновятся или возникнет ошибка несоответствия типов.

Способ 3: Написание произвольного алгоритма

Если записей много и они распределены по разным счетам с разным порядком субконто, лучше всего воспользоваться вкладкой Выполнить произвольный алгоритм в той же обработке «Групповое изменение реквизитов». Рассмотрим пример кода, который автоматизирует этот процесс.

Нам необходимо программно перебрать все проводки выбранных документов и заменить значение склада. Типовой шаблон кода будет выглядеть следующим образом:


// Получаем объект документа для работы с его движениями
НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Объект.Ссылка);
НаборЗаписей.Прочитать();

Для Каждого Запись Из НаборЗаписей Цикл
    // Проверяем дебет счета
    Если Запись.СчетДт.Код = "41.2.2" Тогда
        // Предположим, склад - это Субконто1
        Запись.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады] = СкладСсылка;
    КонецЕсли;

    // Проверяем кредит счета
    Если Запись.СчетКт.Код = "41.2.2" Тогда
        Запись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады] = СкладСсылка;
    КонецЕсли;
КонецЦикла;

// Записываем изменения в базу данных
НаборЗаписей.Записать();

В этом коде мы используем объект РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей(), чтобы получить доступ к проводкам. Метод Прочитать() загружает существующие проводки документа в память, после чего мы в цикле проверяем условия (номер счета) и через коллекцию СубконтоДт или СубконтоКт обращаемся к нужному виду аналитики по ссылке ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады. Это более надежный способ, чем обращение по индексу (например, Субконто1), так как он не зависит от порядка следования субконто в плане счетов.

Способ 4: Обработка «Поиск и замена значений»

Выясним, существует ли более простой путь для обычного пользователя. Если ваша цель — полностью заменить один склад на другой во всей базе данных (включая справочники, документы и все регистры), воспользуйтесь стандартной обработкой Поиск и замена значений.

Проанализируем ситуацию: этот инструмент работает на уровне ссылок базы данных.

  1. В поле Что заменять выберите старый (неправильный) склад.
  2. В поле На что заменять выберите правильный склад из справочника.
  3. Нажмите кнопку «Найти ссылки». Система покажет все документы (в том числе ручные операции) и записи регистров, где упоминается этот склад.
  4. Нажмите «Выполнить замену».

Этот метод является самым безопасным с точки зрения целостности данных, так как он автоматически корректирует записи во всех связанных таблицах, не требуя понимания того, как именно устроены движения документа Операция.

Меры предосторожности

Любое массовое изменение данных в 1С — это потенциальный риск. Перед тем как приступить к выполнению любого из описанных выше способов, обязательно создайте резервную копию информационной базы. Если вы используете «Произвольный алгоритм», сначала протестируйте его на одной-двух операциях, прежде чем запускать обработку для всей выделенной группы документов.

Также стоит помнить, что после изменения склада в ручных операциях может потребоваться перепроведение документов, влияющих на последовательность партионного учета, и обновление итогов в отчетах (например, в Оборотно-сальдовой ведомости по счету).

← На главную