Имя: Пароль:
1C
1С v8
Конвертация данных. ОбменДанными.Загрузка слетает в ложь
0 mefisto666series
 
07.05.18
16:45
Проблема такова: при загрузке объекта в конфигурацию приемник в методах ПередЗаписью проверка

Если ОбменДанными.Загрузка Тогда        
    Возврат;
КонецЕсли;

Срабатывает, в методе ОбработкаПроведения тоже, а в ОбработкаПроверкиЗаполнения слетает.
а по сути - это как раз то место, где мне и надо пресечь все действия когда объект загружается в рамках обмена. Я тут почитал всякое, в ПКО прописал

Объект.ОбменДанными.Загрузка = Истина;

Результата нет. В чем дело? Я так понимаю, что это не баг, а фича, но как ее обойти?
1 DrShad
 
07.05.18
17:41
обработка проверки заполнения в основном в момент проведения, а проведение в режиме Обмена данными невозможно
2 mefisto666series
 
07.05.18
17:44
(1) ну так а почему проверка происходит тогда?
3 Fragster
 
гуру
07.05.18
18:23
если прилетает проведенный документ, то никак
4 DrShad
 
08.05.18
08:07
(2) ну так ты наверное пытаешься его сразу и провести
5 Cyberhawk
 
08.05.18
08:09
В ПриЗагрузке или в ПослеЗагрузки пропиши РежимЗаписи = "Запись"
6 mefisto666series
 
08.05.18
09:03
(4) признак проведения я передаю. но создание документом движений мне не нужно. движения я отдельно передаю
7 mefisto666series
 
08.05.18
09:03
(3) см (6)
8 Fragster
 
гуру
08.05.18
09:08
(6) см. 3, КД2(3) не РИБ так не умеет. проведенный документ будет проведен в приемнике.
9 Fragster
 
гуру
08.05.18
09:11
тем более, если он не проходит проверку, то не совсем правильно переносить его в приемник в таком виде, да еще и проведенным, вдруг кто его провести попробует?
10 mefisto666series
 
08.05.18
09:12
(8) То есть пресечь выполнение кода в методе "ОбработкаПроверкиЗаполнения" нельзя никак, в смысле, опираясь на обменДанными.Загрузка?
11 Ёпрст
 
08.05.18
09:55
(8) КД2 так умеет, т.е умеет переносить движения вместе с документом и НЕ проводить его в базе приёмнике. Или, не об этом речь ?
12 DrShad
 
08.05.18
09:57
(11) +1
умеет КД2 переносить документ с флагом Проведен и при этом не проводить его
13 Ёпрст
 
08.05.18
10:12
Единственное, если обмен будет встроенной обработкой ОбменДаннымиXML по планам обмена, то её придётся слегка поправить, чтоб она не очищала движения регистров перед загрузкой (есть там косяк в этом).
14 mefisto666series
 
08.05.18
10:13
(12) ну вот это мне и надо. Но почему-то цепляется. Да и вообще, непонятно как-то. Вот я для проверки прописал:

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    
    Если ОбменДанными.Загрузка Тогда        
        
        Возврат;
        Отказ = Истина;
        
    КонецЕсли;
    
    ВызватьИсключение("ПередЗаписью + ОбменДанными.Загрузка = " + ОбменДанными.Загрузка + " Отказ = " + Отказ);
    
    Если Не Отказ Тогда
        //обработчик передзаписью
    КонецЕсли;
    
КонецПроцедуры

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    
    Если ОбменДанными.Загрузка Тогда        
        Возврат;
    КонецЕсли;
    
    ВызватьИсключение("ОбработкаПроведения + ОбменДанными.Загрузка = " + ОбменДанными.Загрузка + " Отказ = " + Отказ);
    
    //обработка проведения
    
КонецПроцедуры

а в результате обмена получаю следующее:
10 документов с предупреждением
"ПередЗаписью + ОбменДанными.Загрузка = Нет Отказ = Нет"
15 DrShad
 
