РИБ: как сделать, чтобы подчиненный узел 1с не видел данные центрального

1. AlexeyPapanov 463 29.10.15 15:19 Сейчас в теме
У меня настроен полный обмен РИБ.
Клиент хочет, чтобы в подчиненных узлах не видели никакие данные, кроме своих. Ну а центр видит все, разумеется.
Если делать через односторонний обмен, то выйдет, что при изменении в центре общей информации (номенклатура, контрагенты) подчиненные базы это не увидят, т.к. они не будут принимать данные при одностороннем обмене.
Как решить вопрос?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. adva 45 29.10.15 15:25 Сейчас в теме
СОздать свой план обмена, или подозреваю, что можно использовать план обмена с УПП, а в нем в центральной базе разрешить только выгрузку справочников
3. adva 45 29.10.15 15:27 Сейчас в теме
Только движения документов будут делаться в магазинах независимо (насколько я помню правила обмена с УПП, в них движения документов не выгружаются)
4. dken75dk 29.10.15 15:41 Сейчас в теме
А конфигурация то какая может можно попробовать с правами поиграть что бы удаленные базы видели бы только свое, при РИБе там ведь префикс присваивается вот и сделать ограничение на просмотр по префиксу за исключением справочников
5. AlexeyPapanov 463 29.10.15 16:00 Сейчас в теме
конфигурация УТ 10.3.
мне даже движения документов не столь принципиальны (по товарам им количественный учет важен), главное, чтобы задача решена была.
6. AlexeyPapanov 463 29.10.15 17:12 Сейчас в теме
Полез в модуль объекта плана обмена (Полный). Там такой код:
Перем мЭтоНовыйЭлемент;
Перем мМонопольныйРежимПередЗаписью;

Функция СообщитьИнформациюПользователюПослеСозданияНовогоУзла() Экспорт
	
	НужноПерезапуститьВсеПодключенияКИБ = Ложь;
	
	Если мЭтоНовыйЭлемент 
		И НЕ ПараметрыСеанса.ИспользованиеРИБ
		И НЕ мМонопольныйРежимПередЗаписью Тогда
		
		НужноПерезапуститьВсеПодключенияКИБ = Истина;
		
	КонецЕсли;	
	
	Если НужноПерезапуститьВсеПодключенияКИБ Тогда
		
		Если мМонопольныйРежимПередЗаписью Тогда
			
			ПолныеПрава.ОпределитьПараметрыСеансаДляОбменаДанными();
			Возврат "";
			
		Иначе	
			
			Возврат "Для корректной работы механизма обмена данными необходимо завершить работу всех пользователей и перезапустить текущий сеанс работы 1С:Предприятия.";	
			
		КонецЕсли;
		
	Иначе
		
		Если мЭтоНовыйЭлемент Тогда
			
			ПолныеПрава.ОпределитьПараметрыСеансаДляОбменаДанными();	
			
		КонецЕсли;
		
		Возврат "";
		
	КонецЕсли;
	
КонецФункции

Процедура ПередЗаписью(Отказ)
	
	мЭтоНовыйЭлемент = ЭтоНовый();
	мМонопольныйРежимПередЗаписью = ОбщегоНазначения.ОпределитьТекущийРежимРаботыМонопольный();
	
КонецПроцедуры

Процедура ПриЗаписи(Отказ)
	
	СтрокаСообщенияПользователю = СообщитьИнформациюПользователюПослеСозданияНовогоУзла();
	
	#Если Клиент Тогда
	Сообщить(СтрокаСообщенияПользователю);
	#КонецЕсли		
		
КонецПроцедуры

Процедура ОпределитьТипОтправкиДанных(ЭлементДанных, ОтправкаЭлемента) Экспорт
КонецПроцедуры

Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад)
	Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.Пользователи") Тогда
		ИдентификаторСсылки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭлементДанных.Ссылка, "ИдентификаторПользователяИБ");
		Если ЭлементДанных.ИдентификаторПользователяИБ <> ИдентификаторСсылки Тогда
			ЭлементДанных.ИдентификаторПользователяИБ = ИдентификаторСсылки;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад)
	Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.Пользователи") Тогда
		ИдентификаторСсылки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭлементДанных.Ссылка, "ИдентификаторПользователяИБ");
		Если ЭлементДанных.ИдентификаторПользователяИБ <> ИдентификаторСсылки Тогда
			ЭлементДанных.ИдентификаторПользователяИБ = ИдентификаторСсылки;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры
Показать


насколько я понимаю, мне надо в процедуре ПриПолученииДанныхОтГлавного() определить из какой базы ко мне идет документ.
Если получаемый объект (документ) из текущей базы, то принимаем его, иначе нет.

вычислить происхождение объекта я могу по префиксу в номере документа, а как тогда поставить отказ на прием (загрузку) объекта?
7. adva 45 30.10.15 10:32 Сейчас в теме
если так решил, то вроде чего-то надо присвоить параметру ПолучениеЭлемента (точное значение не помню)
8. AlexeyPapanov 463 30.10.15 11:49 Сейчас в теме
вроде чего-то надо, я согласен полностью)

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

так что там много чего надо иметь ввиду.
9. adva 45 30.10.15 13:36 Сейчас в теме
(8) тогда уж лучше делать при отправке данных от главного, ПриОтправкеПодчиненному (или как-то так называется), в этом случае документы не будут включаться в файл выгрузки (чтобы лишние данные не гонять). А принцип обмена прост, формируется файл выгрузки, в него включаются, либо не включатся данные, он выгружается с определенным номером. Файл загружается, формируется ответное сообщение (это обязательно надо), в котором содержится номер принятого пакета, при прочтении ответного сообщения из таблиц регистрации к обмену, удаляются объекты, у которых номер выгрузки меньше или равен прочитанному.
12. AlexeyPapanov 463 02.11.15 20:06 Сейчас в теме
(9) adva, понимаешь, даже если сделать проверку, зарегистрированные для обмена данные будут все равно скапливаться.
т.е. чтобы решить задачу, надо в центральном узле найти код, который производит регистрацию данных.
соответственно, если объект не будет регистрироваться, то и не надо никаких фильтров на обмен накладывать.
надо ковыряться в конфе. я не знаю, где в УТ 10 этот код.

