Переход пользователей с платформы 1С 7.7 на 1С 8.3 (в частности, на конфигурацию «Управление торговлей 10.3») часто сопровождается вопросами об изменении привычной логики. Одной из таких проблем является отсутствие встроенного предупреждения о разнице в розничных ценах при перемещении товаров между складами. В версии 7.7 система часто сигнализировала, если цена на складе-получателе отличалась от цены на складе-отправителе. В УТ 10.3 механизмы работают иначе, и отсутствие контроля может привести к расхождениям в суммовом учете и выручке. Разберем подробно, почему так происходит и как настроить контроль.
Для начала проанализируем, как система хранит данные. В отличие от старых версий, где цена могла быть жестко привязана к остаткам конкретного склада, в УТ 10.3 используется иная архитектура. Рассмотрим ключевые объекты:
ЦеныНоменклатуры: это основной регистр, где хранятся цены. Если мы заглянем в его структуру, то увидим, что измерениями являются Номенклатура, ХарактеристикаНоменклатуры и ТипЦен. Склада здесь нет. Это означает, что цена привязана не к физическому месту, а к категории цены.Склады: для розничного склада (АТТ — автоматизированная торговая точка) в карточке обязательно указывается ТипЦенРозницы. Именно через эту связь система «понимает», по какой цене товар должен продаваться на конкретном складе.ТоварыВРознице: это критически важный узел. В отличие от оптовых складов, остатки на розничных складах хранятся в этом регистре не только в количестве, но и в сумме в розничных ценах.Проанализируем ситуацию: если мы перемещаем товар со склада А на склад Б, и на складе Б установлена другая розничная цена (другой тип цен или та же категория, но с другим значением), документ ПеремещениеТоваров просто переносит количество. Без дополнительных действий сумма в регистре ТоварыВРознице может перестать соответствовать формуле Количество * АктуальнаяЦена, что вызовет проблемы при розничных продажах и инвентаризации.
Выясним причину, по которой система не выдает предупреждение «из коробки». Логика разработчиков 1С предполагает разделение операций перемещения и изменения стоимости. Рассмотрим правильный алгоритм действий без изменения программного кода:
ПеремещениеТоваров между розничными складами.ПереоценкаТоваровВРознице на складе-получателе.ТоварыВРознице и позволит избежать расхождений в отчете о розничных продажах.Если этого не сделать, возникнет ситуация, описанная пользователями: товар на складе уже есть, цена на ценнике одна, а в системе в суммовом выражении остаток числится по старой цене склада-отправителя. При продаже по новой цене в конце смены «не сойдутся» деньги в кассе и списанная учетная стоимость.
Если клиент настаивает на «контроле как в 7.7», нам потребуется небольшая доработка документа ПеремещениеТоваров. Разберем по шагам, как реализовать программную проверку при проведении или записи документа.
Нам необходимо сравнить цену товара по типу цен склада-отправителя с ценой по типу цен склада-получателя. Рассмотрим пример кода, который можно разместить в модуле документа (или в подписке на событие ОбработкаПроведения):
// Пример логики проверки цен при перемещении
Для Каждого ТекСтрока Из Товары Цикл
// Получаем типы цен со складов
ТипЦенОтправителя = СкладОтправитель.ТипЦенРозницы;
ТипЦенПолучателя = СкладПолучатель.ТипЦенРозницы;
Если ЗначениеЗаполнено(ТипЦенОтправителя) И ЗначениеЗаполнено(ТипЦенПолучателя) Тогда
// Получаем актуальные цены через срез последних
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Номенклатура", ТекСтрока.Номенклатура);
ЦенаОтправителя = Ценообразование.ПолучитьЦенуНоменклатуры(ТекСтрока.Номенклатура, , ТипЦенОтправителя, Дата);
ЦенаПолучателя = Ценообразование.ПолучитьЦенуНоменклатуры(ТекСтрока.Номенклатура, , ТипЦенПолучателя, Дата);
Если ЦенаОтправителя <> ЦенаПолучателя Тогда
Сообщить("Внимание! Цена товара " + ТекСтрока.Номенклатура + " на складе-получателе отличается!");
// Здесь можно добавить Отказ = Истина, если нужен жесткий запрет
КонецЕсли;
КонецЕсли;
КонецЦикла;
В данном примере мы используем функцию общего модуля Ценообразование.ПолучитьЦенуНоменклатуры, которая является стандартной для УТ 10.3. Это позволяет корректно получить цены с учетом характеристик и актуальной даты.
Чтобы сделать работу пользователя максимально комфортной, рассмотрим вариант автоматического формирования документа переоценки. Вместо простого предупреждения, система может предложить создать документ на разницу в ценах.
Проанализируем шаги реализации этой функции:
ПереоценкаТоваровВРознице.СкладПолучатель из перемещения.Важный момент: если склады являются НТТ (неавтоматизированными торговыми точками), контроль цен становится еще более критичным. В НТТ учет ведется суммовым способом, и любая ошибка в оценке перемещаемого товара мгновенно приводит к неверному сальдо по складу в денежном выражении.
Подводя итоги, отметим, что «проблема» контроля цен в УТ 10.3 — это следствие более гибкой и сложной архитектуры платформы 8.3. Чтобы решить задачу, мы рекомендуем:
ПеремещениеТоваров проверку соответствия цен через обращение к регистру ЦеныНоменклатуры и реквизиту склада ТипЦенРозницы.Такой комплексный подход позволит сохранить привычный уровень контроля и обеспечить точность управленческого учета в розничной торговле.