Контролируемые механизмы

20.05.14

База данных - Инструменты администратора БД

Автоматический запрет запуска в копиях рабочих баз механизмов, оказывающих внешнее воздействие

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
КонтролируемыеМеханизмы.dt
.dt 26,60Kb
2
2 Скачать (1 SM) Купить за 1 850 руб.

Введение

Я думаю, что многие сталкивались с такой ситуацией, когда после создания копии рабочей базы один или несколько механизмов в новой базе продолжали оказывать внешнее воздействие. К механизмам, оказывающим внешнее воздействие, можно отнести, например, различного рода обмены между информационными системами, уведомления пользователей и клиентов с помощью SMS или email.  Последствия от запуска таких механизмов не в рабочей базе могут быть разными - от легкой неловкости до сложнопоправимых ситуаций. В приниципе, для того, чтобы не возникало таких проблем, сделать нужно не так много - заблокировать регламентные задания, перенастроить механизмы или отключить их вручную. Но так называемый человеческий фактор все усложняет - люди увольняются, люди устраиваются, люди забывают.
Даже если представить, что нет человеческого фактора, то все равно все не так просто - механизмов может быть много и их перенастройка может быть утомительной.

Идея

Было бы хорошо, если бы определенным механизмам автоматически запрещался запуск в копиях рабочих баз.
А если бы надо было включить один из них, то только его и надо было перенастроить, а потом вручную разрешить ему запускаться.

Решение

В первую очередь для реализации идеи необходимо научиться различать копии одной и той же базы. Единственное, что их различает - это результат возвращаемый функцией СтрокаСоединенияИнформационнойБазы. С этой функцией есть некоторые особенности, связанные с тем, что она может возвращать немного разные строки подключения в зависимости от места ее выполнения. Поэтому я не использую напрямую возвращаемый ей результат. Функция ПолучитьКонтрольноеЗначение устраняет известные мне особенности.

Функция ПолучитьКонтрольноеЗначение() Экспорт    
    КонтрольноеЗначение = СтрокаСоединенияИнформационнойБазы();
    КонтрольноеЗначение = НРег(КонтрольноеЗначение);
    КонтрольноеЗначение = СтрЗаменить(КонтрольноеЗначение, ":1541", "");
    Возврат КонтрольноеЗначение;
КонецФункции

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

В справочнике "Контролируемые механизмы" есть очень важный реквизит "Контрольное значение". Сравнивая значение хранящееся в нем и контрольное значение для текущей базы, определяется возможность запуска механизма.

Для разрешения запуска механизма используется следующая функция.

Функция РазрешитьЗапуск(КонтролируемыйМеханизм) Экспорт    
    КонтролируемыйМеханизмОбъект = КонтролируемыйМеханизм.ПолучитьОбъект();
    КонтролируемыйМеханизмОбъект.КонтрольноеЗначение = ПолучитьКонтрольноеЗначение();
    КонтролируемыйМеханизмОбъект.Записать();
КонецФункции

Для запрета запуска механизма используется другая функция.

Функция ЗапретитьЗапуск(КонтролируемыйМеханизм) Экспорт
    КонтролируемыйМеханизмОбъект = КонтролируемыйМеханизм.ПолучитьОбъект();
    КонтролируемыйМеханизмОбъект.КонтрольноеЗначение = "";
    КонтролируемыйМеханизмОбъект.Записать();
КонецФункции

Для того, чтобы определить разрешен или запрещен запуск механизма используется следующая функция.

Функция РазрешенЗапуск(КонтролируемыйМеханизм) Экспорт    
    Если Не ЗначениеЗаполнено(КонтролируемыйМеханизм) Тогда
        ВызватьИсключение "Не указан контролируемый механизм";        
    КонецЕсли;        
    Возврат (ПолучитьКонтрольноеЗначение() = КонтролируемыйМеханизм.КонтрольноеЗначение);    
КонецФункции

Есть еще одна процедура, она ничего не делает, если запуск механизма разрешен и вызывает исключение, если запрещен.

Процедура КонтрольЗапуска(КонтролируемыйМеханизм) Экспорт    
    Если Не РазрешенЗапуск(КонтролируемыйМеханизм) Тогда
        ВызватьИсключение "Запуск контролируемого механизма не разрешен";        
    КонецЕсли;        