08.05.18
10:16
тут нужно правила щупать, смысл гадать что ты там понаписал?
16 Ёпрст
 
08.05.18
10:21
(14) какой обработкой пользуешься, это для начала ?

ОбменДаннымиXML или УниверсальныйОбменДаннымиXML ?
17 Ёпрст
 
08.05.18
10:23
если второй, то там на форме есть галка про режим загрузки и в правилах, писать ничего не надо
18 Ёпрст
 
08.05.18
10:23
если у тебя кд-3 , то там хз, как сделано, не пользовался, не было надобности
19 Fragster
 
гуру
08.05.18
10:24
(11)(12) я про обмен подсистемы обмен данными БСП, в базе не умеет не проводить документ. Способы обхода есть, но специалисты фирмы 1с не рекомендуют, потому что этот документ будет неконсистентным в базе-приемнике.
20 mefisto666series
 
08.05.18
10:38
(15) да там, в общем-то, 1 к 1 почти передается документ. В обработчиках событий - ничего. В настройках только искать в приемнике по уид
(16) я через общую форму "Синхронизация данных" обмен делаю. Пошукал, не нашел явных обращений к обработкам, но у меня в принципе в конфе есть только универсальныйОбменДаннымиXML, соответственно вариант с (17) отпадает, т.к. ладно бы мне пользоваться этим обменом.
(18) пользую кд 2
21 mefisto666series
 
08.05.18
10:39
(14) кстати, при бОльшем количестве документов, какие-то валятся по моему исключению, а какие-то проводятся, точнее, пытаются
22 DrShad
 
08.05.18
11:00
[я через общую форму "Синхронизация данных" обмен делаю.] ну вот и получаешь проведение документов
23 Ёпрст
 
08.05.18
11:22
(19) если это кд2, то умеет в любой бсп. Там только чутка модифицировать обработку обмена, в которой зачем-то всегда чистят прилетевшие движения.
24 Fragster
 
гуру
08.05.18
11:48
(23) да не надо ничего модифицировать, а то автор потом получит кучу косяков из-за неконсистентных документов.
25 Fragster
 
гуру
08.05.18
11:49
не каждый может смотреть в завтрашний день(с)
26 Ёпрст
 
08.05.18
13:31
(24) слово то какое, ненашенское...
У меня к примеру, разный механизм проведения, а сливается всё в одну ЦБ, в которой доки и не проводятся совсем, а прилетают из каждой базы со своими движениями. Разные механизмы обмена бывают.
27 Fragster
 
гуру
08.05.18
13:46
(26) ну у меня в "консолидированноотчетную" базу прилетают движения с регистратором, у которого признак того, что он проводится - ложь. потому что он не проводится и не должен. а нормальные документы - прилетают в таком виде, в котором их можно перепровести.
28 Ёпрст
 
08.05.18
13:48
(27) у нас разные системы учета в принципе, и перепроводить документ нельзя :)
29 Ёпрст
 
08.05.18
13:49
поэтому летит в центр как есть, со своей движухой и проводками
30 Fragster
 
гуру
08.05.18
13:52
(28)(29) по этому я и сделал такой документ, который в принципе не проводится, и он нормально прилетает вместе с движениями.
31 mefisto666series
 
08.05.18
16:41
подведу итог.
Проблема передачи документов с отметкой о проведении в том, что сначала документ просто записывается и помещается в список на отложенное проведение, поэтому обменДанными.Загрузка ложь. Выставление признака в истину принудительно перед проведением, как минимум не удалось, с формулировкой типа "операция не может быть выполнена в режиме загрузки данных.". Однако, в методе ВыполнитьОтложенноеПроведениеДокументов обработки "КонвертацияОБъектовИнформационныхБаз", перед тем как проверить заполнение и провести документ производится следующее:

Объект.ДополнительныеСвойства.Вставить("ОтложенноеПроведение");

На что можно опираться уже в модуле объекта в методе "ПередЗаписью".
Закон Брукера: Даже маленькая практика стоит большой теории.