Имя: Пароль:
1C
1С v8
Режим "ОбменДанными.Загрузка = Истина" в "Конвертации данных"
0 Voittamaton
 
24.08.12
14:13
Всем привет!
При выгрузке через обработку "УниверсальныйОбменДанными..." есть возможность установить галочку "ОбменаДанными.Загрузка = Истина".
Как установить эту галочку в конфигурации "Конвертация данных"? Можно ли задать эту опцию для отдельных объектов конфигурации?
1 Voittamaton
 
24.08.12
14:14
Обмен данными происходит через план обмена с прямым подключением к базе-приёмнику.
2 Йохохо
 
24.08.12
14:27
это проперти Объекта
ПослеЗагрузки
Если Не ОбъектНайден Тогда
   Объект.ОбменДанными.Загрузка = Истина;
   Объект.Записать();
КонецЕсли;
3 Voittamaton
 
24.08.12
14:52
(2) - хм... Что-то не работает... Всё равно выполняет код после

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

Может попробовать в событии ПКО "При загрузке"?
4 Рэйв
 
24.08.12
14:54
(3)Так оно для того там и проверяется
5 Рэйв
 
24.08.12
14:54
(3)Чтобы обойти всякие хитрые проверки и всю подобную лабуду
6 Voittamaton
 
24.08.12
15:02
(4) вот я написал в ПКО:

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

И в "ПриЗагрузке", и в "ПослеЗагрузки", а при выполнении кода в модуле документа

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

всё равно Обмен.Данными.Загрузка = Ложь.
7 Йохохо
 
24.08.12
15:20
значит (Объект.ОбменДанными.Загрузка <> ОбменДанными.Загрузка) = true
8 acsent
 
24.08.12
15:25
(6) и что этот код не падает с ошибкой?
9 Рэйв
 
24.08.12
15:26
(6)Такой код прервет загрузку. потому что ты выйдешь из процедуры ЗагрузитьИзФайла()
10 Рэйв
 
24.08.12
15:27
Или ЗагрузитьОбъект() ...не помню уже точно
11 Voittamaton
 