КонецПроцедуры

Все эти процедуры и функции находятся в модуле менеджера справочника "Контролируемые механизмы"

Внедрение

Для того, чтобы все заработало, в код алгоритма контролируемого механизма необходимо добавить контроль запуска.

//Получим настройки
Настройки = ПолучитьНастройки();   
//Контроль запуска
Если Справочники.КонтролируемыеМеханизмы.РазрешенЗапуск(Настройки.КонтролируемыйМеханизм) Тогда    
    //Выполнение
Иначе
    //Запуск запрещен
КонецЕсли;

Или так.

//Получим настройки
Настройки = ПолучитьНастройки();   
//Контроль запуска
Справочники.КонтролируемыеМеханизмы.КонтрольЗапуска(Настройки.КонтролируемыйМеханизм);   
//Выполнение

Мне больше нравится второй вариант.

Демонстрационный пример

Для того, чтобы было еще понятнее, я подготовил демонстрационный пример:

0. Скачайте КонтролируемыеМеханизмы.dt
1. Создайте пустую базу и загрузите в нее КонтролируемыеМеханизмы.dt
2. Запустите новую базу в режиме предприятия и откройте справочник "Контролируемые механизмы" - пока запуск демонстрационного механизма запрещен.

 Контролируемые механизмы

3. Откройте обработку "Демонстрационный механизм" и все равно попытайтесь запустите механизм - действительно, запуск демонстрационного механизма запрещен.

Контролируемые механизмы
4. Вернитесь в справочник "Контролируемые механизмы" и разрешите запуск демонстрационного механизма - запуск демонстрационного механизма разрешен.

Контролируемые механизмы
5. Вернитесь к обработке "Демонстрационный механизм" и запустите его еще раз -  действительно, запуск демонстрационного механизма разрешен.

Контролируемые механизмы
6. Выгрузите данные базы в .dt
7. Создайте еще пустую базу и загрузите в нее только что полученный файл .dt
8. Запустите новую базу в режиме предприятия и откройте справочник "Контролиремые механизмы" - запуск демонстрационного механизма автоматически стал запрещен.

Контролируемые механизмы

Заключение

Надеюсь, описанный в статье механизм пригодится вам. Спасибо за внимание.

См. также

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    14664    109    46    

108

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

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

15000 руб.

10.11.2023    11957    45    33    

67

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 18.09.2024, версия 1.2

18000 руб.

06.12.2023    10745    47    8    

78

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Россия Платные (руб)

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

4800 3840 руб.

14.01.2013    191346    1153    0    

920

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    33867    108    152    

75

Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Брандмауэр для сервера 1С включает в себя управление возможностью начала и возобновления сеансов пользователей по различным условиям, ограничение общего числа возможных сеансов для работы с информационной базой, резервирование возможности работы с информационной базой определенных польззователей, запрет запуска нескольких сеансов для пользователя, журнализация событий начала (возобновления) и завершения (гибернации) сеансов, ведение списка активных сеансов для информационных баз кластера серверов

3600 руб.

06.02.2017    32678    145    18    

51

Архивирование (backup) Инструменты администратора БД Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Данная разработка позволит решить вопрос с резервным копированием Ваших баз в автоматическом режиме, расположенных на сервере 1С. Система умеет ставить блокировки на вход, блокировать фоновые задания, принудительно отключать сеансы пользователей. И все это система делает в автоматически при создании бэкапа (или через команду). Выгрузка происходит в родной формат 1С - .dt. Так же система умеет архивировать данные выгрузки с установкой пароля. Умеет менять расширение файла zip или dt на любое указанное вами, что позволит сохранить выгрузки от шифровальщика. Может удалять старые копии выгрузок, оставляя указанное количество резервных копий, начиная с самой поздней. Только для WINDOWS!

6000 руб.

06.11.2012    73776    629    45    

88

