Имя: Пароль:
1C
1С v8
Проверка на признак рабочей базы
0 beer_fan
 
21.02.13
15:03
Тут на работе решили проверять рабочая база или тестовая, проверку сделала по ВРЕГ(СтрокаПодключения()) но, как выяснилось, это не подходит, так как, например, при коннекту к базе через ИПшник данный код уже не работает.
Теперь думаем выделить название базы, и ее проверять, но тоже некрасиво, так как если база с таким же названием будет на другом сервере, то тоже будет приниматься за рабочую.

Собственно вопрос - как можно однозначно на 100% проверить в рабочей базе мы находимся или нет?
1 ДенисЧ
 
21.02.13
15:04
Константу - ЭтоРабочаяБаза.
2 beer_fan
 
21.02.13
15:05
(1) Ага, а при развертывании копии с какого перепугу эта константа изменится???
3 Жан Пердежон
 
21.02.13
15:05
еще и ип сверяй
4 Kashemir
 
21.02.13
15:06
Если база рабочая - то данный факт должен быть разово подтвержден (сохранена строка подключения).
При запуске проверяй сохраненную строку подключения текущей. Если не совпадает - значит копия.
5 ДенисЧ
 
21.02.13
15:07
(2) разворачиваешь и первым делом меняешь.
6 beer_fan
 
21.02.13
15:08
(5) Это все неоднозначно, у нас 12 программистов, кто-нибудь когда-нибудь обязательно забудет поменять.
7 beer_fan
 
21.02.13
15:09
(3) А IP можно штатными средствами узнать?
8 ДенисЧ
 
21.02.13
15:09
(6) А в туалет он не забудет сходить?
9 Kashemir
 
21.02.13
15:09
Процедура ПриНачалеРаботыСистемы()
...
   Если Не EWG_Кл_Серв_Внш.обРазрешенОбменДляУзла() Тогда
       ЗаголовокСистемы = "? К О П И Я  БУ ? ";
       Предупреждение("Это копия. Будьте внимательны!",5,"Это копия");
   КонецЕсли;
...
КонецПроцедуры

Функция обРазрешенОбменДляУзла() Экспорт
   Возврат ОчиститьСтрокуСоединения(ПланыОбмена.БУ_обмен.ЭтотУзел().Узел.СтрокаСоединенияСИБ) = ОчиститьСтрокуСоединения(СтрокаСоединенияИнформационнойБазы()) ИЛИ
           ОчиститьСтрокуСоединения(ПланыОбмена.БУ_обмен.ЭтотУзел().Узел.СтрокаСоединенияСИБПоСети) = ОчиститьСтрокуСоединения(СтрокаСоединенияИнформационнойБазы());
КонецФункции
10 beer_fan
 
21.02.13
15:10
(4) В (0) я ведь описал, что так и было, только вот не работает это, точнее работает, только в 99,5% случаев, а надо 100%.
11 Kashemir
 
21.02.13
15:12
(10) Примите за правило не создавать копии с именами рабочих баз на любом сервере. У нас принято к копии добавлять суффикс _copy_имявладельцакопии
12 beer_fan
 
21.02.13
15:16
(11) Не работают правила, кто-то всегда накосячит, хотя бы в одном случае из 1000... :(
13 PLUT
 
21.02.13
15:21
(1) не, в константу обормоткой записать СтрокуПодключения. при начале работы системы проверять строкуподключения с константой и если не равно, то в заголовок выводить имя базы +!!!КОПИЯ
14 PLUT
 
21.02.13
15:22
(13) идею у vde69 видел здесь на форуме, искать лень)
15 Defender aka LINN
 
21.02.13
15:22
(12) Тогда никак, живите с этим.
16 beer_fan
 
21.02.13
15:25
(13) В (0) уже описал, так делали, но не работает, ибо строку подключения можно задать несколькими способами...
17 vde69
 
21.02.13
15:28
Информационная база.dbName (IInfoBaseInfo.dbName)
Информационная база (IInfoBaseInfo)
dbName (dbName)
Использование:

Чтение и запись.
Описание:

Тип: Строка.
Имя базы данных сервера баз данных, в которой размещается информационная база.

Доступность:

Интеграция.
18 PLUT
 
21.02.13
15:28
(16) а творчески отсечь лишнее (название сервера или IP) нельзя чтоли?? базы разные!!! в клиент-сервере или пути к базе в файло

чё как маленькие
19 vde69
 
21.02.13
15:28
(17) + правда права админа кластера нужны
20 AaNnDdRrEeYy
 
21.02.13
15:30
(16) ну тогда и проверяй несколькими через ИЛИ
если имя = "01.01.01.01" или имя = "ИмяКластера"
21 PLUT
 
21.02.13
15:34
+(0) блин как всё запущено. одинаковые названия баз на серверах, то по имени сервера, то по ip ...

все кому не лень базы на сервере создают регистрируют и пути к серверам прописывают??

я вот, например, через списки общих инфо.баз рулю. для конкретного пользователя свой файлик v8i
22 beer_fan
 
21.02.13
15:36
(21) В маленькой организации все без проблем, а вот когда куча программистов и куча админов + безопасники(ака админы), да еще и отделы разные и между собой только по телефону общаются - все гораздо сложнее.
23 beer_fan
 
21.02.13
15:36
(17) Спасибо, попробуем
24 vde69
 
21.02.13
15:39
(21) ага а ты не встречал конфигурации где терминал имеет несколько IP и все они имеют соединение с сервером 1с? который то-же имеер пяток ИП один из которых проброшен для веб морды....

догадайся будет вообще у тебя работать по имени сервера?
25 PLUT
 
21.02.13
15:40
(24) встречал, но там обычно не было такой задачи в (0) и рулит обычно один человек подключениями и настройками, а не как в (22)
26 PLUT
 
21.02.13
15:42
+(25) даже не знаю как это назвать))) а по теме если серваки разные, то можно еще идентификатор ИБ вдобавок к строке подключения использовать при проверке
27 vde69
 
21.02.13
15:42
(25) и этот человек железный, не болеет, не уходит в отпуск, и никогда не ошибается :)
28 beer_fan
 
21.02.13
15:44
(26) Что значит идентификатор ИБ?
29 Kashemir
 
21.02.13
15:45
(28) При регистрации базы присваивается
30 PLUT
 
21.02.13
15:45
(27) конечно, когда он болеет (в запое) то физически не доступен, а если в отпуск, то в тайге, где нет связи вообще, только с космосом. а в (22) "бордель" какой-то))
31 beer_fan
 
21.02.13
15:47
Это который локальный, на компе??? Или он одинаков для всех пользователей?
32 Kashemir
 
21.02.13
15:50
(31) Локальный
33 beer_fan
 
21.02.13
17:25
Нашли еще одно решение:
1) Кладем файл на сервер 1С.
2) При запуске 1С проверяем на севере наличие этого файла и считываем имя базы, по этому сочетанию получается однозначное определение рабочей базы.
34 mikecool
 
21.02.13
17:30
у меня была константа, в ней хранил строку подключения к основной базе, при запуске проверял с текущей - профит
35 beer_fan
 
21.02.13
17:50
(34) Не катит. Почему - прочитай внимательно (0).