Имя: Пароль:
1C
1С v8
v8: Как зарегистрировать в обмене удаленный объект
0 Naivety_Friend
 
01.08.14
18:13
Ситуация такая: один документ чек удаляют из базы (при этом регистрируются его изменения в плане обмена), затем очищается регистр изменений объектов в плане обмена. Затем необходимо заново зарегестрировать этот объект. Как это сделать?
Использую код ниже, но никакой реакции:
УИД = "72604200-8048-a256-292b-bf8d11452e42";
Узел = ПланыОбмена.КБД.НайтиПоКоду("01");
Ссылка=Документы.Чек.ПолучитьСсылку(Новый УникальныйИдентификатор(УИД));
Удаление = Новый УдалениеОбъекта(Ссылка);
Удаление.Записать();
ПланыОбмена.ЗарегистрироватьИзменения(Узел, Удаление);
1 acsent
 
01.08.14
18:16
А зачем записать? ведь это же само удаление
2 Kupogun
 
01.08.14
18:24
Удаление.Записать(); попробуй убрать.
после этой строчки уже нечего регистрировать
3 Naivety_Friend
 
01.08.14
18:33
(1) (2) Убрал, не помогло.
4 Naivety_Friend
 
01.08.14
18:34
(2) В том и суть, что регистрировать уже как бы и "нечего", т.к. документ удалили вчера, а зарегестрировать это удаление мне нужно сегодня.
5 Rlogin
 
01.08.14
19:22
Зарегистрируй его в переферийной базе, он придет к тебе. ПОметишь его на удалени и он разойдется по базам.
6 Naivety_Friend
 
01.08.14
19:36
(5) Как-то бессмысленно! Мне же не нужен помеченный на удаление объект. Мне нужно, чтобы при обмене он удалился из перифирийной базы, т.к. он удален в главной.
7 alle68
 
01.08.14
21:39
(6) Свойство "ОбменДанными" объекта "Удаление" не поможет?
8 Naivety_Friend
 
02.08.14
02:33
(7) а что вы предлогаете там задать? Узел в свойстве "получатель"?
9 alle68
 
02.08.14
03:37
(8) Да, получателей заполнить.
10 Defender aka LINN
 
02.08.14
05:12
(0) Ссылку регистрируй
11 Rlogin
 
02.08.14
07:32
(6) Этот способ и позволит удалить обмен а не плясать с бубном.
12 Naivety_Friend
 
02.08.14
11:10
(10) битую?! Пробовал. Увы, не сработало...
13 Defender aka LINN
 
02.08.14
12:15
(12) Тогда самое время откинуться на кушетку и спросить - а в чем выражается это самое "не сработало"? Зарегистрировать удаление и выгрузить удаление куда-нибудь - это какбе разные вещи.
14 Naivety_Friend
 
02.08.14
17:37
(13) и в чем разница?!
Итовая цель: удалить в перифирийной базе тот объект, который удален в основной при помощи планов обмена. Логично, что для этого нужно зарегестрировать этот объект.

Теперь что значит "не регистрируется": при удалении документа в регистр изменений попадает битая ссылка, т.е. если я по регистру Документ.Чек.Изменения сделаю запрос - получу такую строку. А когда пройдут обмены - документ удалится и в перифирийной базе. В моем случае документ удален и в регистре изменений нет записи - ее очистил другой код, который очищает полностью регистр изменений (сразу скажу, учитывая специфику задачи, я не могу в этой части что-то менять). И мне нужно добавить ее обратно неосоедственно перед тем, как запустятся обмены: т.е. у меня есть уид этого объекта и, соответсвенно, битая ссылка, которая должна попасть в регистр изменений перед обменами.
Надеюсь достаточно разжевал...

Есть решение, которое пока не реализовал, но придумал - создавать такой объект заново, записывать его и удалять тут же. Слишком криво и долго и потому надеюсь, что кто-то подскажет более простой способ!
15 Naivety_Friend
 
