Рассмотрим классическую техническую проблему, с которой часто сталкиваются пользователи и разработчики систем на обычных формах 1С (таких как «Управление торговлей 10.3», «Управление производственным предприятием 1.3» или «Комплексная автоматизация 1.1»). При попытке провести документ Перемещение товаров (или «Перемещение ТМЗ») на розничный склад программа блокирует проведение и выдает ошибку:
В строке номер "1" табличной части "Товары" для номенклатуры ... на складе ...: Не задана цена АТТ. Необходимо выполнить переоценку!
Ситуация кажется парадоксальной: документ Переоценка товаров в рознице создан, успешно проведен, в нем указана та же самая номенклатура и тот же склад. Более того, при попытке создать переоценку непосредственно из перемещения система заявляет, что для всех товаров розничные цены уже заданы. Проанализируем причины этого поведения системы и разберем пошаговые методы исправления.
При перемещении или поступлении товаров на склад с видом «Розничный» (в терминологии 1С это АТТ — Автоматизированная торговая точка) программа обязана вести учет не только в количественном выражении, но и в продажных (розничных) ценах. Эти цены хранятся в периодическом регистре сведений Цены номенклатуры в рознице (или Цены АТТ).
Когда документ перемещения проверяет наличие цен, он делает запрос к регистру сведений по трем ключевым разрезам аналитики:
Если хотя бы одно из этих измерений в документе перемещения не совпадает с записью в регистре цен, алгоритм проведения считает, что розничная цена отсутствует, и выдает ошибку.
Проанализируем программный код общего модуля УправлениеРозничнойТорговлей, который отвечает за эту проверку:
// Фрагмент алгоритма проверки цен АТТ перед проведением перемещения
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыДокумента.Номенклатура КАК Номенклатура,
| ТоварыДокумента.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ЕСТЬNULL(ЦеныРозничные.Цена, 0) КАК Цена
|ИЗ
| ВременнаяТаблицаТоваров КАК ТоварыДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыВРознице.СрезПоследних(&Период, Склад = &Склад) КАК ЦеныРозничные
| ПО ТоварыДокумента.Номенклатура = ЦеныРозничные.Номенклатура
| И ТоварыДокумента.ЕдиницаИзмерения = ЦеныРозничные.ЕдиницаИзмерения";
Если поле Цена в результате запроса оказывается равным нулю, проведение отменяется с вызовом исключения.
Разберем подробнее четыре основные причины, почему возникает эта рассинхронизация.
---
Это наиболее коварная и распространенная техническая проблема. Справочник ЕдиницыИзмерения в 1С является подчиненным по отношению к справочнику Номенклатура. Это значит, что для каждого товара создается свой собственный элемент единицы измерения (например, «шт.»), имеющий уникальный внутренний идентификатор (GUID) в базе данных.
При обмене данными (например, между «1С:Розница» и «1С:Управление торговлей» с использованием правил «Конвертации данных») может произойти сбой синхронизации. Если правила обмена настроены некорректно, при очередной загрузке документов программа создает **дубликат** единицы измерения для товара с новым GUID и перезаписывает реквизит ЕдиницаХраненияОстатков в карточке номенклатуры.
В результате складывается следующая картина:
Переоценка товаров в рознице был проведен ранее и зафиксировал цену для старой единицы измерения (например, «шт.» с GUID_1).Перемещение товаров программа подставляет текущую единицу хранения остатков (GUID_2) и пытается найти розничную цену для GUID_2.Цены АТТ запись существует только для GUID_1. Программа выдает ошибку проведения. При этом автозаполнение новой переоценки сообщает, что «цены заданы», так как оно анализирует наличие записей в целом по номенклатуре, не учитывая внутренние дубли единиц.---
В процессе обменов или ручного редактирования карточек товаров у единицы измерения в табличной части документа перемещения может очиститься или стать равным нулю реквизит Коэффициент. При проведении документа программа рассчитывает продажную стоимость путем умножения розничной цены на коэффициент единицы измерения. Если коэффициент равен нулю, расчетная цена за единицу также обнуляется, что приводит к срабатыванию ошибки проверки цен АТТ.
---
Розничные цены в АТТ действуют с точностью до секунды. Если документ Переоценка товаров в рознице и документ Перемещение товаров созданы в один день, крайне важно их взаимное время проведения. Если перемещение по времени записано хотя бы на одну секунду раньше, чем переоценка (например, перемещение в 12:00:00, а переоценка в 12:00:01), то в момент проведения перемещения розничная цена еще официально «не существует» для системы.
---
Учет розничных цен ведется в строгом разрезе складов, а в некоторых конфигурациях (при определенных настройках учетной политики) — и в разрезе организаций. Ошибка возникнет, если:
---
Если вы столкнулись с подобным поведением системы, последовательно примените следующие шаги для исправления ситуации.
Для устранения дублей, возникших из-за некорректного обмена, выполним следующие действия:
ЕдиницыИзмерения.Чтобы предотвратить повторное появление дублей при последующих обменах, необходимо скорректировать правила конвертации объектов (ПКО):
ЕдиницыИзмерения.Владелец (Номенклатура) и ЕдиницаПоКлассификатору (или Наименование). Поиск только по уникальному идентификатору (GUID) в данном случае часто приводит к дублированию, так как в разных базах GUID подчиненных единиц изначально различаются.Номенклатура для свойств ЕдиницаХраненияОстатков и ЕдиницаДляОтчетов убедимся, что установлены правила сопоставления по вышеуказанным полям поиска.Проанализируем табличную часть перемещения:
Коэффициент, чтобы вывести её на форму.Если аналитика заполнена верно, но документ все равно не проводится, скорректируем время документов:
Переоценка товаров в рознице и изменим его время, переведя на начало дня (например, на 00:00:00). Проведем документ.Перемещение товаров и установите его время на текущее или на конец дня (например, 23:59:59). Проведем документ повторно.Если на вашем предприятии розничный склад используется преимущественно для внутреннего перемещения и списания товаров, и вам не требуется жесткий контроль розничных цен и маржинальности на уровне розничных складов АТТ:
Склады (места хранения).Вид склада со значения «Розничный» на «Оптовый».Важно: Оптовый склад не требует обязательного наличия цен в регистре АТТ. После этого изменения документы перемещения будут проводиться мгновенно без каких-либо проверок продажной стоимости, что существенно упростит документооборот.