Имя: Пароль:
1C
1С v8
РИБ и обновления
0 altaykniga
 
13.02.18
17:09
Всем привет. Планируется использование распределенных ИБ.

конфигурация измененная. Обновление конфигурации центральной базы выполняет программист. Затем с файлами обмена эти изменения будут передаваться в периферийные базы.

Вопрос такой: а как быть с запуском обработчиков после обновления конфигурации базы данных и первого входа в пользовательском режиме?

обновление основной конфигурации - обновление конфигурации базы данных - выполнение обработчиков обновления в пользовательском режиме

Например, было пропущено много релизов, необходимо последовательно обновить обновиться на 3 релиза. Проблем с обновлением центральной базы не возникает, а как быть с переферийными? Необходимо тоже выполнять их обновление в 3 этапа (обновить центральную базу первым релизом, обновить РИБ, обновить центральную базу вторым релизом, обновить РИБ и т.д.?)

Всем спасибо за помощь!
1 vde69
 
13.02.18
17:20
для узлов РИБ обновление в пользовательском режиме не нужно, все измененные данные придут из центра в уже готовом виде
2 SeriyP
 
13.02.18
17:44
(0) В перефирийных базах есть пользователи с полными правами? Пусть они и проводят обновление: после загрузки через обмен изменений конфигурации запускают конфигуратор, нажимают кнопку Ф7, ОК и т.д. Либо удаленно к ним подключаться и все это делать.
3 Tatitutu
 
13.02.18
18:33
Если КонфигурацияИзменена() Тогда
//закрыли 1С
//сделали бекап если нужно
//загрузили обновление
//запустили 1С
//загрузили данные из обмена
КонецЕсли;
4 Мимохожий Однако
 
13.02.18
20:06
Еще рекомендую при обновлении выключать автоматическую синхронизацию. В некоторых местах из-за медленного интернета не успевает приходить увеличенный файл обмена.
5 Лефмихалыч
 
13.02.18
22:12
(0) если данные, которые надо обновлять, присутствуют только в ПБ и их нет в ЦБ, то надо запускать эти обработки и в ПБ тоже. В противном случае - достаточно один раз запустить в центре, а в периферийных правильные данные придут из центра и заменят собой неправильные.
6 vde69
 
13.02.18
22:51
(5) РИБ - это 100% обмен в разрезе организаций, по этому ничего запускать не нужно
7 Serg_1960
 
13.02.18
23:09
(1) "для узлов РИБ обновление в пользовательском режиме не нужно" - нужно. В РИБ-базах идентичны конфигурации (по определению), но данные информационных баз - могут различаться.

