Как очистить таблицу значений во внешней обработке (ERT) в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

Разница между методами УдалитьСтроки и Очистить для объекта ТаблицаЗначений

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

  1. Метод УдалитьСтроки() — это правильный и штатный способ очистки содержимого таблицы. Он удаляет все строки с данными, но при этом сохраняет саму структуру таблицы — все ранее созданные колонки (их имена, типы данных, ширину и заголовки). После вызова этого метода форма остается готовой к добавлению новых записей.
  2. Метод Очистить() — данный метод полностью уничтожает объект: удаляются не только строки, но и все описанные колонки таблицы. Если после вызова Очистить() пользователь или алгоритм попытается выполнить метод НоваяСтрока() и обратиться к колонкам по имени, платформа выдаст критическую ошибку, так как колонок в таблице больше не существует.
  3. Несуществующий метод УдалитьВсе() — попытка вызвать данный метод приводит к ошибке «Поле агрегатного объекта не найдено», поскольку такого метода у объекта ТаблицаЗначений в 1С 7.7 нет.

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


Процедура ОчиститьТаблицу()
    // Удаляем только строки, сохраняя структуру колонок
    ТаблСотр.УдалитьСтроки();
    // Обновляем форму для визуального отображения изменений
    Форма.Обновить();
КонецПроцедуры

Выясняем причину повторного появления данных при открытии

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

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

  1. Чтение данных из внешнего файла: используются функции ЗначениеИзФайла(ИмяФайла, ТаблСотр), чтение текстового файла через объект Текст или загрузка из базы DBF через объект XBase. Путь к файлу обычно формируется с использованием функций КаталогИБ(), КаталогПользователя() или КаталогВременныхФайлов().
  2. Использование хранилища настроек: чтение данных с помощью системной функции ВосстановитьЗначение(ИмяЗначения) или встроенного механизма автосохранения реквизитов формы.
  3. Заполнение выборкой из справочников/документов: вызов процедуры заполнения (например, ЗагрСпр()), которая при каждом запуске выполняет цикл по элементам информационной базы.

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


Процедура ПриОткрытии()
    // 1. Создаем структуру таблицы (колонки должны создаваться всегда)
    ТаблСотр.НоваяКолонка("Сотрудник", "Справочник.Сотрудники");
    ТаблСотр.НоваяКолонка("Оклад", "Число", 15, 2);
    
    // 2. Блок автоматической загрузки из файла
    ИмяФайлаДанных = КаталогПользователя() + "sotr_list.dat";
    Если ФС.СуществуетФайл(ИмяФайлаДанных) = 1 Тогда
        // Если автозагрузка не требуется, эту строку можно отключить или очистить сам файл
        // ЗначениеИзФайла(ИмяФайлаДанных, ТаблСотр);
    КонецЕсли;
КонецПроцедуры

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

В диалогах 1С 7.7 элементы управления (кнопки, таблицы, надписи) могут быть распределены по слоям. Если в редакторе формы кнопка очистки присутствует, но в режиме предприятия она не видна, необходимо настроить отображение соответствующего слоя.

Рассмотрим подробнее работу с методом Форма.ИспользоватьСлой():

  1. Метод принимает два параметра: имя слоя (или слоев через запятую) и режим отображения.
  2. Значение второго параметра 1 активирует указанный слой совместно с базовым (основным) слоем формы.
  3. Значение второго параметра 2 добавляет указанный слой к текущему списку уже видимых слоев диалога.

Посмотрим на пример включения слоя при открытии обработки:


Процедура ПриОткрытии()
    // Включаем отображение основного слоя и слоя с дополнительными кнопками
    Форма.ИспользоватьСлой("Основной,СлойОчистки", 1);
КонецПроцедуры

Полное удаление сохраненного внешнего файла с данными

Если данные таблицы сохраняются во внешний файл на диске, чтобы они не появлялись при следующем старте обработки, можно выполнить физическое удаление этого файла прямо из кода с помощью объекта ФС (Файловая Система):


Процедура ПолнаяОчистка()
    // Очищаем строки таблицы на форме
    ТаблСотр.УдалитьСтроки();
    
    // Удаляем файл кэша, чтобы данные не загрузились повторно
    ПутьКФайлу = КаталогПользователя() + "sotr_list.dat";
    Если ФС.СуществуетФайл(ПутьКФайлу) = 1 Тогда
        ФС.УдалитьФайл(ПутьКФайлу);
    КонецЕсли;
    
    Форма.Обновить();
КонецПроцедуры

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

← На главную