Почему не проводится документ «Установка цен номенклатуры» из-за совпадений по номенклатуре и характеристике в УТ 10.3?

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

При автоматическом или программном заполнении документа УстановкаЦенНоменклатуры в конфигурации «1С:Управление торговлей», редакция 10.3 пользователи и разработчики часто сталкиваются с ошибкой проведения. Система выдает сообщение вида: «Совпадают значения номенклатуры и характеристики номенклатуры у строк X и Y». Рассмотрим подробнее, почему возникают подобные конфликты и какими способами можно их устранить.

Главная причина: Архитектура регистра сведений «Цены номенклатуры»

Проанализируем механику работы регистра сведений ЦеныНоменклатуры. Этот регистр является периодическим с периодичностью «За день». Его ключевыми измерениями выступают:

  1. Номенклатура
  2. ХарактеристикаНоменклатуры
  3. ТипЦен

Платформа 1С на уровне СУБД запрещает запись двух и более записей с одинаковыми значениями измерений за один и тот же период (в данном случае — в течение одного дня). Поэтому модуль документа УстановкаЦенНоменклатуры содержит строгую встроенную проверку табличной части Товары. Если в документе дважды встречается одна и та же комбинация номенклатуры, характеристики и типа цен, проведении блокируется еще до попытки записи движений.

Основные технические причины появления дублей в документе

Выясним, из-за чего в табличную часть попадают повторяющиеся строки:

  1. Ошибка в запросе заполнения: Если табличная часть формируется программно из документов поступления или остатков без использования операторов группировки, в результат запроса попадут повторы.
  2. Дублирование элементов в справочнике «Номенклатура»: Наличие в базе физически разных карточек товаров с одинаковыми наименованиями. Даже если у них разные коды, но пользователь воспринимает их как одинаковый товар, при автоматизированном заполнении возникает путаница.
  3. Пустые характеристики: Если учет по характеристикам не ведется или в запрос попали позиции с незаполненным значением ХарактеристикаНоменклатуры, платформа подставляет значение Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка(). В результате несколько позиций с одинаковым товаром и пустыми характеристиками расцениваются как полные дубли.

Способ 1. Поиск и поиск-замена дублей в справочнике

Если в базе данных созданы повторяющиеся карточки номенклатуры, правильное решение — очистить справочник от дублей. Рассмотрим порядок действий:

  1. Откроем штатную обработку «Поиск и замена дублей» (или аналогичную из состава сервисных обработок).
  2. Зададим отбор по справочнику Номенклатура и укажем критерий сравнения (например, совпадение наименования).
  3. Выберем правильный ("главный") элемент и выполним замену ссылок во всех документах базы.
  4. Удалим помеченные на удаление дублирующиеся карточки.

Способ 2. Корректировка алгоритма программного заполнения (группировка в запросе)

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


ВЫБРАТЬ
	ИсходныеДанные.Номенклатура КАК Номенклатура,
	ИсходныеДанные.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
	ИсходныеДанные.ТипЦен КАК ТипЦен,
	МАКСИМУМ(ИсходныеДанные.Цена) КАК Цена
ИЗ
	РегистрНакопления.Закупки КАК ИсходныеДанные
СГРУППИРОВАТЬ ПО
	ИсходныеДанные.Номенклатура,
	ИсходныеДанные.ХарактеристикаНоменклатуры,
	ИсходныеДанные.ТипЦен

Использование агрегатных функций (например, МАКСИМУМ или СРЕДНЕЕ) гарантирует, что из запроса вернется только одна уникальная строка на каждую комбинацию товара и характеристики.

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

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

Рассмотри пример кода в обработке заполнения:


// Сворачиваем табличную часть по уникальным измерениям
ДокументОбъект.Товары.Свернуть("Номенклатура, ХарактеристикаНоменклатуры, ТипЦен", "Цена");

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

Способ 4. Использование штатной обработки «Формирование цен»

Разберем вариант заполнения без написания собственного кода. В форме документа УстановкаЦенНоменклатуры предусмотрен встроенный механизм подбора и расчета:

  1. Нажмем кнопку «Изменить» в командной панели документа.
  2. В открывшейся обработке выберем действие «Заполнить по ценам номенклатуры» или «Расчитать по базовым ценам».
  3. Штатный алгоритм УТ 10.3 автоматически проверяет данные на уникальность и предотвращает попадание одинаковых комбинаций номенклатуры и характеристик в один документ.
← На главную