Как правильно заполнить таблицу значений на управляемой форме 1С при загрузке данных?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке обработок на управляемых формах многие начинающие разработчики сталкиваются с тем, что привычные методы работы с таблицами, характерные для обычных форм, перестают работать. В частности, это касается заполнения таблиц данными из внешних файлов (например, TXT, CSV или Excel). Давайте разберемся, почему возникают ошибки и как правильно реализовать этот процесс.

Понимаем разницу: Таблица значений и Данные формы коллекция

На управляемой форме реквизит, отображающий таблицу, является не классической Таблицей значений, а объектом ДанныеФормыКоллекция. Этот тип данных предназначен для отображения информации пользователю и обладает ограниченным набором методов. У него нет прямого доступа к структуре колонок в том виде, в котором мы привыкли работать на сервере. Поэтому попытки напрямую обращаться к Колонки[Номер].Имя часто приводят к ошибкам исполнения.

Разбираем решение задачи через преобразование типов

Чтобы эффективно манипулировать данными, которые мы получаем из файла, необходимо использовать механизм преобразования данных формы в объект встроенного языка и обратно. Для этого используются методы РеквизитФормыВЗначение() и ЗначениеВРеквизитФормы(). Рассмотрим пошаговый алгоритм действий.

  1. Выгружаем данные из реквизита формы в «настоящую» Таблицу значений с помощью РеквизитФормыВЗначение().
  2. В цикле обрабатываем строки загружаемого файла.
  3. Добавляем строки в локальную Таблицу значений и заполняем их данными из файла.
  4. После завершения всех циклов загружаем обработанную таблицу обратно на форму методом ЗначениеВРеквизитФормы().

Пример реализации кода

Рассмотрим пример, где мы читаем данные из файла и заполняем ими реквизит формы ТаблицаЗагрузки:


// Преобразуем данные формы в полноценную таблицу значений для манипуляций
ПреобразованнаяТЗ = РеквизитФормыВЗначение("ТаблицаЗагрузки");

Для НомерСтроки = 2 по ЗагружаемыйФайл.КоличествоСтрок() Цикл
    Строка = ЗагружаемыйФайл.ПолучитьСтроку(НомерСтроки);
    Если Не ЗначениеЗаполнено(Строка) Тогда
        Продолжить;
    КонецЕсли;

    МассивКолонок = РазложитьСтрокуВМассивПодстрок(Строка, Разделитель);
    
    // Добавляем строку в локальную таблицу
    НоваяСтрока = ПреобразованнаяТЗ.Добавить();
    
    Для НомерКолонки = 1 по МассивКолонок.Количество() - 1 Цикл 
        Если МассивКолонок[НомерКолонки - 1] = "XXX" Тогда
            Продолжить;
        КонецЕсли;

        ТекущееЗначение = МассивКолонок[НомерКолонки - 1];
        ИмяКолонки = ПреобразованнаяТЗ.Колонки[НомерКолонки - 1].Имя;             
        НоваяСтрока[ИмяКолонки] = ТекущееЗначение;             
    КонецЦикла;        
КонецЦикла; 

// Возвращаем данные обратно на форму
ЗначениеВРеквизитФормы(ПреобразованнаяТЗ, "ТаблицаЗагрузки");

Важные рекомендации по оптимизации

Хотя предложенный выше метод является рабочим, важно помнить о производительности:

Следуя этим правилам, вы сможете организовать надежную загрузку данных в формы 1С, избегая распространенных ошибок типизации и проблем с производительностью.

← На главную