Как в журнале документов 1С настроить отбор сразу по нескольким кассам?

Программист 1С v8.3 (Управляемые формы) Управленческий учет
← На главную

В процессе работы с программами на платформе 1С:Предприятие 8 часто возникает необходимость отфильтровать данные в журнале документов не по одному значению, а по списку. Например, кассиру, работающему с определенной группой торговых точек, нужно видеть документы только по «Кассе №2» и «Кассе №5», игнорируя остальные. Стандартный поиск по CTRL+F не всегда справляется с такой задачей, так как он обычно рассчитан на поиск одного конкретного значения.

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

Способ 1. Пользовательская настройка списка (Управляемые формы)

Если задача стоит перед конечным пользователем и не требует жесткого закрепления прав, проще всего воспользоваться встроенным механизмом настройки Динамического списка. В современных конфигурациях 1С (УТ 11, БП 3.0, ERP) журналы документов строятся именно на этом механизме.

Разберем по шагам, как это сделать:

  1. Откроем нужный журнал документов.
  2. Нажмем кнопку «Еще», расположенную в правой верхней части командной панели списка.
  3. Выберем пункт «Настроить список».
  4. В открывшемся окне перейдем на вкладку «Отбор».
  5. В левой колонке найдем поле Касса (или Банковский счет / Касса) и перетащим его в правую часть окна или дважды щелкнем по нему.
  6. Теперь обратим внимание на колонку «Вид сравнения». По умолчанию там стоит «Равно». Нам необходимо изменить его на «В списке».
  7. В колонке «Значение» нажмем на кнопку выбора (три точки) и добавим в открывшееся окно все нужные нам кассы (например, Касса №2 и Касса №5).
  8. Нажмем «Завершить редактирование».

После этих действий в журнале останутся только те документы, которые соответствуют выбранному набору касс. Этот отбор будет сохраняться для пользователя при закрытии и открытии формы.

Способ 2. Программная установка отбора в динамическом списке

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

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

Пример кода для реализации такого отбора:


// Создаем массив с нужными ссылками на кассы
СписокКасс = Новый Массив;
СписокКасс.Добавить(СсылкаНаКассу2);
СписокКасс.Добавить(СсылкаНаКассу5);

// Находим или создаем элемент отбора
НовыйОтбор = Список.КомпоновщикНастроек.ФиксированныеНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НовыйОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Касса");
НовыйОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
НовыйОтбор.ПравоеЗначение = СписокКасс;
НовыйОтбор.Использование = Истина;

Разберем подробнее, что здесь происходит. Мы используем свойство ЛевоеЗначение, чтобы указать имя поля в метаданных (в данном случае это Касса). Ключевым моментом является установка ВидСравнения в значение ВидСравненияКомпоновкиДанных.ВСписке. В качестве ПравогоЗначения мы передаем массив или СписокЗначений. Если вы используете ФиксированныеНастройки, данный фильтр будет накладываться поверх любых пользовательских настроек и не будет виден в стандартном окне отборов, что гарантирует чистоту данных.

Способ 3. Использование механизма RLS (Ограничение на уровне записей)

Выясним причину, по которой иногда требуется более сложный подход. Если ваша задача — не просто «помочь пользователю», а запретить ему видеть чужие кассы из соображений безопасности, необходимо использовать RLS (Record Level Security).

Рассмотрим алгоритм настройки через роли:

  1. Создание регистра сведений: Создадим регистр (например, ПраваПользователейНаКассы), где в измерениях будут Пользователь и Касса.
  2. Параметры сеанса: Создадим параметр сеанса ДоступныеКассы с типом ФиксированныйМассив или СписокЗначений. При старте системы (в модуле сеанса) этот параметр должен заполняться списком касс, к которым текущий пользователь имеет доступ, исходя из данных регистра.
  3. Настройка роли: В конфигураторе выберем роль «Кассир», найдем нужный документ и перейдем на вкладку «Ограничения доступа к данным». Для права «Чтение» добавим условие:

ГДЕ Касса В (&ДоступныеКассы)

Важный нюанс: Использование RLS может влиять на производительность системы. Если документов миллионы, а список разрешенных касс постоянно меняется, платформа будет тратить дополнительные ресурсы на построение сложных SQL-запросов. Проанализируем ситуацию: для стабильной работы убедитесь, что поле Касса проиндексировано в метаданных документа.

Способ 4. Реализация в «Обычных формах» (1С 8.2 / УПП 1.3)

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


// Предположим, СписокДокументов - это основная переменная формы (тип ДокументСписок)
СписокДокументов.Отбор.Касса.ВидСравнения = ВидСравнения.ВСписке;

ДоступныеКассы = Новый СписокЗначений;
ДоступныеКассы.Добавить(Справочники.Кассы.НайтиПоНаименованию("Касса №2"));
ДоступныеКассы.Добавить(Справочники.Кассы.НайтиПоНаименованию("Касса №5"));

СписокДокументов.Отбор.Касса.Значение = ДоступныеКассы;
СписокДокументов.Отбор.Касса.Использование = Истина;

В обычных формах объект Отбор напрямую содержит поля документа. Важно помнить, что если вы хотите разрешить пользователю менять этот список, то нужно предоставить ему интерфейс для заполнения объекта СписокЗначений.

Способ 5. Библиотека стандартных подсистем (БСП)

Если ваша конфигурация разработана на базе БСП, вы можете использовать готовые интерфейсные решения. Подсистема «Работа с отборами» позволяет выносить на форму журналов быстрые фильтры. Рассмотрим, как это работает в типовых решениях:

В верхней части журнала часто располагается гиперссылка или поле выбора. Программист может настроить так называемые «Множественные фильтры». Это позволяет пользователю нажать на ссылку «Кассы: Все», отметить галочками нужные элементы, и список мгновенно перестроится. Это наиболее современный и дружелюбный к пользователю подход, так как он не требует заходить в глубокие настройки «Еще -> Настроить список».

Сравнительный анализ методов

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

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

Мы надеемся, что эти рекомендации помогут вам эффективно настроить работу в журналах документов 1С, обеспечив пользователям удобный доступ к нужной информации.

← На главную