Как добавить колонки и строки в таблицы 1С

· 9 мин

Содержание

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

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

Сначала определите, что вы расширяете

Слово «таблица» в 1С закрывает сразу несколько сущностей: табличную часть документа или справочника, динамический список в форме списка, таблицу значений в коде обработки, вывод отчёта на СКД. У каждой свой способ расширения, и они не взаимозаменяемы.

Что именно нужно увеличить?

Разберём каждый случай по порядку — от того, что делается за минуту, до изменений структуры.

Способ 1. Ширина колонки в форме — без программиста

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

  1. Наведите курсор на границу между заголовками колонок — он превратится в двустороннюю стрелку.
  2. Потяните границу, чтобы задать нужную ширину.
  3. Чтобы ширина сохранилась после перезахода, откройте меню Ещё (три чёрточки или многоточие в правом верхнем углу формы) → Изменить форму.
  4. В дереве элементов выделите нужную колонку и задайте свойство ширины либо включите автоподбор.
  5. Нажмите Применить и ОК.

Настройки формы в интерфейсе «Такси» сохраняются персонально для текущего пользователя. У коллег форма останется прежней, пока они не настроят её сами.

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

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

Способ 2. Новый реквизит табличной части документа или справочника

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

  1. Откройте дерево конфигурации, найдите нужный объект — документ или справочник.
  2. Разверните ветку Табличные части, выберите нужную, разверните её Реквизиты.
  3. По правой кнопке — Добавить, задайте имя латиницей (например, Partiya), синоним для пользователя и тип значения.
  4. Откройте форму объекта, найдите в ней таблицу и перетащите новый реквизит на неё — появится колонка.
  5. Сохраните и обновите конфигурацию базы данных (F7).

Типовые конфигурации (БП 3.0, ЗУП 3.1, УТ 11) стоят на поддержке. Чтобы редактировать объект напрямую, поддержку приходится ослаблять через Поддержка → Настройка поддержки. После этого автоматическое обновление релизов усложняется. Для типовых решений используйте расширение (способ 4), а не прямую правку.

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

Способ 3. Колонка программно: таблица значений, список, отчёт

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

Таблица значений. В обработках и при обмене данными это основная структура. Колонка добавляется методом Колонки.Добавить:

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"), "Товар");
ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"), "Кол-во");
ТЗ.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"), "Сумма");

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

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

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

  1. В Конфигураторе откройте свойства динамического списка, включите Произвольный запрос.
  2. В настройке списка отредактируйте текст запроса — добавьте нужное поле в секцию выборки.
  3. На форме перетащите новое поле на таблицу списка, чтобы появилась колонка.

Отчёт на СКД. Колонка добавляется через поле набора данных: в схеме компоновки допишите поле в запрос набора, и оно появится в доступных полях. Вывод колонки пользователь затем включает в настройках отчёта.

Табличный документ печатной формы. Если «увеличить таблицу» означает добавить колонку в печатную форму, работать нужно с макетом. В Конфигураторе откройте макет табличного документа, вставьте новую колонку в нужной области макета и заполните её в коде печати — присвойте значение именованному параметру области перед выводом. Ширину колонки в макете задают так же, как в обычной таблице: перетаскиванием границы заголовка.

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

Способ 4. Расширение конфигурации — добавить поле, не снимая с поддержки

Расширения появились в платформе 8.3.6 и решают главную проблему способа 2: позволяют добавить своё к типовой конфигурации, не ослабляя поддержку и не мешая обновлениям.

  1. В Конфигураторе: Конфигурация → Расширения конфигурации, добавьте новое расширение.
  2. Откройте его, заимствуйте нужный объект (команда Добавить в расширение).
  3. Добавьте собственный реквизит к заимствованному объекту или к его табличной части — так же, как в способе 2.
  4. Выведите реквизит на форму объекта.
  5. Сохраните расширение и выполните Обновить конфигурацию базы данных.

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

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

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

Способ 5. Строки и объём — где настоящие границы

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

МеханизмЧем ограниченЧто делать с большими объёмами
Табличная частьГрузится в память целиком при открытии и записи объектаСотни тысяч строк выносят в отдельный регистр или справочник
Таблица значенийДоступной памятью рабочего процессаОбрабатывать данные порциями, не держать всё сразу
Динамический списокПрактически не ограничен — читает данные порциямиЭто и есть правильный инструмент для показа множества строк
Запрос / выборкаОграничение задаёте вы через ПЕРВЫЕ NДля постраничной обработки использовать выборку

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

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

Частые ошибки при расширении таблиц

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

  • 🔧 Правка типовой конфигурации вместо расширения. Добавили реквизит прямо в БП или ЗУП, сняв с поддержки, — и следующее обновление превращается в ручное разрешение конфликтов. Расширение этого избегает.
  • 👁️ Реквизит добавили, а на форму не вывели. В данных колонка есть, а пользователь её не видит. Проверьте, что поле перетащено на таблицу формы и у него включена видимость.
  • 🔒 Обновление структуры в рабочее время. Изменение табличной части меняет структуру базы и требует монопольного доступа. Запуск при активных пользователях либо не пройдёт, либо оборвёт их сеансы.
  • 🔁 Смена типа существующей колонки с данными. Если в реквизите уже лежат значения, изменение типа может привести к их потере или неконтролируемому преобразованию. Сначала выгрузите данные или заведите новый реквизит.
  • 🐘 Табличная часть вместо регистра. Хранить в строках документа десятки тысяч позиций — прямой путь к медленной записи. Это не ошибка настройки, а ошибка проектирования.

Производительность: как не посадить базу большой таблицей

Чем шире и длиннее таблица, тем дороже каждое открытие и запись. Несколько правил держат базу в тонусе.

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

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

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

Можно ли добавить колонку в типовую конфигурацию, не снимая её с поддержки?
Да. Для этого и нужны расширения конфигурации: вы заимствуете объект и добавляете к нему собственный реквизит и колонку на форму. Основная конфигурация остаётся на полной поддержке, обновления релизов проходят штатно.
Нужны ли права администратора, чтобы добавить реквизит?
Нужен монопольный доступ к базе на момент обновления структуры — это этап «Обновить конфигурацию базы данных». Остальные пользователи в этот момент должны завершить работу. Само редактирование в Конфигураторе монополии не требует.
Чем таблица значений отличается от табличной части?
Табличная часть хранится в базе вместе с объектом и видна в форме. Таблица значений существует только в памяти во время работы кода и после завершения обработки исчезает. Для хранения данных подходит табличная часть или регистр, для промежуточных вычислений — таблица значений.
Почему новая колонка видна в Конфигураторе, но не появляется у пользователя?
Реквизит добавлен в данные, но не выведен на форму или у него выключена видимость. Откройте форму объекта и перетащите поле на таблицу либо включите его через меню Ещё → Изменить форму на стороне пользователя.
Есть ли максимальное число строк в табличной части?
Жёсткого предела платформа не задаёт, но при тысячах строк открытие и проведение объекта ощутимо замедляются, потому что вся табличная часть читается в память. Большие объёмы хранят в регистрах, а не в строках документа.