Уникальный id инф. базы

1. mirrr 59 20.10.11 11:25 Сейчас в теме
Подскажите, есть ли для информационной базы какой-то уникальный код, такой, чтобы его можно было получить программно.

Суть в том, чтобы при выполнении какой-либо операции проверять, из той ли нужной базы она запускается.
Ответы
2. Сергей Водаков (WaterSmith) 331 20.10.11 12:19 Сейчас в теме
Очертите задачу конкретнее.
Хотите привязать внешнюю обработку к конфигурации?
Насколько мне известно такого уникального идентификатора нет, другое дело, что вы можете его организовать. Можно генерировать GUID, запомнить его где нибудь, в каком нибудь регистре сведений, и потом выполнять соответствующую проверку.
3. Михаил Ражиков (tango) 471 20.10.11 12:24 Сейчас в теме
вопрос интерсный, но, автор, что вы предложите для детешников?
4. Михаил Ражиков (tango) 471 20.10.11 12:25 Сейчас в теме
имхо, юникод для конкретной базы - ее месторасположения, типа IP
5. Михаил Ражиков (tango) 471 20.10.11 12:26 Сейчас в теме
имхо, юникод для конкретной базы - ее месторасположения, типа IP
6. Михаил Ражиков (tango) 471 20.10.11 12:26 Сейчас в теме
ну, дубли на ИС шерифа не
7. Дмитрий К (SuhoffGV) 20.10.11 12:57 Сейчас в теме
(1) mirrr, База на postgres. Проверяю по строке подключения к БД. С файловой бд - может не прокатить.

как-то так.
//Проверяет, является ли эта база рабочей
Функция ЭтоРабочаяБаза() Экспорт
	Возврат (СтрокаСоединенияИнформационнойБазы()="Srvr=""servername"";Ref=""basename"";");
КонецФункции // ЭтоРабочаяБаза()


Делал, чтобы в рабочей бд не выскакивали отладочные сообщения. И чтобы тестовые БД не выполняли мои регламентные задания.
8. Владимир Нет (tusv) 21 20.10.11 14:12 Сейчас в теме
(1) mirrr, Самому интересно. То что уникальных идентификатор существует и по нему хранятся настройки в /.Application Data\1C\1Cv82\Гуид базы, догадываюсь. Только как его получить?
Тоже приходится писать такой код
Если Найти(СтрокаСоединенияИнформационнойБазы(),<Нужная база>)>0 Тогда
//то выполняем такой то код только для нужной базы
КонецЕсли
Если кто то развернет детешник в не в <Нужная база> работать не будет. К сожалению
9. sergej anonymous (ksv74) 85 20.10.11 14:38 Сейчас в теме
mirrr пишет:
Подскажите, есть ли для информационной базы какой-то уникальный код, такой, чтобы его можно было получить программно.

Если программно, то читать вот это Формирование списка зарегистрированных информационных баз системы 1Cv8, затем парсить файл C:\Documents and Settings\%CurrentUser%\Application Data\1C\1CEStart\ibases.v8i, в нем каким-то образом получать ID.
Если не получается, то искать другие варианты.
10. Владимир Нет (tusv) 21 20.10.11 14:56 Сейчас в теме
(9) ksv74, Проверил. Это только для локальной машины:(
11. Александр Фамилия (AGLux) 20.02.17 16:23 Сейчас в теме
Да, при соединении через веб-клиент это не сработает.
12. Сан Саныч (herfis) 111 20.02.17 17:59 Сейчас в теме
(8)(9) Это не ID базы. Это идентификатор настроек, по сути. Если перезаполнить список баз - будут другие ID (зуб не дам, но вроде так).
13. sergej anonymous (ksv74) 85 20.02.17 18:16 Сейчас в теме
(12) Согласен. Будет новый уид - сам этим пользуюсь
14. Игорь Дайнеко (Dnki) 20.02.17 22:45 Сейчас в теме
Я подобную проблему решаю тупо: есть константа с именем вроде "код базы". В ней 2-3 буквы.
Но эффективно.
15. Александр Фамилия (AGLux) 21.02.17 13:32 Сейчас в теме
(14) Есть задача интереснее, в которой такой подход не поможет. Например как определить конкретную БД, и суметь отличить бекап от оригинала? :) Анализ строки соединения не совсем помогает, т.к. в ней иногда может фигурировать не имя сервера, а IP. Подозреваю, что может там быть и FQDN имя сервера, что ещё больше увеличивает путаницу.
16. J Popov (japopov) 32 21.02.17 13:40 Сейчас в теме
(15) ну, это можно, и достаточно просто. Думаю, 1С тот же алгоритм реализовали:
1) При первоначальном заполнении базы сохраняем строку доступа. Для файловой базы можно поизвращаться ещё про дату создания. Можно также при начальном заполнении взводить флажок "надо запомнить строку соединения", и для файловой базы снимать этот флажок только тогда, когда путь к файлу начинается с "\\" (так обработаем ситуацию, когда локальный путь отличается от сетевого).
2) При запуске проверяем, и если текущая строка соединения отличается от ожидаемой, выводим сообщение "Айяйяй, базу переместили, больно же! Вы её насовсем переместили, или как?". Если "насовсем", то обновляем запомненные параметры. Если "или как" - то отключаем лишнее.

В случае с 1С они для файловой базы изобразили ещё один файлик "DoNotCopy", но, по-моему, решение даже более сомнительное, чем то, что я предложил.
17. Александр Фамилия (AGLux) 20.03.17 20:10 Сейчас в теме
(16) Ну в моём случае была пара отличий: во-первых все базы (и оригинал, и копии) были SQL-ные. Во-вторых именно на анализ строки запуска изначально я и полагался. К нему привязал автоопределение прод/не_прод база. И если не_прод - то при любом запуске сеанса производился сброс всяких интеграционных настроек к тестовым значениям. Всё было хорошо, пока в базу не стали заходить юзера из Румынии, у которых в строке соединения почему-то был IP, а не имя сервера. После чего на проде настройки сбросились к непродовским и естественно случились мега-паника, скоростные хотфиксы и прочие головные боли)))
Изначально хотел сделать как вы и предложили - диалог для юзера, чтоб он подтвердил выбор. Но начальство зарубило интерактивщину, в итоге весь этот функционал просто закомментили в долгий ящик, от греха подальше)))
18. J Popov (japopov) 32 21.03.17 09:47 Сейчас в теме
(17) Ну, как же так! Просто же: при начале работы пользователя на сервере исполняете команду системы ping к серверу (параметры подобрать надо будет), сохраняете результат во временный текстовый файл. Потом из 1С считываете файл, и получаете IP сервера! Всё просто, и можно сравнивать именно адреса серверов.
19. Александр Фамилия (AGLux) 21.03.17 18:09 Сейчас в теме
(18) ну да, примерно что-то такое было в идеях, но к тому времени этот функционал всё равно уже зарубили))) Так что, теперь просто спортивный интерес. :)
Оставьте свое сообщение