Как исправить проблему неактивных записей в регистре накопления Товары организаций при закрытии месяца

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При закрытии месяца в конфигурациях «1С:Управление торговлей», «1С:Комплексная автоматизация» или «1С:ERP» пользователи часто сталкиваются с ошибкой: «Обнаружены неактивные записи регистров в движениях документов». Эта проблема особенно неприятна тем, что она может возникнуть за очень старые периоды, которые уже давно считаются закрытыми. В данной статье мы подробно разберем, почему возникают такие записи, как их обнаружить и какими способами можно вернуть системе работоспособность.

Выясним причину появления неактивных записей

Для начала проанализируем, что представляет собой «неактивная» запись. В платформе 1С:Предприятие 8.3 каждый регистр накопления имеет техническое поле Активность. Если оно имеет значение Ложь, это означает, что запись физически существует в базе данных, но она не участвует в формировании остатков и не учитывается в отчетах.

Разберем ситуацию, характерную для регистра ТоварыОрганизаций. В современных конфигурациях неактивные записи чаще всего генерируются механизмом Intercompany (передачи товаров между организациями). Когда одна ваша организация продает товар, который по документам числится за другой организацией, система создает движение «расход» в состоянии «неактивно». Это своеобразный «черновик» или отложенное движение. Оно должно стать активным автоматически в тот момент, когда вы оформите документ Передача товаров между этими организациями.

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

Способ 1. Программное изменение активности записей

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

Для реализации этого метода нам потребуется объект РегистрНакопленияНаборЗаписей. Алгоритм действий следующий: мы создаем набор, устанавливаем отбор по конкретному документу-регистратору, считываем записи, меняем флаг активности и записываем набор обратно.

Посмотрим на пример кода, который решает эту задачу:


// Пример программной активации записей регистра
Процедура АктивироватьЗаписиРегистра(ДокументСсылка)
    
    // Создаем набор записей для конкретного регистра
    НаборЗаписей = РегистрыНакопления.ТоварыОрганизаций.СоздатьНаборЗаписей();
    
    // Устанавливаем отбор по регистратору, который вызвал ошибку
    НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка);
    
    // Читаем текущие записи из базы данных
    НаборЗаписей.Прочитать();
    
    // Перебираем записи и меняем свойство Активность
    Для Каждого Запись Из НаборЗаписей Цикл
        Если Не Запись.Активность Тогда
            Запись.Активность = Истина;
        КонецЕсли;
    КонецЦикла;
    
    // Записываем измененный набор в базу
    НаборЗаписей.Записать();
    
    Сообщить("Записи документа " + ДокументСсылка + " успешно активированы.");
    
КонецПроцедуры

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

Способ 2. Корректировка через специализированный документ

Рассмотрим альтернативный вариант, который не требует написания программного кода. В типовых конфигурациях существует документ Корректировка регистров. Этот инструмент позволяет вручную внести изменения в любой регистр системы.

Разберем по шагам, как это сделать:

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

Важный нюанс: Этот способ требует аккуратности. Если вы просто активируете записи или добавите новые без понимания логики Intercompany, у вас могут «поплыть» остатки в отчете «Ведомость по товарам организаций».

Способ 3. Использование инструментов разработчика

Проанализируем ситуацию, когда документов с ошибками очень много. В этом случае удобно воспользоваться готовыми внешними обработками, такими как «Инструменты разработчика» или «Групповое изменение реквизитов». Однако стандартная обработка группового изменения не всегда позволяет работать напрямую с записями регистров.

Профессиональные инструменты позволяют выполнить запрос к таблице регистра, отобрать все записи с Активность = Ложь и массово изменить это значение. Это самый быстрый способ, но он требует от специалиста понимания структуры метаданных, чтобы не нарушить целостность базы данных.

Анализ последствий удаления записей

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

Последствия удаления:

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

Рекомендуемый порядок действий (Best Practice)

Прежде чем приступать к программным исправлениям, мы рекомендуем выполнить следующие действия:

  1. Перейдите в раздел Финансовый результат и контроллинг — Оформление передач и выкупов.
  2. Проверьте, нет ли там распоряжений на оформление передач за проблемный период (в нашем случае — за 2017 год).
  3. Если распоряжения есть, попробуйте оформить документ Передача товаров. Это самый правильный способ, который автоматически активирует нужные записи.
  4. Если штатные механизмы не помогают, воспользуйтесь методом программной активации через НаборЗаписей, описанным выше.
  5. После активации записей обязательно запустите процедуру Закрытие месяца повторно.

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

← На главную