Вход | Регистрация


1С:Предприятие ::

Метки: 

Универсальный способ определить, что данная база "тестовая"

Я
   MCh
 
30.08.18 - 11:35
Есть мысль к коде прописать проверку, на то, является ли данная база тестовой. Чтоб отключить по умолчанию всякие обмены и т.п. Проверять на то, файловая ли она или отключены ли регламентные задания? Привязывать все к имени база не хотелось бы.
 
 
   Dmitry1c
 
1 - 30.08.18 - 11:35
Я благословляю тебя
   unregistered
 
2 - 30.08.18 - 11:43
(0) Чем не устраивает встроенный в БСП механизм?
Или речь о нетленке без БСП?
Кстати проверка сделанная в БСП основана на проверке изменения строки подключения базы. Изменилось подключение (место, имя базы и т.п.) вываливаем вопрос о том не является ли база копией. Если пользователь отвечает "Да", блокируем регламентные задания (механизм тоже описан в БСП) на уровне конфигурации (в кластере регламенты не блокируются).
   Denis_CFO
 
3 - 30.08.18 - 11:44
(0) Если ТекушийПользователь().Имя = "Директор" Тогда
Возврат "Вы слыхали, как поют дрозды?";
КонецЕсли
   trdm
 
4 - 30.08.18 - 11:45
Константа.ЭтоТестоваяБаза = Да;
   PR
 
5 - 30.08.18 - 11:48
(4) Ну да, при копировании базы эта константа конечно же не забудет установиться в Истина
   trdm
 
6 - 30.08.18 - 11:48
Константа.ПолитикаОбменовСДругимиСистемами = Запретить:
Перечисление.ВидыПолитикОбменовСДругимиСистемами.Запретить;
Перечисление.ВидыПолитикОбменовСДругимиСистемами.Разрешить;
   trdm
 
7 - 30.08.18 - 11:50
(5)
Если ИмяКомпьютера() = "KHU78567T7GNBN" Тогда
    Константа.ЭтоТестоваяБаза = Да;
КонецЕсли;
   Волшебник
 
8 - 30.08.18 - 11:51
(0) Вы ещё пользуетесь файловыми базами?

Завести константу "ИмяРабочегоСервера". При старте проверять СтрокаСоединенияИнформационнойБазы на наличие имени сервера. Тестовые базы держать на другом сервере.
   trdm
 
9 - 30.08.18 - 11:52
Можно еще так:
Если ИмяКомпьютера() = "KHU78567T7GNBN" Тогда
Если Найти(КаталогИБ(),гКаталогМоихКрутыхРазработок) Тогда
    Константа.ЭтоТестоваяБаза = Да;
КонецЕсли;
КонецЕсли;
   bolobol
 
10 - 30.08.18 - 11:52
Выгнал всех пользователей из базы - оп-па - стала тестовой. Ну чо, хороший способ, много лучше, чем имя базы проверять.
 
 Рекламное место пустует
   bolobol
 
11 - 30.08.18 - 11:53
(8) Платит Волшебник за лицензию на тестовый сервер?
   trdm
 
12 - 30.08.18 - 11:53
(8) Надо сопоставлять не только имя сервера, но и каталог ИБ.
   Волшебник
 
13 - 30.08.18 - 11:54
(11) Ну я вас умоляю...
   Wirtuozzz_Х
 
14 - 30.08.18 - 11:54
(0) По адресу проверяй, если адрес сменился то все. По одному адресу 2 базы быть не может.
   bolobol
 
15 - 30.08.18 - 11:59
(14) Её адрес - не дом и не улица... Я не въехал в предложение
   PR
 
16 - 30.08.18 - 12:06
(7) Рукалицо

А что мешает на том же сервере 1С развернуть базу с другим именем?
   leonidk
 
17 - 30.08.18 - 12:08
+1 к проверять по строке соединения.   ВРег(СтрокаСоединенияИнформационнойБазы()) = ВРег("Srvr=""XXXX"";Ref=""XXX"";")
   PR
 
18 - 30.08.18 - 12:08
Мама дорогая

Для скулевых баз
1. Делаются константы "Имя базы" и "Имя сервера"
2. При старте проверяется, если имя базы и имя сервера из строки соединения совпадают с константами, нормуль, база рабочая, иначе копия
   PR
 
19 - 30.08.18 - 12:09
(17) Пример копрокода в лучших традициях
   leonidk
 
20 - 30.08.18 - 12:12
(19) Прошу прощения, что наступил на Ваше тонкое чувство прекрасного.
   Мыш
 
21 - 30.08.18 - 12:13
ЭтаБазаРаньшеБылаВДругомМесте = Не СтрокаСоединенияИнформационнойБазы()=Константа.СтрокаСоединенияИнформационнойБазы.Получить();
   Сияющий в темноте
 
22 - 30.08.18 - 12:13
Для серверной базы достаточно имя сервера и имя базы,но проверку нужно делать в каждом регламентном задании,ь.е.они стартанут сразу после разворачивания базы.
с файловой базой сложнее,т.к.директории на каждой машине будут свои,если всех в одну сетевую папку не загнать,но можно запомнить для каждого имени компьютера свой путь и положить его в текстовом файле рядом с базой,если файла нет или если в нем нет пути для данного компьютера или путь другой,база тестовая.слава богу,регламент не стартанет до входа пользователя в базу.
   bolobol
 
23 - 30.08.18 - 12:15
(22) Модуль какого-нибудь сеанса - не решает эту задачу в одном месте?
   Вафель
 
24 - 30.08.18 - 12:20
(18) А чем 2 поля лучше чем 1 строка соединения?
   PR
 
25 - 30.08.18 - 12:23
(24) Мда
Как минимум тем, что в строке соединения может быть еще какая-то дрянь
   Serg_1960
 
26 - 30.08.18 - 12:24
А теперь на мгновение представим, что нам нужно поднять копию рабочей базы с типовой конфигурацией из архива... Представили? :)
   PR
 
27 - 30.08.18 - 12:27
(26) Что представили? Что именно тебя шокировало?
   Вафель
 
28 - 30.08.18 - 12:32
(25) А именно? что-то я про такое не слышал
   PR
 
29 - 30.08.18 - 12:35
(28) Бывает, ничего страшного
Загугли
   Fragster
 
30 - 30.08.18 - 12:35
переходи на БСП, там это реализовано
   Wirtuozzz_Х
 
31 - 30.08.18 - 12:35
(15) У рабочей базы есть адрес, я не думаю, что они постоянно переносят базу, будь она файловая или серверная. Поэтому в константу запихивает адрес базы и если фактический адрес не совпадает с значением в константе, базу смело можно считать тестовой.
   Serg_1960
 
32 - 30.08.18 - 12:38
(22) Меня ничего не шокировало. Просто прочтите (22) ещё раз. То, что в БСП "научились" определять копию - замечательно (сарказм). Осталось только разобраться с мелочью - с внутриплатформенной остановкой работы регламентных и фоновых заданий, пока не будет получен ответ на преславутый вопрос пользователю про копию.
   PR
 
33 - 30.08.18 - 12:41
(32) С чего бы это вдруг тормозить _все_ регламентные и фоновые задания, да еще на уровне платформы?
 
 
   Cyberhawk
 
34 - 30.08.18 - 12:41
(32) БСП и с этим разобралась )
   Serg_1960
 
35 - 30.08.18 - 12:42
(34) И как именно позвольте спросить?
   Cyberhawk
 
36 - 30.08.18 - 12:43
(35) Никакие РЗ (ну, из тех, что помечены как связанные с перемещением ИБ) не запускаются, а падают в ЖР с исключением
   Cyberhawk
 
37 - 30.08.18 - 12:44
Ошибка РЗ Отправка СМС: "{ОбщийМодуль.РегламентныеЗаданияСлужебный.Модуль(175)}: Изменилась строка соединения информационной базы.
Возможно информационная база была перемещена.
Регламентное задание "Отправка SMS" отключено.
        ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Изменилась строка соединения информационной базы."
   Cyberhawk
 
38 - 30.08.18 - 12:45
(вот такое в ЖР)
   Cyberhawk
 
39 - 30.08.18 - 12:46
Вот если бы сервер приложений умел определять, что база в СУБД была перезалита / восстановлена / еще чего-нибудь, то было бы неплохо
   Serg_1960
 
40 - 30.08.18 - 12:52
(37) Замечательное решение :) Т.е. вместо того, чтобы просто остановить менеджер регламентных заданий - пусть они работают, но работать мы им не дадим.

В БСП (и платформе) всё сделали шиворот навыворот и наоборот. Нужно, как минимум не блокировать рег.задания по ответу "Да, это копия", а разрешать(!) их работу по ответу "Да, перемещена". Имхо, разумеется.
   Serg_1960
 
41 - 30.08.18 - 12:54
Тогда бы и автору ветки не пришлось бы разрабатывать вечный двигатель... пардон - "универсальный метод"(цы).
   Serg_1960
 
42 - 30.08.18 - 12:59
Кстати, совсем недавно ветка была (принимал участие) - При загрузке бекапа из SQL не получается программно создавать справочники и документы , где автор нарвался на проблему неуникальности номеров в копии базы - там тоже искали "универсальны метод" определения копии и куда бы засунуть ОбновитьНумерациюОбъектов()...
   PR
 
43 - 30.08.18 - 13:01
(40) Ахренеть
И почему теперь должно блокироваться регзадание обновления индекса полнотекстового поиска, например?
   Serg_1960
 
44 - 30.08.18 - 13:09
(43) А почему бы ему не быть заблокированным на время пока пользователь не ответит на вопрос о копии? С момента загрузки информационной базы до запуска первого сеанса пользователя чего такого важного произошло в базе, что нужна работа рег.заданий? Ответ: ничего!
   Cyberhawk
 
45 - 30.08.18 - 13:17
Зато хоть видно, что что-то не так
   Serg_1960
 
