Как реализовать автоматический подбор номенклатуры по поставщику в 1С:Предприятии 7.7?

Программист 1С v7.7 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Одной из частых задач при автоматизации торговых процессов в 1С 7.7 «Торговля и Склад» является настройка автоматического формирования заказов. Базовая функциональность не всегда позволяет жестко привязать товар к конкретному поставщику для фильтрации в документах. Давайте разберем по шагам, как решить эту задачу с помощью доработки конфигурации.

Реализация связки через справочник Аналоги

Наиболее корректным способом, не требующим кардинального изменения структуры базы данных, является использование штатного справочника Аналоги. В этом случае мы воспринимаем владельца каталога как поставщика (контрагента).

Для автоматизации заполнения заказа по минимальному остатку с учетом принадлежности товара поставщику, нам необходимо модифицировать процедуру ЗаполнитьПоМинОстатку. Суть метода заключается в предварительном сборе номенклатуры, относящейся к выбранному контрагенту, в таблицу значений.

Рассмотрим пример кода для фильтрации товаров в запросе:


ТекстЗапроса = \"
|Номенклатура = Справочник.Аналоги.Владелец;
|Поставщик = Справочник.Аналоги.Каталог.ВладелецКаталога;
|Условие(Поставщик = Контрагент);
|Группировка Номенклатура Без групп;\";
ЗапросНоменклатурыПоставщика = СоздатьОбъект(\"Запрос\");
Если ЗапросНоменклатурыПоставщика.Выполнить(ТекстЗапроса) = 1 Тогда
    ТаблицаНоменклатурыПоставщика = СоздатьОбъект(\"ТаблицаЗначений\");
    ЗапросНоменклатурыПоставщика.Выгрузить(ТаблицаНоменклатурыПоставщика,0,0);
КонецЕсли;

После получения этой таблицы мы можем использовать метод НайтиЗначение при обходе основного запроса по минимальным остаткам, чтобы отсечь лишние позиции, которые данный поставщик не поставляет.

Создание системы учета цен и поставщиков для позиции

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

Проанализируем процедуру заполнения списка поставщиков:


Процедура ЗаполнитьТаблицуПоставщиков()
    ТаблицаПоставщиков.УдалитьСтроки();
    ТекстЗапроса = \"
    |Аналог = Справочник.Аналоги.ТекущийЭлемент;
    |Номенклатура = Справочник.Аналоги.Владелец;
    |Поставщик = Справочник.Аналоги.Каталог.ВладелецКаталога;
    |Условие(Номенклатура = ТекНоменклатура);
    |Группировка Аналог Без групп;\";
    // ... выполнение запроса и перебор результатов
КонецПроцедуры

Работа с закупочными ценами и партионным учетом

Важным аспектом является получение актуальной цены закупки. Если ваша учетная политика предполагает партионный учет (FIFO или LIFO), данные лучше извлекать из регистра ПартииНаличие. Это позволит увидеть не только цену, но и дату последнего поступления.

Рассмотрим пример запроса к регистру для расчета средней цены:


ТекстЗапроса = \"
|Поставщик = Регистр.ПартииНаличие.Партия.Поставщик;
|ЗакупочнаяЦена = Регистр.ПартииНаличие.Партия.ЗакупочнаяЦена;
|Количество = Регистр.ПартииНаличие.Количество;
|Функция КоличествоКонОст = КонОст(Количество);
|Условие(Номенклатура = ТекНоменклатура);
|Группировка ЗакупочнаяЦена;\";

Рекомендации по отладке и оптимизации

  1. Используйте Сообщить(): При возникновении ошибок или некорректных расчетов сумм, выводите промежуточные значения (цены, остатки, флаги) в окно сообщений. Это лучший способ понять, на каком этапе «съезжает» логика.
  2. Проверяйте типы данных: Помните, что значения, полученные из запросов, могут требовать явного преобразования в тип Число перед математическими операциями: Сумма = Сумма + Число(Цена) * Число(Остаток).
  3. Избегайте лишних циклов: Если вы выполняете расчет итогов, старайтесь делать это в один проход по выборке РезультатЗапроса, не создавая избыточных вложенных циклов.
  4. Учетная политика: Если партионный учет настроен «по среднему», программа не сможет однозначно соотнести товар с конкретным приходом. Для получения точных данных о закупочных ценах перейдите на партионный метод учета в Учетной политике фирмы.

Настройка подобных механизмов требует осторожности при работе с Запрос и ТаблицаЗначений. Если вы планируете внедрить подбор, не перегружайте основную форму тяжелыми запросами — лучше вынести аналитику в отдельную Обработка, открываемую по кнопке. Это сохранит высокую скорость работы интерфейса даже на слабых компьютерах.

← На главную