(6) Опять недостоверная информация :(
РИБ - это распределенная база данных, а то про что Вы сказали - это обмен данными (механизм РИБ).

Я сложно сказал, надо ли пояснить примером?
8 vde69
 
13.02.18
23:14
(7) для РИБА не может быть расхождений данных подчинённого и главного узла
9 Serg_1960
 
13.02.18
23:20
(8) Открой состав плана обмена - всё что не включено в состав - может иметь расхождение. Например, как наиболее характерный показатель "расхождения" в данных узлов, - префикс базы.

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

Соответственно, если обработка обновления изменяет эти данные - то эта обработка должна быть запущена во всех узлах РИБ.
10 vde69
 
13.02.18
23:33
(9) у РИБ нет состава, там строго 100%


все планы обменов делятся на РИБ и "настраиваемые", ты говоришь про НЕ РИБы
11 Serg_1960
 
13.02.18
23:45
РИБ - это всего лишь галочка в свойствах плана обмена и ничего более. Всё остальное, присущее лишь только им - всё это реализуется механизмами платформы и в программной поддержке конфигурацией.
12 altaykniga
 
14.02.18
09:26
прочитав ответы умных людей, так и не увидел однозначного ответа на свой вопрос. Обмен предполагается в одну сторону, т.е. периферийные базы -> Главная база.

Понял следующее:
1. выполняю обмен со всеми периферийными базами
2. выполняю поэтапное обновление конфигурации главной базы
   (с выполнением обработчиков обновления в
    пользовательском режиме)
3. выполняю обмен с периферийными базами. В результате
   обмена конфигурация периферийных баз тоже обновляется

Правильно?
13 Cool_Profi
 
14.02.18
09:28
(10) Вот у меня РИБ. А некоторые РС не ходят между базами. Так что ты не прав
14 Фрэнки
 
14.02.18
09:34
(10) 100% в РИБ - это не про Данные, а про Метаданные. Выбора, какие Метаданные включать/исключать из Обмена нет.

Но Данные - это Состав в свойствах Плана Обмена.
15 SeriyP
 
14.02.18
09:35
(12)Вот это не стыкуется:
- "Обмен предполагается в одну сторону, т.е. периферийные базы -> Главная база"  
- "3. выполняю обмен с периферийными базами. В результате
   обмена конфигурация периферийных баз тоже обновляется"
т.к. в этом случае обмен будет ГБ -> ПБ
16 Serg_1960
 
14.02.18
09:37
(12) В принципе правильно. Я бы рекомендовал делать взаимный обмен перед изменением конфигурации  для синхронизации данных в базах узлов. И только потом - изменение конфигурации в корневом(центральном) узле. А далее, как обычно, - вход в режим "1С:Предприятие" для выполнения обработчиков обновления. И только после этого - обмен со всеми узлами.

В типовых конфигурациях, относительно недавно, обработчики обновления стали учитывать работу в распределенных информационных базах - до разработчиков конфигураций наконец-то дошло что не все обработчики надо запускать во всех узлах.
17 Фрэнки
 
14.02.18
09:38
(8) А как же РИБ с разделением данных(!) по Организации?
В Узлах при таком разделении "лишних" данных быть не должно.
18 Serg_1960
 
14.02.18
09:44
(all) "Односторонний обмен" вовсе не означает отсутствие сообщений обмена от подчинённых узлов в главный узел.

Можно, конечно, как часто рекомендуют, сразу же после передачи данных очищать регистрацию изменений... но в РИБ такой номер не пройдёт - идентичность конфигураций поддерживается на уровне платформы.
19 altaykniga
 
14.02.18
10:58
хотел уточнить еще такой момент:

а возможно реализовать односторонний обмен "периферийные базы -> ГлавнаяБаза"? Обмен необходим по организациям. Например, учет ведется в 5-ти периферийных базах, данные стекаются в главную базу. Если случайно какие-то полученные данные в главной базе были изменены, эти изменения НЕ должны попасть в периферийную базу

Думаю сделать так:
сейчас есть рабочая база, в ней одна организация. Эта база будет главной.
1. Создаю в этой базе еще несколько организаций
2. Для всех организаций (включая и эту организацию, учет по которой в базе уже ведется) создаю синхронизацию, с отбором по организации. Вопрос: А где настроить направление обмена? (вопрос в начале сообщения)
3. Создаю периферийные базы путем выгрузки базы-образа из главной базы
20 Фрэнки
 
14.02.18
11:03
(19) про собственно План обмена забыл что-то сказать ?
Название у плана обмена есть?
21 altaykniga
 
14.02.18
11:19
(20) по организации

написано в (19): "...создаю синхронизацию, с отбором по организации"
22 Фрэнки
 
14.02.18
11:32
(21) ясно. Перечитал текст топика. Раз оно у вас все и так измененное, то какие тут могут быть принципиальные препятствия? Никаких.

Самое примитивное - это же в РИБ - В модуле объекта ПланОбмена есть процедуры, в которой отработают ПриОтправке данных. Надо в них различать Главный и Подчиненный.
При выборке измененных объектов в Главном узле смотреть на его тип и ставить Игнорировать. Вот как тут - это только копипаста из копипасты Serg_1960 пост 19
где посмотреть в типовых обмен с досылкой непринятых пакетов?
23 altaykniga
 
26.02.18
14:34
(22) ткните носом, не могу найти код, который выполняется при регистрации изменений объекта.
Думается, что если использовать метод ПриОтправкеДанных, то в главном узле все равно будут копиться измененные объекты для оправки в подчиненный узел. А это лишние ресурсы компа
Поэтому хочу, чтобы объекты в главном узле не регистрировались для отправки уже сразу в момент их изменения (ПриЗаписи, например). В каком месте, например, типовой Бухгалтерии ред.3 эти объекты регистрируются для оправки?
24 altaykniga
 
06.03.18
16:54
прошу не пинать, но все же однозначный ответ так и не увидел...

Центральную базу нужно обновлять 3-мя релизами (следовательно, 3 раза будут выполняться обработчики обновления), а именно:
обновлениеОсновнойКонфигурации1 -> ОбновлениеКонфигурацииБД1 -> ВыполнениеОбработчиковОбновления1
обновлениеОсновнойКонфигурации2 -> ОбновлениеКонфигурацииБД2 -> ВыполнениеОбработчиковОбновления2
обновлениеОсновнойКонфигурации3 -> ОбновлениеКонфигурацииБД3 -> ВыполнениеОбработчиковОбновления3

Каким образом при обмене обновлять периферийные базы?
вариант №1:
1. синхронизация с ПБ
2. обновление ЦБ (3этапа)
3. синхронизация с ПБ

вариант №2:
1. синхронизация с ПБ
2. обновление ЦБ (1этап)
3. синхронизация с ПБ
4. обновление ЦБ (2этап)
5. синхронизация с ПБ
6. обновление ЦБ (3этап)
7. синхронизация с ПБ

Если придется использовать вариант №2, то тогда про РИБ придется забыть - работу 5-ти организаций, входящих в холдинг, никто не будет останавливать на сутки...
25 Фрэнки
 
06.03.18
17:34
приоритет в данных где стоит? в головной?
Значит можно полностью без обменов довести головную до финального релиза, а затем выполнить обмены. И ни в коем случае не очищать регистрацию узлов. Хотя и так понятно, что регистрацией по узлам никто заморачиваться не станет.
26 Serg_1960
 
06.03.18
17:39
(25) Вы неправы. Без комментариев.

Теоретически, обновление конфигурации и всё с этим связанное можно автоматизировать и в центральной базе и в подчинённых узлах. И запускать обновление конфигурации в то время, когда в базе отсутствуют юзвера (в обеденный перерыв, ночью).

А в принципе, из опыта, нужно добиваться установки так называемого "технологического окна"- кратковременный перерыв в эксплуатации для проведения профилактических работ и прочая.
27 Фрэнки
 
06.03.18
17:40
(26) это при условии, что там на ПБ будут срабатывать все процедуры, заложенные штатно при обновлении моно-базы
28 Фрэнки
 
06.03.18
17:41
(26) +к 27 - я думаю, что ПостПроцедуры для обновления на ПБ лучше отключить
29 Serg_1960
 
06.03.18
17:45
(27) Например, для Бухгалтерии такой совет может быть и приемлем - там запускается последовательно вся цепочка пропущенных обязательных обработок. А, например, в старых УПП или ЗУП - там не всегда предыдущие обработки пропущенных обновлений запускаются в последующих обновлениях. В УПП, например, они могут просто банально физически отсутствовать в более свежей версии конфигурации.
30 Serg_1960
 
06.03.18
17:48
И тогда мы может получить ситуацию, когда в ЦУ запускались последовательно все обязательные обработки, а в ПУ - только те, которые присутствуют в последней версии. А это, в свою очередь, может привести к рассогласованию и рассинхронизации данных по узлам.
31 altaykniga
 
06.03.18
20:20
придется обновлять конфигурацию в ЦБ каждый месяц - и тогда не будет пропущенных релизов и обработчиков обновления. Обмен обязательно делать до обновления? или можно обновлять ЦБ и ПБ с зарегистрированными для изменения объектами?
32 Фрэнки
 
06.03.18
20:28
(31) на практике подтверждено, что гораздо удобней перед обновлением, в любом случае оно стартует в ручном режиме, лучше все данные обновить, что пакет был только с теми данными, которые критичны для обновления, а не всякая всячина, которую затем приходится искать по всей базе, если что-то пошло не так, как ожидалось.
33 Фрэнки
 
06.03.18
20:29
(31) т.е. лучше не начинать обновление базы, если не прокрутил перед ним обычное штатный штатный обмен.
34 Йохохо
 
06.03.18
20:31
(31) односторонний то решили делать?
Обмен до обновления - представьте что с обменом придет док от позавчера, а вчера новые правила, которые сегодня обработал в цб обработчик обновления
35 Фрэнки
 
06.03.18
20:36
(30) Я наверное не совсем внятно высказал свою мысль. Попрпобую еще раз в стиле Джойса

Центральная имеет приоритет по данным перед ПБ. Новых данных в ПБ, относительно данных в ЦБ перед обновлением нет. Считаем, что их нет. Запускаем обновление. Выполняются ПостПроцедуры обновления данных конфигурации (предопределенные, измененные, процедуры-обработки того сего). Все успокоилось в ЦБ - видим, что все нас устраивает. Запускаем процесс обмена с ПБ, т.к. это РИБ - все уходит туда. И обновленные данные из центральной тоже, но не перед, а вслед за метаданными из конфигурации. Все.

Зачем на ПБ запускать все обработки для первого запуска базы после получения обновленной конфиги? Не понятно, т.е. я думаю, что эти обработки запускать незачем.

з.ы. Конечно все это мое имхо, которое может не совпадает с тем, как выглядит обновление данных в РИБ в типовых конфигах - специально я этого сейчас не тестил. Не удивлюсь, если эта логика им не соответствуют.
36 Фрэнки
 
06.03.18
20:39
Да, разумеется, что при сильно перекроенном составе объектов в РИБ, что часть объектов, включенных в конфигурацию и подвергающихся обработке при обновлениях в РИБ не включено - обработки для таких данных там будут нужны. Но я бы считал такое поведение конфигурации в таком плане обмена РИБ источником багов.
37 altaykniga
 
06.03.18
20:44
(34) как сделать односторонний - не знаю. Решил запретить редактирование документов в ЦБ правами +запретить редактирование справочников в ПБ правами (разрешить только редактировать контрагентов и связанные с ними справочники: подразделения, пункты погрузки-разгрузки и т.д.)
38 Йохохо
 
06.03.18
20:51
(37) через промежуточную ЦБ мб
39 Фрэнки
 
06.03.18
21:04
(37) у вас же много изменений в конфигурациях? Поэтому можно дописать так, чтоб был односторонний обмен.

Открываем в конфигураторе в плане обмена Состав. Там есть авторегистрация данных - ставим везде Запретить. Таким образом ни один справочник, документ, набор записей не попадет в обмен, т.к. он не будет зарегистрирован.

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

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

Готовая обработка есть на ИТС. Сию секунду у меня ее под руками нет, но если сами не найдете - пишите - дам позже ссылку.
40 altaykniga
 
07.03.18
09:21
(39) а есть ли в данном случае смысл в одностороннем обмене?

в ПБ (5баз) будут вести учет - создавать документы
данные из этих 5-ти баз будут стекаться в ЦБ
в ЦБ будут формироваться отчеты для анализа хоз.деятельности

необходимо контролировать учет НСИ. Поэтому редактирование справочников хочу разрешить только в ЦБ.
Можно программно запретить регистрацию изменений справочников в ПБ (чтобы они не отправлялись в ЦБ).
И что получится? Пользователи в ПБ насоздают кучу ненужных элементов справочников, применят их в документах... и получится неразбериха и путаница

Посоветуйте, как лучше сделать? Оставить типовой обмен без дописок? Просто запретить редактирование справочников в ПБ, а в ЦБ запретить редактирование документов?
41 Фрэнки
 
07.03.18
09:29
(40) // И что получится? Пользователи в ПБ насоздают кучу

Само собой разумеется, что при таком обмене (НСИ только в Центре) создавать элементы в ПБ нельзя. Это все строго индивидуально. Что можно сделать в одном справочнике - то нельзя делать в другом.

Я делал в этом случае гибрид, когда ссылки в регистрируемом объекте тоже обязательно попадапи в регистрацию и затем передавались в центр.

Что тут можно посоветовать? Моей практике у меня было первое приближение и затем я дописывал под конкретные условия работы, бизнес-процессы: здесь - можно, а здесь - нельзя и т.п.
42 Фрэнки
 
07.03.18
09:31
(40) насчет создания "кучи НСИ" - это вовсе отдельная история. Добавление новых элементов НСИ регламентировано бывает самыми разными способами и подходами. Вплоть до работы в отдельной базе НСИ, где по максимуму документов нет, а справочники есть.
43 altaykniga
 
07.03.18
09:40
еще хотел спросить.

есть 2 варианта регистрации изменений:
1. авторегистрация=разрешить
2. авторегистрация=запретить, а затем в подписке на событие поставить галочку на нужные для регистрации объекты.

Какой использовать предпочтительней? В бух 3 реализовано через 2-ой вариант
44 Фрэнки
 
07.03.18
17:06
(43) если план работает в обе стороны и он максимально полный = разрешена авторегистрация.

Когда встревают в дополнительные условия, модификацию правил, ограничения по видам объектов и т.п. - запрещают все и подписками рулят :) Не так все и сложно. Но возни гораздо больше.
45 Serg_1960
 
07.03.18
20:57
(43) Если объект всегда, независимо от своего содержимого, должен мигрировать - "авторегистрация = разрешить". Если для регистрации изменений нужен анализ содержимое объекта - "авторегистрация = запретить", а сам анализ содержимого и регистрация - в подписке на событие.

В принципе, нужно всегда помнить то, что регистрация изменений и/или отмена регистрации - это блокировки (что есть зло для многопользовательского режиме работы). Поэтому предпочтительнее использовать тот вариант, который порождает меньше блокировок.