Почему УТ 10.3 не перемещает товар из-за «нехватки», если по отчетам остаток есть, и как это исправить?

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

При работе в конфигурации «1С:Управление торговлей 10.3» пользователи и администраторы нередко сталкиваются с парадоксальной ситуацией: документ «Перемещение товаров» или «Реализация товаров и услуг» не проводится, сообщая об ошибке «Недостаточно товара на складе...», хотя специализированные отчеты наглядно показывают наличие необходимого количества. Особенно часто эта проблема проявляется при попытке переместить или списать старые остатки (например, оприходованные несколько лет назад).

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

---

Архитектура учета остатков в УТ 10.3: в чем корень проблемы?

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

  1. ТоварыНаСкладах (Товары на складах). Этот регистр хранит информацию о чисто физическом наличии номенклатуры на конкретных складах без привязки к организациям юридического лица. Стандартный отчет «Ведомость по товарам на складах» берет данные именно отсюда. Если товар есть здесь, мы видим его в складских отчетах.
  2. ТоварыОрганизаций (Товары организаций). Регистр отвечает за финансовую принадлежность товара конкретному юридическому лицу. Если в параметрах учета включена опция «Вести учет товаров организаций в разрезе складов», система при проведении любого списания проверяет остаток по паре «Организация + Склад». Ошибка «Недостаточно товара по организации...» возникает при нулевом или отрицательном балансе в этом регистре.
  3. ПартииТоваровНаСкладах (Партии товаров на складах). Используется для ведения партионного учета и расчета себестоимости по методам FIFO/ЛИФО или «по средней». Если в базе включено списание партий при проведении документов, система жестко контролирует наличие свободных партий. Если партий нет — документ не проведется.
  4. СвободныеОстатки (Свободные остатки). Хранит данные о доступном к отгрузке товаре за вычетом резервов, сформированных документами «Заказ покупателя».

Суть проблемы: когда мы формируем отчет, мы можем видеть положительный остаток по регистру ТоварыНаСкладах. Однако при проведении «Перемещения товаров» программа обращается к регистру ТоварыОрганизаций или к партионному учету. Если в каком-то из этих регистров движение в свое время не сформировалось (например, при оприходовании товара в 2011 году), система заблокирует проведение документа, несмотря на красивые цифры в складском отчете.

---

Выясняем причины: почему в старых документах «поплыли» движения?

Рассмотрим подробнее, из-за чего в документе-первоисточнике (например, старом документе «Оприходование товаров») могут отсутствовать движения по одному или нескольким регистрам накопления:

---

Пошаговый план диагностики проблемы

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

Шаг 1. Проверяем резервы и доступность товара
Откроем карточку проблемного товара и сформируем отчет «Остатки и доступность товаров». Нам необходимо убедиться, что весь объем товара не зарезервирован под какой-либо старый заказ покупателя. Если резерв присутствует, его необходимо снять документом «Закрытие заказов покупателей» или «Корректировка заказа».

Шаг 2. Проверяем остатки в разрезе организаций
Поскольку перемещение происходит в рамках организации, сформируем отчет «Ведомость по товарам организаций» с группировкой по складам. Проанализируем, числится ли товар на организации на нужном складе отправителя. Часто оказывается, что на складе товар есть, но числится он за другим юрлицом.

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

---

Разбор решений: как безопасно исправить ошибку?

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

Метод 1. Перепроведение старого документа (Опасный метод)

Как показал эксперимент автора темы на копии базы, простое перепроведение старого оприходования за 2011 год решает проблему с перемещением, так как документ заново формирует все необходимые движения по современным правилам системы.

Почему это крайне опасно в рабочей базе:

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

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

Метод 2. Документ «Корректировка записей регистров» (Рекомендуемый метод)

Для безопасного исправления ситуации воспользуемся штатным механизмом платформы 1С — созданием корректирующего документа текущей датой.

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

  1. Перейдем в главное меню: Операции -> Документы -> Корректировка записей регистров и создадим новый документ текущей датой (или датой начала текущего незакрытого отчетного периода).
  2. В открывшемся окне нажмем кнопку «Настройка состава регистров» и отметим флагами те регистры, по которым у нас обнаружилась нехватка движений (например, Товары организаций и Партии товаров на складах).
  3. На вкладках выбранных регистров добавим новые строки с видом движения «Приход»:
    • Укажем номенклатуру, склад, организацию и количество.
    • В качестве аналитики партии укажем наш старый документ оприходования от 2011 года (чтобы сохранить партионную последовательность).
  4. Проведем документ «Корректировка записей регистров».

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

Метод 3. Программная запись движений через обработку

Если подобных позиций номенклатуры очень много и ручной ввод корректировок нерационален, программист может написать внешнюю обработку, которая программно запишет движения непосредственно в регистры, привязав их к документу-основанию. Для автоматического исправления остатков в УТ 10.3 можно воспользоваться обработкой для выравнивания регистра «Товары организаций» по данным регистра «Товары на складах».

Рассмотрим пример кода на встроенном языке 1С, который восстанавливает движение прихода по регистру ТоварыОрганизаций без фактического интерактивного перепроведения самого документа:


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

// Блокируем автоматическую запись движений при записи объекта
ДокОбъект.ОбменДанными.Загрузка = Истина;

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

// Формируем новую запись
НоваяЗапись = НаборДвижений.ДобавитьПриход();
НоваяЗапись.Период = ДокОбъект.Дата;
НоваяЗапись.Организация = ДокОбъект.Организация;
НоваяЗапись.Номенклатура = ВыбраннаяНоменклатура;
НоваяЗапись.Склад = ДокОбъект.Склад;
НоваяЗапись.Количество = НужноеКоличество;

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

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

---

Дополнительные неочевидные факторы, которые стоит проверить

Если вы проверили основные регистры, но перемещение все равно не проводится, проанализируем следующие параметры:

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

← На главную