Имя: Пароль:
1C
1С v8
БСХП РИБ, дата запрета, дата изменения
,
0 Wefast
 
27.11.20
16:56
У клиента странный РИБ, регистрация объектов дописана, чтобы не все данные уходили в узел.
В узле вообще ничего не регистрируется.

Закрывают месяц и все прочее делается паралельно в узле и центре.

Дата запрета загрузки или дата запрета изменения никак не блокируется входящие данные из центра в узел.

Где вообще происходит этот анализ загрузки? Где можно вмешаться в процесс загрузки и все таки запретить загрузку данных если не проходит по дате запрета(какой либо)?
1 Kassern
 
27.11.20
16:59
Может там вот это условие отрабатывает?
Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
2 Wefast
 
27.11.20
18:29
(1) Может конечно, в каком то модуле или не одном.

Но обычная синхронизация по дате запрета загрузки не загружает документы.
3 Фрэнки
 
27.11.20
19:20
ничего не понятно из описания топика

Кто выгружает, куда загружает...

Существенно, режим обмена между базами через файл или нет?
Еще существенно, это актуальная, на уровне актуальной БП 3 - там обмен написан не так, как писали раньше. Есть возможности увидеть состав зарегистрированных к обмену объектов прямо средствами типовой. В топике нет указания на это.

Ну а если порассуждать, то скорей всего "вообще ничего не регистрируется" - это не так. Регистрация объектов происходит в процедурах, подвязанными к подпискам на события ПриЗаписи или что-то в этом духе. Там внутри процедур глубоко-глубоко в стеке вызова процедур происходит обращение к записанным куда-то правилам обмена. Правила можно отредактировать где-то сбоку от основной конфигурации и загрузить в настроенный узел.

Если сделано так, как я это себе намечтал (инфы для такого мечтания никакой), то обычно там нет будет зарегистрированных объектов для передачи из того узла, откуда выгружать запрещено. Соотв. и загружаться ничего не будет. Хотя, если посмотреть на состав плана обмена, то может показаться с первого взгляда, что все должно и выгружаться и загружаться.

Можно, по идее, и при загрузке где-то вкорячить код, который будет пропускать объекты из обмена, но нафига? Когда гораздо быстрей будет проходить обмен, если "ненужные" объекты просто не регистрировать и соотв не выгружать.
4 Wefast
 
27.11.20
21:09
(3) Попробую более детально.
Бухгалтерия сельскохозяйственного предприятия, редакция 3.0
Настроен типовой полный РИБ(1 подчиненный узел). Базы файловые, обмен через файл. Базы на одном ПК
Можно зайти Администрирование - Синхронизация и там посмотреть список зарегистрированных объектов

Есть добавленный реквизит Упр\Рег
Есть дописка(расширение) в модуле (ОбменДаннымиРИБСобытия) регистрации объектов, в центральной базе - проверка на тип документа и на значение Упр\Рег.
В подчиненном узле расширение полностью не пропускает регистрацию изменений.

Все это работает.

Идея такая. В центральной базе создают документы, они уходят в подчиненный узел.
После чего эти документы изменяются в центральной базе и подчиненном узле параллельно и у них необходимость, чтобы эти изменения не передавались больше.

Было рассчитано(ранее кем то) что дата запрета загрузки в подчиненном узле будет эти изменения не пропускать при загрузке.

Но с РИБом дата запрета загрузки не работает(на ИТС это задокументировано где то)


Потом я предположил, что дата запрета изменений должна будет точно не дать внести изменения.
Но тоже нет.

Беглым поиском в отладке по модулям во время загрузки я не увидел где можно было бы эту проверку на дату запрета прописать, чтобы обмен не падал.
5 Фрэнки
 
27.11.20
21:19
По моему, эта дата запрета должна влиять на регистрацию изменяемых документов, а не на загрузку уже попавших в файл. Тут сам смысл в том, чтоб снижать насколько возможно объем выгружаемых данных. Т.е. надо смотреть не на стороне приемника, а стороне регистрации измененных.
6 Фрэнки
 
