Список контрагентов, товаров или документов в 1С 8.3: из формы, отчёта и кода
Содержание
Чтобы сделать список в 1С 8.3 без программирования, откройте нужный справочник или журнал документов
, поставьте отбор и нажмите Ещё → Вывести список.... Программа соберёт табличный документ с выбранными колонками, и его можно распечатать или сохранить в Excel. Если нужны итоги, группировки или данные из нескольких объектов, вместо этого берут отчёт. Если список нужен внутри обработки, его строят запросом и кладут в СписокЗначений или ТаблицаЗначений.
Способ выбирают по задаче. Распечатать перечень клиентов за минуту: вывод из формы. Получить список с остатками или оборотами: отчёт. Подставить перечень в свою форму или передать в процедуру: код. Всё описанное работает на платформе 8.3 в интерфейсе «Такси» и не зависит от конфигурации, кроме мест, где это оговорено отдельно.
Какие списки бывают в 1С и какой вам нужен
Слово «список» в 1С означает несколько разных вещей. Путаница между ними — главная причина, почему инструкции из интернета «не работают».
| Что называют списком | Где живёт | Для чего |
|---|---|---|
| 📄 Форма списка (динамический список) | Окно справочника или журнала | Просмотр, отбор, поиск, быстрый вывод на печать |
| 📊 Отчёт | Раздел «Отчёты», команда Все функции | Список с итогами, группировками, данными из разных объектов |
| 🖨️ Печатная форма-реестр | Кнопка Печать в журнале документов | Готовый документ на бумагу или в PDF |
💻 СписокЗначений | Код, реквизит формы | Перечень значений с представлением и флажками |
💻 ТаблицаЗначений, Массив | Код на сервере | Обработка данных, результат запроса |
Пользователю бухгалтерии почти всегда хватает первых трёх строк. Последние две нужны тем, кто пишет обработки, расширения и внешние отчёты.
Список из формы справочника или журнала
Самый быстрый путь. Подходит для перечня контрагентов, номенклатуры, сотрудников, документов за период.
- Откройте справочник или журнал. Например, в 1С:Бухгалтерии 3.0 контрагенты лежат в
Справочники → Покупки и продажи → Контрагенты. - Наложите отбор. Строка поиска сверху фильтрует по тексту. Для точного условия используйте команду настройки списка в меню
Ещё: там задаются отбор по любому реквизиту, сортировка и условное оформление. - Если нужны не все строки, выделите нужные с зажатым
CtrlилиShift. - Нажмите
Ещё → Вывести список.... - В открывшемся окне снимите флажки с лишних колонок. Если выделяли строки, включите флажок вывода только выделенных.
- Нажмите
ОК. Откроется табличный документ.
Колонки в окне вывода берутся из тех, что сейчас видны в форме. Нужного реквизита нет — сначала добавьте его через Ещё → Изменить форму..., а потом выводите список.
Как добавить колонку в форму списка
В Ещё → Изменить форму... поставьте флажок у реквизита, который хотите видеть. Если его нет среди полей, нажмите Добавить поля и выберите из полного перечня реквизитов объекта. Порядок колонок меняют стрелками. Настройка сохраняется для вашего пользователя, у коллег форма не изменится.
Иерархические справочники
Номенклатура и контрагенты часто разложены по группам. В режиме иерархии форма показывает только содержимое текущей папки, и вывод списка тоже возьмёт только её. Чтобы получить все элементы сразу, переключите режим просмотра на плоский список. Команда переключения находится в меню Ещё, в подменю режима просмотра.
Список через отчёт: когда нужны итоги и связанные данные
Форма списка показывает реквизиты одного объекта. Как только нужно «контрагенты с долгом больше 50 000 ₽» или «товары с остатком на складе», нужен отчёт.
Универсальный отчёт
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) есть «Универсальный отчёт». Он строит список по любому справочнику, документу или регистру без программирования.
- Включите команду «Все функции»:
≡ (главное меню) → Сервис → Параметры, флажок «Отображать команду Все функции». - Откройте
≡ → Все функции → Отчеты → Универсальный отчет. - Выберите тип объекта (например, справочник) и сам объект (например, «Контрагенты»).
- Нажмите
Настройки, переключите вид на расширенный. Здесь добавляются поля, отборы, сортировка и группировки. - Нажмите
Сформировать.
Пример настройки списка покупателей Москвы с ИНН:
- 🔹 Поля: Наименование, ИНН, КПП, Юридический адрес.
- 🔹 Отбор: Юридический адрес «содержит» «Москва».
- 🔹 Сортировка: Наименование по возрастанию.
Настроенный вариант сохраните под своим именем через меню отчёта. В следующий раз список строится одним нажатием.
Стандартные отчёты бухгалтерии
Когда нужен список с суммами по счетам, удобнее стандартные отчёты из раздела Отчёты. «Оборотно-сальдовая ведомость по счёту» 62 или 60 с группировкой по контрагентам — это готовый список дебиторов или кредиторов с остатками. Для склада аналогично работает ведомость по счёту 41 или 10 в разрезе номенклатуры.
| Задача | Что взять |
|---|---|
| Перечень клиентов с реквизитами | Вывод списка из формы или универсальный отчёт |
| Список должников на дату | ОСВ по счёту 62 по контрагентам |
| Товары с остатками | ОСВ по счёту 41 или складской отчёт конфигурации |
| Документы за период по виду | Журнал документов → вывод списка или реестр |
| Перечень с вычисляемыми полями | Отчёт на СКД (внешний или в расширении) |
Печатный перечень документов и объектов
Табличный документ из Вывести список... уже годится для печати: Ctrl+P или команда печати в главном меню. Но у него нет шапки, подписей и итоговой строки. Если перечень уходит руководителю или контрагенту, сделайте его аккуратнее.
Реестр документов
Во многих журналах документов 1С:Бухгалтерии 3.0 (реализация, поступление, платёжные поручения) в меню Печать есть «Реестр документов». Это список с номерами, датами, контрагентами и суммами, с итогом внизу. Порядок такой: отбор за период в журнале, выделить документы, Печать → Реестр документов.
Своя печатная форма-перечень
Когда нужен постоянный бланк со своей шапкой, делают внешнюю печатную форму или добавляют макет в расширение конфигурации . Расширение не снимает конфигурацию с поддержки, поэтому обновления ставятся как обычно.
Схема для разработчика:
- В макете табличного документа создайте именованные области: «Шапка», «Строка», «Подвал».
- В модуле получите данные запросом.
- Выведите «Шапку» один раз, «Строку» в цикле по выборке, «Подвал» с итогом.
- Зарегистрируйте форму в
Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки, если это внешняя обработка.
Внешние обработки и расширения выполняют код в вашей базе. Подключайте только то, что написали сами или получили от проверенного разработчика, и сначала проверяйте на копии базы.
Программное создание списка запросом
В коде список почти всегда начинается с запроса. Запрос выбирает данные одним обращением к базе, а не перебором объектов, поэтому работает быстро даже на десятках тысяч строк.
Пример: список действующих контрагентов (не помеченных на удаление, без групп), отсортированный по наименованию.
&НаСервереБезКонтекста
Функция ПолучитьСписокКонтрагентов()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка,
| Контрагенты.Наименование КАК Наименование,
| Контрагенты.ИНН КАК ИНН
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| НЕ Контрагенты.ПометкаУдаления
| И НЕ Контрагенты.ЭтоГруппа
|
|УПОРЯДОЧИТЬ ПО
| Наименование";
Выборка = Запрос.Выполнить().Выбрать();
Список = Новый СписокЗначений;
Пока Выборка.Следующий() Цикл
Представление = СтрШаблон("%1 (ИНН %2)", Выборка.Наименование, Выборка.ИНН);
Список.Добавить(Выборка.Ссылка, Представление);
КонецЦикла;
Возврат Список;
КонецФункции
Что здесь важно:
- 🔸 Запрос выполняется на сервере. На клиенте объекта
Запроснет. - 🔸
СписокЗначенийможно вернуть на клиент.ТаблицаЗначенийиВыборкувернуть на клиент нельзя. - 🔸 Условие
НЕ ЭтоГруппанужно только для иерархических справочников с группами. Для справочника без групп поляЭтоГруппанет, запрос упадёт с ошибкой. - 🔸 Отбор лучше задавать в запросе через параметры (
&Организация), а не фильтровать результат в цикле.
Когда хватит одной колонки
Если нужны только ссылки, не пишите цикл. Выгрузите результат в таблицу и заберите колонку:
Таблица = Запрос.Выполнить().Выгрузить();
МассивСсылок = Таблица.ВыгрузитьКолонку("Ссылка");
Список = Новый СписокЗначений;
Список.ЗагрузитьЗначения(МассивСсылок);
ЗагрузитьЗначения заполняет список из массива, представление строится автоматически по ссылке.
Работа со списком значений в коде
СписокЗначений — коллекция, у каждого элемента которой есть значение, представление, пометка (флажок) и картинка. Это удобно для выбора пользователем, а для массовой обработки данных лучше подходит таблица значений.
| Коллекция | Сильная сторона | Ограничение |
|---|---|---|
Массив | Простой, быстрый | Нет представления и флажков |
СписокЗначений | Представление, пометки, диалог выбора, доступен на клиенте | Одна колонка значений |
ТаблицаЗначений | Много колонок, индексы, свёртка, сортировка по любой колонке | Только на сервере |
Основные методы
Список = Новый СписокЗначений;
Список.Добавить("NDS20", "НДС 20%");
Список.Добавить("NDS10", "НДС 10%");
Список.Добавить("BezNDS", "Без НДС");
Список.Вставить(0, "NDS0", "НДС 0%"); // в начало списка
Список.СортироватьПоПредставлению(НаправлениеСортировки.Возр);
Элемент = Список.НайтиПоЗначению("NDS10");
Если Элемент <> Неопределено Тогда
Элемент.Пометка = Истина;
КонецЕсли;
Количество = Список.Количество(); // 4
Массив = Список.ВыгрузитьЗначения(); // обратно в массив
Индексы элементов начинаются с нуля. После Вставить(0, ...) элемент «НДС 0%» стал первым, а остальные сдвинулись на одну позицию. После сортировки по представлению порядок будет: «Без НДС», «НДС 0%», «НДС 10%», «НДС 20%».
Как удалить элементы из списка в цикле
При удалении в прямом цикле индексы съезжают, и часть элементов пропускается. Удаляйте с конца:
Всего = Список.Количество();
Для Сч = 1 По Всего Цикл
Элемент = Список[Всего - Сч];
Если Не Элемент.Пометка Тогда
Список.Удалить(Элемент);
КонецЕсли;
КонецЦикла;
Граница цикла Всего считается один раз до начала, поэтому удаление не ломает перебор.
Выбор элемента пользователем
В режиме без модальных окон, который включён в новых конфигурациях, используйте асинхронный вызов с описанием оповещения:
&НаКлиенте
Процедура ВыбратьКонтрагента(Команда)
Список = ПолучитьСписокКонтрагентов();
Оповещение = Новый ОписаниеОповещения("ПослеВыбораКонтрагента", ЭтотОбъект);
Список.ПоказатьВыборЭлемента(Оповещение, "Выберите контрагента");
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораКонтрагента(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт
Если ВыбранныйЭлемент = Неопределено Тогда
Возврат; // пользователь закрыл окно
КонецЕсли;
Сообщить("Выбран: " + ВыбранныйЭлемент.Представление);
КонецПроцедуры
Для выбора нескольких значений флажками есть ПоказатьОтметкуЭлементов: после закрытия окна смотрите свойство Пометка у элементов.
Список значений как реквизит формы
Если перечень нужен прямо на форме, добавьте реквизит типа СписокЗначений и перетащите его в элементы формы. Получится таблица с колонками значения и пометки. Заполнять её удобно при создании формы на сервере, в ПриСозданииНаСервере. Тип значений можно ограничить в свойствах реквизита, тогда пользователь не введёт лишнего.
Выгрузка готового списка в Excel и другие форматы
Любой табличный документ в 1С (вывод списка, отчёт, печатная форма) сохраняется одинаково:
- Сделайте окно с таблицей активным.
- Откройте
≡ → Файл → Сохранить как.... - Выберите тип файла: Excel (
.xlsx), PDF, Word (.docx), табличный документ 1С (.mxl), HTML или текст. - Укажите папку и имя файла.
Если список нужен не для красоты, а для дальнейшей обработки в Excel (сводные таблицы, ВПР), выводите его через Вывести список.... В отчётах с группировками строки итогов и отступы мешают фильтровать данные.
Выгрузка из кода
Чтобы обработка сама сохраняла перечень в файл, соберите табличный документ и запишите его методом Записать:
&НаСервере
Процедура ВыгрузитьВExcelНаСервере(ИмяФайла)
ТабДок = Новый ТабличныйДокумент;
ТабДок.Область("R1C1").Текст = "Наименование";
ТабДок.Область("R1C2").Текст = "ИНН";
Список = ПолучитьСписокКонтрагентов();
НомерСтроки = 1;
Для Каждого Элемент Из Список Цикл
НомерСтроки = НомерСтроки + 1;
Стр = Формат(НомерСтроки, "ЧГ=0");
ТабДок.Область("R" + Стр + "C1").Текст = Строка(Элемент.Значение);
ТабДок.Область("R" + Стр + "C2").Текст = Элемент.Значение.ИНН;
КонецЦикла;
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
КонецПроцедуры
Файл записывается на компьютер, где выполняется серверный код. В клиент-серверной базе это сервер 1С, а не машина пользователя. Чтобы файл оказался у пользователя, сохраняйте во временное хранилище и скачивайте на клиенте или формируйте табличный документ и показывайте его пользователю, а он сохранит сам.
Обращение Элемент.Значение.ИНН читает реквизит через ссылку и делает отдельное обращение к базе на каждую строку. На тысяче контрагентов это заметно. Для больших списков выводите поля прямо из выборки запроса.
Частые ошибки при создании списков
Ещё → Изменить форму... и выведите список заново.Ещё.НЕ ПометкаУдаления.ПоказатьВыборЭлемента с описанием оповещения.Записать выполнялся на сервере 1С. Передайте файл на клиент через временное хранилище.