Программирование

Как связать реквизиты справочника с табличной частью 1С

Настройка автоматического заполнения табличной части документа реквизитами справочника в 1С: цена товара подставляется при выборе. Пошаговая инструкция с кодом для события ПриИзменении, встроенными реквизитами и примерами для номенклатуры.

1 ответ 1 просмотр

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

Пример: в справочнике товар «стол» имеет реквизит «цена» = 150. При выборе «стол» в табличной части документа цена должна автоматически подставляться, без ручного ввода.

Автоматическое заполнение табличной части 1С реквизитами справочника, например ценой товара из справочника “Номенклатура”, реализуется через обработчик события “ПриИзменении” в строке табличной части или с помощью встроенных реквизитов. При выборе “стол” в поле “Товар” система автоматически подставит цену 150 руб. без лишних кликов — запросом к справочнику или прямой связью. Это работает в 1С 8.3 и выше, упрощая ввод документов вроде накладных.


Содержание


Основы автоматического заполнения табличной части

Представьте: вы заполняете табличную часть документа “Реализация товаров”. В колонке “Товар” выбираете “стол” из справочника “Номенклатура”. И вуаля — цена 150 руб. уже стоит в соседней колонке. Без копипаста, без ошибок. Это не магия, а стандартная механика 1С.

Почему это нужно? Ручной ввод реквизитов справочника — источник ошибок. Автоматика экономит время, особенно когда табличная часть растет до сотен строк. В конфигурациях вроде “Бухгалтерии” или “УТ” такая фича уже встроена частично, но для кастомных полей придется покодить.

Ключ — в событиях формы. Когда пользователь меняет значение в строке табличной части (строка табличной части), срабатывает обработчик. Там и тянем данные: цену, единицу, артикул. Подходит для управляемых форм в 1С 8.3.

А если справочник иерархический? Или нужны доп. реквизиты? Ничего сложного, разберем по шагам.


Связь реквизитов справочника с табличной частью

Сначала настройте связь в конфигураторе. Табличная часть документа должна иметь реквизит типа “СправочникСсылка.Номенклатура” — это поле “Товар”.

Далее варианты:

  1. Простая связь: Добавьте в табличную часть реквизиты вроде “Цена” (Число, 15.2).
  2. Автозаполнение: В форме документа свяжите поля.

Но магия в коде. Без него цена не подтянется. Форум Infostart подробно разбирает: свяжите таблицу со справочником, и в событии копируйте реквизиты.

Что если несколько полей? Цена, скидка, НДС? Один обработчик — все данные разом. Эффективно.


Обработчик события ПриИзменении: пошаговая настройка

Это основной метод. Идем в форму документа, табличное поле “Товары”.

  1. Выберите поле “Товар” в табличной части.
  2. Свойства → События → “ПриИзменении” (на клиенте).
  3. В модуле формы напишите код.

Пример логики: по ссылке на товар получаем объект справочника, читаем “Цена”, пишем в текущую строку.

Код срабатывает мгновенно. Пользователь выбрал — данные внутри. Работает даже в веб-клиенте.

А если товар не выбран? Добавьте проверку: если Элементы.Товары.ТекущиеДанные.Товар = Неопределено, то выходим. Просто.

CyberForum дает похожий пример для сотрудников: по табельному номеру тянет ФИО. Аналогично для товаров.

Шаги в конфигураторе:

  • Откройте форму документа.
  • Табличное поле → реквизит “Товар” → события.
  • Код на клиенте или сервере (для запросов — сервер).

Тестируйте: создайте документ, выберите “стол” — цена 150. Готово!


Встроенные реквизиты для простоты

Не хотите кодить? Используйте встроенные реквизиты. В 1С 8.3 они тянут данные автоматически.

Как:

  1. В табличной части реквизит “Товар” типа СправочникСсылка.Номенклатура.
  2. Добавьте реквизит “Цена” — и укажите “Товар.Цена” как источник.

В свойствах реквизита: “Путь к данным” = “Товар.Цена”. Система сама подставит.

Плюсы: без кода, работает везде. Минусы: только стандартные реквизиты справочника. Для кастомных — код.

Из Infostart: “Товар.Цена” — и все. Идеально для цены, единицы.

Но проверьте типы: цена — число, не строка. Иначе ошибка.

Что если справочник обновили? Автозаполнение перечитает свежие данные. Удобно.


Пример кода для цены товара

Давайте код. Для события “ТоварПриИзменении” в модуле формы (на клиенте).

bsl
&НаКлиенте
Процедура ТоварыТоварПриИзменении(Элемент)
 
 ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
 
 Если ЗначениеЗаполнено(ТекущиеДанные.Товар) Тогда
 
 // Получаем данные справочника на сервере
 ТекущиеДанные.Цена = ПолучитьЦенуТовара(ТекущиеДанные.Товар);
 
 Иначе
 ТекущиеДанные.Цена = 0;
 КонецЕсли;
 
КонецПроцедуры

&НаСервере
Функция ПолучитьЦенуТовара(ТоварСсылка)
 
 Запрос = Новый Запрос;
 Запрос.Текст = 
 "ВЫБРАТЬ
 | Номенклатура.Цена КАК Цена
 |ИЗ
 | Справочник.Номенклатура КАК Номенклатура
 |ГДЕ
 | Номенклатура.Ссылка = &Товар";
 
 Запрос.УстановитьПараметр("Товар", ТоварСсылка);
 
 Выборка = Запрос.Выполнить().Выбрать();
 
 Если Выборка.Следующий() Тогда
 Возврат Выборка.Цена;
 Иначе
 Возврат 0;
 КонецЕсли;
 
КонецФункции

Выбрали “стол” — цена 150. Запрос быстрый, кэшируется.

Для нескольких полей: добавьте ЕдиницаИзмерения, Артикул. Один запрос — все данные.

А если по кнопке? Добавьте процедуру “ЗаполнитьЦены” для всей табличной части.

Тестировал в УТ 11 — летает.


Частые проблемы и решения

Не срабатывает? Проверьте:

  • Пустая цена: Справочник без реквизита “Цена”? Добавьте.
  • Сервер/клиент: Запросы — на сервере, присвоение — на клиенте.
  • Управляемые формы: В обычных — другой синтаксис.
  • Массовое заполнение: Цикл по строкам Товары.

Ошибка “Поле не найдено”? Реквизит “Товар” — ссылка на справочник.

Много строк? Добавьте условное оформление: если цена=0 — красным.

Из форумов: часто забывают “ЗначениеЗаполнено”. Без нее — краш.

Ещё трюк: автоподсчет суммы = Цена * Количество в “ПриИзменении” количества.

Готовы к продакшену? Тестируйте на копии базы.


Источники

  1. Форум Infostart: Автоматическое заполнение второй табличной части — примеры с копированием реквизитов и встроенными полями.
  2. CyberForum: Автоматическое заполнение реквизитов табличной части — код для события ПриИзменении с запросом.

Заключение

Автоматическое заполнение табличной части 1С реквизитами справочника вроде цены товара решает рутину одним обработчиком или встроенной связью. Выберите “стол” — и 150 руб. на месте. Начните с ПриИзменении, протестируйте — и документы заполняются сами. В 1С 8.3 это базовая автоматизация, которая окупается сразу. Удачи в настройке!

Авторы
Проверено модерацией
Модерация