К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как изменить текст в ячейке табличного документа 1С

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

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

Частая причина вопроса — ячейка «не даёт» себя редактировать. Это нормальное поведение: у табличного документа есть свойство «Только просмотр», а у ячейки — защита и признак того, что она содержит параметр шаблона. Пока эти ограничения не сняты, никакой текст вписать не получится ни мышкой, ни кодом.

Ниже разобраны все рабочие сценарии: ручное редактирование, программная запись текста через область, работа с параметрами макета, замена текста в уже сформированных отчётах и типичные ошибки, из-за которых изменения «не применяются».

Как определить, почему ячейка не редактируется

Прежде чем менять текст, важно понять, в каком состоянии находится табличный документ. Если это печатная форма, открытая из документа, она почти всегда выводится с флагом «Только просмотр» — платформа намеренно блокирует правку, чтобы напечатанное не расходилось с данными учёта.

Вторая причина — защита ячейки или всего документа. В макете разработчик может установить у области свойство «Защита», и тогда даже при снятом «Только просмотр» содержимое останется недоступным для изменения. Третья ситуация — ячейка содержит не обычный текст, а параметр или шаблон: в макете она выглядит как [Параметр], и её «текст» на самом деле формируется при выводе.

Двойной щелчок не открывает вводВключён режим «Только просмотр»

Проверьте кнопку/команду «Редактирование» на панели табличного документа

Редактирование включено, но ячейка недоступнаНа области установлена защита

Откройте свойства ячейки и проверьте флаг «Защита»

В макете виден текст в квадратных скобкахЭто параметр или шаблон

Менять нужно значение параметра при выводе, а не текст ячейки

Как изменить текст вручную в режиме редактирования

Если табличный документ открыт и доступен для правки, порядок простой. Включите режим редактирования: в тонком клиенте это команда «Ещё — Редактирование» или соответствующая кнопка на панели табличного документа (в разных конфигурациях интерфейс отличается). После этого двойной щелчок по ячейке переводит её в режим ввода, либо можно выделить ячейку и начать печатать — старое содержимое заменится.

Для точечной правки без замены всего содержимого выделите ячейку и нажмите F2 или щёлкните в строку формул — там отображается текущий текст ячейки, и его можно отредактировать частично. После ввода подтвердите изменение клавишей Enter.

Порядок действий при ручной правке
  1. 1
    Откройте табличный документ и включите режим редактирования (команда «Редактирование»)
  2. 2
    Выделите нужную ячейку и нажмите F2 или дважды щёлкните по ней
  3. 3
    Введите новый текст и нажмите Enter
  4. 4
    Проверьте результат визуально и при необходимости сохраните документ в файл (Файл — Сохранить)

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

Как изменить текст программно через область

Программный способ — основной при автоматизации. Табличный документ в коде представлен объектом типа «ТабличныйДокумент», а доступ к ячейке даёт метод «Область». Обратиться можно по адресу в формате R1C1, по координатам строк и колонок или по имени области, если она названа в макете.

После получения области присвойте свойству «Текст» новое значение. Если область именованная и включает несколько ячеек, текст запишется в левую верхнюю ячейку области — это стандартное поведение платформы.

bsl
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетНакладной");
ТабДок.Вывести(Макет.ПолучитьОбласть("Шапка"));

// По адресу ячейки
ТабДок.Область("R2C3").Текст = "Новый текст";

// По имени области
ОбластьЗаголовок = ТабДок.Область("ЗаголовокДокумента");
ОбластьЗаголовок.Текст = "Счёт на оплату № " + НомерДокумента;

Перед записью полезно снять защиту: если документ или область защищены, присвоение текста вызовет ошибку. Для всего документа защита управляется свойством «Защита» табличного документа, для отдельных областей — одноимённым свойством области.

Как менять текст через параметры и шаблоны макета

Если ячейка макета содержит параметр (в конфигураторе виден как [ИмяПараметра]) или шаблон (например, «Покупатель: [Покупатель]»), записывать текст напрямую в ячейку после вывода — плохая практика. Правильно задать значение параметра до или при выводе области.

У объекта области макета есть коллекция «Параметры»: обращение идёт по имени параметра. После заполнения всех параметров область выводится в табличный документ методом «Вывести», и текст ячеек формируется автоматически с подстановкой значений.

bsl
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Покупатель = "ООО Ромашка";
ОбластьШапка.Параметры.НомерДокумента = "0001-001234";
ТабДок.Вывести(ОбластьШапка);

Отличить параметр от обычного текста можно в конфигураторе: откройте макет, выделите ячейку и посмотрите свойство «Заполнение» — там будет значение «Параметр» или «Шаблон». Для шаблона текст ячейки содержит вставки вида [Имя], которые подменяются при выводе.

Как заменить текст в уже сформированном документе

Иногда табличный документ уже сформирован (например, отчёт СКД вывел результат, или файл mxl загружен с диска), и нужно найти и заменить конкретные значения. Прямого метода «найти и заменить» у табличного документа нет, поэтому применяют два подхода.

Первый — метод «НайтиТекст»: он возвращает область ячейки с искомым текстом, после чего ей можно присвоить новое значение. Второй — перебор ячеек по диапазону с проверкой содержимого и заменой по условию. Это удобно, когда заменить нужно не первое вхождение, а все совпадения.

