Список контрагентов, товаров или документов в 1С 8.3: из формы, отчёта и кода

· 10 мин

Содержание

Чтобы сделать список в 1С 8.3 без программирования, откройте нужный справочник или журнал документов , поставьте отбор и нажмите Ещё → Вывести список.... Программа соберёт табличный документ с выбранными колонками, и его можно распечатать или сохранить в Excel. Если нужны итоги, группировки или данные из нескольких объектов, вместо этого берут отчёт. Если список нужен внутри обработки, его строят запросом и кладут в СписокЗначений или ТаблицаЗначений.

Способ выбирают по задаче. Распечатать перечень клиентов за минуту: вывод из формы. Получить список с остатками или оборотами: отчёт. Подставить перечень в свою форму или передать в процедуру: код. Всё описанное работает на платформе 8.3 в интерфейсе «Такси» и не зависит от конфигурации, кроме мест, где это оговорено отдельно.

Какие списки бывают в 1С и какой вам нужен

Слово «список» в 1С означает несколько разных вещей. Путаница между ними — главная причина, почему инструкции из интернета «не работают».

Что называют спискомГде живётДля чего
📄 Форма списка (динамический список)Окно справочника или журналаПросмотр, отбор, поиск, быстрый вывод на печать
📊 ОтчётРаздел «Отчёты», команда Все функцииСписок с итогами, группировками, данными из разных объектов
🖨️ Печатная форма-реестрКнопка Печать в журнале документовГотовый документ на бумагу или в PDF
💻 СписокЗначенийКод, реквизит формыПеречень значений с представлением и флажками
💻 ТаблицаЗначений, МассивКод на сервереОбработка данных, результат запроса

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

Список из формы справочника или журнала

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

  1. Откройте справочник или журнал. Например, в 1С:Бухгалтерии 3.0 контрагенты лежат в Справочники → Покупки и продажи → Контрагенты.
  2. Наложите отбор. Строка поиска сверху фильтрует по тексту. Для точного условия используйте команду настройки списка в меню Ещё: там задаются отбор по любому реквизиту, сортировка и условное оформление.
  3. Если нужны не все строки, выделите нужные с зажатым Ctrl или Shift.
  4. Нажмите Ещё → Вывести список....
  5. В открывшемся окне снимите флажки с лишних колонок. Если выделяли строки, включите флажок вывода только выделенных.
  6. Нажмите ОК. Откроется табличный документ.

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

Как добавить колонку в форму списка

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

Иерархические справочники

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

Список через отчёт: когда нужны итоги и связанные данные

Форма списка показывает реквизиты одного объекта. Как только нужно «контрагенты с долгом больше 50 000 ₽» или «товары с остатком на складе», нужен отчёт.

Универсальный отчёт

В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) есть «Универсальный отчёт». Он строит список по любому справочнику, документу или регистру без программирования.

  1. Включите команду «Все функции»: ≡ (главное меню) → Сервис → Параметры, флажок «Отображать команду Все функции».
  2. Откройте ≡ → Все функции → Отчеты → Универсальный отчет.
  3. Выберите тип объекта (например, справочник) и сам объект (например, «Контрагенты»).
  4. Нажмите Настройки, переключите вид на расширенный. Здесь добавляются поля, отборы, сортировка и группировки.
  5. Нажмите Сформировать.

Пример настройки списка покупателей Москвы с ИНН:

  • 🔹 Поля: Наименование, ИНН, КПП, Юридический адрес.
  • 🔹 Отбор: Юридический адрес «содержит» «Москва».
  • 🔹 Сортировка: Наименование по возрастанию.

Настроенный вариант сохраните под своим именем через меню отчёта. В следующий раз список строится одним нажатием.

Стандартные отчёты бухгалтерии

Когда нужен список с суммами по счетам, удобнее стандартные отчёты из раздела Отчёты. «Оборотно-сальдовая ведомость по счёту» 62 или 60 с группировкой по контрагентам — это готовый список дебиторов или кредиторов с остатками. Для склада аналогично работает ведомость по счёту 41 или 10 в разрезе номенклатуры.

ЗадачаЧто взять
Перечень клиентов с реквизитамиВывод списка из формы или универсальный отчёт
Список должников на датуОСВ по счёту 62 по контрагентам
Товары с остаткамиОСВ по счёту 41 или складской отчёт конфигурации
Документы за период по видуЖурнал документов → вывод списка или реестр
Перечень с вычисляемыми полямиОтчёт на СКД (внешний или в расширении)

