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

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

Как вывести список в 1С 8.3

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

Под задачей «вывести список» в 1С 8.3 обычно скрывается один из четырёх сценариев: открыть список справочника или документов в интерфейсе, показать динамический список на управляемой форме, вывести список значений в табличный документ (для печати или сохранения в Excel) либо программно сформировать перечень строк через запрос. У каждого сценария свой инструмент, и ошибка чаще всего состоит в выборе неподходящего способа — например, попытке построить отчёт через цикл там, где достаточно динамического списка.

Материал ориентирован на платформу 1С:Предприятие 8.3 с управляемыми формами и интерфейсом «Такси». Примеры кода приведены на встроенном языке и работают в типовых и самописных конфигурациях, если не оговорено иное. Перед изменениями в конфигураторе рабочей базы сделайте резервную копию или выгрузку информационной базы.

Как открыть список справочника или документов в пользовательском режиме

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

Если пункт «Все функции» не отображается, его нужно включить: «Сервис» → «Параметры» → установите флажок «Отображать команду "Все функции"». Это стандартная настройка платформы, она не требует прав администратора конфигурации.

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

Как программно открыть форму списка с отбором

Во встроенном языке список открывается методом глобального контекста ОткрытьФорму() или краткой командой ОткрытьСписок(). Второй вариант удобен для быстрого вызова из кнопки или команды формы:

// Простое открытие списка номенклатуры

ОткрытьСписок("Справочник.Номенклатура");

// Открытие списка документов с отбором по контрагенту

ПараметрыФормы = Новый Структура;

Отбор = Новый Структура;

Отбор.Вставить("Контрагент", ВыбранныйКонтрагент);

ПараметрыФормы.Вставить("Отбор", Отбор);

ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаСписка", ПараметрыФормы);

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

1c
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Новый Структура("Организация", ТекущаяОрганизация));
ОткрытьФорму("Документ.ПоступлениеТоваровУслуг.ФормаСписка", ПараметрыФормы);

Как вывести динамический список на управляемую форму

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

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

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

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

ВЫБРАТЬ

Реализация.Ссылка КАК Ссылка,

Реализация.Дата КАК Дата,

Реализация.Номер КАК Номер,

Реализация.Контрагент КАК Контрагент

ИЗ

Документ.РеализацияТоваровУслуг КАК Реализация

ГДЕ

Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода

Параметры запроса устанавливаются программно в обработчике ПриСозданииНаСервере через Список.Параметры.УстановитьЗначениеПараметра("НачалоПериода", НачалоМесяца(ТекущаяДата())). Не подставляйте значения прямо в текст запроса конкатенацией — это источник ошибок и проблем с типами дат.

Как вывести список в табличный документ и на печать

Когда список нужен не на экране, а на бумаге или в файле Excel, используется объект ТабличныйДокумент. Данные получают запросом и выводят построчно через макет или напрямую. Минимальный пример вывода списка номенклатуры:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Номенклатура.Код КАК Код,

| Номенклатура.Наименование КАК Наименование

|ИЗ

| Справочник.Номенклатура КАК Номенклатура

|ГДЕ

| НЕ Номенклатура.ЭтоГруппа

|УПОРЯДОЧИТЬ ПО

| Наименование";

Результат = Запрос.Выполнить().Выбрать();

ТабДок = Новый ТабличныйДокумент;

НомерСтроки = 1;

Пока Результат.Следующий() Цикл

ТабДок.Область(НомерСтроки, 1).Текст = Результат.Код;

ТабДок.Область(НомерСтроки, 2).Текст = Результат.Наименование;

НомерСтроки = НомерСтроки + 1;

КонецЦикла;

ТабДок.Показать("Список номенклатуры");

Готовый табличный документ сохраняется в Excel методом ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX). Для печати больших списков в типовых конфигурациях удобнее использовать механизм «Вывести список» (кнопка «Ещё» → «Вывести список» в форме списка) — он выгружает видимые колонки в табличный документ без программирования.

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

Объект СписокЗначений применяется, когда пользователю нужно показать перечень вариантов для выбора — например, список складов или ставок НДС. Список заполняется методом Добавить() и показывается через ВыбратьЭлемент() (в управляемом приложении — асинхронный вариант ПоказатьВыборЭлемента() с описанием оповещения):

СписокСкладов = Новый СписокЗначений;

СписокСкладов.Добавить("Основной", "Основной склад");

СписокСкладов.Добавить("Резервный", "Резервный склад");

Оповещение = Новый ОписаниеОповещения("ПослеВыбораСклада", ЭтотОбъект);

СписокСкладов.ПоказатьВыборЭлемента(Оповещение, "Выберите склад");

В типовых конфигурациях для выбора из списка документов или справочников предпочтительнее стандартная форма выбора с пометками (ОткрытьФорму() с параметром РежимВыбора = Истина и МножественныйВыбор = Истина) — она даёт поиск, отборы и привычный интерфейс, тогда как СписокЗначений подходит для коротких фиксированных перечней.

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

Динамический список

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

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

Для печати и сохранения в Excel. Требует программного формирования, не интерактивен.

Список значений

Для выбора пользователем из короткого перечня. Не предназначен для тысяч строк.

Команда «Вывести список»

Штатная выгрузка видимых колонок формы списка без программирования. Выгружает только отображаемые данные.

Типичные ошибки и ограничения

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

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

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

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

Список открылся и показывает данные
Норма

Строки соответствуют отбору, колонки заполнены

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

Пустой список при наличии данных — проверьте отборы и права

Команды изменения в динамическом списке
Норма

«Изменить» открывает объект выбранной строки

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

Команды неактивны — не задана основная таблица

Табличный документ после формирования
Норма

Количество строк совпадает с результатом запроса

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

Строк меньше — проверьте условия ГДЕ в запросе

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

Как вывести список документов за определённый период без программирования?

Откройте форму списка документов, нажмите «Ещё» → «Настроить список», добавьте отбор по полю «Дата» с видом сравнения «В диапазоне» и укажите границы периода. Настройка сохранится и будет применяться при следующих открытиях списка.

Как выгрузить список из 1С в Excel?

В форме списка нажмите «Ещё» → «Вывести список», выберите нужные колонки и сформируйте табличный документ. Затем сохраните его через «Файл» → «Сохранить как», выбрав формат Excel. Программно используется метод Записать() табличного документа с типом XLSX.

Почему динамический список на форме пустой, хотя запрос в консоли возвращает данные?

Чаще всего не установлены значения параметров запроса или задан отбор, который пользователь не видит. Проверьте в отладчике содержимое Список.Параметры и Список.Отбор в обработчике ПриСозданииНаСервере, а также убедитесь, что у текущего пользователя есть права на чтение таблицы.

Можно ли вывести список с картинками или цветными строками?

Да, через условное оформление динамического списка (свойство «УсловноеОформление») строки раскрашиваются по условию, а картинки выводятся в колонке типа «Картинка» с указанием картинки строк из коллекции. Для табличного документа оформление задаётся в макете.

Чем отличается СписокЗначений от массива при выводе данных?

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

Как открыть список с уже выбранной (спозиционированной) строкой?

Передайте в параметры формы ключ «ТекущаяСтрока» со ссылкой на нужный объект: ПараметрыФормы.Вставить("ТекущаяСтрока", СсылкаНаЭлемент). После открытия курсор в списке встанет на указанную строку.

Итог

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

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