|
Алгоритм плана обмена. | ☑ | ||
---|---|---|---|---|
0
antihacker
05.06.15
✎
12:32
|
Всем привет ! Надо изменить алгоритм плана обмена. Например не передовать конфеденциальные данные филиальным базам.
Копаясь в паланах обмена нашел что в процедуре ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента) Можнро вроде что то сделать. Помогите как ? Например Код Если ИмяБазовогоТипа="Справочники" Тогда сообщить(ЭлементДанных); КонецЕсли; Показывает что значение ЭлементДанных содепржит имена контрагентов. Можно здесь как то убрать не нужных контрагентов ? Платформа 8,2 и конфига 2,0 Спасибо ! |
|||
1
Lama12
05.06.15
✎
12:43
|
(0) Посмотри как БСП реализовано.
|
|||
2
antihacker
05.06.15
✎
12:54
|
Спасибо. Думаю как то так.
Если ИмяБазовогоТипа="Справочники" Тогда Если Не ЭтоНужныйОбъект Тогда ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить; КонецЕсли; КонецЕсли; |
|||
3
antihacker
05.06.15
✎
13:06
|
Одна проблема. Раз не передаем не нужных элментов, то и не нужно передовать все связанные элементы.
А какие есть объкты связанные с контрагентами ? Пмомгите заполнить список. 1) Контргаент(справочник) 2) Договоры контрганетов(справочник) 3) Контакты контргаентов(справочник) итд ... |
|||
4
Повелитель
05.06.15
✎
13:28
|
Может тупо RLS в филиалах настроить?
|
|||
5
0wl
05.06.15
✎
13:33
|
(2)
" ОтправкаЭлементаДанных.Удалить;" ты тут сейчас понаотправляешь. Посмотри в "Профессиональной разработке в 1С:Предприятие", там подробно механизм обмена расписан. |
|||
6
antihacker
05.06.15
✎
13:38
|
По твоему где это я применяю ? Это типовая конфига.
А что такое RLS ? |
|||
7
Повелитель
05.06.15
✎
14:21
|
(6) Ограничение на уровне записей.
То есть обмен будет такой же как и сейчас. А вот данные пользователи будут видеть только те которые вы разрешите. |
|||
8
antihacker
05.06.15
✎
16:46
|
Зачем скрывать ? Просто не надо отправлять
|
|||
9
and2
05.06.15
✎
16:48
|
почисти после получения данных.
|
|||
10
fisher
05.06.15
✎
16:51
|
ПриОтправкеДанныхПодчиненному() - плохо.
Это будет замедлять выгрузку пропорционально количеству данных и баз. Правильно - формировать список баз-получателей при записи объектов. |
|||
11
antihacker
05.06.15
✎
16:57
|
Ребята здесь видно что объект справочник
Если ИмяБазовогоТипа="Справочники" Тогда Но как узнать какой справочник ? Кто нить разбирал этот модуль ? |
|||
12
antihacker
05.06.15
✎
17:06
|
Мы знаем значение ЭлементДанных. Может как то можно узнать к какому справочнику относиться ?
|
|||
13
olegves
05.06.15
✎
17:42
|
(0) а подправить напильником в КД правила обмена не хочешь?
|
|||
14
dmpl
05.06.15
✎
20:28
|
(0) План обмена - просто механизм регистрации изменений. Дальше алгоритм может быть любым (а поскольку о том, какой именно план обмена и какая конфигурация молчок, то исходим из общих предположений). Соответственно, оптимально будет отключить авторегистрацию у нужных объектов и добавлять их регистрацию в подписке на событие при записи, например.
А можно написать свою выгрузку - тоже вариант, особенно учитывая что это может быть внешняя обработка и не потребуется менять конфигурацию. (12) Метод Метаданные() у него есть? |
|||
15
antihacker
08.06.15
✎
09:02
|
И так. Дпиоивая копаю и изучаю. Вроде работает.
Если ИмяБазовогоТипа="Справочники" И СокрЛП(ТипЗнч(ЭлементДанных))="Справочник объект: Контрагенты" Тогда ЭлементНужен=ЛОЖЬ; //----Фильтр по контрагентам------------------------- Для Каждого Организация ИЗ ЭтотОбъект.Организации Цикл Если ЭлементНужен=ЛОЖЬ Тогда ЗапросФильтра= Новый Запрос; ЗапросФильтра.Текст="ВЫБРАТЬ | РТТКонтрагента.ТТ КАК ТТ | ИЗ Справочник.Контрагенты.РТТ КАК РТТКонтрагента ГДЕ РТТКонтрагента.ТТ=&ТТ И РТТКонтрагента.Ссылка=&Контрагент "; // ЗапросФильтра.УстановитьПараметр("ТТ",Организация.Организация); ЗапросФильтра.УстановитьПараметр("Контрагент",ЭлементДанных.Ссылка); Если ЗапросФильтра.Выполнить().Выбрать().Количество()=0 Тогда ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить; ЭлементНужен=Ложь; сообщить(ЭлементДанных); Иначе ЭлементНужен=ИСТИНА; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; Только одна проблема. Если контргаент лежит в папке, то передает отправляет контрагента без папки. По этому у дочерной базы падает в самы верхний корневую. Как передать туда с иерархией ? |
|||
16
antihacker
08.06.15
✎
09:04
|
Как мне стыдно за грамматику )) Случайно нажал на отпрвку )
|
|||
17
dmpl
08.06.15
✎
09:52
|
(16) Тут не за грамматику должно быть стыдно. Стыдно, товарищ, сравнивать результат ТипЗнч() со строкой. Тип() для кого придумали? 1С за это уже наказывала. Ну и классика - запрос в цикле.
|
|||
18
antihacker
08.06.15
✎
11:05
|
dmpl , цикл я поставил временно что бы кое что проверить. А так знаю , что надо передовать в зпрос все списки через список знаяения. Ты бы лучше писал по сути. Не это главное.
|
|||
19
antihacker
08.06.15
✎
12:10
|
dmpl, вот исправил ))
Если ИмяБазовогоТипа="Справочники" И ТипЗнч(ЭлементДанных.Ссылка)=Тип("СправочникСсылка.Контрагенты") |
|||
20
SUA
08.06.15
✎
12:14
|
(15)>>передает отправляет контрагента без папки
ну это как написано |
|||
21
antihacker
08.06.15
✎
12:19
|
SUA, вот и не получаеться проверить тип на группу. По этому пропускает только элементы справочника. А группы нет.
|
|||
22
antihacker
08.06.15
✎
13:58
|
И так тема закрыта. Если кто решил создать обмен по организациям ,то может быть так что у каждой организации свои контрагенты. А стандартный не фильтрирует. П о этому у контргаента создайте табличную часть РТТ а там реквизит ТТ с сылкой на справочник - "Организции". Откройте модуль обмеа по организациям и найдите процедуру ПриОтправкеДанныхПодчиненному() и добавить этот код
Если ИмяБазовогоТипа="Справочники" И ТипЗнч(ЭлементДанных.Ссылка)=Тип("СправочникСсылка.Контрагенты") Тогда //И ТипЗнч(ЭлементДанных) <> Тип("Группа") ЭлементНужен=ЛОЖЬ; //----Фильтр по контрагентам------------------------- Для Каждого Организация ИЗ ЭтотОбъект.Организации Цикл Если ЭлементНужен=ЛОЖЬ Тогда ЗапросФильтра= Новый Запрос; ЗапросФильтра.Текст="ВЫБРАТЬ | РТТКонтрагента.ТТ КАК ТТ | ИЗ Справочник.Контрагенты.РТТ КАК РТТКонтрагента ГДЕ РТТКонтрагента.ТТ=&ТТ И РТТКонтрагента.Ссылка В ИЕРАРХИИ (&Контрагент) "; ЗапросФильтра.УстановитьПараметр("ТТ",Организация.Организация); ЗапросФильтра.УстановитьПараметр("Контрагент",ЭлементДанных.Ссылка); Если ЗапросФильтра.Выполнить().Выбрать().Количество()=0 Тогда ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить; ЭлементНужен=Ложь; сообщить(ЭлементДанных); Иначе ЭлементНужен=ИСТИНА; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; Спасибо всем. |
|||
23
antihacker
08.06.15
✎
13:59
|
Если ИмяБазовогоТипа="Справочники" И ТипЗнч(ЭлементДанных.Ссылка)=Тип("СправочникСсылка.Контрагенты") Тогда
ЭлементНужен=ЛОЖЬ; Для Каждого Организация ИЗ ЭтотОбъект.Организации Цикл Если ЭлементНужен=ЛОЖЬ Тогда ЗапросФильтра= Новый Запрос; ЗапросФильтра.Текст="ВЫБРАТЬ | РТТКонтрагента.ТТ КАК ТТ | ИЗ Справочник.Контрагенты.РТТ КАК РТТКонтрагента ГДЕ РТТКонтрагента.ТТ=&ТТ И РТТКонтрагента.Ссылка В ИЕРАРХИИ (&Контрагент) "; ЗапросФильтра.УстановитьПараметр("ТТ",Организация.Организация); ЗапросФильтра.УстановитьПараметр("Контрагент",ЭлементДанных.Ссылка); Если ЗапросФильтра.Выполнить().Выбрать().Количество()=0 Тогда ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить; ЭлементНужен=Ложь; сообщить(ЭлементДанных); Иначе ЭлементНужен=ИСТИНА; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |