Как добавить колонки и строки в таблицы 1С
Содержание
«Увеличить таблицу в 1С» на практике означает одно из четырёх: расширить колонку в форме, добавить новый реквизит в табличную часть, вывести дополнительную колонку в отчёте или обработке программно либо снять ограничение по числу строк и объёму данных. Способ зависит от того, что именно мешает прямо сейчас.
Чаще всего за запросом стоит одна из двух бед. Либо данные в колонке не видны целиком — тогда правка конфигурации не нужна, хватит мыши. Либо в таблицу нужно занести показатель, для которого нет подходящего поля — тогда придётся менять конфигурацию, и делать это аккуратно, чтобы не сломать обновление типового решения.
Сначала определите, что вы расширяете
Слово «таблица» в 1С закрывает сразу несколько сущностей: табличную часть документа или справочника, динамический список в форме списка, таблицу значений в коде обработки, вывод отчёта на СКД. У каждой свой способ расширения, и они не взаимозаменяемы.
Разберём каждый случай по порядку — от того, что делается за минуту, до изменений структуры.
Способ 1. Ширина колонки в форме — без программиста
Самый частый запрос — «колонка узкая, не видно значение». Правка конфигурации тут лишняя.
- Наведите курсор на границу между заголовками колонок — он превратится в двустороннюю стрелку.
- Потяните границу, чтобы задать нужную ширину.
- Чтобы ширина сохранилась после перезахода, откройте меню
Ещё(три чёрточки или многоточие в правом верхнем углу формы) →Изменить форму. - В дереве элементов выделите нужную колонку и задайте свойство ширины либо включите автоподбор.
- Нажмите
ПрименитьиОК.
Настройки формы в интерфейсе «Такси» сохраняются персонально для текущего пользователя. У коллег форма останется прежней, пока они не настроят её сами.
В этом же окне Изменить форму можно показать скрытые колонки, которые уже есть в данных, но не выводятся: отметьте флажок видимости. Это тоже «увеличение таблицы», но без изменения конфигурации — вы лишь показываете то, что платформа уже умеет отдавать.
Если колонки нужного вам поля в списке Изменить форму нет вообще, значит в данных такого реквизита не существует. Тогда переходим к способам, которые меняют структуру.
Способ 2. Новый реквизит табличной части документа или справочника
Когда в строки таблицы нужно добавить поле (например, колонку «Партия» или «Код маркировки»), вы добавляете реквизит табличной части. Делается это в Конфигураторе.
- Откройте дерево конфигурации, найдите нужный объект — документ или справочник.
- Разверните ветку
Табличные части, выберите нужную, разверните еёРеквизиты. - По правой кнопке —
Добавить, задайте имя латиницей (например,Partiya), синоним для пользователя и тип значения. - Откройте форму объекта, найдите в ней таблицу и перетащите новый реквизит на неё — появится колонка.
- Сохраните и обновите конфигурацию базы данных (
F7).
Типовые конфигурации (БП 3.0, ЗУП 3.1, УТ 11) стоят на поддержке. Чтобы редактировать объект напрямую, поддержку приходится ослаблять через Поддержка → Настройка поддержки. После этого автоматическое обновление релизов усложняется. Для типовых решений используйте расширение (способ 4), а не прямую правку.
Обновление структуры базы меняет таблицы SQL, поэтому требует монопольного доступа. Платформа попросит завершить работу остальных пользователей. Планируйте этот шаг на время, когда в базе никого нет, иначе обновление либо не запустится, либо оборвёт чужие сеансы.
Способ 3. Колонка программно: таблица значений, список, отчёт
Если таблица формируется в коде обработки или в отчёте, колонку добавляют не мышкой, а программно.
Таблица значений. В обработках и при обмене данными это основная структура. Колонка добавляется методом Колонки.Добавить:
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"), "Товар");
ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"), "Кол-во");
ТЗ.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"), "Сумма");
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Номенклатура = ВыбраннаяНоменклатура;
НоваяСтрока.Количество = 10;
НоваяСтрока.Сумма = НоваяСтрока.Количество * Цена;
Первый параметр — имя колонки (к нему обращаются в коде), второй — тип через ОписаниеТипов, третий — заголовок для пользователя. Колонку можно добавить в любой момент, пока таблица существует в памяти.
Динамический список в форме списка получает колонки из своего запроса. Чтобы вывести дополнительное поле:
- В Конфигураторе откройте свойства динамического списка, включите
Произвольный запрос. - В настройке списка отредактируйте текст запроса — добавьте нужное поле в секцию выборки.
- На форме перетащите новое поле на таблицу списка, чтобы появилась колонка.
Отчёт на СКД. Колонка добавляется через поле набора данных: в схеме компоновки допишите поле в запрос набора, и оно появится в доступных полях. Вывод колонки пользователь затем включает в настройках отчёта.
Табличный документ печатной формы. Если «увеличить таблицу» означает добавить колонку в печатную форму, работать нужно с макетом. В Конфигураторе откройте макет табличного документа, вставьте новую колонку в нужной области макета и заполните её в коде печати — присвойте значение именованному параметру области перед выводом. Ширину колонки в макете задают так же, как в обычной таблице: перетаскиванием границы заголовка.
Таблица значений живёт только в памяти текущего сеанса. После завершения работы обработки она исчезает. Если данные нужно хранить, это уже табличная часть или регистр, а не таблица значений.
Способ 4. Расширение конфигурации — добавить поле, не снимая с поддержки
Расширения появились в платформе 8.3.6 и решают главную проблему способа 2: позволяют добавить своё к типовой конфигурации, не ослабляя поддержку и не мешая обновлениям.
- В Конфигураторе:
Конфигурация → Расширения конфигурации, добавьте новое расширение. - Откройте его, заимствуйте нужный объект (команда
Добавить в расширение). - Добавьте собственный реквизит к заимствованному объекту или к его табличной части — так же, как в способе 2.
- Выведите реквизит на форму объекта.
- Сохраните расширение и выполните
Обновить конфигурацию базы данных.
Собственные реквизиты и табличные части расширение добавляет без снятия основной конфигурации с полной поддержки. Возможность дополнять заимствованную табличную часть своим реквизитом работает в достаточно свежих релизах платформы — если команда недоступна, проверьте номер версии, он должен быть не ниже требуемого для вашей задачи.
Загрузка файла .cfe и команда Обновить конфигурацию базы данных — это два разных шага. После загрузки расширения структура в базе не поменяется, пока вы не выполните обновление структуры с монопольным доступом.
Расширение удобно и тем, что его легко отключить: если новая колонка больше не нужна, расширение снимают, и типовая конфигурация остаётся нетронутой.
Способ 5. Строки и объём — где настоящие границы
Запрос «увеличить лимит строк» обычно основан на недоразумении: отдельной настройки «максимум строк в таблице» в 1С нет. Ограничения другие, и лечатся они выбором механизма.
| Механизм | Чем ограничен | Что делать с большими объёмами |
|---|---|---|
| Табличная часть | Грузится в память целиком при открытии и записи объекта | Сотни тысяч строк выносят в отдельный регистр или справочник |
| Таблица значений | Доступной памятью рабочего процесса | Обрабатывать данные порциями, не держать всё сразу |
| Динамический список | Практически не ограничен — читает данные порциями | Это и есть правильный инструмент для показа множества строк |
| Запрос / выборка | Ограничение задаёте вы через ПЕРВЫЕ N | Для постраничной обработки использовать выборку |
Жёсткого предела строк у табличной части нет, но после нескольких тысяч открытие и проведение документа заметно замедляются — платформа поднимает всю табличную часть в память. Если по бизнес-логике строк реально много, это сигнал, что данные должны лежать в регистре сведений или накоплений, а не в табличной части.
На сервере 1С у рабочего процесса есть свойство безопасного расхода памяти за один вызов. Если обработка создаёт гигантскую таблицу значений, сеанс может быть аварийно завершён именно по этому ограничению. Увеличивать его вслепую не стоит — чаще правильнее переписать алгоритм на обработку порциями.
Частые ошибки при расширении таблиц
Ошибки здесь почти всегда об одном: структуру поменяли, а чего-то не учли.
- 🔧 Правка типовой конфигурации вместо расширения. Добавили реквизит прямо в БП или ЗУП, сняв с поддержки, — и следующее обновление превращается в ручное разрешение конфликтов. Расширение этого избегает.
- 👁️ Реквизит добавили, а на форму не вывели. В данных колонка есть, а пользователь её не видит. Проверьте, что поле перетащено на таблицу формы и у него включена видимость.
- 🔒 Обновление структуры в рабочее время. Изменение табличной части меняет структуру базы и требует монопольного доступа. Запуск при активных пользователях либо не пройдёт, либо оборвёт их сеансы.
- 🔁 Смена типа существующей колонки с данными. Если в реквизите уже лежат значения, изменение типа может привести к их потере или неконтролируемому преобразованию. Сначала выгрузите данные или заведите новый реквизит.
- 🐘 Табличная часть вместо регистра. Хранить в строках документа десятки тысяч позиций — прямой путь к медленной записи. Это не ошибка настройки, а ошибка проектирования.
Производительность: как не посадить базу большой таблицей
Чем шире и длиннее таблица, тем дороже каждое открытие и запись. Несколько правил держат базу в тонусе.
- Показываете много строк — берите динамический список. Он читает данные порциями и не поднимает в память весь массив, в отличие от загрузки всего в таблицу значений.
- Индексируйте поля, по которым фильтруете и ищете. У реквизита есть свойство индексирования; без индекса отбор по колонке на больших данных работает медленно.
- Обрабатывайте порциями. Вместо «выбрать всё и прогнать циклом» используйте выборку или разбивайте данные на пакеты по несколько тысяч строк.
- Не дублируйте вычисляемые колонки в хранении. Если значение можно получить запросом, не заводите под него реквизит и не пересчитывайте вручную — это лишний объём и риск рассинхронизации.
- Следите за памятью рабочего процесса. Массовые операции с широкими таблицами значений на сервере упираются в лимит памяти за вызов. Порционная обработка снимает проблему без правки серверных настроек.
Перед добавлением колонки спросите себя, где значение будет жить дальше. Поле только для отчёта лучше считать запросом, а не хранить в табличной части — так таблица не растёт без нужды.
Частые вопросы
Можно ли добавить колонку в типовую конфигурацию, не снимая её с поддержки?
Нужны ли права администратора, чтобы добавить реквизит?
Чем таблица значений отличается от табличной части?
Почему новая колонка видна в Конфигураторе, но не появляется у пользователя?
Ещё → Изменить форму на стороне пользователя.