Как исправить некорректные остатки в регистре «ЗапасыИПотребности» в 1С:УТ 11.5 после обновления без полного перепроведения документов?

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

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

Понимание архитектурных изменений и причин расхождений

Прежде чем приступать к исправлению, мы должны глубоко понимать корни проблемы. Основная причина многих сложностей с остатками в УТ 11.5 (а также в КА 2.5, ERP 2.5) кроется в фундаментальном изменении методики учета. В этих версиях регистр накопления СвободныеОстатки был заменен на регистр сведений РаспределениеЗапасов и регистр накопления ЗапасыИПотребности. Целью такого изменения было хранение расчетных значений остатков напрямую в регистре сведений, чтобы избежать использования регистра накопления для этих целей. Отчеты, такие как «Остатки и доступность товаров», строятся преимущественно на данных регистра РаспределениеЗапасов.

Давайте выясним наиболее частые причины возникновения некорректных остатков:

  1. Проблемы с обработчиками обновления. Часто некорректные остатки возникают из-за незавершенных или некорректно отработавших обработчиков обновления информационной базы. Эти обработчики должны были правильно перенести и заполнить данные в новых регистрах. Если они отработали с ошибками, регистр ЗапасыИПотребности может быть некорректно заполнен или вообще не содержать нужных движений.
  2. Взаимосвязь ЗапасыИПотребности и РаспределениеЗапасов. Мы уже выяснили, что ЗапасыИПотребности — это регистр накопления, а РаспределениеЗапасов — регистр сведений, который хранит окончательные данные о доступности товаров. Ошибки в одном регистре, безусловно, могут влиять на другой, вызывая расхождения.
  3. Влияние полей документов. В некоторых ситуациях документы могут не формировать движения по регистру ЗапасыИПотребности, если в них не заполнены ключевые поля, например, ВариантОформленияПродажи или Статус в документах реализации. Эти поля могут определять логику формирования движений.
  4. Особенности действия «К обеспечению» в ранних 11.5. В ранних версиях УТ 11.5 (например, 11.5.7) действие «К обеспечению» в заказах могло автоматически резервировать товар на складе, что приводило к нежелательному резервированию и искажению свободных остатков. В более поздних релизах 11.5.8 эта логика была пересмотрена и возвращена к предыдущему поведению, но если вы обновлялись с ранних версий, это могло повлиять на данные.

Диагностика и выявление некорректных остатков

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

  1. Сравнение данных из разных отчетов. Мы рекомендуем сравнивать данные из отчета «Ведомость по товарам на складах» (который часто основан на регистре ТоварыНаСкладах) и «Остатки и доступность товаров» (который использует РаспределениеЗапасов и ЗапасыИПотребности). Расхождения между этими отчетами будут указывать на проблему.
  2. Использование специализированных отчетов и обработок. Существуют специализированные внешние отчеты и обработки, разработанные сообществом 1С, которые позволяют детализированно сравнить данные по нескольким регистрам (например, ЗапасыИПотребности, РаспределениеЗапасов, ТоварыНаСкладахОстатки, ТоварыКОтгрузкеОстатки) за определенный период или по конкретной номенклатуре. Это позволяет выявить точные места расхождений.
  3. Работа с «эталонной базой». Если у вас есть копия базы до обновления или сразу после него, когда проблема еще не проявилась или не была критичной, мы можем использовать ее в качестве «эталонной базы». Сравнивая состояние регистров в текущей рабочей базе с эталонной, мы сможем определить, какие данные и где именно «съехали».

Использование типовой обработки "Исправление ошибок в регистре сведений 'Распределение запасов'"

Хотя автор вопроса упомянул, что эта обработка ему не помогла, мы должны подчеркнуть, что это стандартный инструмент 1С для исправления ошибок *именно в регистре сведений* РаспределениеЗапасов. Её можно найти через меню «Функции для технического специалиста» (путь:

Все функции -> Стандартные -> Исправление ошибок в регистре сведений "Распределение запасов"

). Мы запускаем эту обработку, чтобы убедиться, что проблема не в расхождении между РаспределениеЗапасов и фактическим наличием, либо, если это возможно, она поможет скорректировать данные в этом регистре. Важно понимать, что эта обработка работает только с регистром сведений и может не влиять на некорректные движения в регистре накопления ЗапасыИПотребности.

Автоматизированное (выборочное) перепроведение нужных документов

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

Давайте разберем по шагам, как мы можем это реализовать:

  1. Идентификация ошибочных документов. Мы должны определить, какие именно документы требуют повторного формирования движений. Это могут быть документы реализации, заказы клиентов, поступления товаров, перемещения и другие документы товародвижения. Мы можем использовать отчеты или запросы для выявления документов, которые, например, имеют движения в ТоварыНаСкладах, но не имеют или имеют некорректные движения в ЗапасыИПотребности.
  2. Создание внешней обработки. Мы пишем внешнюю обработку, которая будет перебирать найденные документы. Для каждого такого документа мы будем вызывать типовые процедуры формирования движений.
  3. Использование типовых процедур. Конфигурация 1С:УТ 11.5 предоставляет специальные функции для формирования движений документов. Мы можем использовать методы, подобные ОбновлениеИнформационнойБазыУТ.СформироватьИЗаписатьДвижения(). Важно при этом учитывать параметры, которые могут быть необходимы для корректного формирования движений.

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