Печатный перечень документов и объектов

Табличный документ из Вывести список... уже годится для печати: Ctrl+P или команда печати в главном меню. Но у него нет шапки, подписей и итоговой строки. Если перечень уходит руководителю или контрагенту, сделайте его аккуратнее.

Реестр документов

Во многих журналах документов 1С:Бухгалтерии 3.0 (реализация, поступление, платёжные поручения) в меню Печать есть «Реестр документов». Это список с номерами, датами, контрагентами и суммами, с итогом внизу. Порядок такой: отбор за период в журнале, выделить документы, Печать → Реестр документов.

Своя печатная форма-перечень

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

Схема для разработчика:

  1. В макете табличного документа создайте именованные области: «Шапка», «Строка», «Подвал».
  2. В модуле получите данные запросом.
  3. Выведите «Шапку» один раз, «Строку» в цикле по выборке, «Подвал» с итогом.
  4. Зарегистрируйте форму в Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки, если это внешняя обработка.

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

Программное создание списка запросом

В коде список почти всегда начинается с запроса. Запрос выбирает данные одним обращением к базе, а не перебором объектов, поэтому работает быстро даже на десятках тысяч строк.

Пример: список действующих контрагентов (не помеченных на удаление, без групп), отсортированный по наименованию.

&НаСервереБезКонтекста
Функция ПолучитьСписокКонтрагентов()

	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Контрагенты.Ссылка КАК Ссылка,
	|	Контрагенты.Наименование КАК Наименование,
	|	Контрагенты.ИНН КАК ИНН
	|ИЗ
	|	Справочник.Контрагенты КАК Контрагенты
	|ГДЕ
	|	НЕ Контрагенты.ПометкаУдаления
	|	И НЕ Контрагенты.ЭтоГруппа
	|
	|УПОРЯДОЧИТЬ ПО
	|	Наименование";

	Выборка = Запрос.Выполнить().Выбрать();

	Список = Новый СписокЗначений;
	Пока Выборка.Следующий() Цикл
		Представление = СтрШаблон("%1 (ИНН %2)", Выборка.Наименование, Выборка.ИНН);
		Список.Добавить(Выборка.Ссылка, Представление);
	КонецЦикла;

	Возврат Список;

КонецФункции

Что здесь важно:

  • 🔸 Запрос выполняется на сервере. На клиенте объекта Запрос нет.
  • 🔸 СписокЗначений можно вернуть на клиент. ТаблицаЗначений и Выборку вернуть на клиент нельзя.
  • 🔸 Условие НЕ ЭтоГруппа нужно только для иерархических справочников с группами. Для справочника без групп поля ЭтоГруппа нет, запрос упадёт с ошибкой.
  • 🔸 Отбор лучше задавать в запросе через параметры (&Организация), а не фильтровать результат в цикле.

Когда хватит одной колонки

Если нужны только ссылки, не пишите цикл. Выгрузите результат в таблицу и заберите колонку:

Таблица = Запрос.Выполнить().Выгрузить();
МассивСсылок = Таблица.ВыгрузитьКолонку("Ссылка");

Список = Новый СписокЗначений;
Список.ЗагрузитьЗначения(МассивСсылок);

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

Работа со списком значений в коде

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

КоллекцияСильная сторонаОграничение
МассивПростой, быстрыйНет представления и флажков
СписокЗначенийПредставление, пометки, диалог выбора, доступен на клиентеОдна колонка значений
ТаблицаЗначенийМного колонок, индексы, свёртка, сортировка по любой колонкеТолько на сервере

Основные методы

Список = Новый СписокЗначений;
Список.Добавить("NDS20", "НДС 20%");
Список.Добавить("NDS10", "НДС 10%");
Список.Добавить("BezNDS", "Без НДС");
Список.Вставить(0, "NDS0", "НДС 0%");   // в начало списка

Список.СортироватьПоПредставлению(НаправлениеСортировки.Возр);

Элемент = Список.НайтиПоЗначению("NDS10");
Если Элемент <> Неопределено Тогда
	Элемент.Пометка = Истина;
КонецЕсли;

Количество = Список.Количество();   // 4
Массив = Список.ВыгрузитьЗначения(); // обратно в массив

Индексы элементов начинаются с нуля. После Вставить(0, ...) элемент «НДС 0%» стал первым, а остальные сдвинулись на одну позицию. После сортировки по представлению порядок будет: «Без НДС», «НДС 0%», «НДС 10%», «НДС 20%».

