Имя: Пароль:
1C
1С v8
Как 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 будет удален только через некоторое время после перемещения, то будет выдано сообщение о перемещении базы, даже если до удаления файла эта база долгое время запускалась без такого сообщения.