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

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

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

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

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

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

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

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

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

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