воскресенье, 4 июня 2017 г.

Самоидентификация тестовых баз


При работе с несколькими базами одновременно всегда может возникнуть ситуация когда  изменения будут внесены не в тестовую базу, а в рабочию. И печаль будет если нет копии с теми данными которые потверглись изменению. Рецеп указаный сдесь не панацея, но позволяет избежать данной проблемы.В заголовке окна будет выводиться сообщения что это копия ИБ.
1. В константе храниться адрес рабочй базы
2.При старте информационной базы происходит проверка, рабочая ли это база?
3.Если значения отличаються, происходит замена заголовка системы
4.Некоторые регламентные задания должны отрабатывать только на рабочей базе
Информационная база хранит реквизиты рабочей базы (имя базы, имя сервера или полный путь подключения) — например, в константе.
!!!Важно!!! Права на чтение должны быть у пользователей, иначе будет ошибка прав доступа.


Записать в константу можно так

Константы.NG_ИмяРабочейБазы.Установить("Work");

или с помошью обработки для ОП
Значение которое будет содержать константа это Имя Информационной базы
В результате каждая копия может определить, является она рабочей базой или нет.
Если база — не рабочая, то:
  • При начале работы системы в заголовок главного окна нужно автоматически добавить информацию о том, что данная база является тестовой.
  • Не должен выполняться код обработчиков некоторых регламентных заданий. Например, проверка на рабочую базу должна осуществляться для всех регламентных заданий, выполняющий периодический обмен с внешними системами. При необходимости отладки таких заданий константу можно изменить на реквизиты данной тестовой базы (после изменения настроек обмена).
Функцию проверку можно добавить, например, в процедуру «ПриНачалеРаботыСистемы()» модуля управляемого приложения.
Процедура ПриНачалеРаботыСистемы()

    // СтандартныеПодсистемы
    СтандартныеПодсистемыКлиент.ПриНачалеРаботыСистемы();
    // Конец СтандартныеПодсистемы

    //++ VION 08.09.2016 Общие объекты
    АБ_ОбщегоНазначенияКлиент.УстановитьЗаголовокИнформационнойБазы();
    //-- VION 08.09.2016

КонецПроцедуры
Где процедура «УстановитьЗаголовокИнформационнойБазы()» имеет следующий вид:
//**************************************************
Процедура УстановитьЗаголовокИнформационнойБазы() Экспорт
    Если АБ_ОбщегоНазначенияСервер.ЭтоРабочаяБаза() Тогда  
 Возврат;
    КонецЕсли;
    ИмяИнформационнойБазы = АБ_ОбщегоНазначенияСервер.ПолучитьИмяИнформационнойБазы();
    УстановитьКраткийЗаголовокПриложения("(! "+ИмяИнформационнойБазы+" !)"); 
КонецПроцедуры
Также в этом примере используются следующие серверные процедуры:
//**************************************************
Функция ЭтоРабочаяБаза() Экспорт
    Если Врег(ПолучитьИмяИнформационнойБазы() )= Врег(СокрЛП(Константы.АБ_ИмяРабочейБазы.Получить())) Тогда
        Возврат Истина;
    Иначе
        Возврат Ложь;
    КонецЕсли;
Конецфункции

//**************************************************
Функция ПолучитьИмяИнформационнойБазы() Экспорт

    СтрокаПодключения = СтрокаСоединенияИнформационнойБазы();

    НомерСимвола = СтрНайти(СтрокаПодключения,"File=");
    Если НомерСимвола > 0 Тогда
        //Это Файловая база
        СтрокаСправа = Сред(СтрокаПодключения,НомерСимвола+6);
        Возврат Сред(СтрокаСправа,1,СтрДлина(СтрокаСправа)-2);
    КонецЕсли;

    НомерСимвола = СтрНайти(СтрокаПодключения,"Ref=");
    Если НомерСимвола > 0 Тогда
        //Это серверная база
        СтрокаСправа = Сред(СтрокаПодключения,НомерСимвола+5);
        Возврат Сред(СтрокаСправа,1,СтрДлина(СтрокаСправа)-2);
    КонецЕсли;

    Возврат "";

Конецфункции

Результат:


Обработчик регламентного задания, связанного с обменом данными, должен иметь соответствующую проверку:
//**************************************************
Процедура ВыполнитьОбменДанными() Экспорт

    Если НЕ АБ_ОбщегоНазначенияСервер.ЭтоРабочаяБаза () Тогда
        Возврат;
    КонецЕсли;

    //... Код регламентной процедуры

Конецфункции

Замечания :
Для ОП Вместо
УстановитьКраткийЗаголовокПриложения 
используем
УстановитьЗаголовокСистемы
 
Для ОП используем функцию или вместо СтрНайти  Найти 
Функция СтрНайти(ИсходнаяСтрока, ПодстрокаПоиска)
 Возврат Найти(ИсходнаяСтрока, ПодстрокаПоиска);
КонецФункции 
 



(с)Tavalik.ru

Комментариев нет:

Отправить комментарий

Печать чека ККМ из драйвера ККМ

Суть проблемы: Пробиваем чек из 1С: Бухгалтерии. Чек пробит не  правильно. Теперь нужно сделать чек коррекции. Но в программе это сделать н...