![]() |
|
Как 1С понимает, что "Информационная база была перемещена или восстановлена" | ☑ | ||
---|---|---|---|---|
0
retrowave
13.05.25
✎
18:19
|
Здравствуйте. 1С определяет, что файл с базой перемещён по другому пути и вызывает окно, где просит пользователя указать перемещена ли база или это копия.
Подскажите, где можно найти условие благодаря которому 1С понимает, что нужно выдать это окно. Я хочу прописать очищение одного регистра при выполнении этого условия. Всем заранее спасибо! |
|||
1
PR
13.05.25
✎
18:23
|
Это не объект метаданных, это где-то в скулевой базе лежит
Условие смотри в коде |
|||
2
Ёпрст
гуру
13.05.25
✎
18:38
|
(0) отсутствие DoNotCopy.txt в каталоге с базой
|
|||
3
PR
13.05.25
✎
18:48
|
(2) Это только для файловой
|
|||
4
Ёпрст
гуру
13.05.25
✎
18:49
|
(3) а для серверной, там вроде и нету нихрена, ну разве что где-то в общем модуле(только в типовых сверяют) имя базы/сервера /кластера..
|
|||
5
retrowave
13.05.25
✎
18:49
|
Я на одном из форумах нашел следующее:
"БСП 2.3.2.61, смотрю в коде: Общий модуль РегламентныеЗаданияСлужебный, функция УстановленаБлокировкаРаботыСВнешнимиРесурсами(...), в самом конце: Если ИмяБазы <> СохраненноеИмяБазы Или (ПараметрыБлокировки.ПроверятьИмяСервера И (ИмяКомпьютера <> СохраненноеИмяКомпьютера И ИмяСервера <> СохраненноеИмяСервера)) Тогда (...)". У меня версия БСП "3.1.3.303". Я не смог найти в своей версии ту проверку, которую описали на форуме. Может кто знает есть ли похожая в новых бсп? |
|||
6
retrowave
13.05.25
✎
18:50
|
(4) У меня как раз типовая УТ
|
|||
7
retrowave
13.05.25
✎
18:50
|
Я самостоятельно поискал и не нашел. Решил написать сюда, вдруг есть знатоки :)
|
|||
8
Ёпрст
гуру
13.05.25
✎
18:51
|
(6) включи замер, да найди, где это г.. оне берут, если не файловая.
|
|||
9
retrowave
13.05.25
✎
18:52
|
(8) тогда придется админов дёргать, чтобы сделали копию какой-нибудь базы
|
|||
10
Ёпрст
гуру
13.05.25
✎
19:08
|
(9) в типовой УТ смотри общий модуль
БлокировкаРаботыСВнешнимиРесурсами и метод Функция УстановитьБлокировкуРаботыСВнешнимиРесурсами() там найдешь все ответы |
|||
11
Ёпрст
гуру
13.05.25
✎
19:10
|
Короче, там тупо в константе Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами
хранят имя базы и прочий мусор и сравнивают с этим при старте. Усё |
|||
12
АнализДанных
13.05.25
✎
21:01
|
(0)
ПараметрыБлокировки = БлокировкаРаботыСВнешнимиРесурсами.СохраненныеПараметрыБлокировки(); Если ПараметрыБлокировки.РаботаСВнешнимиРесурсамиЗаблокирована = Истина Тогда //это копия //там в параметрах ещё какая-то инфа есть КонецЕсли; |
|||
13
bolder
13.05.25
✎
22:12
|
(11) Да.В типовых эта константа содержит хранилище значений.Далее сравнивается строка подключения в клиент-серверном варианте.
Также в хранилище есть идентификатор базы и имя сервера. Все это позволяет отследить изменение расположения базы и перемещение файловый режим- серверный. DoNotCopy.txt содержит идентификатор файловой базы, если он не совпадает с сохраненным или отсутствует- база перемещена как копия. |
|||
14
timurhv
13.05.25
✎
22:18
|
(13) вроде не все так просто, у кого-то может быть сервер прописан по ip, у кого-то по доменному имени сервера. Наткнулся там есть обращение к серверу 1С по Com или RAS (смотря что доступно) для получения идентификатора базы. Но вопрос как в Linux отрабатывается.
Сильно не копал, но чет не очень понятно как будет БСП подсистема отрабатывать случаи 1 пользователь подрубается по шаре к файловой, а второй через публикацию БД через веб-сервер. Вообщем, надо копать глубже. |
|||
15
bolder
13.05.25
✎
22:28
|
(14) Не имеет значения.
2.Весь код выполняется на сервере, значит обращение идет к тому же файлу DoNotCopy.txt. |
|||
16
bolder
13.05.25
✎
22:47
|
(14) 1.Тоже не имеет значения.Используется платформенный метод СтрокаСоединенияИнформационнойБазы().Гарантируется платформой на всех поддерживаемых ОС.А вы у себя можете запускать и по имени сервера, и по IP, и даже через localhost.Строка от этого не изменится, пока сервер и база не меняются.
|
|||
17
Chai Nic
14.05.25
✎
07:49
|
(16) А если у сервера несколько DNS-имен, и например к одной и той же базе обращаются по разным именам и даже через разные порты (скажем, если база дополнительно опубликована в интернете)?
|
|||
18
Ненавижу 1С
гуру
14.05.25
✎
08:13
|
(17) если база используется несколькими кластерами серверов 1С, то будет весело, да
|
|||
19
bolder
14.05.25
✎
08:50
|
(17) При публикации в интернете информация о доступе к базе запоминается web сервером.Веб сервер обращается к кластеру серверов,и сервер выдает строку соединения.В кластере имя базы уникально.
|
|||
20
ldo6
14.05.25
✎
08:57
|
Код жесть. За 10 мин я не разобрался как и где конкретно проверяется и закрыл нафиг.
|
|||
21
bolder
14.05.25
✎
08:59
|
(20) Код очень простой и хорошо прокомментирован.
|
|||
22
Ёпрст
гуру
14.05.25
✎
09:01
|
(21) да и без камментов там всё понятно
|
|||
23
Winnie Buh
гуру
14.05.25
✎
09:06
|
(17)(18) у "Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами" есть флаг "Проверять имя сервера"
|
|||
24
bolder
14.05.25
✎
09:11
|
(22) Да.Понятно конечно.Но такие комментарии прямо адресованы админам и не программистам даже.Лайк 1С однозначно.
// Copyright (c) 2024, ООО 1С-Софт // Все права защищены. Эта программа и сопроводительные материалы предоставляются // в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) // Текст лицензии доступен по ссылке: // https://creativecommons.org/licenses/by/4.0/legalcode .... // Ниже код с учетом того, что режим работы не менялся: // 1. была файловая осталась файловая; // 2. была клиент-серверная осталась клиент-серверная. |
|||
25
Гость из Мариуполя
гуру
14.05.25
✎
09:25
|
(15) Весь код выполняется на сервере, значит обращение идет к тому же файлу DoNotCopy.txt.
А теперь прикинь фишку в файловом варианте, сам несколько раз нарвался, попробуй :) Удали DoNotCopy.txt в любой базе, в которой уже работал. Подчеркиваю - не в новой, свежеперемещенной, а в ранее работавшей. Запускаем программу. Никто ничего ни о чем не спрашивает. Никакого сабжа. База работает в обычном режиме. DoNotCopy.txt вообще отсутствует. И более того - не создается, зараза. получается (для файлового варианта) - при первом запуске где-то что-то запоминается [идентификатор], и в дальнейшем удаление DoNotCopy.txt уже ни на что не влияет. Это, кстати, дополнение к (2) проверял на ЗиКГУ |
|||
26
bolder
14.05.25
✎
09:24
|
(23) По умолчанию галочка включена.И это правильно.Галочка вынесена в интерфейс для разруливания нештатных ситуаций.
|
|||
27
bolder
14.05.25
✎
09:47
|
(25) Выше уже писали.В константе - хранилище значений- все запоминается.Файл нужен только для вспомогательной цели копирования каталогов с базой - можно явно указать копию.
PS/Проверил на Бухгалтерии.НИфига, при скопированном файле - нормально, не копия, при удалении файла - сразу же распознает как копию и просит принять решение.Что в общем то и следует из кода, (прерывать проверки). |
|||
28
Winnie Buh
гуру
14.05.25
✎
09:38
|
(25) там алгоритм проверки есть,
сначала проверяется формат базы, потом строка соединения - если они не менялись, то база считается не перемещенной и до проверки DoNotCopy.txt просто не доходит |
|||
29
bolder
14.05.25
✎
10:01
|
(28)Верно.Если сабж(25)- в работающей базе подтвердили когда то что база НЕ копия, то строка сохранится в константе и сравнение вернет равенство, значит и проверки можно прекратить.Достаточно скопировать базу в новый каталог и отсутствие файла DoNotCopy.txt тут же сработает.
|
|||
30
retrowave
14.05.25
✎
10:44
|
(10) Спасибо большое! Сильно выручили
|
|||
31
Winnie Buh
гуру
14.05.25
✎
12:16
|
еще пара занятных моментов с этой константой и файлом DoNotCopy.txt:
Если после перемещения информационной базы при первом запуске в каталоге с ИБ не будет обнаружен файл DoNotCopy.txt, то факт перемещения базы будет записан в константе "ПараметрыБлокировкиРаботыСВнешнимиРесурсами" в параметре "ПричинаБлокировки", после чего программа при запуске будет выдавать сообщение о перемещении ИБ, даже если в каталог "подложить" файл DoNotCopy.txt с идентификатором базы. Если информационная база была перемещена вместе с файлом DoNotCopy.txt, то база запускается без сообщения о перемещении и без слова [КОПИЯ] в заголовке программы, но при этом в константе "ПараметрыБлокировкиРаботыСВнешнимиРесурсами" не перезаписывается поле "СтрокаСоединения" с адресом нового расположения ИБ, т.е. если файл DoNotCopy.txt будет удален только через некоторое время после перемещения, то будет выдано сообщение о перемещении базы, даже если до удаления файла эта база долгое время запускалась без такого сообщения. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |