Имя: Пароль:
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) Если объект всегда, независимо от своего содержимого, должен мигрировать - "авторегистрация = разрешить". Если для регистрации изменений нужен анализ содержимое объекта - "авторегистрация = запретить", а сам анализ содержимого и регистрация - в подписке на событие.

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