В процессе эксплуатации систем на базе 1С:Предприятие 8, в частности в конфигурации «Управление торговым предприятием» (УТП), пользователи часто сталкиваются с проблемой появления дублей в справочнике Номенклатура. Казалось бы, решение очевидно — воспользоваться типовой обработкой «Поиск и замена дублирующихся элементов». Однако на практике в крупных базах с включенным партионным учетом этот метод превращается в техническую ловушку. Прямая замена ссылок в документах прошлых периодов неизбежно приводит к необходимости перепроведения всей базы за несколько лет, что меняет историческую себестоимость и нарушает налоговую отчетность.
В данной статье мы разберем, как корректно «слить» дубликаты, сохранив при этом целостность данных в закрытых периодах и обеспечив актуальные остатки на оригинальной карточке товара. Проанализируем ситуацию, выясним причины рисков и рассмотрим пошаговые инструкции решения задачи.
Рассмотрим подробнее механику партионного учета в УТП. Когда мы просто меняем одну ссылку на другую во всех документах (например, в поступлениях и реализациях), мы фактически объединяем две разные цепочки товародвижения в одну. Проанализируем пример: у нас есть дубль «Ведро (копия)», купленный год назад по высокой цене, и оригинал «Ведро», купленный позже по низкой цене. В учете они жили раздельно. Как только мы меняем ссылку в документах, система при следующем перепроведении (или при расчете себестоимости) начнет списывать эти товары по правилу FIFO как единую позицию.
Это приведет к тому, что себестоимость реализации в закрытом периоде изменится: вместо дешевого «Ведра» может списаться дорогое «Ведро (копия)», которое теперь тоже называется «Ведро». Бухгалтер увидит, что остатки на счетах 281 или 201 «поплыли», а прибыль за прошлый год изменилась. Именно поэтому мы будем использовать методы переноса остатков текущим числом.
Разберем самый простой и понятный для бухгалтера способ — «мягкий» перенос остатков. Этот метод не требует глубоких технических знаний регистров, но требует аккуратности. Выполним следующие шаги:
СписаниеТоваров текущей датой. В табличную часть подберем все остатки по дублирующему элементу. Важно указать те же счета учета и аналитику, по которым числится товар.ОприходованиеТоваров той же датой. В качестве номенклатуры выберем «правильный» (оригинальный) элемент.Важный нюанс: Чтобы не искажать финансовый результат, в качестве статьи доходов/расходов при оприходовании и списании следует использовать техническую статью с типом «Прочие», которая не влияет на налогообложение, либо использовать документ КомплектацияТоваров, где в качестве комплекта выступает оригинал, а в качестве комплектующей — дубликат. Это позволит «схлопнуть» позиции без лишних движений по доходам/расходам.
Этот метод является более профессиональным и точным, так как позволяет перенести не только количественные остатки, но и резервы, а также партии «один в один». Рассмотрим его подробнее.
Документ КорректировкаЗаписейРегистров позволяет нам вручную создать записи «Расход» по дубликату и «Приход» по оригиналу сразу во всех необходимых регистрах. Посмотрим на список регистров, которые обязательно нужно задействовать в УТП:
ТоварыНаСкладах (остатки в количественном выражении);ПартииТоваровНаСкладах (Управленческий учет);ПартииТоваровНаСкладах (Бухгалтерский учет);СвободныеОстатки;ТоварыВРезервеНаСкладах (если есть активные заказы).Проанализируем ситуацию с резервами. Если дубликат забронирован под ЗаказПокупателя, то простое списание остатка приведет к «зависанию» резерва. Выясним причину: в регистре ТоварыВРезервеНаСкладах останется запись по дублю, которую документ списания не увидит. Поэтому в корректировке регистров мы должны перенести запись по этому регистру с аналитики «Дубль» на аналитику «Оригинал».
Главная хитрость при работе с корректировкой регистров в УТП — это правильное заполнение измерения ДокументОприходования. Если вы хотите, чтобы при списании оригинала в будущем система знала, когда реально пришел этот товар (для FIFO), необходимо приходовать оригинал на ту же самую партию (документ поступления), на которой висел дубликат.
Рассмотрим пример логики заполнения:
// Псевдокод логики переноса
Для Каждой СтрокиПартии Из ОстаткиДубля Цикл
// Списываем дубль
ДвижениеРасход = РегистрПартии.ДобавитьРасход();
ДвижениеРасход.Номенклатура = Дубль;
ДвижениеРасход.ДокументОприходования = СтрокиПартии.ДокументОприходования;
ДвижениеРасход.Количество = СтрокиПартии.Количество;
ДвижениеРасход.Стоимость = СтрокиПартии.Стоимость;
// Приходуем оригинал на ту же ПАРТИЮ
ДвижениеПриход = РегистрПартии.ДобавитьПриход();
ДвижениеПриход.Номенклатура = Оригинал;
ДвижениеПриход.ДокументОприходования = СтрокиПартии.ДокументОприходования;
ДвижениеПриход.Количество = СтрокиПартии.Количество;
ДвижениеПриход.Стоимость = СтрокиПартии.Стоимость;
КонецЦикла;
Такой подход гарантирует, что граница последовательности не сдвинется, а партионный учет останется абсолютно корректным.
Помимо остатков, у дубля могут быть установлены цены. Если мы просто удалим дубль, история цен пропадет. Проанализируем, как этого избежать. Необходимо создать новый документ УстановкаЦенНоменклатуры, куда подтянуть актуальные цены с дубля и переназначить их на оригинал.
Также стоит проверить справочник СпецификацииНоменклатуры. Если дубль используется в качестве комплектующего в спецификациях готовой продукции, его нужно заменить на оригинал вручную или обработкой «Поиск и замена значений», но ограничив область поиска только справочниками, не затрагивая документы прошлых периодов.
После того как все остатки, резервы и цены перенесены на оригинал, дубликат нельзя просто удалить (система не даст это сделать из-за ссылок в прошлых периодах). Рассмотрим правильный алгоритм завершения:
Таким образом, мы рассмотрели комплексный подход к объединению номенклатуры в 1С 8.2 УТП. Главный вывод: безопасность данных в закрытых периодах обеспечивается отказом от массовой замены ссылок в пользу корректировки регистров или складских документов текущим числом.