Как реализовать подбор товаров в табличную часть по уникальному реквизиту с проверкой истории реализации?

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

При автоматизации специфических бизнес-процессов, таких как аренда или сервисное обслуживание техники, часто возникает задача подбора номенклатуры не по стандартным критериям (наименование или артикул), а по уникальному идентификатору — например, пин-коду или серийному номеру. Рассмотрим, как правильно спроектировать такое решение в среде 1С.

Анализ задачи и выбор архитектурного решения

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

Для решения этой задачи мы можем пойти несколькими путями:

  1. Использование типового механизма Серийные номера. Это самый правильный с точки зрения архитектуры подход. Серийные номера позволяют отследить жизненный цикл конкретного экземпляра товара.
  2. Использование справочника Номенклатура поставщиков. Этот вариант подходит, если пин-код — это внешний идентификатор, который вы хотите привязать к номенклатуре без изменения основной карточки товара.
  3. Использование собственного Регистра сведений. Если пин-код — это несерийный признак, который уникально связывает товар и сделку, создание регистра позволит избежать лишней нагрузки на справочники.

Этапы реализации подбора

Разберем процесс поэтапно, чтобы обеспечить корректную работу системы и минимизировать ошибки пользователей.

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

Шаг 2: Формирование запроса к данным. Запрос должен не просто находить номенклатуру, а проверять историю владения. Основная ошибка — поиск только по Справочнику.Номенклатура. Нам нужно связать номенклатуру с Регистром накопления.Продажи или Регистром сведений.СерийныеНомера.

Рассмотрим пример логики запроса для проверки условий:


ВЫБРАТЬ
    ПродажиОбороты.Регистратор КАК ДокументРеализации,
    ПродажиОбороты.Контрагент КАК Контрагент,
    ПродажиОбороты.Номенклатура КАК Номенклатура
ИЗ
    РегистрНакопления.Продажи.Обороты(&,&, Регистратор, ) КАК ПродажиОбороты
ГДЕ
    ПродажиОбороты.Номенклатура.ПинКод = &ВведенныйПинКод

Реализация валидации данных

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

Шаг 3: Проверка и добавление в табличную часть.

Для корректной работы системы создадим процедуру, которая будет вызываться при выборе пин-кода:


Процедура ОбработатьВыборПинКода(ПинКод)
    ДанныеПродажи = ПолучитьДанныеПоПинКоду(ПинКод);
    Если ДанныеПродажи.Контрагент <> Объект.Контрагент Тогда
        ВызватьИсключение "Техника арендована другим контрагентом!";
    Иначе
        СтрокаТЧ = Объект.Техника.Добавить();
        СтрокаТЧ.Номенклатура = ДанныеПродажи.Номенклатура;
        СтрокаТЧ.ДокументРеализации = ДанныеПродажи.Регистратор;
    КонецЕсли;
КонецПроцедуры

Важные рекомендации по доработке

При реализации расширения для подобных задач учитывайте следующие аспекты:

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

← На главную