Инструменты администратора БД Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Многие сталкиваются с проблемой когда изображения, находящиеся в базе разные по объему и размерам. Менеджеры могут добавить файлы в очень высоком разрешении, объемом свыше 20 Мегабайт. База данных становится слишком большой, выгрузка на сайт идёт медленно и требуется много место на хостинге. Как сжать картинки и уменьшить размер базы 1С? Это можно сделать с помощью данной обработки. Существует возможность выбрать различные варианты для того чтобы уменьшить картинки: в разы, в процентах от первоначального объема, а также сделать картинки одинаковой ширины. В результате размер базы 1С значительно сократится (в зависимости от количества и размера картинок), а изображения станут небольшого объема, равными по ширине, почти без потери качества. Работает на управляемых формах для УТ 11, КА, ERP.

3000 руб.

21.07.2022    10181    10    4    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. FractonKireyev 21.05.14 10:43 Сейчас в теме
Идея не нова и не оригинальна. Я использовал этот-же принцип несколько лет назад при обмене данными. Сразу оговорюсь - идею я тогда тоже где-то вычитал (не помню где).

Но автору всё-равно спасибо за подробное объяснение принципов контроля - я встречал спецов с дружественных франчевых фирм, которые по этим граблям ходили и не могли понять сути проблемы (у них тогда после обмена обнаруживалась куча битых ссылок). Может быть, эта статья уменьшит количество таких проблем.
2. mikhailovaew 127 22.05.14 16:34 Сейчас в теме
КонтрольноеЗначение = СтрЗаменить(КонтрольноеЗначение, ":1541", "");

а почему бы не убирать любое значение порта?
3. rtnm 616 22.05.14 18:24 Сейчас в теме
(2) mikhailovaew, порт 1541 является портом по умолчанию для менеджера кластера, если при подключении к базе не указывать его явно, то будет использоваться именно он. Может случиться так, например, что при создании базы в кластере порт явно не указывали, а при подключении уже существующей базы порт 1541 указали, тогда получится, что в зависимости от места выполнения функции СтрокаСоединенияИнформационнойБазы порт 1541 может быть указан, а может быть не указан в возвращаемом ей результате. Указание порта менеджера кластера отличного от 1541 является обязательным, поэтому он будет присутствовать всегда в результате возвращаемом функцией СтрокаСоединенияИнформационнойБазы и удалять его нет необходимости.
4. Diversus 2331 23.09.15 16:50 Сейчас в теме
(0) Этот способ содержит ошибку, на которую когда то попался и я.
Все дело в том, что может быть такая ситуация, когда сервер может быть представлен несколькими способами и строка соединения с ИБ будет разной для одной информационной базы!
Например, в домене можно представить сервер 1С сразу несколькими способами:

1) server
2) server.local
3) 192.168.1.10 (ip сервера 1С)
4) server:1541
5) ...

И все способы будут работать. Не так давно был глюк в одном из наших решений, которое использовало данный подход когда из под пользователя все работало как надо, а из фонового задания не запускалось в следствии того, что фоновое задание считало что оно работало с сервером server.local (в домене)!

Переделайте подход, иначе могут быть ошибки, которые трудно будет найти.
Мы пошли путем, когда в "КонтрольноеЗначение" записывалось через точку с запятой все возможные представления сервера 1С и это помогло решить проблему.
sulfur17; +1 Ответить
5. rtnm 616 24.09.15 08:44 Сейчас в теме
(4) Diversus, спасибо за замечание, такая ситуация действительно может быть, конкретно для нас она не страшна, так как если в рабочей какой-нибудь механизм вдруг не заработает, то будут вызываться исключения, которые увидят многие.
6. DrAku1a 1749 20.10.15 02:13 Сейчас в теме
Я использовал аналогичный подход, но различие делал только по имени базы (то, что в Ref=), для копий баз - всегда делается своё имя, с приставкой или окончанием "_test_", "_copy_" и т.п., так что всегда можно различить. Это помогает никогда не запускать регламентные задания в копиях.
И ещё совет - при запуске, если определил, что база является копией - выведи это в заголовок "ЭТО КОПИЯ "+ТекущийЗаголовок+" ЭТО КОПИЯ!!!" - и сам не спутаешь базу с оригиналом, и если что не так будет с рабочей базой - тебе юзеры сообщат (было дело).
sulfur17; +1 Ответить
Оставьте свое сообщение