Правка таблиц в 1С: от ячейки в документе до обработчика на встроенном языке

· 10 мин

Содержание

Менеджер открыл заказ покупателя, а в строке с кабелем стоит количество 10 вместо 12. Двойной щелчок по ячейке, новая цифра, запись документа. Так выглядит самая частая правка таблицы в 1С. Но «таблица» в программе бывает разной, и у каждой свой способ редактирования.

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

Выясните, какую таблицу вы правите

От типа таблицы зависит всё остальное. Быстрый способ определить:

  • 📝 Табличная часть — таблица внутри документа или справочника: «Товары», «Услуги», «Начисления». Ячейки можно менять прямо на форме.
  • 📊 Табличный документ — отчёт, ведомость, печатная форма. Появляется после нажатия «Сформировать» или «Печать».
  • 🗂 Динамический список — журнал документов , список номенклатуры. Правка идёт через открытие элемента.
  • 🧮 Таблица значений — внутренний объект программы. Пользователь её не видит, с ней работает код.
Что именно вы хотите изменить?

Как редактировать табличную часть документа в режиме 1С:Предприятие

Основной сценарий пользователя. Работает одинаково в Бухгалтерии, ЗУП, Управлении торговлей и других конфигурациях на управляемых формах.

Правка существующей строки

  1. Щёлкните по нужной ячейке. Строка выделится, а второй щелчок (или клавиша F2) переведёт ячейку в режим ввода.
  2. Введите значение. Для полей-ссылок (номенклатура, контрагент) нажмите F4 или кнопку выбора справа и выберите элемент из справочника.
  3. Нажмите Enter или Tab — курсор перейдёт к следующей ячейке, а введённое значение зафиксируется.
  4. Нажмите «Записать» или «Провести и закрыть». Пока этого не сделано, изменения живут только в открытой форме.

Многие колонки зависимы друг от друга. Поменяли количество с 10 на 12 при цене 350 — сумма в строке пересчитается сама: 12 × 350 = 4 200. Если цену или сумму программа считает по своим правилам, ручной ввод в этой колонке может перезаписаться при следующем пересчёте.

Добавление, копирование, удаление, перемещение строк

ДействиеКнопка в командной панелиКлавиша
Добавить строку«Добавить»Ins
Скопировать строку«Скопировать»F9
Удалить строку«Удалить»Del
Сдвинуть строку вверх/внизстрелки «Вверх», «Вниз»Ctrl+Shift+↑ / Ctrl+Shift+↓

Не во всех формах есть все кнопки. Разработчик может убрать, например, перемещение строк или запретить добавление вручную (в такой форме строки появляются только через «Подбор» или «Заполнить»).

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

Групповая правка нескольких строк

Если нужно поменять одно и то же в десятках строк (скажем, склад во всех позициях), выделите их мышью с зажатым Shift или Ctrl и поищите в командной панели таблицы пункт «Ещё» или «Все действия». Часть конфигураций умеет заполнять выбранную колонку по всем строкам. Если такого пункта нет, помогает кнопка «Заполнить» с нужным вариантом, а для справочников и документов целиком — обработка «Групповое изменение реквизитов» (есть в конфигурациях на библиотеке стандартных подсистем, доступна при наличии прав).

Перед массовой правкой проведённых документов сделайте копию базы : обработка меняет данные без возможности «отменить».

Редактирование отчёта и печатной формы (табличный документ)

Результат отчёта — это табличный документ. По умолчанию ячейки в нём не редактируются, и это нормально: отчёт показывает, что лежит в базе, а не хранит свои числа.

Что можно сделать, если цифра в отчёте не устраивает:

  1. Найти источник. Двойной щелчок по ячейке в большинстве отчётов открывает расшифровку: документ или карточку, из которой пришло число. Правьте там и сформируйте отчёт заново.
  2. Выгрузить и править вне 1С. Кнопка сохранения в командной панели позволяет записать результат в файл (Excel, PDF, табличный документ MXL). Дальше правьте файл как обычную таблицу.
  3. Подкорректировать печатную форму. Часть печатных форм умеет открываться в режиме правки: ищите команду «Редактировать» или «Изменить» в панели над печатной формой. Если её нет, значит, разработчик не включил редактирование для этой формы.

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

Свойства таблицы в конфигураторе

Если форму дорабатываете вы, поведение таблицы задаётся в конфигураторе. Откройте форму документа, выделите таблицу на вкладке «Элементы» и посмотрите палитру свойств.

Что настраивается у самой таблицы

  • 🔒 ТолькоПросмотр — запрещает любые правки в таблице. Самая частая причина, по которой «ничего не вводится».
  • ➕ ИзменятьСоставСтрок — разрешает или запрещает добавление и удаление строк.
  • ↕ ИзменятьПорядокСтрок — разрешает перемещение строк кнопками и клавишами.
  • 🧾 Шапка и Подвал — показывают заголовки колонок и строку итогов.
  • 🔗 ПутьКДанным — связывает таблицу с табличной частью объекта или реквизитом формы.

Что настраивается у колонок

  • ТолькоПросмотр на колонке — например, сумму запрещают вводить вручную.
  • Видимость — прячет служебную колонку.
  • ФорматРедактирования — маска и формат числа, даты.
  • ПараметрыВыбора и СвязиПараметровВыбора — ограничивают список выбора (скажем, только склады выбранной организации).

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

Изменённую форму проверьте в режиме 1С:Предприятие: запустите отладку из конфигуратора и откройте документ с нужной таблицей.

Программное управление таблицей через код

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

