|
Как 1С понимает, что "Информационная база была перемещена или восстановлена"
Доминошник, boev82, Winnie Buh, вым, nick86, Zamestas, Simod, StasZn, crasler, tabarigen, Гость из Мариуполя, Буковка, Vstur, ass1c, scanduta, lucky-nn, akronim, Забияка, Zombi, ldo6, Tarlich, Дмитрий, skafandr, MWWRuza, mikecool, shuhard, kir-g, ДобрыйПутник, Fynjy, Ivanich, Скучный бух, Наивный, retrowave, InosDev, GreyK, mmg, reg0303, Fish, Smit1C, Kigo_Kigo, zzz_zzz_zzz, bolder, Сукпун, DemonShinji2, who respawn, BalBess, PR, saaken, piter3, avkynev, tir654, ReaLg, dmt, Seriy_Volk, SeriyP, Linemoon, maxab72, ptiz, okmail, rozer76, El_Duke, Web00001, Ёпрст, Silgis, Джордж1, yurikmellon2, Zapal, maxar, Fregat, M0rr0, orakool, qwerty, Федя Тяпкин, serpentt, alexxx961503, BlottoYolo, bmitkin, StanLee, petr_ivanov, Бычье сердце, Double_Medved, АгентБезопаснойНацио, ОбновляторОдинЭс, АнализДанных, alexis_nov, takefive, СвинТуз, elka302, Mr_Boogie, Чеширский, vbus, azt-yur, , Климов Сергей, boozin, d18, Кир Пластелинин, Жеглофф, ildary, DiMel_77, Олдж, nvm220380, s_trikozin, Xapac, dva1c, NikeArz, Мультук, rom4eg, WARLOG, Trucker, sergey198, Telcher, Pigmon, RVN, toypaul, probably, Mankubus, Ненавижу 1С, abfm, kihawi, Прохожий, Prog_man, Chai Nic, DimVad, Гипервизор, zva, DimR_71, Irbis, dchumak, golem14, chelentano, ads55, Amfiaray, Bigbro, craxx
| ☑ |
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 будет удален только через некоторое время после перемещения, то будет выдано сообщение о перемещении базы, даже если до удаления файла эта база долгое время запускалась без такого сообщения.
|
|