В типовой конфигурации 1С:Розница 2.3 часто не хватает функционала, который является базовым для более тяжелых решений, таких как Управление торговлей 11. Одной из таких задач является создание механизма сопоставления «своей» номенклатуры с номенклатурой поставщика. Это критично при оформлении заказов, импорте прайс-листов или работе с электронным документооборотом (ЭДО), когда один и тот же товар у разных поставщиков может называться по-разному. Разберем подробно, как правильно спроектировать и реализовать эту фичу, используя лучшие практики разработки на платформе 1С.
Проанализируем ситуацию, с которой сталкивается разработчик при проектировании связей. На первый взгляд, создание Регистра сведений кажется логичным решением для хранения связей типа «многие-ко-многим». Однако, если мы обратимся к эталонной реализации в УТ 11 или ERP, мы увидим, что там используется подчиненный справочник. Выясним причину такого выбора.
Использование справочника НоменклатураКонтрагентов (или НоменклатураПоставщиков) дает следующие преимущества:
Контрагенты. Это автоматически фильтрует данные в формах выбора.Номенклатура (ваша позиция) поиск по справочнику для обратного сопоставления работает так же быстро, как и по регистру сведений, при условии, что объем данных не исчисляется миллионами записей.Рассмотрим вариант реализации, который будет наиболее устойчив к обновлениям и удобен пользователю.
Создадим новый объект метаданных — справочник НоменклатураПоставщиков. Настроим его структуру следующим образом:
Контрагенты. Это позволит нам жестко привязать наименования к конкретному поставщику.СправочникСсылка.Номенклатура. Установите свойство Индексировать, чтобы обеспечить быстрый поиск.Для программиста, привыкшего к JavaScript, это можно представить как создание таблицы с Foreign Key на таблицу контрагентов и таблицу вашей номенклатуры.
Теперь проанализируем, как заставить форму Заказа поставщику работать интерактивно. Нам нужно, чтобы при выборе «Моей номенклатуры» подтягивалась «Номенклатура поставщика», и наоборот. Разберем это по шагам.
В форме документа (например, ЗаказПоставщику) в табличную часть Товары добавим колонку НоменклатураПоставщика (тип СправочникСсылка.НоменклатураПоставщиков).
Для автоматизации выбора воспользуемся событием ПриИзменении. Рассмотрим пример кода для обработки выбора вашей номенклатуры:
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
СтрокаТаблицы = Элементы.Товары.ТекущиеДанные;
Если ЗначениеЗаполнено(СтрокаТаблицы.Номенклатура) Тогда
// Вызываем серверную функцию для поиска сопоставления
НоменклатураПоставщика = НайтиСопоставлениеНаСервере(СтрокаТаблицы.Номенклатура, Объект.Поставщик);
Если ЗначениеЗаполнено(НоменклатураПоставщика) Тогда
СтрокаТаблицы.НоменклатураПоставщика = НоменклатураПоставщика;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция НайтиСопоставлениеНаСервере(Знач ВашаНоменклатура, Знач Поставщик)
Возврат Справочники.НоменклатураПоставщиков.НайтиПоРеквизиту("Номенклатура", ВашаНоменклатура, , Поставщик);
КонецФункции
И наоборот, если пользователь первым выбирает Номенклатуру поставщика, мы должны мгновенно заполнить поле Номенклатура:
&НаКлиенте
Процедура ТоварыНоменклатураПоставщикаПриИзменении(Элемент)
СтрокаТаблицы = Эelements.Товары.ТекущиеДанные;
Если ЗначениеЗаполнено(СтрокаТаблицы.НоменклатураПоставщика) Тогда
// Получаем данные напрямую из реквизита справочника-ссылки
СтрокаТаблицы.Номенклатура = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаТаблицы.НоменклатураПоставщика, "Номенклатура");
КонецЕсли;
КонецПроцедуры
Чтобы упростить жизнь пользователю, настроим Связи параметров выбора для реквизита НоменклатураПоставщика прямо в конфигураторе. Это позволит системе автоматически фильтровать список сопоставленных товаров по поставщику, указанному в шапке документа.
В свойствах поля НоменклатураПоставщика (в табличной части документа) найдите пункт Связи параметров выбора. Добавьте новую связь:
Отбор.ВладелецОбъект.ПоставщикБлагодаря этому, при нажатии на кнопку выбора в колонке «Номенклатура поставщика», пользователь увидит только те позиции, которые принадлежат контрагенту из текущего документа.
Рассмотрим важный стратегический вопрос: стоит ли «допиливать» Розницу или лучше внедрить связку УТ + Розница. Проанализируем аргументы участников обсуждения.
Почему доработка Розницы может быть оправдана:
Почему связка УТ 11 + Розница 2.3 эффективнее в долгосроке:
УТ 11 гораздо мощнее блок взаиморасчетов (акты сверки, графики платежей).Рознице реализованы специфично (через маркетинговые мероприятия), что может быть неудобно для смешанной торговли.УТ работает менеджер по закупкам и оптовый отдел, а Розница используется исключительно как Front-office для пробития чеков.Важно помнить: если вы выбираете путь синхронизации, учитывайте, что стандартный обмен через EnterpriseData часто не передает информацию о номенклатуре поставщиков. В Розницу будут приходить уже готовые документы поступления с вашей «чистой» номенклатурой.
Если ваша цель — быстрое и надежное решение в рамках Розницы 2.3, используйте подчиненный справочник. Это наиболее близкая к типовым стандартам архитектура. Помните об индексации полей поиска и использовании серверных вызовов НаСервереБезКонтекста для обеспечения отзывчивости интерфейса. Если же бизнес начинает расти в сторону опта или сложной логистики — не тратьте время на переписывание Розницы, переходите на УТ.