Строки табличной части

Основные методы коллекции строк: Добавить(), Вставить(Индекс), Удалить(Строка), Очистить(), Сдвинуть(Строка, Смещение), Свернуть(Колонки, КолонкиСуммирования). Пример заполнения:

НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.Номенклатура = ВыбраннаяНоменклатура;
НоваяСтрока.Количество = 12;
НоваяСтрока.Цена = 350;
НоваяСтрока.Сумма = НоваяСтрока.Количество * НоваяСтрока.Цена;

Реакция на ввод пользователя

Чтобы сумма пересчитывалась при изменении количества, создайте обработчик события ПриИзменении у колонки «Количество». На управляемой форме он выполняется на клиенте:

&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
    СтрокаТаблицы = Элементы.Товары.ТекущиеДанные;
    СтрокаТаблицы.Сумма = СтрокаТаблицы.Количество * СтрокаТаблицы.Цена;
КонецПроцедуры

ТекущиеДанные возвращает строку, в которой стоит курсор. Если курсора в таблице нет, значение будет Неопределено, поэтому в рабочем коде добавляйте проверку.

Другие события таблицы, которые пригодятся при доработке:

  • ПередНачаломДобавления — можно отменить добавление или подготовить значения;
  • ПриНачалеРедактирования — срабатывает, когда строка перешла в режим правки;
  • ПриОкончанииРедактирования — подходит для проверки и пересчёта итогов;
  • ПередУдалением — спросить подтверждение или запретить удаление.

Удаление строк по условию

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

Для Сч = 1 По Объект.Товары.Количество() Цикл
    Строка = Объект.Товары[Объект.Товары.Количество() - Сч];
    Если Строка.Количество = 0 Тогда
        Объект.Товары.Удалить(Строка);
    КонецЕсли;
КонецЦикла;

Граница цикла Для ... По вычисляется один раз при входе в цикл, поэтому такой код отрабатывает правильно, а индексы считаются от конца.

Таблица значений: правка в памяти

Таблица значений удобна как промежуточный буфер: собрали данные, обработали, перенесли в табличную часть. Основные операции:

  • Найти(Значение, Колонки) — вернёт первую подходящую строку или Неопределено;
  • Сортировать("Номенклатура, Количество Убыв") — упорядочит строки по колонкам;
  • Свернуть("Номенклатура", "Количество") — сложит одинаковые позиции и просуммирует количество;
  • Выгрузить(Строки, Колонки) — вернёт новую таблицу с частью строк или колонок;
  • ЗагрузитьКолонку(Массив, Колонка) — заполнит колонку значениями массива.

Перенос результата в табличную часть делается циклом по строкам с Добавить() и ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицы). Колонки с одинаковыми именами скопируются сами, остальные придётся присвоить вручную.

Табличный документ в коде

Ячейки табличного документа адресуются по строке и колонке: R2C3 — вторая строка, третья колонка.

ТабДок = Новый ТабличныйДокумент;
ТабДок.Область("R1C1").Текст = "Номенклатура";
ТабДок.Область("R1C2").Текст = "Количество";
ТабДок.Область("R2C1").Текст = "Кабель";
ТабДок.Область("R2C2").Текст = "12";
ТабДок.Показать("Пример");

Типичные сбои при правке и как их устранить

Диагностика: выберите симптом

Скорость работы с большими таблицами

Табличная часть на несколько сотен строк тормозит не из-за самой таблицы, а из-за того, что делает форма при каждом изменении. Практические приёмы:

  • ⚡ Не вызывайте сервер из ПриИзменении колонки, если пересчёт можно сделать на клиенте. Каждый серверный вызов — это обмен данными и задержка при каждой правке.
  • ⚡ Если пересчёт всё же серверный, вызывайте его один раз для строки, а не в цикле по всей таблице.
  • ⚡ Не навешивайте тяжёлую логику на ПриАктивизацииСтроки: событие срабатывает при каждой смене строки курсором, и пользователь начинает ждать между стрелками. Если реакция нужна, отложите её через подключаемый обработчик ожидания.
  • ⚡ Уберите лишние колонки и условное оформление, которые никто не использует. Каждое правило оформления вычисляется для каждой видимой строки.
  • ⚡ Для итогов используйте подвал таблицы или один пересчёт после ввода, а не суммирование по всей таблице на каждое нажатие.

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

Проверка после доработки формы с таблицей
Выполнено: 0 / 5

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

Можно ли вставить строки из Excel сразу в табличную часть?
В части форм да: скопируйте диапазон в Excel и вставьте в таблицу через команду вставки. Если такой команды нет, используйте обработку загрузки данных из табличного документа или попросите программиста добавить её в форму.
Почему в отчёте нельзя поправить число прямо в ячейке?
Ячейки отчёта формируются заново при каждом запуске. Любая ручная правка исчезла бы при следующем формировании. Меняйте исходный документ или выгрузите отчёт в файл.
Нужно ли перепроводить документ после правки строки?
Если документ был проведён, да. Иначе движения по регистрам останутся от прежней версии, и отчёты покажут старые цифры. Для непроведённых документов достаточно записи.
Чем табличная часть отличается от таблицы значений?
Табличная часть хранится в базе вместе с документом или справочником. Таблица значений существует только в памяти на время выполнения кода, её нужно явно записать в объект или вывести на форму.
Как вернуть строку, которую случайно удалил?
Пока документ не записан, закройте форму без сохранения и откройте заново. Если запись уже прошла, смотрите историю изменений (если она включена) или добавьте строку вручную.