Регистр накопления на экране пользователя: список, отчёт, форма документа
Содержание
Чтобы регистр накопления появился в интерфейсе 1С 8.3, включите его в подсистему (вкладка «Подсистемы» в свойствах объекта), оставьте флажок «Использовать стандартные команды» и дайте роли пользователя право «Просмотр». После обновления конфигурации в разделе появится команда открытия списка движений. Для остатков и оборотов этого мало: нужен отчёт на СКД или динамический список с запросом к виртуальной таблице.
Регистр создан, документы его проводят, а пользователь движений не видит. Ниже пять способов показать данные регистра: от списка в один клик до остатков прямо в табличной части документа. Плюс права, скорость и ошибки, на которых спотыкаются чаще всего.
С чего начать: кто и что должен видеть
Регистр накопления хранит движения: приход и расход (у регистра остатков) или просто обороты. Голый список движений полезен разработчику и аудитору. Бухгалтеру и кладовщику нужен ответ на вопрос «сколько осталось» или «сколько продали за месяц».
Поэтому сначала решите, какую задачу закрывает вывод:
- 🔍 проверить движения конкретного документа — хватит команды в форме документа;
- 📋 посмотреть все записи с отбором и сортировкой — подойдёт стандартная форма списка;
- 📊 остатки и обороты за период — нужен отчёт на СКД;
- 🧾 подставить остатки в документ — заполнение табличной части запросом;
- 🖥 постоянная панель остатков на рабочем месте — динамический список на форме.
Способ 1. Список регистра через подсистему и командный интерфейс
Самый короткий путь вывести регистр накопления в интерфейс. Работает в любой конфигурации, где вы можете открыть конфигуратор и править объекты.
- Откройте регистр в дереве конфигурации:
Регистры накопления → <имя регистра>, двойной щелчок. - На вкладке «Основные» проверьте флажок «Использовать стандартные команды». Без него платформа не создаст команду открытия списка.
- На вкладке «Подсистемы» отметьте раздел, где регистр должен появиться (например, «Склад»).
- Откройте эту подсистему, в контекстном меню выберите «Открыть командный интерфейс». Найдите команду регистра в группе «Панель навигации» или «Панель действий» и включите видимость.
- Обновите конфигурацию базы данных (
F7) и запустите режим «1С:Предприятие».
Команда появится в разделе. По умолчанию откроется автоматическая форма списка. Если нужны свои колонки, отборы или подвал с итогами, создайте форму списка: вкладка «Формы» регистра, кнопка добавления формы, тип «Форма списка».
В командном интерфейсе подсистемы можно задать видимость по ролям. Команда будет видна, например, только кладовщикам, хотя регистр включён в общий раздел.
Почему в списке нет кнопки «Создать»
Регистр накопления всегда подчинён регистратору. Записи в него пишет документ при проведении, поэтому ручного ввода в форме списка нет. Если нужно поправить движения, правьте или перепроводите документ-основание. В типовых конфигурациях на базе БСП для ручных правок обычно есть отдельный документ корректировки регистров.
Вариант без конфигуратора: «Все функции»
В пользовательском режиме любой регистр можно открыть без доработок:
- Откройте главное меню (кнопка с тремя полосками слева вверху) →
Сервис → Параметры. - Включите флажок «Отображать команду “Все функции”».
- Снова главное меню →
Все функции→ веткаРегистры накопления→ нужный регистр.
Список откроется, если у роли пользователя есть право «Просмотр». Это рабочий приём для проверки движений в типовой без правки конфигурации.
Способ 2. Отчёт на СКД: остатки и обороты за период
Список показывает движения построчно. Остатки на дату и обороты за месяц в нём не увидеть. Для этого делают отчёт на системе компоновки данных.
Создание отчёта
- В дереве конфигурации:
Отчеты → Добавить. Задайте имя, напримерОстаткиТоваров. - На вкладке «Основные» нажмите «Открыть схему компоновки данных», подтвердите создание основной схемы.
- Добавьте набор данных «Запрос» и откройте конструктор запроса.
- Выберите виртуальную таблицу регистра
ОстаткиИОбороты, перенесите измерения и поля остатков и оборотов. - На вкладке «Настройки» схемы добавьте группировку и выберите поля.
Пример текста запроса для регистра остатков ТоварыНаСкладах:
ВЫБРАТЬ
Т.Склад КАК Склад,
Т.Номенклатура КАК Номенклатура,
Т.КоличествоНачальныйОстаток КАК НачальныйОстаток,
Т.КоличествоПриход КАК Приход,
Т.КоличествоРасход КАК Расход,
Т.КоличествоКонечныйОстаток КАК КонечныйОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , ) КАК Т
СКД сама создаст параметры НачалоПериода и КонецПериода. На вкладке «Параметры» удобно добавить параметр типа «Стандартный период» и связать с ним оба: пользователь выберет период одним полем.
Конец периода передавайте как конец дня. Если в параметр попадёт дата с временем 00:00:00, движения последнего дня в отчёт не войдут, и расход за 31-е «потеряется».
Как вывести отчёт в раздел
- Включите отчёт в ту же подсистему, что и регистр.
- В командном интерфейсе подсистемы найдите команду отчёта в группе «Панель действий → Отчеты» и включите видимость.
- Дайте ролям право «Просмотр» на отчёт.
Без программирования: универсальный отчёт
В конфигурациях на БСП (Бухгалтерия 3.0, УТ 11, ЗУП 3.1) есть универсальный отчёт. В нём выбирают тип объекта «Регистр накопления», сам регистр и таблицу: остатки, обороты или остатки и обороты. Найти его проще всего через Все функции → Отчеты или поиском по разделу отчётов. Для разовой проверки остатков это быстрее, чем писать СКД.
Способ 3. Движения регистра в форме документа
Пользователь проводит документ и хочет сразу увидеть, что он записал в регистр. Для этого не нужен отдельный отчёт.
- Откройте документ в конфигураторе, вкладка «Движения». Убедитесь, что регистр отмечен: документ должен быть его регистратором.
- Откройте форму документа и перейдите на вкладку «Командный интерфейс» (в левом верхнем окне редактора формы).
- Раскройте
Панель навигации → Перейти. Там уже есть команда регистра с отбором по регистратору. Включите ей видимость. - Обновите конфигурацию.
В форме документа появится ссылка с названием регистра. Она откроет список, отфильтрованный по текущему документу.
В типовых на БСП есть общая кнопка просмотра движений документа (в Бухгалтерии 3.0 это кнопка с надписью «ДтКт» в командной панели). Она показывает все регистры разом. Свою ссылку на регистр в панели навигации стоит добавлять, когда регистр ваш, а не типовой.
Способ 4. Остатки регистра в табличной части документа
Частая задача: кнопка «Заполнить остатками» в документе списания или перемещения. Данные берут запросом к виртуальной таблице Остатки и переносят в табличную часть.
Обработчик команды формы для регистра ТоварыНаСкладах и табличной части Товары:
&НаКлиенте
Процедура ЗаполнитьОстатками(Команда)
ЗаполнитьОстаткамиНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьОстаткамиНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Т.Номенклатура КАК Номенклатура,
| Т.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&Момент, Склад = &Склад) КАК Т
|ГДЕ
| Т.КоличествоОстаток > 0";
Если Объект.Ссылка.Пустая() Тогда
Момент = Неопределено; // текущие остатки
Иначе
Момент = Новый Граница(Объект.Ссылка.МоментВремени(), ВидГраницы.Исключая);
КонецЕсли;
Запрос.УстановитьПараметр("Момент", Момент);
Запрос.УстановитьПараметр("Склад", Объект.Склад);
Объект.Товары.Очистить();
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
КонецЦикла;
КонецПроцедуры
Что здесь важно:
- 🧭 Граница «Исключая». Для уже записанного документа остаток берётся на момент до него. Иначе при перезаполнении проведённого документа он «увидит» собственный расход.
- 🎯 Отбор в параметрах таблицы. Условие
Склад = &Складстоит внутри скобок виртуальной таблицы, а не вГДЕ. Так платформа отбирает данные до расчёта остатков. - 🧹 Очистка перед заполнением. Без
Очистить()повторное нажатие удвоит строки.
Команду ЗаполнитьОстатками создайте на вкладке «Команды» формы и перетащите в командную панель табличной части.
Панель остатков прямо на форме
Если остатки нужны перед глазами постоянно, добавьте на форму реквизит типа ДинамическийСписок. В его свойствах включите «Произвольный запрос» и напишите запрос к той же виртуальной таблице Остатки. Отбор по складу передайте параметром в ПриСозданииНаСервере:
Список.Параметры.УстановитьЗначениеПараметра("Склад", Объект.Склад);
При смене склада в форме обновляйте параметр в обработчике ПриИзменении поля.
Права и роли: почему регистр не виден пользователю
Регистр может быть выведен в интерфейс идеально, но пользователь его не увидит. Платформа скрывает команды, на которые нет прав.
Права роли на регистр накопления:
| Право | Что даёт | Кому давать |
|---|---|---|
| Чтение | Чтение данных программно и в запросах | Всем, чьи документы читают регистр при проведении |
| Просмотр | Открыть список регистра в интерфейсе | Тем, кто смотрит движения вручную |
| Изменение | Запись движений программно | Ролям, которые проводят документы-регистраторы |
| Редактирование | Интерактивная правка в форме | Обычно никому, кроме администратора |
| Управление итогами | Пересчёт и настройка итогов | Администратору |
Порядок проверки:
- Конфигуратор →
Общие → Роли→ роль пользователя → регистр. Отмечено ли «Просмотр»? - Командный интерфейс подсистемы → колонка видимости по ролям. Не снят ли флажок у этой роли?
Администрирование → Пользователи(в БСП — через группы доступа): назначен ли пользователю профиль с нужной ролью?
Если в роли настроены ограничения на уровне записей (RLS), пользователь увидит только часть движений. Остатки в отчёте у него будут меньше, чем у администратора. Это не ошибка отчёта, а работа ограничений доступа.
Для отчётов на СКД есть тонкость: запрос выполняется с правами пользователя. Если право «Чтение» на регистр не дано, отчёт упадёт с ошибкой о недостаточных правах, даже когда право на сам отчёт есть.
Скорость на больших объёмах
На базе в миллионы движений тот же отчёт может открываться минуту. Причина почти всегда в запросе или в итогах регистра.
Правила для запросов
- ⚡ Только виртуальные таблицы для остатков. Сумма по физической таблице движений с
ВЫБОР КОГДА ВидДвиженияпересчитывает всю историю. ТаблицаОстаткиберёт готовые итоги. - 🎯 Отборы — в параметры виртуальной таблицы.
Остатки(&Период, Склад = &Склад)работает в разы быстрее, чем тот же отбор вГДЕ. - 📅 Текущие остатки — без даты. Если параметр периода не заполнен, платформа читает итоги на текущий момент без досчёта по движениям.
- 🗂 Индексы измерений. У измерений, по которым часто фильтруют, в свойствах включите «Индексировать».
Итоги регистра
| Настройка | Где | Эффект |
|---|---|---|
| Использование итогов | Все функции → Стандартные → Управление итогами | Без итогов остатки считаются по всем движениям |
| Период рассчитанных итогов | Там же | Сдвиг к текущему месяцу сокращает досчёт |
| Разделение итогов | Свойство регистра в конфигураторе | Меньше блокировок при параллельном проведении |
| Агрегаты | Только у оборотных регистров | Ускоряют отчёты по оборотам за периоды |
Пересчёт итогов на большой базе нагружает сервер и может идти часами. Запускайте его вне рабочего времени, после резервной копии, иначе проведение документов у пользователей будет тормозить.
Динамический список
В свойствах динамического списка проверьте флажок «Динамическое считывание данных». Платформа будет читать порцию строк, видимую на экране, а не всю таблицу. Для списка движений на миллионы строк это разница между открытием за секунду и зависанием формы.
Ошибки, из-за которых данных регистра не видно
Архитектурные решения, о которых жалеют потом
- 🧱 Лишние измерения. Каждое измерение умножает число строк итогов. Комментарий или контрагент-получатель часто достаточно хранить реквизитом, а не измерением.
- 🔀 Один регистр на всё. Регистр «Движения всего» с десятком измерений, где половина пустая, медленно считается и плохо читается в отчётах. Два узких регистра проще.
- 🧮 Остатки там, где нужны обороты. Если остаток по смыслу не нужен (продажи, выручка), делайте оборотный регистр: у него есть агрегаты.