Как автоматически установить фиксированное значение в строках табличной части

Программист Управленческий учет Сфера услуг, туризм и социальный сектор
← На главную

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

Разбор типичной ошибки: Элементы против Данных

Часто начинающие разработчики пытаются присвоить значение через обращение к элементам формы, например: Элементы.УслугиРасценка = 20;. Это в корне неверный подход. Разберем причину: коллекция Элементы управляет визуальным отображением (видимость, доступность, цвет), а не самими данными. Для установки значения в табличной части нам нужно работать с объектом данных (документом) и его строками.

Способ 1. Программное заполнение в серверной процедуре

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


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

В данном примере мы используем метод Добавить() для коллекции табличной части. После создания строки мы напрямую обращаемся к реквизиту Расценка и записываем в него нужное число.

Способ 2. Использование свойства «Значение заполнения» в метаданных

Если вам нужно, чтобы значение «20» подставлялось автоматически не только при программном заполнении, но и при ручном нажатии пользователем кнопки «Добавить», можно обойтись без кода. Рассмотрим этот алгоритм:

  1. Откройте конфигуратор и найдите ваш документ.
  2. Перейдите на закладку Данные и найдите нужную табличную часть.
  3. Откройте свойства реквизита этой табличной части (например, Расценка).
  4. Найдите свойство Значение заполнения и введите там 20.

После этого платформа 1С будет автоматически проставлять это число в каждой новой строке, создаваемой пользователем в интерфейсе.

Способ 3. Обработка добавления строки на форме

Бывают случаи, когда значение должно зависеть от условий или устанавливаться только в момент интерактивного редактирования. Для этого мы можем использовать событие таблицы ПриНачалеРедактирования на форме. Выясним, как это реализовать:


&НаКлиенте
Процедура УслугиПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
    
    // Нас интересует только создание действительно новой строки
    Если НоваяСтрока И НЕ Копирование Тогда
        ТекущиеДанные = Элементы.Услуги.ТекущиеДанные;
        Если ТекущиеДанные <> Неопределено Тогда
            ТекущиеДанные.Расценка = 20;
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

Здесь мы используем свойство ТекущиеДанные элемента формы типа Таблица. Это позволяет оперативно изменять данные в строке, которую пользователь только что начал вводить.

Способ 4. Защита значения от изменения

Если вы зафиксировали значение 20 и не хотите, чтобы пользователи могли его отредактировать вручную, установите свойство элемента формы ТолькоПросмотр. Проанализируем, как это сделать:

Найдите в дереве элементов формы колонку УслугиРасценка. В палитре свойств установите флаг Только просмотр в значение Истина. Таким образом, число будет подставляться программно, но поле останется недоступным для корректировки пользователем.

Полезные советы по оптимизации

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

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

← На главную