Разработка и Конфигурация · 9 мин
Как обновить таблицу в 1С: практическое руководство
Разбираем, как обновить таблицу в 1С: табличную часть документа, таблицу значений, динамический список на форме и данные через обработку. Пошаговые инструкции и код.
Под «обновлением таблицы» в 1С обычно понимают несколько разных задач: перечитать данные табличной части документа, обновить динамический список на форме, перезаполнить таблицу значений в обработке или массово изменить строки в табличной части справочника. От того, какая именно задача стоит, зависит и способ решения.
Для пользователя обновление чаще всего означает простое действие — нажать кнопку «Обновить» или клавишу F5, чтобы форма показала актуальные данные. Для разработчика и администратора задача шире: программно перезаполнить таблицу значений, обновить табличную часть без повторной записи объекта или массово изменить данные групповой обработкой.
Ниже разобраны все основные сценарии: от пользовательских до программных, с примерами кода на встроенном языке 1С и проверками результата. Инструкции подходят для типовых конфигураций на управляемых формах (1С:Бухгалтерия, 1С:Управление торговлей, 1С:ERP и аналогичных).
Как обновить данные таблицы на форме в пользовательском режиме
Самый частый сценарий — список документов или справочника показывает устаревшие данные, потому что другой пользователь только что внёс изменения. В управляемых формах динамический список не всегда обновляется автоматически, поэтому данные нужно перечитать вручную.
Нажмите клавишу F5 на клавиатуре либо кнопку «Ещё» → «Обновить» в правой части командной панели списка. В некоторых конфигурациях кнопка обновления вынесена отдельно в виде круглой стрелки. После обновления список перечитывает данные из базы и показывает актуальное состояние.
Если открыт сам документ, а не список, перечитать данные можно через «Ещё» → «Перечитать». Учтите: несохранённые изменения в открытой форме будут потеряны, система предупредит об этом. Если документ редактируется другим пользователем и заблокирован, перечитывание не поможет — дождитесь освобождения объекта.
- 1Откройте нужный список или форму документа
- 2Нажмите F5 или «Ещё» → «Обновить»
- 3Проверьте, что появились ожидаемые изменения
- 4Если данные не изменились — закройте и откройте форму заново
Как программно обновить динамический список на форме
В управляемых формах списки документов и справочников построены на динамических списках. Чтобы обновить такой список из кода — например, после программного создания документа — используется метод Обновить() расширения таблицы формы.
Типовой вызов выглядит так: Элементы.Список.Обновить();. Он выполняется на клиенте и заставляет динамический список перечитать данные. Если обновление нужно после серверной процедуры, вызов размещают после её завершения в клиентском контексте.
Альтернатива — метод ОповеститьОбИзменении(), который уведомляет все открытые формы о том, что конкретный объект изменился. Это корректный способ при программной записи документа: все списки, где он отображается, обновятся автоматически без лишних перечитываний всей таблицы.
// После записи документа из обработки
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
ОповеститьОбИзменении(ДокументОбъект.Ссылка);
// Или принудительно обновить список на текущей форме
Элементы.Список.Обновить();Как перезаполнить таблицу значений в обработке
Таблица значений — объект встроенного языка, который хранит данные в памяти и часто выводится на формы отчётов и обработок. Обновить её означает очистить старые строки и загрузить новые. Прямого метода «обновить» у таблицы значений нет — данные перезаполняются заново.
Стандартная последовательность: вызвать ТаблицаДанных.Очистить(), затем выполнить запрос к базе и загрузить результат через Загрузить(Запрос.Выполнить().Выгрузить()). Если таблица связана с реквизитом формы типа «ТаблицаЗначений», изменения отобразятся на форме автоматически.
Если нужно не полностью перезаполнить, а изменить отдельные строки, используйте поиск: Найти(), НайтиСтроки() или обход в цикле с присвоением новых значений колонкам. Это быстрее, чем полная перезагрузка, когда таблица большая и меняется лишь часть данных.
&НаСервере
Процедура ОбновитьТаблицуНаСервере()
ТаблицаДанных.Очистить();
Запрос = Новый Запрос("ВЫБРАТЬ Номенклатура, Количество ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки");
ТаблицаДанных.Загрузить(Запрос.Выполнить().Выгрузить());
КонецПроцедурыКак обновить табличную часть документа или справочника
Табличная часть — это строки внутри объекта: товары в документе, состав в карточке справочника. Чтобы изменения сохранились в базе, недостаточно поменять строки на форме — объект нужно записать. При программном изменении получают объект через ПолучитьОбъект(), изменяют строки и вызывают Записать().
Для перезаполнения табличной части сначала вызовите Объект.Товары.Очистить(), затем добавьте строки через Добавить() в цикле. В типовых конфигурациях часто есть штатные команды заполнения — например, «Заполнить по остаткам» или «Подобрать товары», которые обновляют табличную часть без программирования.
При массовом изменении табличных частей многих документов используйте обработку «Групповое изменение реквизитов» (в типовых конфигурациях раздел «Администрирование» → «Обслуживание»). Она позволяет изменить значения в табличных частях по отбору без написания кода, но работает осторожно: изменения применяются сразу ко всем отобранным объектам.
Как обновить таблицу внешней обработкой или запросом
Когда нужно сверить или обновить данные таблицы по данным из другого источника — файла Excel, другой базы, отчёта — применяют типовую обработку «Загрузка данных из табличного документа» (доступна в составе библиотеки стандартных подсистем и на диске ИТС). Она сопоставляет колонки файла с реквизитами и обновляет существующие записи либо создаёт новые.
При программном обновлении по ключевому полю логика такая: для каждой строки источника ищется соответствие в базе (по коду, артикулу, наименованию), найденные объекты изменяются, ненайденные — создаются. Такой подход исключает дубли и позволяет повторять загрузку многократно.
Для разовой сверки удобен запрос с соединением таблиц: временная таблица из загруженных данных соединяется с таблицей базы, и запрос показывает расхождения. Это безопасный способ — сначала анализ, потом изменение.
Как проверить результат и устранить проблемы
После обновления таблицы убедитесь, что изменения действительно применились. Для табличной части документа — закройте и откройте документ заново: если изменения на месте, запись прошла. Для таблицы значений — проверьте количество строк через ТаблицаДанных.Количество() и выведите контрольные значения.
Если данные на форме не обновились, проверьте: не открыта ли форма с устаревшим кэшем (переоткройте её), не работаете ли вы с копией объекта вместо объекта базы, нет ли ошибок в журнале регистрации. Ошибки при записи объектов всегда фиксируются в журнале регистрации с указанием причины — например, нарушение прав доступа или блокировка.
Отдельный случай — динамический список с произвольным запросом: он не обновляется автоматически даже при оповещении, если не установлен флаг автоматического обновления. В таком списке вызывайте Обновить() явно или настройте обновление по таймеру через ПодключитьОбработчикОжидания().
Как проверить результат
После переоткрытия документа строки содержат новые значения
Изменения исчезли — объект не был записан
Количество строк и итоги соответствуют источнику
Таблица пустая или содержит старые строки — не вызвана загрузка
Новый документ виден в списке сразу после записи
Документ появляется только после переоткрытия формы
Частые вопросы
Почему список в 1С не обновляется сам?
Динамические списки обновляются автоматически только при определённых событиях — записи объекта из текущего сеанса с оповещением, изменении настроек списка. Изменения, внесённые другими пользователями или фоновыми заданиями, не всегда вызывают автоматическое обновление. Нажмите F5 или настройте программное обновление по таймеру.
Как обновить табличную часть, не перепроводя документ?
Запишите объект в режиме простой записи: Объект.Записать(РежимЗаписиДокумента.Запись) вместо проведения. Движения по регистрам при этом не изменятся. Учтите, что при следующем проведении документа движения будут сформированы заново по актуальным данным табличной части.
Можно ли обновить таблицу значений без полной очистки?
Да. Используйте НайтиСтроки() с отбором по ключевым колонкам, измените найденные строки и добавьте недостающие через Добавить(). Такой подход сохраняет текущую строку и позицию прокрутки на форме, что важно при больших таблицах.
Что делать, если при записи объекта возникает ошибка блокировки?
Ошибка «Конфликт блокировок» означает, что объект редактируется другим пользователем или сеансом. Подождите и повторите попытку, либо используйте Объект.Заблокировать() перед изменением с обработкой исключения. В массовых обработках полезно пропускать заблокированные объекты и выводить их список по итогам.
Как массово обновить данные в табличных частях сотен документов?
Используйте типовую обработку «Групповое изменение реквизитов» из раздела «Администрирование» → «Обслуживание» — она работает без программирования и поддерживает табличные части. Для сложной логики напишите обработку с обходом выборки запросом и записью каждого объекта в транзакции, обязательно предварительно проверив её на копии базы.
Что важно запомнить
Обновление таблицы в 1С зависит от типа данных: список на форме обновляется клавишей F5 или методом Обновить(), таблица значений перезаполняется через Очистить() и Загрузить(), а табличная часть документа требует записи объекта. Перед массовыми изменениями всегда делайте резервную копию и проверяйте результат на тестовых данных.