bsl
// Разовая замена
Найденная = ТабДок.НайтиТекст("Старое значение");
Если Найденная <> Неопределено Тогда
    Найденная.Текст = "Новое значение";
КонецЕсли;

// Замена всех вхождений по диапазону
Для Строка = 1 По ТабДок.ВысотаТаблицы Цикл
    Для Колонка = 1 По ТабДок.ШиринаТаблицы Цикл
        Ячейка = ТабДок.Область(Строка, Колонка);
        Если Ячейка.Текст = "Старое значение" Тогда
            Ячейка.Текст = "Новое значение";
        КонецЕсли;
    КонецЦикла;
КонецЦикла;

Перебор по всем ячейкам — медленная операция на больших документах. Если документ содержит тысячи строк, ограничивайте диапазон поиска известными границами или используйте «НайтиТекст» в цикле с указанием области начала поиска.

Сравнение вариантов

Ручное редактирование

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

Запись через Область().Текст

Универсальный программный способ для готового документа. Ограничение: нужно знать адрес или имя области и снять защиту

Параметры макета

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

НайтиТекст / перебор ячеек

Для замены в уже готовом документе без доступа к коду формирования. Ограничение: производительность на больших таблицах

Типичные ошибки и как их избежать

Самая частая жалоба — «присвоил текст, а он не изменился». Обычно причина в том, что код работает с одним экземпляром табличного документа, а на экране отображается другой: например, значение присвоено реквизиту формы после того, как форма уже отрисовалась, и требуется обновление, либо изменения вносятся в локальную переменную, которая никуда не выводится.

Вторая группа ошибок — работа с объединёнными ячейками. Если ячейки объединены, текст хранится в левой верхней ячейке объединения; запись в соседнюю ячейку диапазона визуально ничего не даст. Третья типичная ситуация — попытка записать текст в ячейку, содержащую картинку или имеющую тип «Рисунок»: сначала нужно изменить тип содержимого области.

Типичные ошибки
01
Запись текста в защищённую область — возникает ошибка выполнения; сначала снимите защиту у документа или области
02
Правка готовой печатной формы вместо макета — при следующей печати все изменения теряются
03
Опечатка в имени параметра — значение не подставляется, в ячейке остаётся шаблон или пустота
04
Запись в неправильную ячейку объединённого диапазона — текст невидим, так как отображается содержимое левой верхней ячейки
05
Перебор миллионов ячеек в цикле — формирование «зависает»; ограничивайте диапазон поиска

Как проверить результат

После программной замены проверяйте не только визуальный вывод, но и само значение: прочитайте свойство «Текст» той же области и сравните с ожидаемым. Это отсекает ситуации, когда текст записался, но скрыт оформлением — например, белым цветом шрифта или нулевой высотой строки.

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

Контрольные точки

Как проверить результат

Значение свойства Текст области после присвоения
Норма

Содержит новое значение

Тревожный признак

Старое значение или пусто — запись не прошла, проверяйте защиту и адрес области

Отображение на экране
Норма

Ячейка показывает новый текст целиком

Тревожный признак

Текст обрезан или невидим — проверьте высоту строки, цвет шрифта, объединение ячеек

Повторное формирование печатной формы
Норма

Изменения воспроизводятся, потому что внесены в макет или код

Тревожный признак

Форма вернулась к исходному виду — правился готовый документ, а не источник

Итог

Что важно запомнить

Текст ячейки меняется либо вручную в режиме редактирования (F2 или двойной щелчок), либо программно через Область().Текст. Для регулярных печатных форм правьте макет и параметры, а не готовый документ. Перед записью снимайте защиту, после — проверяйте значение и визуальный результат.

Частые вопросы

Почему двойной щелчок по ячейке не позволяет ввести текст?

У табличного документа включён режим «Только просмотр» — так платформа защищает печатные формы от случайной правки. Включите редактирование через команду «Редактирование» на панели документа. Если и после этого ячейка недоступна, на неё или на весь документ установлена защита в макете.

Как изменить текст в ячейке, если она объединена с другими?

Текст объединённого диапазона хранится в его левой верхней ячейке. Обращайтесь именно к ней — вручную это происходит автоматически при щелчке по объединённой области, а программно укажите координаты левого верхнего угла либо имя области целиком.

Можно ли изменить текст в печатной форме, не меняя конфигурацию?

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

Чем отличается запись в свойство Текст от заполнения параметров?

Свойство «Текст» записывает литеральное значение в уже выведенную ячейку. Параметры заполняются до вывода области макета и подставляются в ячейки с типом заполнения «Параметр» или «Шаблон». Для форм, которые формируются регулярно, правильнее работать с параметрами — тогда логика остаётся в одном месте.

Почему после присвоения текста в коде на экране ничего не изменилось?

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

Как заменить текст сразу во всех одинаковых ячейках большого документа?

Используйте цикл с методом «НайтиТекст», передавая область начала поиска, чтобы находить следующие вхождения, либо перебор ячеек в заранее известном диапазоне. Полный перебор всех ячеек документа на больших таблицах работает медленно, поэтому диапазон стоит ограничивать.