24.08.12
15:29
(6) - параметр "Объект.ОбменДанными.Загрузка" я устанавливаю в "Истину" в ПКО.
НО: в модуле документа он по-прежнему равняется "Ложь" :-(

С ошибкой не вылетает.
12 Torquader
 
26.08.12
00:57
обмен данными загрузка равно истина имеет вообще опосредоыанное отношение к обмену данными - этот режим отключает любые проверки корректности загружаемого или создаваемого объекта,то есть позволяет,например,создать два элемента с одинаковым кодом,когда установлена уникальность кода.
применение данной галочки в конвертации нежелательно,так как может приводить к нарушениям в базе данных.
при обмене же мы не можем не загрузить объект,который пришёл к нам из другой базы данных,так как там он уже есть и не может быть удалён.
,а в случае переноса данных нежелательно создавать новые объекты,если есть уже созданный объект с тем же кодом.
13 Mikhail Volkov
 
26.08.12
07:02
(12) Для чего режим "ОбменДанными.Загрузка = Истина" и так понятно. Вопрос: кто, где его устанавливает? Вроде как УниверсальныйОбменДаннымиXML, но где, в каком месте? Отловить это мне не удалось... для одних документов он Истина, для других - Ложь. Прописывал в правилах обмена - игнорируется!?
14 Йохохо
 
26.08.12
10:45
понятно же, что все работает и не игнорируется. просто ты торопишься
в конвертации многое автоматом обернуто в попытку, надо быть аккуратнее
вероятно, если ты детально все опишешь - сам же найдешь косяк
15 Алистар
 
26.08.12
10:47
а может это свойство не работает если объект не включен ни в один план обмена
16 acsent
 
26.08.12
10:52
Окуеть зyатоки o_O
17 Voittamaton
 
27.08.12
08:26
Я был не прав - параметр "Объект.Обмен.ЗагрузкаДанных" устанавливается и срабатывает корректно. Дело было в том, что объект выгружался два раза, и при повторной выгрузке параметр равнялся "ложь".
Всем спасибо!
18 Voittamaton
 
27.08.12
09:36
Как я понял, процедура "ПередЗаписью" в модуле документа выполнялась один раз перед записью, и один раз перед проведением.
В связи с этим возникает вопрос: как выгрузить документ таким образом, чтобы он не проводился в базе-приёмнике, но чтобы переносились его движения по регистрам и пометка проведения равнялась истине?
19 Йохохо
 
27.08.12
10:04
(18) связи нету между посылкой и вопросом. чтобы не выполнялась 2 раза - найди галку не выгружать ляляля по ссылке, чтобы док целиком выгружался 1 раз
20 Voittamaton
 
27.08.12
10:49
(19) - объясню иначе. Я выгружаю только один документ. Загрузка = Истина срабатывает при записи документа. Если же документ проводится, тогда Загрузка автоматом ставится в "Ложь" и выполняются действия, которые не должны (по задумке) выполняться.
Флаг "Не выгружать объекты свойств источника по ссылкам" относится к подчинённым объектам. В своём же случае я выгружаю только один документ и на него не ссылаются другие, так как они попросту не выгружаются.
Я же хочу, чтобы не срабатывал код, который написан в модуле документа в процедуре "Перед записью". Как я понял, при проведении он будет срабатывать в любом случае (или я ошибаюсь?). И единственный способ - не проводить документ, а переносить его движения. Но как это сделать? :-(
21 Йохохо
 
27.08.12
12:05
в заказе УТ 10.3
Если ОбменДанными.Загрузка  Тогда
   Возврат;
КонецЕсли;
так что, если избавишься от двойной загрузки и так взлетит
22 Voittamaton
 
27.08.12
12:41
При выгрузке документа (только одного!) при первом выполнении (при записи) процедуры оператор заходит в цикл (так как ОбменДанными.Загрузка = Истина), а при втором выполнении (при проведении) процедуры оператор НЕ заходит в цикл (так как ОбменДанными.Загрузка = Истина). Какие есть варианты сделать ОбменДанными.Загружка = Истина при проведении? Если написать команду в ПКО, то всё равно при проведении параметр будет равен "Ложь".
23 Voittamaton
 
27.08.12
12:42
(22) - напутал немного.
При выгрузке документа (только одного!) при первом выполнении (при записи) процедуры оператор заходит в цикл (так как ОбменДанными.Загрузка = Истина), а при втором выполнении (при проведении) процедуры оператор НЕ заходит в цикл (так как ОбменДанными.Загрузка = ЛОЖЬ). Какие есть варианты сделать ОбменДанными.Загрузка = Истина при проведении? Если написать команду в ПКО, то всё равно при проведении параметр будет равен "Ложь".
24 kosts
 
27.08.12
12:58
(23) >Какие есть варианты сделать ОбменДанными.Загрузка = Истина при проведении?
Так нельзя. Это в нарушение логики работы конфигурации.
Мучился с такой же проблемой, перенести документ 1 к 1 со всеми движениями из базы в базу.
Получилось только переделкой модуля обмена и модулей документа.
Но на данный момент отказался от переноса 1 к 1, решил, что для нас лучше будет это проведение документа при загрузке. (И при не успешном проведении документ остается старый).
25 Voittamaton
 
27.08.12
13:06
(24) - хм... А на что тогда влияют наборы движений регистров накопления в КД в конвертации свойств? Ведь если бы движения не переносились вручную, а только создавались заново при проведении в базе-приёмнике, то какой смысл от этих строчек ("Набор движений регистра накопления") в конвертации свойств? Или я Вас неправильно понял?
26 kosts
 
27.08.12
13:17
(25) В этой конвертации столько заморочек, черт ногу сломит... :-(
Регистр сведений есть (видимо для переноса независимых регистров), регистра накоплений нет (тоже доделывал, что бы был, но сейчас вернул назад).
27 Йохохо
 
27.08.12
16:22
(23) РежимЗаписи = "Проведение";
28 GenV
 
27.08.12
16:29
(0) Если загружаешь через обработку "УниверсальныйОбменДаннымиXML", то документ проводиться, если указано (27), иначе переносится как есть вместе с движениями. Если через стандартный механизм обмена по правилам и плану обмена (это будет обработка "ОбменДаннымиXML"), то документ будет проводиться при загрузке, если выгружается статус проведения.
29 GenV
 
27.08.12
16:31
28+ ОбменДанными.Загрузка = Истина может повлиять на обход проверок в событиях и подписках, только если в них есть проверка на "ОбменДанными.Загрузка = Истина".
30 Voittamaton
 
28.08.12
06:19
(28) - спасибо за информацию!
31 Mikhail Volkov
 
31.08.12
05:06
Дык, в каком месте должно быть прописано "ОбменДанными.Загрузка = Истина", чтобы Истина была в ходе всей загрузки?
32 Mikhail Volkov
 
31.08.12
17:13
(30) Все же, где?
33 Voittamaton
 
04.09.12
12:53
(32) - я перепроверил режим "Загрузка = Истина" и пришёл к выводу, что он выставляется автоматически в "ложь" при записи объекта и в "истину" при проведении. Почему-то не работает команда "ОбменДанными.Загрузка = Истина" в ПКО.
34 Йохохо
 
04.09.12
12:57
(33) а вот эта работает
Объект.ОбменДанными.Загрузка = Истина;
35 Mikhail Volkov
 
05.09.12
06:44
(34) Это надо прописывать в ПКО каждого объекта, или где-то (где?) можно один раз прописать?
36 Voittamaton
 
05.09.12
06:53
(34) - именно это я и имел ввиду, может я что-то делаю не так? Прописывал в ПКО "При загрузке" и "После загрузки". Затем проверил значение параметра в процедуре "При записи" документа. Если только записывать документ, тогда параметр "Загрузка" равняется истине, если документ записывается и проводится, то сначала параметр равняется истине, затеи лжи.
37 Светлый Гений
 
05.09.12
06:54
нужно помещать эту проверку в процедуру ПриЗаписи в модуле объекта
38 Voittamaton
 
05.09.12
06:55
(37) - именно туда и поместил проверку параметра
39 Mikhail Volkov
 
05.09.12
06:58
(37) "ПриЗаписи" - не в КД, а конфе базы приемника, как у (21)?
40 Йохохо
 
05.09.12
08:05
!!!111
"первом выполнении (при записи) процедуры оператор заходит в цикл (так как ОбменДанными.Загрузка = Истина), а при втором выполнении (при проведении) процедуры оператор НЕ заходит в цикл (так как ОбменДанными.Загрузка = ЛОЖЬ)"
при первом выполнении ты выставил в коде ОбменДанными в Истину, но при втором выполнении нет. это не реквизит, это указание конфигурации, как себя вести, он не хранится в базе и не считывается из нее
Не надо проводить два раза, сделай все в первом проходе
41 Voittamaton
 
05.09.12
09:04
(40) - я выставлял значение в "ложь", а оператор всё равно заходит в цикл. Второй же проход цикла, видимо, выполнялся при проведении, потому что я специально проверял на одном документе и не выгружал его по ссылкам через другие элементы конфигурации.
42 Йохохо
 
05.09.12
09:43
что за цикл? "если обмен = истина тогда возврат"?)
в обработке загрузки есть код типа "записать если (модифицирован или НЕ записыватьтолькоизмененныеобъекты)"
вероятно первый раз записываешь ты кодом в обработчике, а второй раз обработка сама
43 Voittamaton
 
05.09.12
10:47
(42) - да, я имел ввиду конструкцию "Если ... Тогда" :-)
Хорошо, попробую установить этот параметр.
44 Йохохо
 
05.09.12
11:05
в форме записыватьтолькоизмененныеобъекты = ага
ПослеЗагрузки
если обработканепишиясамзапишу тогда
ОбъектМодифицирован = Ложь;
Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать(РежимЗаписиДокумента...);
конецесли

вроде так
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший