Как изменить коэффициент единицы измерения или упаковки номенклатуры в 1С, если она участвует в товародвижении?

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

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

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

Выясним причину блокировки: почему отмена проведения не помогает

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

Эта проверка срабатывает даже при отмене проведения документов по следующим причинам:

  1. Контроль наличия ссылок, а не движений регистров. Типовой программный код проверяет сам факт выбора упаковки в табличных частях документов (поступления, реализации, перемещения, инвентаризации). Для алгоритма не имеет значения статус документа: проверен он, не проведен или даже просто помечен на удаление. Если строка документа содержит ссылку на упаковку — система считает её задействованной.
  2. Ссылки в недвигающих складских регистрах и справочниках. Упаковка может фигурировать в статических данных: регистре сведений ШтрихкодыНоменклатуры, документах установки цен номенклатуры, индивидуальных прайс-листах, ресурсных спецификациях, планах сборки/разборки или шаблонах печати ценников.

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

Оценим риски принудительного изменения коэффициента

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

  1. Нарушение целостности формул в строках документов. В учетных решениях 1С строка табличной части одновременно хранит три реквизита: количество упаковок, коэффициент и итоговое количество в базовой единице хранения. Принудительное изменение коэффициента в справочнике задним числом не приводит к автоматическому пересчету уже записанных документов. В результате возникает расхождение: КоличествоУпаковок * Коэффициент != Количество.
  2. Искажение складских остатков и закрытия месяца. Если в дальнейшем любой из старых документов будет случайно открыт и перепроведен, программа выполнит пересчет по новому коэффициенту. Это вызовет искажение физических остатков на складах, возникновение отрицательных остатков и ошибки при расчете себестоимости в закрытых финансовых периодах.

Способ 1. Методологически корректное решение (заведение новой упаковки)

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

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

  1. Откроем карточку номенклатуры и перейдем в список используемых упаковок или единиц измерения.
  2. Создадим новый элемент справочника с требуемым названием (например, «Коробка 12 шт.») и укажем новый коэффициент пересчета.
  3. При необходимости перенесем или заново зарегистрируем штрихкод в регистре сведений ШтрихкодыНоменклатуры уже для созданной упаковки.
  4. Старую упаковку переименуем (например, добавив префикс «[Не использовать]») или пометим на удаление, чтобы складские сотрудники и менеджеры не выбирали её в новых документах.

Данный подход гарантирует полную сохранность исторических данных, исключает риск расхождения взаиморасчетов и складских остатков.

Способ 2. Исправление ошибки ввода без изменения кода конфигурации

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

Выполним следующую последовательность действий:

  1. Воспользуемся механизмом «Поиск ссылок на объект» (через меню «Еще» карточки упаковки или через меню разработчика), чтобы получить полный перечень объектов, использующих данную запись.
  2. В найденных документах временно заменим упаковку на базовую единицу хранения (штуки) либо временно очистим строки, если документов немного.
  3. Если упаковка зарегистрирована в регистре штрихкодов или прайс-листах — временно удалим эти записи.
  4. Откроем карточку упаковки: после того как ссылок в базе не останется, системная блокировка снимется, и поле коэффициента станет доступно для редактирования.
  5. Установим корректное значение, запишем объект и вернем упаковку в исходные документы с их последующим корректным перепроведением.

Способ 3. Программный обход проверки для разработчиков

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

Для этого используется режим загрузки данных, который отключает системные проверки в модуле объекта:


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

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

// Устанавливаем требуемый коэффициент
ОбъектУпаковка.Коэффициент = НовыйКоэффициент;

// Записываем объект без вызова типовых проверок товародвижения
ОбъектУпаковка.Записать();

Аналогичного эффекта можно добиться встроенной обработкой «Групповое изменение реквизитов». В меню «Дополнительные параметры» обработки необходимо активировать специальный режим разработчика и включить опцию отключения выполнения проверок при записи.

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

← На главную