46 - 30.08.18 - 13:24
Да ради бога. У меня так, просто... беспредметный разговор - в чужой монастырь да со своим уставом :( Просто поднял только из-за того, что считаю нет и не будет найдено оптимального решения - чего уж тут говорить про "универсальное решение" ветки.
Будете искать решение - у меня просьба: не забудьте про РИБ - для меня это таки очень важно :)
   ejikbeznojek
 
47 - 30.08.18 - 13:26
Странно что ни кто не предложил
распарсить ibases и получить таблицу с 2мя колонками.
Имя базы и строка подключения.
Потом получить текущую строку подключения и по ней понять имя текущей базы.

А потом:
Если ИмяБазы = "Тестовая" или ИмяБазы = "Копия" тогда
 ЭтоТестоваяБаза=истина;
иначе
 ЭтоТестоваяБаза=ложь;
конецесли
   Рэйв
 
48 - 30.08.18 - 13:26
ТС троль а вы ведетесь все.
   Рэйв
 
49 - 30.08.18 - 13:27
хотя дело ваше конечно.
 
 Рекламное место пустует
   ИначеЕсли
 
50 - 30.08.18 - 13:31
В имя тестовой базы добавлять префикс или суффикс "test" и дальше анализировать строку соединения
   PR
 
51 - 30.08.18 - 13:56
(44) Сконцентрируйся, это важно
Я ответил, что да, это копия, но хочу, чтобы регламентное задание по обновлению полнотекстового поиска продолжало работать
Как быть?
   DexterMorgan
 
52 - 30.08.18 - 14:07
(11) Бу-га-га, если у тебя на рабочем сервере тестовые базы, у меня для тебя плохие новости)

З.Ы. Увольняйся, они нищеброды)))
   Serg_1960
 
53 - 30.08.18 - 14:34
(51) Сконцентрируйся, это важно.
Я предлагал временно блокировать регламентные задания - пока не будет ответа на вопрос. Далее, после ответа - хоть потоп, хоть трава не расти. Ещё раз: на период с момента загрузки ИБ и до ответа на вопрос. Временно.

По существу вопроса: не знаю как Вам быть, а я отвечаю на вопрос "да, копия", а потом запускаю обработку, которая сканирует рег.задания, останавливая их работу и снимает общую блокировку с базы (платформа 8.3.11, ЗУП 3.1.5).
   PR
 
54 - 30.08.18 - 14:39
(53) Нахрена временно блокировать? Что это даст?
   Serg_1960
 
55 - 30.08.18 - 15:27
Спасибо что не спросили "А зачем их вообще блокируют?" - не находишь, что вопрос из той же серии? :) Sorry, я тоже могу задавать много вопросов. Например, "А почему нужно что-то запрещать, если можно не разрешать?"

Допустим, я поднял копию из архива (не важно архив SQL или в конфигураторе *.dt загрузил) - регламентные задания в клиент-серверной версии начали выполняться. Так? Допустим я не просто поднял копию, а обработкой ночью, когда некого спрашивать и некому отвечать - они так и будут работать? "А зачем?"(цы)
   PR
 
56 - 30.08.18 - 15:35
(55) LOL
Нет, не так
Если ты такой автоматизированный, то ты ясен пень поставишь блокировку регламентных заданий на базу через консоль кластеров

Детский сад какой-то
   Serg_1960
 
57 - 30.08.18 - 15:58
Сам ты lol :( Мне это вообще не актуально - давно пройденный этап. Дело в принципе.
   Feanor
 
58 - 30.08.18 - 16:34
(18) вместо имени сервера прописали IP и все, схема сломалась
   Cyberhawk
 
59 - 30.08.18 - 17:15
(58) От этого можно было бы защититься, если бы платформа предоставляла штатный доступ к списку инфобаз в кластере, где ИБ однозначно идентифицируется ее УИДом. Тогда было бы пофиг, какая там строка соединения.
   Serg_1960
 
60 - 30.08.18 - 18:25
(59) Если парсить 1CV8Clst.lst, то там есть то, что условно можно назвать идентификатором базы :) Разумеется и эти данные не вечны, но на безрыбье и рак - щука.
   PR
 
61 - 30.08.18 - 21:08
(58) Да я больше скажу, с другого сервера 1С к той же скулевой базе подцепились и ага, навалили сами себе за шиворот
   Feanor
 
62 - 30.08.18 - 21:22
(61) ну это экзотика, если админ долбодятел, то тут уже ничем не поможешь)

а в (58) реальная ситуация, клиент в строке подключения может знатно накреативить
   bolobol
 
63 - 31.08.18 - 09:30
(52) Ню-ню! Вы смешны)
   bolobol
 
64 - 31.08.18 - 09:40
(58) Ну ежели только получение АйПи адреса как-то заблокировано для сервера 1С, и/или получение имени сервера по АйПи адресу.
   PR
 
65 - 31.08.18 - 12:29
(62) Добавь две константы для имени, ok
   Feanor
 
66 - 31.08.18 - 12:31
(65) а если юзер написал вместо "MyTrueServer" что-то типа "MyTrueServer.domain" или "MyTrueServer.domain.local", то еще две константы? :)



Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует