Очень часто в больших компаниях, особенно с УПП или с КА возникают проблемы, называемые простыми пользователями торможением 1С. Раздается звонок с гневными выкриками вроде : я уже не полчаса не могу провести реализацию, у меня клиенты ушли!. Или : почему так тормозит 1С?
Почему это происходит? Если пользователь не может провести документ, то в сообщении об ошибке с большой долей вероятности найдется фрагмент текста типа "... конфликт блокировок ..." (надо оговориться, что речь идет о базе на MSSQL).
Проблема эта может происходить по массе причин: недостаточная серверная мощность , сеть, неквалифицированные доработки конфигурации, кривые бизнес-процессы и многое многое другое.
Но часто на вышеописанные реляции накладывается еще один фактор: конец отчетного периода. Бухгалтерии, финотделу или другим офисным структурам требуется срочно(обморочно) перепровести огромное количество документов, исправить ошибки партионного учета, учесть и исправить то , что учтено и исправлено не было. А так как УПП или КА - это и управленческий и бухгалтерский учет в одном флаконе - получаем побочный эффект такого смешивания : конфликты блокировок.
- А давайте перепроведем 100500 документов за прошлый месяц?
- Фирма встанет.
- А нам нужно НДС сдавать..
Конечно, не во всех крупных организациях такой порядок вещей. Но ситуация явно неуникальная.
Массовое проведение документов без помехи оперативной деятельности имеет не так уж много решений. Одно из них - проводить документы в нерабочее время (например ночью). Перспектива эта абсолютно нерадостная. Да и использовать ее можно не всегда.
Другой вариант - проводить с документы с паузой. Т.е перед проведением очередного документа делается пауза вроде
ТекВремя = ТекущаяДата(); Пока ТекущаяДата() - ТекВремя < ВеличинаПаузыВСекундах Цикл ОбработкаПрерыванияПользвателя(); КонецЦикла;
Вариант можно назвать компромиссным, но он тоже вносит определенное неудобство в оперативную работу компании.
Эта обработка посвящена альтернативному варианту. Принцип его похож на вариант с паузой, но вызывает гораздо меньше неудобств в оперативной работе компании. Дадим ему название: мониторинг паровоза.
Если заглянуть в административную консоль 1С во время жалоб на блокировки и отсортировать таблицу по колонке Захвачено СУБД, то можно увидеть однотипную картину. В первой строчке обычно локомотив этого паровоза с наибольшем временем обращения к базе, далее следуют "вагоны" поменьше - с меньшим временем захвата. Иногда напротив вагонов проскакивают SPIDы в колонке Заблокировано (это уже тяжелый случай блокировок). И при первом же взгляде на этот паровоз можно сразу же прикинуть загруженность системы по длине "состава". Чем он длиннее - тем меньше шансов провести документ.
И теперь о сути метода:
Вместо паузы мы проверяем длину паровоза: если его длина более заданного числа "вагонов" - делаем холостой цикл. Как только длина уменьшилась - проводим документ. Остальное - дело техники и конкретной реализации.
В нашей обработке делаем следующие:
Заполнение списка документов реализовано с помощью консоли компоновки данных (она встроена в макет обработки и запускается при необходимости). В консоли создается специальный алиас #СвободноеПроведение, запрос из которого будет использован для заполнения списка перепроводимых документов. Что такое алиасы и как использовать консоль вы можете ознакомиться в руководстве к ней. При этом запрос должен содержать одно обязательное поле: ссылка - это ссылка на перепроводимый документ. И тот список, который вы увидите на закладке результата консоли после выполнения запроса, будет взят обработкой за основу.
Список сеансов получаем с помощью примера из обработки "КонсольКластераСерверов.epf" с диска ИТС. Обязательно нужно задать в коде обработки имя сервера, пользователя информационной базы, порт кластера и пароль в модуле обработки. На модуль обработки при желании можно установить пароль. Возможно не во всех системах будет работать такой способ подключения.
Проводим документ с помощью фрагмента кода, изменять который можно в настройках:
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
В контексте этого фрагмента кода доступны переменные, которые позволяют производить с документом любые действия.
Упрощенно схему работы можно обозначить следующим образом:
Кроме того отдельным функционалом идет мониторинг активности. Раз в три секунды отображается список обращающихся к БД
PS. Обработка предназначена для использования только квалифицированными пользователями, знающими что такое запрос.
Кроме того у них должны быть права на внешнее подключение.