Как удалить элементы из списка в цикле

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

Всего = Список.Количество();
Для Сч = 1 По Всего Цикл
	Элемент = Список[Всего - Сч];
	Если Не Элемент.Пометка Тогда
		Список.Удалить(Элемент);
	КонецЕсли;
КонецЦикла;

Граница цикла Всего считается один раз до начала, поэтому удаление не ломает перебор.

Выбор элемента пользователем

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

&НаКлиенте
Процедура ВыбратьКонтрагента(Команда)
	Список = ПолучитьСписокКонтрагентов();
	Оповещение = Новый ОписаниеОповещения("ПослеВыбораКонтрагента", ЭтотОбъект);
	Список.ПоказатьВыборЭлемента(Оповещение, "Выберите контрагента");
КонецПроцедуры

&НаКлиенте
Процедура ПослеВыбораКонтрагента(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт
	Если ВыбранныйЭлемент = Неопределено Тогда
		Возврат; // пользователь закрыл окно
	КонецЕсли;
	Сообщить("Выбран: " + ВыбранныйЭлемент.Представление);
КонецПроцедуры

Для выбора нескольких значений флажками есть ПоказатьОтметкуЭлементов: после закрытия окна смотрите свойство Пометка у элементов.

Список значений как реквизит формы

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

Выгрузка готового списка в Excel и другие форматы

Любой табличный документ в 1С (вывод списка, отчёт, печатная форма) сохраняется одинаково:

  1. Сделайте окно с таблицей активным.
  2. Откройте ≡ → Файл → Сохранить как....
  3. Выберите тип файла: Excel (.xlsx), PDF, Word (.docx), табличный документ 1С (.mxl), HTML или текст.
  4. Укажите папку и имя файла.

Если список нужен не для красоты, а для дальнейшей обработки в Excel (сводные таблицы, ВПР), выводите его через Вывести список.... В отчётах с группировками строки итогов и отступы мешают фильтровать данные.

Выгрузка из кода

Чтобы обработка сама сохраняла перечень в файл, соберите табличный документ и запишите его методом Записать:

&НаСервере
Процедура ВыгрузитьВExcelНаСервере(ИмяФайла)

	ТабДок = Новый ТабличныйДокумент;
	ТабДок.Область("R1C1").Текст = "Наименование";
	ТабДок.Область("R1C2").Текст = "ИНН";

	Список = ПолучитьСписокКонтрагентов();
	НомерСтроки = 1;
	Для Каждого Элемент Из Список Цикл
		НомерСтроки = НомерСтроки + 1;
		Стр = Формат(НомерСтроки, "ЧГ=0");
		ТабДок.Область("R" + Стр + "C1").Текст = Строка(Элемент.Значение);
		ТабДок.Область("R" + Стр + "C2").Текст = Элемент.Значение.ИНН;
	КонецЦикла;

	ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);

КонецПроцедуры

Файл записывается на компьютер, где выполняется серверный код. В клиент-серверной базе это сервер 1С, а не машина пользователя. Чтобы файл оказался у пользователя, сохраняйте во временное хранилище и скачивайте на клиенте или формируйте табличный документ и показывайте его пользователю, а он сохранит сам.

Обращение Элемент.Значение.ИНН читает реквизит через ссылку и делает отдельное обращение к базе на каждую строку. На тысяче контрагентов это заметно. Для больших списков выводите поля прямо из выборки запроса.

Частые ошибки при создании списков

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

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

Можно ли сделать список в 1С без прав администратора?
Да. Вывод списка из формы, настройка колонок и сохранение в Excel доступны обычному пользователю, если у него есть право на просмотр объекта. Права на вывод в файл и печать администратор может ограничить отдельно.
Почему вывод списка работает медленно на большом справочнике?
Платформа выводит все строки, попавшие под отбор, а не только видимые на экране. На десятках тысяч строк это занимает время. Сузьте отбор или используйте отчёт.
Чем список значений отличается от массива?
У элемента списка значений, кроме самого значения, есть представление и флажок пометки, а сам список умеет показывать диалог выбора. Массив хранит только значения.
Как сохранить настройку списка, чтобы не собирать её каждый раз?
Настройки формы списка запоминаются для пользователя автоматически. В отчётах сохраните вариант под своим именем, и он появится в списке вариантов.
Можно ли передать список другому пользователю?
Готовый файл — да, через Excel или PDF. Сохранённый вариант отчёта в типовых конфигурациях можно сделать доступным другим пользователям в его свойствах, если вам разрешено это действие.