Разработка и Конфигурация · 11 мин
Как изменить текст в ячейке табличного документа 1С
Способы изменить текст в ячейке табличного документа 1С: интерактивное редактирование, программная замена через область, параметры и свойства ячейки.
Табличный документ в 1С — это универсальный объект, который используется для печатных форм, отчётов и макетов. Текст в его ячейках можно менять двумя принципиально разными способами: вручную в режиме просмотра или редактирования и программно — через встроенный язык. Выбор зависит от того, где находится документ: открыт ли он пользователем, формируется ли кодом или хранится как макет в конфигурации.
Частая причина вопроса — ячейка «не даёт» себя редактировать. Это нормальное поведение: у табличного документа есть свойство «Только просмотр», а у ячейки — защита и признак того, что она содержит параметр шаблона. Пока эти ограничения не сняты, никакой текст вписать не получится ни мышкой, ни кодом.
Ниже разобраны все рабочие сценарии: ручное редактирование, программная запись текста через область, работа с параметрами макета, замена текста в уже сформированных отчётах и типичные ошибки, из-за которых изменения «не применяются».
Как определить, почему ячейка не редактируется
Прежде чем менять текст, важно понять, в каком состоянии находится табличный документ. Если это печатная форма, открытая из документа, она почти всегда выводится с флагом «Только просмотр» — платформа намеренно блокирует правку, чтобы напечатанное не расходилось с данными учёта.
Вторая причина — защита ячейки или всего документа. В макете разработчик может установить у области свойство «Защита», и тогда даже при снятом «Только просмотр» содержимое останется недоступным для изменения. Третья ситуация — ячейка содержит не обычный текст, а параметр или шаблон: в макете она выглядит как [Параметр], и её «текст» на самом деле формируется при выводе.
Проверьте кнопку/команду «Редактирование» на панели табличного документа
Откройте свойства ячейки и проверьте флаг «Защита»
Менять нужно значение параметра при выводе, а не текст ячейки
Как изменить текст вручную в режиме редактирования
Если табличный документ открыт и доступен для правки, порядок простой. Включите режим редактирования: в тонком клиенте это команда «Ещё — Редактирование» или соответствующая кнопка на панели табличного документа (в разных конфигурациях интерфейс отличается). После этого двойной щелчок по ячейке переводит её в режим ввода, либо можно выделить ячейку и начать печатать — старое содержимое заменится.
Для точечной правки без замены всего содержимого выделите ячейку и нажмите F2 или щёлкните в строку формул — там отображается текущий текст ячейки, и его можно отредактировать частично. После ввода подтвердите изменение клавишей Enter.
- 1Откройте табличный документ и включите режим редактирования (команда «Редактирование»)
- 2Выделите нужную ячейку и нажмите F2 или дважды щёлкните по ней
- 3Введите новый текст и нажмите Enter
- 4Проверьте результат визуально и при необходимости сохраните документ в файл (Файл — Сохранить)
Учтите: изменения в открытой печатной форме не сохраняются обратно в данные документа. Если нужно, чтобы правка воспроизводилась при каждой печати, менять надо макет или код формирования, а не готовый табличный документ.
Как изменить текст программно через область
Программный способ — основной при автоматизации. Табличный документ в коде представлен объектом типа «ТабличныйДокумент», а доступ к ячейке даёт метод «Область». Обратиться можно по адресу в формате R1C1, по координатам строк и колонок или по имени области, если она названа в макете.
После получения области присвойте свойству «Текст» новое значение. Если область именованная и включает несколько ячеек, текст запишется в левую верхнюю ячейку области — это стандартное поведение платформы.
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетНакладной");
ТабДок.Вывести(Макет.ПолучитьОбласть("Шапка"));
// По адресу ячейки
ТабДок.Область("R2C3").Текст = "Новый текст";
// По имени области
ОбластьЗаголовок = ТабДок.Область("ЗаголовокДокумента");
ОбластьЗаголовок.Текст = "Счёт на оплату № " + НомерДокумента;Перед записью полезно снять защиту: если документ или область защищены, присвоение текста вызовет ошибку. Для всего документа защита управляется свойством «Защита» табличного документа, для отдельных областей — одноимённым свойством области.
Как менять текст через параметры и шаблоны макета
Если ячейка макета содержит параметр (в конфигураторе виден как [ИмяПараметра]) или шаблон (например, «Покупатель: [Покупатель]»), записывать текст напрямую в ячейку после вывода — плохая практика. Правильно задать значение параметра до или при выводе области.
У объекта области макета есть коллекция «Параметры»: обращение идёт по имени параметра. После заполнения всех параметров область выводится в табличный документ методом «Вывести», и текст ячеек формируется автоматически с подстановкой значений.
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Покупатель = "ООО Ромашка";
ОбластьШапка.Параметры.НомерДокумента = "0001-001234";
ТабДок.Вывести(ОбластьШапка);Отличить параметр от обычного текста можно в конфигураторе: откройте макет, выделите ячейку и посмотрите свойство «Заполнение» — там будет значение «Параметр» или «Шаблон». Для шаблона текст ячейки содержит вставки вида [Имя], которые подменяются при выводе.
Как заменить текст в уже сформированном документе
Иногда табличный документ уже сформирован (например, отчёт СКД вывел результат, или файл mxl загружен с диска), и нужно найти и заменить конкретные значения. Прямого метода «найти и заменить» у табличного документа нет, поэтому применяют два подхода.
Первый — метод «НайтиТекст»: он возвращает область ячейки с искомым текстом, после чего ей можно присвоить новое значение. Второй — перебор ячеек по диапазону с проверкой содержимого и заменой по условию. Это удобно, когда заменить нужно не первое вхождение, а все совпадения.
// Разовая замена
Найденная = ТабДок.НайтиТекст("Старое значение");
Если Найденная <> Неопределено Тогда
Найденная.Текст = "Новое значение";
КонецЕсли;
// Замена всех вхождений по диапазону
Для Строка = 1 По ТабДок.ВысотаТаблицы Цикл
Для Колонка = 1 По ТабДок.ШиринаТаблицы Цикл
Ячейка = ТабДок.Область(Строка, Колонка);
Если Ячейка.Текст = "Старое значение" Тогда
Ячейка.Текст = "Новое значение";
КонецЕсли;
КонецЦикла;
КонецЦикла;Перебор по всем ячейкам — медленная операция на больших документах. Если документ содержит тысячи строк, ограничивайте диапазон поиска известными границами или используйте «НайтиТекст» в цикле с указанием области начала поиска.
Сравнение вариантов
Подходит для разовой правки перед печатью или сохранением в файл. Ограничение: изменения не воспроизводятся при следующем формировании формы
Универсальный программный способ для готового документа. Ограничение: нужно знать адрес или имя области и снять защиту
Правильный путь для регулярно формируемых печатных форм. Ограничение: работает только на этапе вывода макета, а не после
Для замены в уже готовом документе без доступа к коду формирования. Ограничение: производительность на больших таблицах
Типичные ошибки и как их избежать
Самая частая жалоба — «присвоил текст, а он не изменился». Обычно причина в том, что код работает с одним экземпляром табличного документа, а на экране отображается другой: например, значение присвоено реквизиту формы после того, как форма уже отрисовалась, и требуется обновление, либо изменения вносятся в локальную переменную, которая никуда не выводится.
Вторая группа ошибок — работа с объединёнными ячейками. Если ячейки объединены, текст хранится в левой верхней ячейке объединения; запись в соседнюю ячейку диапазона визуально ничего не даст. Третья типичная ситуация — попытка записать текст в ячейку, содержащую картинку или имеющую тип «Рисунок»: сначала нужно изменить тип содержимого области.
Как проверить результат
После программной замены проверяйте не только визуальный вывод, но и само значение: прочитайте свойство «Текст» той же области и сравните с ожидаемым. Это отсекает ситуации, когда текст записался, но скрыт оформлением — например, белым цветом шрифта или нулевой высотой строки.
Для печатных форм финальная проверка — предварительный просмотр и пробная печать: переносы строк, автоподбор высоты и масштаб могут визуально «обрезать» длинный текст, хотя в ячейке он присутствует полностью.
Как проверить результат
Содержит новое значение
Старое значение или пусто — запись не прошла, проверяйте защиту и адрес области
Ячейка показывает новый текст целиком
Текст обрезан или невидим — проверьте высоту строки, цвет шрифта, объединение ячеек
Изменения воспроизводятся, потому что внесены в макет или код
Форма вернулась к исходному виду — правился готовый документ, а не источник
Что важно запомнить
Текст ячейки меняется либо вручную в режиме редактирования (F2 или двойной щелчок), либо программно через Область().Текст. Для регулярных печатных форм правьте макет и параметры, а не готовый документ. Перед записью снимайте защиту, после — проверяйте значение и визуальный результат.
Частые вопросы
Почему двойной щелчок по ячейке не позволяет ввести текст?
У табличного документа включён режим «Только просмотр» — так платформа защищает печатные формы от случайной правки. Включите редактирование через команду «Редактирование» на панели документа. Если и после этого ячейка недоступна, на неё или на весь документ установлена защита в макете.
Как изменить текст в ячейке, если она объединена с другими?
Текст объединённого диапазона хранится в его левой верхней ячейке. Обращайтесь именно к ней — вручную это происходит автоматически при щелчке по объединённой области, а программно укажите координаты левого верхнего угла либо имя области целиком.
Можно ли изменить текст в печатной форме, не меняя конфигурацию?
Да, если правка разовая: включите редактирование в открытой форме и измените текст вручную, затем сохраните документ в файл при необходимости. Для постоянного изменения без доработки конфигурации используются внешние печатные формы — они подключаются через механизм дополнительных отчётов и обработок и переопределяют шаблон вывода.
Чем отличается запись в свойство Текст от заполнения параметров?
Свойство «Текст» записывает литеральное значение в уже выведенную ячейку. Параметры заполняются до вывода области макета и подставляются в ячейки с типом заполнения «Параметр» или «Шаблон». Для форм, которые формируются регулярно, правильнее работать с параметрами — тогда логика остаётся в одном месте.
Почему после присвоения текста в коде на экране ничего не изменилось?
Скорее всего, изменён не тот экземпляр табличного документа, который показан пользователю, либо форма не обновила отображение. Убедитесь, что код пишет в реквизит формы, связанный с полем табличного документа, и выполняется после полного формирования документа, а не до очередного вывода областей, который перезатрёт ваши правки.
Как заменить текст сразу во всех одинаковых ячейках большого документа?
Используйте цикл с методом «НайтиТекст», передавая область начала поиска, чтобы находить следующие вхождения, либо перебор ячеек в заранее известном диапазоне. Полный перебор всех ячеек документа на больших таблицах работает медленно, поэтому диапазон стоит ограничивать.