Имя: Пароль:
1C
1С v8
КД, параметр в произвольном запросе
,
0 vde69
 
27.08.12
16:57
делаю правило выгрузки для справочника ГруппыПользователей, Необходимо выгружать только те которые есть в реквизитах другого справочника, но при этом нужно регистрировать изменение ТЧ пользователи.

Включил ГруппыПользователей в план обмена


установил "произвольный запрос"

Запрос = Новый Запрос("
|ВЫБРАТЬ РАЗЛИЧНЫЕ
|    ЦФО.ГруппаДоступа
|ИЗ
|    Справочник.ЦФО КАК ЦФО
|ГДЕ
|    ЦФО.ГруппаДоступа В(&ГруппаДоступа)"    
|");

ВыборкаДанных = Запрос.Выполнить();

но не пойму как список из плана обмена запихать в параметр запроса
1 vde69
 
28.08.12
08:04
ап
2 Рэйв
 
28.08.12
08:08
А напрямую недоступен? Пробовал?
3 andrewks
 
28.08.12
08:09
а что за хитрая строчка
|<");
?
4 vde69
 
28.08.12
08:12
(3) это опечатка
(2) что именно напрямую? понятно как сделать проверку для одного элемента, но у меня много их, хочу именно выборку делать с проверкой.
5 Рэйв
 
28.08.12
08:17
(4)Если узел плана доступен при обмене, то почему бы из него и не взять нужный список для запроса.
6 vde69
 
28.08.12
08:23
(5) мы говорим о "конвертация данных", никакой информации (кроме помощи по обработчикам) что и как будет обрабатыватся - нет
в указаной помощи ответа я не нашел
копатся в обработке обмена по правилам КД геморно
7 andrewks
 
28.08.12
08:25
"Необходимо выгружать только те которые есть в реквизитах другого справочника"  можно поподробнее?

что мешает сделать запрос, выбирающий "только те которые есть в реквизитах другого справочника"  ?
8 vde69
 
28.08.12
08:27
(7) запрос я привел в (0), я выгружаю только те группы доступа которые

(ИЗМЕНИЛИСЬ и ОтвечаютЗаДоступК_ЦФО)
9 SergeyKB
 
28.08.12
08:27
а так получить список измененных по узлу ?

ВЫБРАТЬ
   ГруппыПользователейИзменения.Ссылка
ИЗ
   Справочник.ГруппыПользователей.Изменения КАК ГруппыПользователейИзменения
10 sttt
 
28.08.12
08:35
а так:

Запрос = Новый Запрос("
|ВЫБРАТЬ РАЗЛИЧНЫЕ
|    ЦФО.ГруппаДоступа
|ИЗ
|    Справочник.ЦФО КАК ЦФО
|ГДЕ
|    ЦФО.ГруппаДоступа В(ВЫБРАТЬ ГруппаДоступа.Ссылка ИЗ Справочник.ГруппаДоступа)"    
|<");

ВыборкаДанных = Запрос.Выполнить();

откуда список берется?
11 sttt
 
28.08.12
08:38
кажись понял. выбирать только измененные из ГруппаДоступа, тогда в (9)
12 vde69
 
28.08.12
08:47
можно сделать так

ИсходящиеДанные = Новый Структура;    
   
Запрос = Новый Запрос("
|ВЫБРАТЬ РАЗЛИЧНЫЕ
|    ЦФО.ГруппаДоступа
|ИЗ
|    Справочник.ЦФО КАК ЦФО"    
|");

мМассив = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ГруппаДоступа");
ИсходящиеДанные.Вставить("ВыгрузкаПоРегистрацииИзменений", Истина);
ИсходящиеДанные.Вставить("МассивГруппОбмена", мМассив);



а в правиле конвертации

   Если ТипЗнч(ИсходящиеДанные) = Тип("Структура") Тогда  
       мВыгрузкаПоРегистрацииИзменений = Неопределено;
       мМассивГруппОбмена = Неопределено;
       ИсходящиеДанные.Свойство("ВыгрузкаПоРегистрацииИзменений", мВыгрузкаПоРегистрацииИзменений);
       ИсходящиеДанные.Свойство("МассивГруппОбмена", мМассивГруппОбмена);
       Если  (мВыгрузкаПоРегистрацииИзменений = Истина)
           и (ТипЗнч(мМассивГруппОбмена) = Тип("Массив")) Тогда  
           
           Если мМассивГруппОбмена.Найти(Источник.Ссылка) = Неопределено Тогда
               Отказ = Истина;
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
13 vde69
 
28.08.12
08:48
(9) а это работает?
14 SergeyKB
 
28.08.12
09:04
(13)
Получить список измененных элементов справочника да, работает,
а почему нет, это ведль платформенная вещь ...


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

но понятно, что без оглядок на наличие в ЦФО
15 vde69
 
28.08.12
09:19
пока сделал так (вроде что-то выгружает, потестю)

Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗЛИЧНЫЕ
|    ЦФО.ГруппаДоступа
|ИЗ
|    Справочник.ЦФО КАК ЦФО
|ГДЕ
|    ЦФО.ГруппаДоступа.Ссылка В
|            (ВЫБРАТЬ
|                ГруппыПользователейИзменения.Ссылка
|            ИЗ
|                Справочник.ГруппыПользователей.Изменения КАК ГруппыПользователейИзменения)    
|");

ВыборкаДанных = Запрос.Выполнить();