Имя: Пароль:
1C
1С v8
Конвертация данных между УПП и КА нужно выгружать только РТиУ с опред префиксом
0 Kleo
 
15.10.14
09:04
Здравствуйте!

Есть план обмена между УПП и КА.

Так вот есть документы:

1) РТиУ с префиксом "А" и сделка (заказ покупателя) с префиксом "А"

2) РТиУ с префиксом "Б" и сделка (заказ покупателя) с префиксом "Б"

3) РТиУ с префиксом "С" и сделка (заказ покупателя) с префиксом "Б"


так вот мне нужно, чтобы из УПП в КА выгружались только:

ТиУ с префиксом "С" и сделка (заказ покупателя) с префиксом "Б"


Пишу в ПКО для Реализация товаров и услуг в обработчике событий "Перед выгрузкой":

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


при запуске обмена программа начинает выгружать все документы (перебирать), как сделать так, чтобы сразу отсекала ненужные?
1 Kleo
 
15.10.14
09:05
нужно, чтобы из УПП в КА выгружались только:

РТиУ с префиксом "С", у которых сделка (заказ покупателя) с префиксом "Б"
2 Alex S D
 
15.10.14
09:08
Произвольный запрос в ПВД
3 JeyRico
 
15.10.14
09:11
Условие не верно, отсекает только когда выполнены оба. А если ПрефиксСделка не "Б", дальше не смотрит и отказ остается Ложь
4 Kleo
 
15.10.14
09:11
(2) я тоже об этом подумала, но как именно написать? нужно же будет в запросе например задавать перебор всех документов за период какой-нибудь... а ведь должны выгружаться те документы, которые изменились или зарегистрировалось изменение этих объектов?
5 Banned
 
15.10.14
09:12
В подписке при записи/etc очищай регистрацию ненужных документов...
6 Kleo
 
15.10.14
09:12
(3) а если так:

Если ПрефиксСделка = "Б" и ПрефиксИсточник = "С" Тогда
    Иначе
        Отказ = Истина;
    КонецЕсли;
7 JeyRico
 
15.10.14
09:14
(6) По крайней мере соответствует описанию задачи
8 Alex S D
 
15.10.14
09:16
(4) Так там можно и изменения из плана обмена выбрать
9 Kleo
 
15.10.14
09:16
(5) т.е. в настройках ПКО для РТиУ, где Выгрузка данных установить флаг "Не запоминать выгруженные объекты" ?
10 JeyRico
 
15.10.14
09:17
(9) Нет, этот флаг не для этого. А вообще условие должно работать
11 Kleo
 
15.10.14
09:17
(8) как? подскажите, пожалуйста. запрос сделаю по докам РТиУ и напишу, чтобы выгружать по такому-то правилу, а как написать в запросе, что вновь созданные доки или измененные?
12 Banned
 
15.10.14
09:19
(9) нет.
В конфигурации, а не в правилах выгрузки
13 Kleo
 
15.10.14
09:20
(12) создать подписку на события? и? что написать? можно более подробно... но ведь другой обмен КА и УПП работает без всяких очищений
14 JeyRico
 
15.10.14
09:21
Код из (0) с условием из (6) работает? В (5) и (8) это уже оптимизация.
15 Kleo
 
15.10.14
09:24
(14) запустила. опять перебирает все. а таких документов еще ни одного в базе нет(((
16 Kleo
 
15.10.14
09:25
думаю, что через ПВД нужно,, но как задать изменения по плану обмена?
17 Alex S D
 
15.10.14
09:27
ВЫБРАТЬ
    РеализацияТоваровУслугИзменения.Ссылка
ИЗ
    Документ.РеализацияТоваровУслуг.Изменения КАК РеализацияТоваровУслугИзменения
ГДЕ
    РеализацияТоваровУслугИзменения.Узел = &Узел
18 Kleo
 
15.10.14
09:27
пишет:

Запись изменений для узла КА: Прочитано: столько-то объектов Реализация товаров и услуг.... и походу перебирает все.... какие есть...все 20000 доков... а может он один раз так прочитает,а  потом будет читать только изменения?
19 Kleo
 
15.10.14
09:28
(17) "Документ.РеализацияТоваровУслуг.Изменения" - это что? не совсем понимаю, что за объекты конифга такой "Изменения"???
20 Alex S D
 
15.10.14
09:31
(19) Таблица изменений.. Что непонятного то)
21 Kleo
 
15.10.14
09:34
(20) точно работает?

а еще нужно сюда включить условие:

Если ПрефиксСделка = "Б" и ПрефиксИсточник = "С" Тогда
22 Alex S D
 
15.10.14
09:38
ну доступ к ссылке есть. Используй ПОДСТРОКА для номера..
23 Kleo
 
15.10.14
09:41
(22) ок, спасибо. а как установить параметр запроса Узел? как его описать?
24 Alex S D
 
15.10.14
09:56
Ну на вскидку
Узел = ПланыОбмена.<ТвойПланОбмена>.НайтиПоКоду("001");
25 toypaul
 
гуру
15.10.14
10:10
отбор надо в ПВД делать, а не в ПКО
26 Kleo
 
15.10.14
11:04
(20) это точно типовое "Изменения"?
27 Alex S D
 
15.10.14
11:07
(26) да
28 Naumov
 
15.10.14
11:18
(0) Если План обмена работает с правилами регистрации, то можно управлять регистрацией, а не выгрузкой. Т.е. все проверки будут выполнятся при изменении документов, а не проверяться в момент выгрузки.
29 Михаил Козлов
 
15.10.14
11:20
Я бы запретил автоматическую регистрацию и регистрировал в подписке (ПриЗаписи) с проверкой нужных условий.
30 Kleo
 
17.10.14
08:09
пишу в ПВД для документа "Реализация товаров и услуг" (произвольный алгоритм) в обработчике событий "Перед обработкой":


Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Дата1",Дата("20141015"));
Запрос.УстановитьПараметр("Узел",ПланыОбмена.ОбменУППУПП.НайтиПоКоду("002"));
Запрос.Текст =
"ВЫБРАТЬ
|    РеализацияТоваровУслугИзменения.Ссылка,
|    РеализацияТоваровУслугИзменения.Ссылка.Сделка,
|    РеализацияТоваровУслугИзменения.Ссылка.ДокументОснование
|ИЗ
|    Документ.РеализацияТоваровУслуг.Изменения КАК РеализацияТоваровУслугИзменения
|ГДЕ
|   РеализацияТоваровУслугИзменения.Узел = &Узел
|   И РеализацияТоваровУслугИзменения.Ссылка.Дата >= &Дата1
|    И ПОДСТРОКА(РеализацияТоваровУслугИзменения.Ссылка.Номер, 1, 1) = "С"
|    И ПОДСТРОКА(РеализацияТоваровУслугИзменения.Ссылка.Сделка.Номер, 1, 1) = "Б"
|        И ТИПЗНАЧЕНИЯ(РеализацияТоваровУслугИзменения.Ссылка.Сделка) = ТИП(Документ.заказПокупателя)
|        И РеализацияТоваровУслугИзменения.Ссылка.Сделка =  РеализацияТоваровУслугИзменения.Ссылка.ДокументОснование";

РезультатЗапроса = Запрос.Выполнить();
Сообщить("Запрос");

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

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    ВыгрузитьПоПравилу(ВыборкаДетальныеЗаписи.ссылка,,,, "РеализацияТоваровУслуг");
    
КонецЦикла;


Далее добавляю правила в обмен и при выгрузке данных пишет ошибку:


Начало выгрузки:   17.10.2014 11:06:32

Ошибка в обработчике события ПередОбработкойПравилаВыгрузки
    ПВД                    =  РеализацияТоваровУслуг
    Обработчик             =  ПередОбработкойВыгрузкиДанных
    ОписаниеОшибки         =  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(14,70)}: Ожидается последовательность операторов
    ПозицияМодуля          =  Обработка.ОбменДаннымиXML.МодульОбъекта(12310)
    КодСообщения           =  31

Ошибка при выгрузке данных для узла плана обмена
    ТипОбъекта             =  Документ объект: Реализация товаров и услуг
    Объект                 =  Реализация товаров и услуг 00000001985 от 02.05.2012 18:47:35
    ОписаниеОшибки         =  Ошибка в обработчике события ПередОбработкойПравилаВыгрузки
    ПВД                    =  РеализацияТоваровУслуг
    Обработчик             =  ПередОбработкойВыгрузкиДанных
    ОписаниеОшибки         =  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(14,70)}: Ожидается последовательность операторов
    ПозицияМодуля          =  Обработка.ОбменДаннымиXML.МодульОбъекта(12310)
    КодСообщения           =  31
    ПозицияМодуля          =  Обработка.ОбменДаннымиXML.МодульОбъекта(1667)
    КодСообщения           =  72
    УзелПланаОбмена        =  КА

Окончание выгрузки: 17.10.2014 11:06:33


что не так?
31 Kleo
 
17.10.14
08:10
и при чем тут документ за 2012 год, если задана дата от 15.10.2014г.  такое ощущение, что запрос не выполняется и ошибка в синтакисе. но что не так не могу понять...
32 Kleo
 
17.10.14
08:18
нашла ошибку нужно было в запросе указать так:

|    И ПОДСТРОКА(РеализацияТоваровУслугИзменения.Ссылка.Номер, 1, 1) = ""С""
|    И ПОДСТРОКА(РеализацияТоваровУслугИзменения.Ссылка.Сделка.Номер, 1, 1) = ""Б""


двойные кавычки...


но дальше опять он все доки перебирает сначала века...  это так и должно быть??? или это так только один раз сделается,а  потом не будет??? непонятно. в запросе указала определенные условия - создала один документ РТиУ и в итоге должен только один док выгрузиться.... а перебор-то ... т.е. чтение зачем всех доков РТиУ идет????
33 Kleo
 
17.10.14
08:19
пишет Запись изменений для узла "КА". Прочитано 800... РеализацияТоваровУслуг


так и должно быть в первый проход?
34 Kleo
 
17.10.14
08:29
выгрузил какие-то документы еще апрельские... бред... ничего не понимаю. запрос сработал, ошибок нет, но в файле выгрузок... вообще какие-то другие доки... а тот, который должен не попал.....
35 Kleo
 
17.10.14
08:29
отобраться должен только один док и все!!! что не так? запрос в консоле запросов работает верно. отбирает один док. что не так?
36 Kleo
 
17.10.14
08:48
нашла еще одну ошибку: указала Произвольный алгоритм для ПВД, а Объект выборки не убрала. сделала. теперь перебора нет. но есть новая ошибка:

Начало выгрузки:   17.10.2014 11:45:51

Ошибка при выгрузке данных для узла плана обмена
    ОписаниеОшибки         =  Ошибка при вызове метода контекста (НайтиПоТипу): Несоответствие типов (параметр номер '1')
    ПозицияМодуля          =  Обработка.ОбменДаннымиXML.МодульОбъекта(12187)
    КодСообщения           =  72
    УзелПланаОбмена        =  КА

Окончание выгрузки: 17.10.2014 11:45:51
37 Kleo
 
17.10.14
09:22
(36) эта ошибка из-за того, что убран Объект выборки...
38 Kleo
 
17.10.14
09:30
если ставлю, то опять все перебирает... такое ощущение, что всеравно, что написано в запросе
39 Kleo
 
17.10.14
09:39
подскажите, пожалуйста. все так просто нужно выбрать доки с префиксом С, на основании заказа покупателя с префиксом Б. и что нужно для это делать? через ПКО и ПВД попробовала  - не получается((((
40 Alex S D
 
17.10.14
09:44
а способ выборки что стоит?
41 Alex S D
 
17.10.14
09:45
ВыборкаДанных - Запрос, Результат запроса, Выборка из результата запроса или произвольная коллекция выгружаемых объектов. Используется, когда способ выгрузки данных - Произвольный алгоритм. Если определить данную переменную, то обход коллекции и выгрузка объектов будет осуществляться автоматически
42 Alex S D
 
17.10.14
09:45
из справки обработчика ПередОбработкой
43 Kleo
 
17.10.14
09:54
(40) Произвольный алгоритм
44 Kleo
 
17.10.14
09:57
(41) у меня нет этой переменной. у меня в ПВД Перед обработкой:

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Дата1",Дата("20141015"));
Запрос.УстановитьПараметр("Узел",ПланыОбмена.ОбменУППУПП.НайтиПоКоду("002"));
Запрос.Текст =
"ВЫБРАТЬ
|    РеализацияТоваровУслугИзменения.Ссылка КАК Документ,
|    РеализацияТоваровУслугИзменения.Ссылка.Сделка,
|    РеализацияТоваровУслугИзменения.Ссылка.ДокументОснование
|ИЗ
|    Документ.РеализацияТоваровУслуг.Изменения КАК РеализацияТоваровУслугИзменения
|ГДЕ
|   РеализацияТоваровУслугИзменения.Узел = &Узел
|   И РеализацияТоваровУслугИзменения.Ссылка.Дата >= &Дата1
|    И ПОДСТРОКА(РеализацияТоваровУслугИзменения.Ссылка.Номер, 1, 1) = ""С""
|    И ПОДСТРОКА(РеализацияТоваровУслугИзменения.Ссылка.Сделка.Номер, 1, 1) = ""Б""
|        И ТИПЗНАЧЕНИЯ(РеализацияТоваровУслугИзменения.Ссылка.Сделка) = ТИП(Документ.заказПокупателя)
|        И РеализацияТоваровУслугИзменения.Ссылка.Сделка =  РеализацияТоваровУслугИзменения.Ссылка.ДокументОснование";

РезультатЗапроса = Запрос.Выполнить();
Сообщить("Запрос");

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

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    ВыгрузитьПоПравилу(ВыборкаДетальныеЗаписи.Документ,,,, "РеализацияТоваровУслуг");
    
КонецЦикла;
45 Kleo
 
17.10.14
10:45
обмен начат не с самого начала... а уже прошло 2-3 года документообоота. и скорее всего, подозреваю, что все для обмена считается измененными объектами... и он пытается все их выгрузить... только когда я смотрю файл, то доки не соответствуют заданным параметрам в запросе. а попадают непонятно каким-то образом выбранные объекты...



и еще такой момент: раньше был только обмен из КА в УПП. теперь нужно еще из УПП в КА по выше указанному запросу выгружать документы. так вот я эти правила загружаю в этот же обмен односторонний, что был ранее... и может в этом ошибка?
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.