27.11.20
21:25
Я бы посмотрел на то, как выполнен код запрета регистрации в подчиненном узле, т.е. в его расширении и сделал бы измененное на него похоже расширение для центрального узла, которое бы в базе центра контролировало условие дней отсрочки. Ну там можно просто сравнивать, если документы центра регистрируются оперативно (день или не позже чем через день), то пропускать
а если текущая дата сеанса больше или равна даты документа плюс разрешенное число дней отсрочки, то в регистрацию не пускать.
7 Wefast
 
27.11.20
23:08
(6) Спасибо, интересный вариант, а главное не сложный.
Подумал, что можно еще добавить реквизит "Перенесен". И в момент регистрации документа прописывать его.
При следующем изменение - смотреть на новый реквизит и если он еще зарегистрирован на узле(т.е. не было обмена) - то регистрировать, а если уже ушел в узел - он больше не будет регистрироваться.

А вообще в обычной синхронизации, в базе приемнике документы точно не проходят по дате запрета, там даже вкладка в "предупреждениях" есть, что мол вот эти док-ты не приняты по дате запрета.
8 Фрэнки
 
28.11.20
01:27
(7) только для чистоты и безопасности ставить это не реквизитом, а допсведением. Оно там должно быть в конфигурации в типовом виде, нужно просто настроить его и считывать.
9 Wefast
 
04.12.20
14:31
В общем есть общий модуль ОбменДаннымиСобытия

В ней процедура ПроверитьНаличиеЗапретаЗагрузкиПоДате

В начале код:
    Если ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Отправитель.Ссылка) Тогда
        Возврат;
    КонецЕсли;
Вот этот код закомментил и дата запрета загрузки заработала.

Есть регистр сведений РезультатыОбменаДанными
В модуле формы есть процедура ЗаполнитьСписокУзлов

Там есть код:
        Если ЭтоУзелПланаОбменаРИБ Тогда
            ОтсутствуетОбменРИБ = Ложь;
        КонецЕсли;
Его закомментил и теперь можно посмотреть если какие то документы не прошли по дате запрета
10 Фрэнки
 
04.12.20
14:39
(9) ну оно примерно там и должно было быть. Только проверку поставили кодом в самом начале спуска по стэку вызова процедур и функций, чтоб наверняка отрубить.

Но ты пытаешься установить совсем не ту логику, которую ставили разработчику.
Тут очевидно, что его код отрезает на Периферийном узле любую регистрацию изменений. И должно отрубать именно там.

А твоя постановка в том, чтобы разрешить регистрацию в Центральной Базе по какому-то условию, в данном случае по условию даты запрета изменений.

Если это так, то

    Если ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Отправитель.Ссылка) Тогда
        Возврат;
    КонецЕсли;

срабатывал везде и возвращал всегда Истина и возврат для всех уже записанных объектов.
Получается, что новые объекты как-то умудрялись регаться измененными в другом месте и затем выгружались в обмен. А загружаемые в ПБ уже никак не регались, т.к. при загрузке из обмена регистрации изменений нет нигде
11 Фрэнки
 
04.12.20
14:41
Надо бы не просто комментить код ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Отправитель.Ссылка)
но выявить причину, что он возвращает всегда истину, хотя возврат в Центре и ПБ должен быть разным
12 Wefast
 
07.12.20
12:08
(11) не очень понял.

Этот код срабатывает при получение данных

То что я закоментил отключает проверку на дату запрета загрузки в случае РИБ

А мне она как раз и была нужна.


Отмена регистрации прописана в других процедурах того же модуля
МеханизмРегистрацииОбъектовПередЗаписью
МеханизмРегистрацииОбъектовПередУдалением
МеханизмРегистрацииОбъектовПередЗаписьюРегистра
МеханизмРегистрацииОбъектовПередЗаписьюДокумента
Ошибка? Это не ошибка, это системная функция.