(11) NE_ZNAIY, при использовании RLS у нас данные все-таки будут гоняться между узлами. да, доступа не будет, если настроить. но это принципиально другой метод решения задачи.
если решу вопрос, напишу.
14. NE_ZNAIY 02.11.15 20:25 Сейчас в теме
(12) El_Loco, Спасибо заранее. ))
17. adva 45 03.11.15 04:21 Сейчас в теме
(12) чтобы не скапливались объекты регистрации, принимай всегда ответный файл. Сделай, чтобы в нем была только инфа о пакетах (не выгружай в центральную доки и прочее). Есть же отдельно процедуры в узле и для выгрузки в ЦБ и для выгрузки в ПБ. Этот механизм надежнее будет, чем ты будешь снимать регистрацию изменений / не регестрировать изменения после выгрузкки.
18. AlexeyPapanov 463 03.11.15 10:04 Сейчас в теме
(17) adva, я не совсем тебя понимаю.
во-первых, регистрация изменений происходит до выгрузки, а не после.
во-вторых, как же и из ПБ в ЦБ не буду выгружать данные о доках? мне же как раз надо сливать из всех ПБ данные в ЦБ. А ЦБ не должна рассылать принимаемые данные по другим узлам.

немного повторюсь, логика какая:
1. создается объект (документ);
2. при записи он регистрируется для обмена (для всех узлов);
3. при запуске обмена происходит выгрузка.

т.е. не будет регистрации, нет выгрузки.

мне остается на этапе регистрации изменений анализировать данные:
Если ТекущийДокумент создан в ЦБ Тогда
	регистрируем его для остальных узлов
КонецЕсли;


или я не прав?
10. adva 45 30.10.15 13:39 Сейчас в теме
а по поводу "вроде бы", у меня нет перед глазами синтаксис помощника, поэтому по памяти посоветовал, что именно надо в нем посмотреть.
11. NE_ZNAIY 02.11.15 16:27 Сейчас в теме
http://infostart.ru/public/87531/
Здесь почитайте. Вдруг пригодиться.
Если у вас получиться. Отпишитесь мне, пожалуйста. Задача аналогичная. Решить не могу.
13. AlexeyPapanov 463 02.11.15 20:11 Сейчас в теме
я кажется что-то нашел...
есть такая подписка на событие ЗарегистрироватьИзмененияОбщихДанныхУзлов.
вот там в модуле надо порыться.
15. AlexeyPapanov 463 02.11.15 21:39 Сейчас в теме
да пока не за что спасибо говорить(
выше писал про подписку. там в подписках на события в УТ 10 основная масса как раз обработчики по регистрации изменений и т.п.

нашел такую вещь. есть процедура - Общие модули - ОбменДаннымиСобытия.МеханизмРегистрацииОбъектов()
в коде есть комментарий-описание к процедуре
// Механизм регистрации объектов (МРО)
// Процедура механизма регистрации объектов. Предназначена для определения списка узлов получателей планов обмена
// на которых необходимо выполнить регистрацию объекта для последующей его выгрузки

она выполняется при записи, проведении, отмене проведения.

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

		//************
		сообщить("МеханизмРегистрацииОбъектов()");
		
		Если Объект.Комментарий = "---" Тогда
			сообщить("Этот объект не должен регистрироваться для обменов!
			|возврат");
			Возврат
		КонецЕсли;
		//************
Показать


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

ВЫБРАТЬ
     Ссылка
ИЗ
     Документ.РеализацияТоваровУслуг.Изменения
ГДЕ
     Узел = &НужныйУзелПланаОбмена



где-то я близко, мне кажется)
16. NE_ZNAIY 02.11.15 23:16 Сейчас в теме
(15) El_Loco, спасибо за "если решу вопрос, напишу.".
19. monkbest 114 03.11.15 10:16 Сейчас в теме
В УТ 10.3 у полного плана обмена авторегистрация стоит у всех объектов. Это значит, что кодом её отменить не получится. Порядок такой:
1. У всех снимаем авторегистрацию (или только у документов)
2. Создаем подписки на необходимые события для разных метаданных свои (при записи, при удалении, доков, справочников...)
3. Внутри подписки регистрируем изменения кодом и заодно делаем проверки.

Как мануал открыть демку 11.3, там у полного плана обмена авторегистрация отключена.
21. adva 45 03.11.15 12:32 Сейчас в теме
(19) даже если стоит авторегистрация, можно убрать из кода узлы получатели.

(18) можно и через снятие регистрации делать, а можно и отменять выгрузку конкретных доков либо из периферии, либо из центра, в зависимости от потребностей (смотря чего удобней). Логика получится такая:

1) создается и регистрируется для обмена док;
2) на этапе выгрузки проверяется, надо ли его выгружать, и если не надо, то отменяется его выгрузка. И похоже надо будет не только доки, но и движения регистров отменять выгрузку (не регистрировать), если пользоваться полным планом.
20. monkbest 114 03.11.15 10:17 Сейчас в теме
По поводу событий - будьте внимательны, т.к. их не одно :) т.е. только при записи - недостаточно для нормального функционирования РИБ, еще надо как мимнимум удаление, а может еще чего
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот