При разработке или модификации конфигураций на платформе 1С:Предприятие 7.7 разработчики часто сталкиваются с настройками, назначение которых кажется интуитивно понятным, но имеет глубокие технические последствия. Одной из таких настроек является флажок «Отбор» на закладке «Дополнительные» в свойствах вида субконто. В этой статье мы подробно разберем, как эта маленькая галочка меняет поведение системы, влияет на скорость работы базы данных и какие возможности предоставляет программисту и пользователю.
Давайте проанализируем, что происходит «под капотом» системы, когда мы устанавливаем этот флажок. Основная задача настройки Отбор — управление индексами в таблице проводок (журнале операций). В 1С 7.7 все проводки хранятся в файле 1SENTRY.DBF (для файловой версии) или в соответствующей таблице SQL-базы.
Когда галочка «Отбор» включена, система создает дополнительный индекс по данному виду субконто. Это означает следующее:
Проанализируем ситуацию: если в вашей базе данных миллионы проводок, поиск конкретной партии или договора без включенного отбора превращается в тяжелую задачу для дисковой подсистемы. Включение этой опции переводит операцию поиска из разряда «прочитать всё» в разряд «точечного обращения».
Рассмотрим, как эта настройка проявляется в режиме «1С:Предприятие». Основное визуальное отличие заключается в работе Журнала проводок. Если у вида субконто (например, «Контрагенты») стоит галочка Отбор, пользователь получает возможность выполнять интерактивную фильтрацию:
Если галочка не установлена, этого субконто в списке выбора критериев отбора просто не будет, даже если оно активно используется на многих счетах.
Для программиста наличие этой галочки открывает доступ к эффективному использованию методов объекта Операция. Разберем по шагам, как это работает в коде. Существует специализированный метод ВыбратьОперацииПоСубконто(), который предназначен для получения списка операций, в которых задействовано конкретное значение субконто.
Посмотрим на пример использования метода ВыбратьПоЗначению, который также опирается на этот механизм:
// Создаем объект Операция
обОперация = СоздатьОбъект("Операция");
// Выбираем проводки по конкретному сотруднику за период
// Требуется наличие галочки "Отбор" у вида субконто "Сотрудники"
обОперация.ВыбратьПоЗначению(ДатаНачала, ДатаКонца, "Сотрудники", ТекущийСотрудник);
Пока обОперация.ПолучитьОперацию() = 1 Цикл
// Обработка найденной операции
Сообщить("Найдена операция №" + обОперация.НомерДок);
КонецЦикла;
Важный момент: если галочка Отбор не установлена, использование подобных методов либо будет выдавать ошибку, либо (в зависимости от контекста) приведет к крайне медленной работе, так как системе придется сканировать весь период проводок последовательно.
Выясним причину, по которой без этой галочки алгоритмы ФИФО могут работать «на порядок дольше». В 1С 7.7 часто используются субконто с неопределенным типом или субконто типа «Документ». Если в системе ведется партионный учет, где субконто «Партия» — это документ поступления, то при списании товара системе нужно найти остатки и движения именно по этой конкретной партии.
Если для вида субконто «Партии» не стоит отбор, то любая попытка программно «выцепить» движения по конкретной партии из журнала проводок заставит систему перечитывать огромные объемы данных. Именно поэтому для всех справочников, участвующих в сложных алгоритмах зачета (партии, заказы, счета на оплату), установка галочки Отбор обязательна.
Хотя бухгалтерские итоги (остатки и обороты по счетам) хранятся в отдельных таблицах итогов и рассчитываются независимо от этой галочки, существует целый класс отчетов, которые работают напрямую с проводками. К ним относятся:
Построение таких отчетов по конкретному объекту при включенном отборе происходит практически мгновенно, так как 1С использует индекс для прямого доступа к записям.
Необходимо понимать, что «бесплатных» индексов не бывает. Каждый установленный флажок Отбор создает дополнительную нагрузку на систему при записи данных. Проанализируем последствия:
.CDX могут стать больше самих данных .DBF).Рассмотрим основные правила, когда стоит и когда не стоит ставить эту галочку:
Ставьте галочку «Отбор», если:
Не ставьте галочку, если:
Таким образом, галочка «Отбор» — это мощный инструмент оптимизации производительности при чтении данных, за который мы платим скоростью записи и объемом дискового пространства. Правильное её использование позволяет сделать работу в 1С 7.7 комфортной даже на очень больших объемах данных.