В практике работы с информационными базами 1С:Предприятие часто возникает задача "наведения порядка" в справочниках. Клиенты или пользователи хотят начать новый период (например, год) с чистыми списками, убрав с глаз долой уволенных сотрудников, закрытые склады, неиспользуемую номенклатуру или старых контрагентов. При этом физически удалять эти данные нельзя, так как на них завязана история операций, документы прошлых лет и отчетность.
Многие пользователи по привычке пытаются помечать такие объекты на удаление или переименовывать их, добавляя спецсимволы в начало названия. Однако это не всегда методически верно. В данной статье мы подробно разберем, какие инструменты предлагает платформа 1С и типовые конфигурации для решения этой задачи, а также рассмотрим, как правильно реализовать механизм архивации, если штатных средств недостаточно.
Прежде чем переходить к правильным решениям, давайте проанализируем распространенные ошибки, которые часто совершают пользователи.
Ошибка 1: Использование пометки на удаление для архивации.
Механизм ПометкаУдаления в платформе 1С предназначен для маркировки объектов, которые были созданы ошибочно и подлежат физическому уничтожению. Когда вы используете этот флаг для "архивных" записей (например, для товара, который больше не продается, но был в накладных год назад), вы создаете проблемы для обслуживания базы:
Ошибка 2: Переименование с префиксом (например, "Ъ_Иванов").
Добавление символов вроде "Ъ", "Z", "Архив_" в начало наименования сбивает сортировку в списках. Хотя это и опускает элементы вниз списка при сортировке по алфавиту, это затрудняет поиск через быстрый ввод строки. Кроме того, переименование исторических данных (например, контрагентов) может привести к путанице в печатных формах документов прошлых периодов, если они формируются "на лету" из текущего наименования.
Самый простой и доступный каждому пользователю способ скрыть ненужные элементы — это настройка отборов в управляемых формах. Этот метод работает практически во всех современных конфигурациях (Бухгалтерия 3.0, ЗУП 3.1, УТ 11, ERP и др.).
Давайте разберем алгоритм настройки, который позволяет скрыть элементы, помеченные на удаление (если вы все-таки используете этот метод) или элементы с определенными признаками.
ПометкаУдаления (или другой статус, если он есть), вид сравнения — "Равно", значение — "Нет" (или снятая галочка).После этих действий из списка исчезнут все "ненужные" элементы. Чтобы эта настройка не сбрасывалась, ее можно сохранить как стандартную для пользователя или скопировать другим пользователям через функции администрирования.
Разработчики типовых конфигураций (особенно решений ERP-класса и УНФ) предусмотрели специальные механизмы для вывода объектов из оборота без их удаления. Давайте рассмотрим, где и как это реализовано.
В конфигурации "Зарплата и управление персоналом" (ЗУП 3.1):
Для справочника Сотрудники существует встроенный механизм фильтрации уволенных. Внизу формы списка сотрудников обычно располагается галочка "Скрывать уволенных". Если она установлена, система автоматически анализирует кадровые документы и скрывает тех, кто больше не работает, основываясь на дате увольнения, а не на пометке удаления.
В конфигурациях УТ 11, КА 2, ERP:
Для номенклатуры и партнеров реализована система статусов:
В конфигурации "Управление нашей фирмой" (УНФ):
Здесь реализован один из самых удобных механизмов. В списках товаров можно выделить несколько позиций и через контекстное меню отправить их в "Архив". Это не пометка на удаление, а специальный статус. Такие товары пропадают из подбора, но доступны в отчетах.
Если в вашей конфигурации (например, в простой "Бухгалтерии предприятия") нет статусов "Закрыт" для складов или договоров, а помечать на удаление вы не хотите, наилучшим решением будет использование механизма Расширений конфигурации. Это позволяет добавить функционал архивации, не снимая основную конфигурацию с поддержки.
Давайте реализуем простой и универсальный механизм "Архив".
Шаг 1: Создание расширения
В режиме Конфигуратора создайте новое расширение. Снимите галочки "Безопасный режим", если планируете использовать сложную логику, но для простого реквизита это не обязательно. Добавьте в расширение нужный справочник, например, Склады.
Шаг 2: Добавление реквизита
Добавьте к заимствованному справочнику новый реквизит. Назовем его ВАрхиве (или НеИспользовать). Тип — Булево. Выведите этот реквизит на форму элемента справочника, чтобы пользователи могли ставить галочку.
Шаг 3: Настройка фильтрации в форме списка
Чтобы скрытие работало автоматически, нам нужно вмешаться в открытие формы списка. Заимствуйте форму списка справочника в расширение. Создайте обработчик события ПриСозданииНаСервере.
В коде модуля формы расширения пропишем установку фиксированного отбора. Рассмотрим пример кода:
&НаСервере
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Создаем элемент отбора динамического списка
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВАрхиве");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Ложь; // Показываем только те, что НЕ в архиве
ЭлементОтбора.Использование = Истина;
// Опционально: делаем отбор недоступным для изменения пользователем,
// или наоборот - даем возможность его отключить через "Настроить список"
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;
КонецПроцедуры
При таком подходе при открытии списка пользователь по умолчанию увидит только актуальные склады. Если ему понадобится увидеть архивный склад, он сможет снять галочку фильтра в быстрых отборах (если мы установили режим БыстрыйДоступ).
Шаг 4: Визуальное выделение (Условное оформление)
Чтобы архивные элементы отличались от обычных (если пользователь все же включил их отображение), полезно настроить условное оформление списка. Мы можем сделать их серыми (цвет текста).
В той же процедуре ПриСозданииНаСервере или в настройках динамического списка в конфигураторе:
ВАрхиве Равно Истина.ЦветТекста = Серый (Web-цвета: LightGray или Gray).Для крупных компаний, где важно не просто скрыть старые элементы, а запретить их использование большинству пользователей, можно использовать RLS (Record Level Security). Этот метод сложнее в настройке и может влиять на производительность.
Суть метода заключается в создании Группы доступа (например, "Доступ к архивным данным"). В ролях настраивается ограничение доступа к чтению данных: пользователи, не входящие в эту группу, физически не увидят элементы справочника, где установлен реквизит ВАрхиве = Истина. Они исчезнут не только из списка, но и из всех отчетов и форм выбора.
Важное предупреждение: При использовании RLS для скрытия данных в отчетах могут "поплыть" итоги, если отчет строится по данным, часть из которых скрыта от пользователя. Поэтому для архивных данных RLS следует применять с осторожностью, чаще всего ограничивая только "Выбор" и "Изменение", но оставляя "Чтение".
В типовых решениях 1С проблема "скрытия старого" решается разными путями. Прежде чем приступать к доработкам: