Как сохранить серии в документе «Приобретение товаров и услуг» при смене склада в 1С:ERP?

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

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

Выясняем причину: почему система очищает серии?

Прежде чем приступать к исправлению, проанализируем внутреннюю логику конфигурации. В 1С:ERP (и аналогично в 1С:КА) учет серий строится на базе объекта ПолитикиУчетаСерий. Важной особенностью является то, что политика привязывается к связке Вид номенклатуры + Склад. Это означает, что для одного и того же товара на Складе №1 серии могут учитываться справочно, а на Складе №2 — по остаткам (FEFO).

Когда мы меняем склад в документе, система инициирует процедуру пересчета видимости и доступности полей. Она проверяет, нужны ли серии на новом складе. Поскольку контекст складского учета меняется, типовой алгоритм 1С считает наиболее безопасным очистить старые данные, чтобы избежать записи серий, которые могут не соответствовать политике нового склада (например, если на новом складе требуется указание срока годности, а на старом фиксировался только номер).

Решение 1: Использование штатного буфера обмена (без программирования)

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

  1. Перейдем на закладку Товары в документе.
  2. Выделим все строки табличной части (используем сочетание клавиш Ctrl + A).
  3. Скопируем строки в буфер обмена системы (нажмем Ctrl + C).
  4. Вернемся на закладку Основное и изменим Склад на правильный. Согласимся с очисткой серий, если система задаст вопрос.
  5. Снова перейдем на закладку Товары, выделим все (пустые в плане серий) строки и нажмем Ctrl + V.

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

Решение 2: Настройка «Поступление на несколько складов»

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

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

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

Решение 3: Программная доработка через расширение

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

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


&НаКлиенте
Процедура После_СкладПриИзменении(Элемент)
    // Вызываем серверный метод для восстановления серий, 
    // если они были очищены типовым кодом, но политики совпадают
    ВосстановитьСерииПослеСменыСкладаСервер();
КонецПроцедуры

&НаСервере
Процедура ВосстановитьСерииПослеСменыСкладаСервер()
    // Логика проверки политик нового склада
    // Если на новом складе серии требуются и структура совпадает, 
    // переносим данные из временной структуры обратно в Объект.Товары
КонецПроцедуры

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

Решение 4: Документальное оформление через Перемещение

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

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

Выводы и рекомендации

Мы проанализировали несколько вариантов решения проблемы очистки серий. Подведем итог:

← На главную