02.08.14
19:26
(9) Глянул в синтаксис-помощнике - свойство Обмен Данными - только чтение. При этом в отладке его значение вообще почему-то нельзя прочитать - пишет "ошибка чтения значения".
16 NcSteel
 
02.08.14
19:43
На крайняк вручную в пакет добавь узел удаления, там пару строк....

Либо создай объект по ГУИДУ и удали его.
17 NcSteel
 
02.08.14
19:44
(15) Так как он доступен у объекта.
18 Лефмихалыч
 
02.08.14
21:35
Я не понял, чего автор добивается. Зачем удалять, очищать регистрацию и регистрировать удаление отдельно?
19 Naivety_Friend
 
02.08.14
22:18
(18) "Зачем удалять, очищать регистрацию и регистрировать удаление отдельно".
Ну я ж не буду вам рассказывать весь проект! :)
1. "Зачем удалять, очищать регистрацию" - это один бизнес-процесс.
2. "регистрировать удаление отдельно" - это бизнес-процесс, который нужно реализовать мне.
Вопрос - как мне сделать второй пункт. Складывается ощущение, что 1с просто не предусмотрели возможность зарегестрировать к изменению удаленный объект.

PS Возможно (не проверял, т.к. не мой случай, но все же, возможно для вас это станет понятней) и даже скорей всего такая ситуация возникнет, если отключить автоматическую регистрацию объектов и удалить объект: регистрации удаления нет, а из перифирийной базы объект также нужно удалить - но тогда тем более странно, что 1с не предусмотрело такой случай.
20 Naivety_Friend
 
02.08.14
22:23
(16) Вы имеете ввидду вносить изменения в XML? Возможно, хотя и не удобно.

Как раз пока так и решил - создаю объект по ГУИДу и удаляю его. Но как-то криво и, что хуже всего, долго. Долго потому что нельзя просто создать объект - нужно заполнить обязательные для заполнения реквизиты и только потом записать и удалить. Если потом надо будет переносить этот механизм на другой документ - нужно будет опять прописывать всен обязательные реквизиты. А если потом добавятся новые обязательные?! Ну в общем - как временное решение подошло, но, мне кажется, должен быть более адекватный способ.
21 Naivety_Friend
 
02.08.14
22:23
(17) К сожалению не понял Вашей мысли.
22 RomanYS
 
02.08.14
22:24
(0) узел то какой указываешь?
23 RomanYS
 
02.08.14
22:27
Что показывает обработка регистрация изменений (или запрос по изменениям) после выполнения (0)?
24 Лефмихалыч
 
02.08.14
22:44
а какая полосатая религия мешает автору и чего именно добиться, я так и не допер. Регистрация удаления объекта работает - проверено многократно, какие могут быть с жтим проболемы, не догоняю
25 ilya_i
 
02.08.14
23:00
по удалению не подскажу, но при создании указать ОбменДанными.Загрузка=Истина, и глядишь скорость создания повыситься и обязательные реквизиты не обязательны. а вообще правильный вопрос уже прозвучал "что значит не срабатывает?"
26 Defender aka LINN
 
03.08.14
05:53
(14) Большая разница. Может у тебя в базе тупо код в модуле плана обмена имеется, который УдалениеОбъекта не выгружает. И хоть обрегистрируйся.
При выгрузке платформа проверяет наличие объекта по ссылке, и если он есть - выгружается объект, если его нет - выгружается УдалениеОбъекта, все просто как мычание.
27 Naivety_Friend
 
03.08.14
11:36
(23) В том и вся суть проблемы, что запрос по регистру изменений показывает...ничего! Он просто пустой после выполнения кода в (0)
28 Naivety_Friend
 
03.08.14
11:37
(22) Перифирийный
29 Naivety_Friend
 