// В цикле по найденным ошибочным документам:
// СсылкаНаОбъект - это ссылка на документ, который мы хотим перепровести (например, РеализацияТоваровУслуг)

ДопПараметры = ОбновлениеИнформационнойБазыУТ.ДополнительныеПараметрыПерезаписиДвиженийИзОчереди();

// Перед формированием новых движений может потребоваться очистка старых
// Пример: ДокументОбъект.Движения.ЗапасыИПотребности.Очистить();
// Затем, записать документ без проведения для удаления движений, а потом провести заново,
// или использовать механизмы, которые перезаписывают движения напрямую.

ОбновлениеИнформационнойБазыУТ.СформироватьИЗаписатьДвижения(
    СсылкаНаОбъект,
    "РегистрНакопления.ЗапасыИПотребности",
    РегистрыНакопления.ЗапасыИПотребности,
    ДопПараметры
);

// Если необходимо формировать движения по нескольким регистрам,
// вызов этой функции нужно повторить для каждого регистра.
// Например, для регистра сведений РаспределениеЗапасов:
// ОбновлениеИнформационнойБазыУТ.СформироватьИЗаписатьДвижения(
//     СсылкаНаОбъект,
//     "РегистрСведений.РаспределениеЗапасов",
//     РегистрыСведений.РаспределениеЗапасов,
//     ДопПараметры
// );

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

Корректировка регистров напрямую

В некоторых случаях, когда мы можем точно определить «правильные» остатки (например, сверившись с регистром ТоварыНаСкладах, который обычно менее подвержен ошибкам после обновлений), мы можем применить документ «Корректировка регистров». Этот метод позволяет нам внести изменения напрямую в регистр ЗапасыИПотребности. Этот способ особенно актуален, если проблема затрагивает небольшое количество позиций или если нам нужно оперативно исправить ситуацию.

  1. Определение корректных остатков. Мы должны иметь четкое понимание, какие остатки должны быть в регистре ЗапасыИПотребности. Это может быть сделано путем выполнения запросов к другим регистрам, таким как ТоварыНаСкладах, или путем анализа логики учета.
  2. Создание документа «Корректировка регистров». Мы создаем новый документ «Корректировка регистров». В нем мы указываем регистр ЗапасыИПотребности.
  3. Формирование движений. В табличной части документа мы указываем необходимые движения:
    • Для увеличения остатка: тип движения «Приход», значение ресурса (например, Количество) с плюсом.
    • Для уменьшения остатка или снятия некорректного резерва: тип движения «Расход», значение ресурса с плюсом (система интерпретирует расход как вычитание). Или тип движения «Приход» с отрицательным значением ресурса.
    Мы должны заполнить все измерения регистра (например, Номенклатура, Характеристика, Склад, Назначение, ВидЗапасов и др.), чтобы корректировка была точной.
  4. Автоматизация корректировок. Если таких корректировок требуется много, мы можем автоматизировать их создание с помощью внешней обработки. Такая обработка будет формировать и проводить документы «Корректировка регистров» на основании выявленных расхождений. Этот метод также полезен для снятия некорректных резервов, которые могли образоваться из-за ошибок в логике или обработчиках обновления.

Учет специфических сценариев обновления

Важно помнить, что проблемы после обновлений могут быть вызваны специфическими сценариями, которые не всегда очевидны. Например, как было описано в сообщении 5, при переходе с УТ 11.4 на 11.5 могла возникнуть следующая ситуация:

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

В таких случаях стандартные методы перепроведения могут быть недостаточными или даже усугубить ситуацию. Мы должны разработать специализированную обработку для очистки движений в таких «ошибочных» документах. Логика такой обработки может быть следующей:

  1. Определяем критерии для «старых» документов, которые не должны были формировать движения по товарам.
  2. Проходим по этим документам.
  3. Для каждого документа программно очищаем движения по регистру ЗапасыИПотребности (и, возможно, по другим товарным регистрам), а затем записываем документ без проведения или помечаем его как непроведенный, если его функциональность по товарам больше неактуальна.

Важность обновления до актуального релиза и регламентных заданий

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

Помимо этого, мы должны убедиться, что регламентные задания в вашей системе 1С:УТ 11.5 работают корректно и по расписанию. Такие задания, как «Актуализация потребностей по границе обеспечения», играют ключевую роль в обработке данных и влияют на распределение запасов. Если эти задания работают с ошибками или не запускаются, это также может привести к искажению данных в регистрах, в том числе и в ЗапасыИПотребности. Мы должны проверить журнал регистрации на предмет ошибок регламентных заданий и при необходимости скорректировать их выполнение.

Исправление некорректных остатков в 1С:УТ 11.5 — это комплексная задача, требующая внимательной диагностики и системного подхода. Мы рассмотрели различные методы, от типовых обработок до создания собственных инструментов и анализа специфических сценариев. Применяя эти подходы, вы сможете эффективно выявить и устранить проблемы с остатками, обеспечив корректность учетных данных в вашей информационной базе.

← На главную