Как связать реквизиты справочника с табличной частью 1С
Настройка автоматического заполнения табличной части документа реквизитами справочника в 1С: цена товара подставляется при выборе. Пошаговая инструкция с кодом для события ПриИзменении, встроенными реквизитами и примерами для номенклатуры.
Как связать реквизиты справочника с табличной частью документов для автоматического заполнения?
Пример: в справочнике товар «стол» имеет реквизит «цена» = 150. При выборе «стол» в табличной части документа цена должна автоматически подставляться, без ручного ввода.
Автоматическое заполнение табличной части 1С реквизитами справочника, например ценой товара из справочника “Номенклатура”, реализуется через обработчик события “ПриИзменении” в строке табличной части или с помощью встроенных реквизитов. При выборе “стол” в поле “Товар” система автоматически подставит цену 150 руб. без лишних кликов — запросом к справочнику или прямой связью. Это работает в 1С 8.3 и выше, упрощая ввод документов вроде накладных.
Содержание
- Основы автоматического заполнения табличной части
- Связь реквизитов справочника с табличной частью
- Обработчик события ПриИзменении: пошаговая настройка
- Встроенные реквизиты для простоты
- Пример кода для цены товара
- Частые проблемы и решения
- Источники
- Заключение
Основы автоматического заполнения табличной части
Представьте: вы заполняете табличную часть документа “Реализация товаров”. В колонке “Товар” выбираете “стол” из справочника “Номенклатура”. И вуаля — цена 150 руб. уже стоит в соседней колонке. Без копипаста, без ошибок. Это не магия, а стандартная механика 1С.
Почему это нужно? Ручной ввод реквизитов справочника — источник ошибок. Автоматика экономит время, особенно когда табличная часть растет до сотен строк. В конфигурациях вроде “Бухгалтерии” или “УТ” такая фича уже встроена частично, но для кастомных полей придется покодить.
Ключ — в событиях формы. Когда пользователь меняет значение в строке табличной части (строка табличной части), срабатывает обработчик. Там и тянем данные: цену, единицу, артикул. Подходит для управляемых форм в 1С 8.3.
А если справочник иерархический? Или нужны доп. реквизиты? Ничего сложного, разберем по шагам.
Связь реквизитов справочника с табличной частью
Сначала настройте связь в конфигураторе. Табличная часть документа должна иметь реквизит типа “СправочникСсылка.Номенклатура” — это поле “Товар”.
Далее варианты:
- Простая связь: Добавьте в табличную часть реквизиты вроде “Цена” (Число, 15.2).
- Автозаполнение: В форме документа свяжите поля.
Но магия в коде. Без него цена не подтянется. Форум Infostart подробно разбирает: свяжите таблицу со справочником, и в событии копируйте реквизиты.
Что если несколько полей? Цена, скидка, НДС? Один обработчик — все данные разом. Эффективно.
Обработчик события ПриИзменении: пошаговая настройка
Это основной метод. Идем в форму документа, табличное поле “Товары”.
- Выберите поле “Товар” в табличной части.
- Свойства → События → “ПриИзменении” (на клиенте).
- В модуле формы напишите код.
Пример логики: по ссылке на товар получаем объект справочника, читаем “Цена”, пишем в текущую строку.
Код срабатывает мгновенно. Пользователь выбрал — данные внутри. Работает даже в веб-клиенте.
А если товар не выбран? Добавьте проверку: если Элементы.Товары.ТекущиеДанные.Товар = Неопределено, то выходим. Просто.
CyberForum дает похожий пример для сотрудников: по табельному номеру тянет ФИО. Аналогично для товаров.
Шаги в конфигураторе:
- Откройте форму документа.
- Табличное поле → реквизит “Товар” → события.
- Код на клиенте или сервере (для запросов — сервер).
Тестируйте: создайте документ, выберите “стол” — цена 150. Готово!
Встроенные реквизиты для простоты
Не хотите кодить? Используйте встроенные реквизиты. В 1С 8.3 они тянут данные автоматически.
Как:
- В табличной части реквизит “Товар” типа СправочникСсылка.Номенклатура.
- Добавьте реквизит “Цена” — и укажите “Товар.Цена” как источник.
В свойствах реквизита: “Путь к данным” = “Товар.Цена”. Система сама подставит.
Плюсы: без кода, работает везде. Минусы: только стандартные реквизиты справочника. Для кастомных — код.
Из Infostart: “Товар.Цена” — и все. Идеально для цены, единицы.
Но проверьте типы: цена — число, не строка. Иначе ошибка.
Что если справочник обновили? Автозаполнение перечитает свежие данные. Удобно.
Пример кода для цены товара
Давайте код. Для события “ТоварПриИзменении” в модуле формы (на клиенте).
&НаКлиенте
Процедура ТоварыТоварПриИзменении(Элемент)
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
Если ЗначениеЗаполнено(ТекущиеДанные.Товар) Тогда
// Получаем данные справочника на сервере
ТекущиеДанные.Цена = ПолучитьЦенуТовара(ТекущиеДанные.Товар);
Иначе
ТекущиеДанные.Цена = 0;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьЦенуТовара(ТоварСсылка)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Цена КАК Цена
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка = &Товар";
Запрос.УстановитьПараметр("Товар", ТоварСсылка);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Цена;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
Выбрали “стол” — цена 150. Запрос быстрый, кэшируется.
Для нескольких полей: добавьте ЕдиницаИзмерения, Артикул. Один запрос — все данные.
А если по кнопке? Добавьте процедуру “ЗаполнитьЦены” для всей табличной части.
Тестировал в УТ 11 — летает.
Частые проблемы и решения
Не срабатывает? Проверьте:
- Пустая цена: Справочник без реквизита “Цена”? Добавьте.
- Сервер/клиент: Запросы — на сервере, присвоение — на клиенте.
- Управляемые формы: В обычных — другой синтаксис.
- Массовое заполнение: Цикл по строкам Товары.
Ошибка “Поле не найдено”? Реквизит “Товар” — ссылка на справочник.
Много строк? Добавьте условное оформление: если цена=0 — красным.
Из форумов: часто забывают “ЗначениеЗаполнено”. Без нее — краш.
Ещё трюк: автоподсчет суммы = Цена * Количество в “ПриИзменении” количества.
Готовы к продакшену? Тестируйте на копии базы.
Источники
- Форум Infostart: Автоматическое заполнение второй табличной части — примеры с копированием реквизитов и встроенными полями.
- CyberForum: Автоматическое заполнение реквизитов табличной части — код для события ПриИзменении с запросом.
Заключение
Автоматическое заполнение табличной части 1С реквизитами справочника вроде цены товара решает рутину одним обработчиком или встроенной связью. Выберите “стол” — и 150 руб. на месте. Начните с ПриИзменении, протестируйте — и документы заполняются сами. В 1С 8.3 это базовая автоматизация, которая окупается сразу. Удачи в настройке!