03.08.14
11:38
(24) Ну так если у вас работает, почему бы мне не написать код по которому у вас работает регистрация удаленного объекта?
30 Naivety_Friend
 
03.08.14
11:40
(26) У меня проблемы именно с регистрацией (что кстати еще в теме описано). В модулях планов обмена в принципе пусто, но это не имеет никакого отношения к вопросу, т.к. нужно именно ЗАРЕГЕСТРИРОВАТЬ - дальше все норм отрабатывает.
31 Лефмихалыч
 
03.08.14
11:43
(27) подозреваю, что где-то есть код, который мешает стандартному проведению платформы. Изучай подписки и прочие приЗаписи
32 Лефмихалыч
 
03.08.14
11:44
самое простое - включить замер производительности в отладчике, выполнить код (0) и потом просто посмотреть, что выполнялось, выключи замер
33 Defender aka LINN
 
03.08.14
14:32
(30) Пруф или GTFO. Помешать зарегистрировать объект не способно практически ничего.
34 Naivety_Friend
 
03.08.14
15:45
(31) При чем здесь проведение?
35 Naivety_Friend
 
03.08.14
16:26
(33) Вот вам пруф: https://www.dropbox.com/s/4jc8lbvulkoqtfw/1Cv8_пример_регистации_битой_ссылки.dt

Спецом написал на чистой конфигурации. Версия 8.3.4.408.
36 Naivety_Friend
 
03.08.14
16:29
(35) Кнопки в обработке жмакать в порядке нумерации - при каждом нажатии в таблицу выгружается из запроса по регистру изменений.
37 Лефмихалыч
 
03.08.14
18:21
(34) а пРоведение-то и правда ни при чем. У вас там все такие наблюдательные или только вы?

(35) ваш пруф - фуфло:
http://i.imgur.com/GEGpU6t.png
38 alle68
 
03.08.14
22:59
(36) 8.2.19.106. Оба способа регистрируют.
Узел    Номер сообщения    Ссылка
2        <Объект не найден> (9:86d5000c2907253711e41b087fc88423)
М.б., глюк движка?
39 Naivety_Friend
 
03.08.14
23:58
(37) Я смотрю, вы такой умный - наверняка знаете решение.
По существу: А вы в какую версию 1с базу грузите? Точно полностью файл докачали? Я скачал и загрузил в базу - проблем не возникло. ЗЫ Возьмите еще и cf до кучи: https://www.dropbox.com/s/czpb9vwah45wzr4/1Cv8_registracia_ssylki.cf
Но для cf-ки надо будет добавить узел с кодом 2.
40 Naivety_Friend
 
04.08.14
00:00
(38) Вот это да... Может, в принципе и  глюк движка... На всякий случай уточню: вы вначале нажали на кнопку 2 (очистили регистр) и тут же нажали на 3.1??? И после этого у вас отобразилась строка в таблице?
41 Naivety_Friend
 
04.08.14
00:05
(38) Проверил, действительно. На 8.2.18.109 отрабатывает регистрация.
На 8.2.19.83 и на 8.3.4.408 - нет.
И у Вас вот отработало на 8.2.19.106 (у меня нет этой версии, потому сам проверить не могу).

Через раз, что называется! ((((
Что могу сказать, 1с "рулит", а вопрос закрыт...
Всем спасибо...
PS dt и cf еще некоторое время оставлю в дропбоксе, вдруг кому захочется убедиться - через пару дней грохну.
42 Bober
 
04.08.14
10:23
(41) не смог скачать базу, но всё всегда работает есть сделать так:
УИД = "72604200-8048-a256-292b-bf8d11452e42";
Узел = ПланыОбмена.КБД.НайтиПоКоду("01");
Ссылка=Документы.Чек.ПолучитьСсылку(Новый УникальныйИдентификатор(УИД));
ПланыОбмена.ЗарегистрироватьИзменения(Узел, Ссылка);

УдалениеОбъекта он немного для других целей.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан