Имя: Пароль:
1C
1С v8
КД2. Изменение источника после выгрузки
0 withoutname
 
27.09.22
15:11
Собственно вопрос в теме

Нашел похожую тему, КД2. Изменение источника после выгрузки но у меня не прокатил данный способ. Пишет "Не удалось записать <Документ>"
1 withoutname
 
27.09.22
15:11
Добавлю, нам данный реквизит нужен для блокировки документа от изменения )
2 withoutname
 
27.09.22
17:43
(0) Разобрался, у меня выдает ошибку, т.к. этот реквизит блокирует изменение )))
Добавил

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

и все получилось
3 withoutname
 
28.09.22
12:30
Еще пришлось в Подписке на событие проверять значение этого реквизита, иначе документ циклически регистрировался к выгрузке
4 mistеr
 
28.09.22
18:38
Следующий шаг в правильном направлении — блокировать не при выгрузке, а после успешной загрузки. :)
5 withoutname
 
28.09.22
19:50
(4) было бы круто, как это сделать?
6 Aleksey
 
28.09.22
20:34
(0) Я бы через глобальный обработчик это делал бы
добавил параметр СписокВсехВыгруженныхОбъектов инициализировал бы его в "После загрузки правил обмена"
Далее в глобальном "После выгрузки объекта" проверял что это документ и добавлял бы его в параметр (Параметры.СписокВсехВыгруженныхОбъектов.Добавить(Объект));

И уже после того как выгрузка успешно завершена т.е. в глобальном модуле "После выгрузки данных" уже бы бежал бы по документам и ставил галочки.

По крайне мере если выгрузка прервется (вылетит 1с, нарвется на ошибки) в твоем случае ты потеряешь часть данных (так как часть документов уже будет с галкой "выгружен"), а в этом случае ты просто повторно выгрузишь
7 Aleksey
 
28.09.22
20:39
(5) Да как удобно так и делай, к примеру
в После загрузки объекта пиши в текстовый файл реквизиты объекта
в После загрузки данных отправляй этот файл куда нибудь (например на фтп)

а уже при следующей выгрузки в После загрузки правил обмена считывай этот файл, ищи документы и меняй реквизиты

Если конечно не боишься коллизии, когда еще не загрузили подтверждение, но нужно повторно выгрузить документ. Тогда у тебя перед загрузкой флаг что нужно выгружать будет сброшен и обновленные данные не уйдут в приемник
8 mistеr
 
29.09.22
07:52
(7) Зачем городить свой костыльный механизм, когда есть штатный?
9 withoutname
 
29.09.22
16:04
(8) направь в нужную сторону)
10 withoutname
 
29.09.22
16:29
mikecool нет, документ создается не проведенный, пользователь заполнит имеющейся номенклатурой
11 withoutname
 
29.09.22
16:30
п.с. PR я так понимаю тут же задать вопрос? )
12 withoutname
 
29.09.22
16:32
Задача:
В базе Источник у Номенклатуры есть "признак" (булево), если Истина Номенклатуру надо создавать в Приемнике, если Ложь не создавать.
В последствии по ней (пользователь проставит соответствие)

Пробовал в ПКО ПередВыгрузкой отсеивать, но тогда Номенклатура совсем не выгружается.

Как это организовать?

Думаю надо в ПКС передать этот реквизит в Параметр, но как (и где) его потом обработать?
13 mistеr
 
29.09.22
16:53
(9) Передавай реквизит таким же обменом в обратную сторону
14 mistеr
 
29.09.22
16:54
(12) Да, в параметр. Обработай при загрузке.
15 withoutname
 
29.09.22
16:54
(13) в Приемнике нет этого реквизита
16 withoutname
 
29.09.22
17:43
(14) не нашел нужного параметра
17 mistеr
 
29.09.22
18:33
(12) Я первый раз невнимательно прочитал задачу. А чем не устраивает вариант "совсем не выгружается"?
18 mistеr
 
29.09.22
18:33
(15) Это не мешает передать в обмен что угодно.
19 withoutname
 
29.09.22
19:08
(17) нужно выгрузить УИД, чтобы подставилась сопоставленная номенклатура
(16) обработал в ПКО ПослеЗагрузки, странно, но почему то там есть ПараметрыОбъекта )
20 withoutname
 
29.09.22
19:10
Еще одна задачка )
Как писать в Лог сообщение об ошибке?
Например: если документ проведен в Источнике, запретить его перезаписывать (это сделал) и в логе сообщать, что такой то документ не перезаписан
21 mistеr
 
29.09.22
19:33
(20) О каком логе речь?
22 withoutname
 
29.09.22
19:45
(21) https://i.imgur.com/OluFxZw.png

Там где в колонке предупреждение, нажимаешь и показываются
23 PR
 
29.09.22
19:50
(11) Да не, зачем, хреначь на каждый свой вопрос новую ветку
Пусть главная страница полностью забьется вопросами по КД, че
24 withoutname
 
29.09.22
20:03
(23) зато потом быстрым поиском проще искать будет )
25 withoutname
 
29.09.22
20:20
(20) нашел следующие методы, завтра буду разбираться )
Обработка.КонвертацияОбъектовИБ.ЗаписатьВПротоколВыполнения()
РС.РезультатыОбменаДанными.<...>
26 PR
 
29.09.22
20:33
(24) Это вряд ли, у тебя же нет доступа к удаленным веткам
27 withoutname
 
30.09.22
08:23
(26) да я не про это, я про то если бы ветка осталась)
28 withoutname
 
30.09.22
16:50
В ПКО документа в методе ПослеЗагрузки прописал

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

Объект.Ответственный = Пользователи.ТекущийПользователь();


Но контекст выполняется на Источнике, и соответственно добавляется в РС.РезультатыОбменаДанными Источника...
29 withoutname
 
03.10.22
10:03
ап
30 withoutname
 
04.10.22
11:38
(28) выяснил что запись в РС все таки делается в базе Приемнике, но не проставляется УзелДляОбмена, если его проставить, запись появляется в форме Предупреждений
31 withoutname
 
04.10.22
15:55
(28) итоговый код

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

Объект.Ответственный = Пользователи.ТекущийПользователь();
32 withoutname
 
12.12.22
18:57
Дополню
Корректнее сделать так

Если ОбъектНайден Тогда
    СсылкаДляПереходаПриВозникновенииОшибки = Объект.Ссылка;
Иначе
    СсылкаДляПереходаПриВозникновенииОшибки = Объект.ПолучитьСсылкуНового();
КонецЕсли;
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.