Вход | Регистрация
 

КД2 - Удаление Документа в Удаление ЗаписиРегистра

КД2 - Удаление Документа в Удаление ЗаписиРегистра
Я
   pishpish
 
28.01.19 - 09:16
Есть правила, где Источник Документ (точнее ПроизвольныйАлгоритм по документу), а Приемник РегистрСведенийЗапись.
Нужно теперь, чтобы при удалении документа записи также удалялись.
Как такую логику в правилах обмена реализовать?
 
 
   azt-yur
 
1 - 28.01.19 - 09:23
(0) Как вариант: в параметр через ПКС передавать ПометкуНаУдаление и после загрузки очищать набор записей если Истина.
   pishpish
 
2 - 28.01.19 - 09:30
(1) В источнике документ удаляется из базы полностью. По идее есть такая штука как УдалениеОбъекта.. но как ее соединить с удалением записи в регистре..
   Ёпрст
 
3 - 28.01.19 - 11:27
(0)
если в источнике есть хоть один план обмена с включенной авторегистрацией, все удяляемые ссылки будут в табличке изменений, пока их явно не прибьешь и не почистишь план обмена.
Тогда тупо запросом достаешь все ссылки и пихаешь в кд отдельным правилом, по которому в приёмнике удаляешь записи
   pishpish
 
4 - 28.01.19 - 15:44
(3) Запросом достаешь битые ссылки?
   pishpish
 
5 - 28.01.19 - 15:49
А кто скажет, допустим регистрируется к обмену НаборЗаписей регистра..
И происходит удаление набора в источнике..
Как для удаленного набора делать удаление в базе приемнике?
   pishpish
 
6 - 28.01.19 - 17:32
апну тему
   Ёпрст
 
7 - 28.01.19 - 17:35
(4) да. по ним регистрация есть в
   Ёпрст
 
8 - 28.01.19 - 17:36
(5) передать должен все измерения, чтоб там сделать отбор и запись
   pishpish
 
9 - 28.01.19 - 17:39
(8) Еще раз уточню.. если набор записей регистрирую и передаю, то можно также при удалении набора его удалять в приемнике?
   Ёпрст
 
10 - 28.01.19 - 17:42
(9) Твой регистр, есть хоть в одном плане обмена ?
При удалении, остаются записи по измерениям этого регистра в табличке изменений этого регистра.
Их вытаскиваешь запросом и пихаешь в кд. в приёмнике ловишь, ставишь отбор и удаляешь записи.
 
 Рекламное место пустует
   Ёпрст
 
11 - 28.01.19 - 17:43
это если выгрузка/загрузка по самодельным правилам
   pishpish
 
12 - 28.01.19 - 17:50
(10) Чтото я не пойму как в таблице изменений могут остаться удаленные ссылки. Ладно, надо проверить.
   pishpish
 
13 - 29.01.19 - 10:03
---
Народ, еще раз вопрос измененный -
Есть Документ и РегистрНакопления, документ делает запись в регистр.
Хочу переносить запись регистра накопления в приемник (а в приемнике превращать в запись регистра сведений).
При этом при удалении записи регистра удалять запись в приемнике.
Такая схема вообще возможна?
   Ёпрст
 
14 - 29.01.19 - 10:09
(13) возможна и работает
   pishpish
 
15 - 29.01.19 - 10:12
(14) Если взять регистр Накопления с авторегистрацией.
В таком случае в таблицу изменений будет попадать запись только по регистратору.
Если регистратор удалили, то что передавать то?
   pishpish
 
16 - 29.01.19 - 10:24
(14) Продолжаю тестить.. чето никак не пойму как устроена регистрация по Регистрам..
Еще упростим схему - Есть регистр сведений Независимый, он регистрируется в плане обмена по набору записей. Авторегистрация.
Допустим попала в ТаблицуИзменений запись по измерениям.

Теперь берем и удаляем запись в регистре.

В таком случае все равно таблице изменеий остается такая строка. Разве это правильно? При выгрузке она же полетит.
   Ёпрст
 
17 - 29.01.19 - 10:26
(15) Открой наконец консоль запросов и посмотри
   pishpish
 
18 - 29.01.19 - 10:30
(17) Все открыто.
Смотри.. создаем запись в регистре, в консоли в таблице изменений видим строку с набором измерений.
Затем удаляем строку из регистра.
В Таблице изменений строка осталась!
   Ёпрст
 
19 - 29.01.19 - 10:32
(18) пилять..
ВЫБРАТЬ
    ТвойРегистрИзменения.Измерение1,
    ТвойРегистрИзменения.Измерение2,
    ТвойРегистрИзменения.Измерение3
ИЗ
    РегистрСведений.ТвойРегистр.Изменения КАК ТвойРегистрИзменения
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТвойРегистр КАК ТвойРегистр
        ПО ТвойРегистр.Измерение1 = ТвойРегистрИзменения.Измерение1
            И ТвойРегистр.Измерение1 = ТвойРегистрИзменения.Измерение2
            И ТвойРегистр.Измерение1 = ТвойРегистрИзменения.Измерение3
ГДЕ
    ТвойРегистрИзменения.Узел = &Узел
    И ТвойРегистр.Измерение1 ЕСТЬ NULL

   Ёпрст
 
20 - 29.01.19 - 10:36
Получаешь из этого запроса все измерения, по которым записи в регистре уже нема, но в изменениях она осталась, пихаешь ЭТО в КД... далее руками делаешь удаление этих записей из таблички изменений регистра:

                    Пока Выборка.Следующий() Цикл
                        НаборЗаписей = РегистрыСведений.ТвойРегистр.СоздатьНаборЗаписей();
                          НаборЗаписей.Отбор.Измерение1.Установить(Выборка.Измерение1);
                          НаборЗаписей.Отбор.Измерение2.Установить(Выборка.Измерение2);
                          НаборЗаписей.Отбор.Измерение3.Установить(Выборка.Измерение3);
                        НаборЗаписей.Прочитать();
                        ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена,НаборЗаписей);
                    КонецЦикла;

   pishpish
 
21 - 29.01.19 - 11:17
(19) Спасибо! как такой факт получить теперь понятно.
Все еще не совсем понимаю как провернуть это через Стандартную выборку, когда на вход подается запись регистра.
   Альбатрос
 
22 - 29.01.19 - 11:25
(21) Сделать не стандартную?
   Ёпрст
 
23 - 29.01.19 - 11:29
(21) дык делай отдельным пвд. там свой запрос на получение записей и всё.
   pishpish
 
24 - 29.01.19 - 11:35
(22) Когда в рамках плана обмена выгружается, то там возможна только Стандартная выгрузка. Произвольный алгоритм игнорится.
   pishpish
 
25 - 29.01.19 - 11:39
(23) Я с темы на тему прыгаю сейчас.. видимо принцип все таки не понимаю.
Может еще раз подскажете в чем у меня ошибка в рассуждениях.

1. У меня есть регистр накопления, он регается в плане обмена, в таблице изменений конечно же сидит только регистратор.
2. Далее такая запись переносится в регистр сведений в базе приемник.
--
Я хочу решить следующую проблему - при удаление записи в регистре накопления в базе источника, каким то образом затирать также перенесенную запись в регистре сведений.
Не понимаю как связать эти таблицы, строки, понятия.
   Ёпрст
 
26 - 29.01.19 - 12:18
(25) ну и получай запросм свой регистратор и удаляй все записи по нему в рег сведений в приёмнике
   Ёпрст
 
27 - 29.01.19 - 12:19
записи можешь выгружать через выгрузитьПоПравилу, которое воткнуть в ПередВыгрузкой в ПКО документа, который эту запись делает
   pishpish
 
28 - 29.01.19 - 12:22
(27) А в том и дело, что я документ не выгружаю. Я только набор записей регистра накопления подаю на выгрузку.

Кроме того, у меня документ может быть удален непосредственно.

В таком случае в регистраторе таблицы изменений будет сидеть <Объект не найден> (28:a20400155d28b42411e923a3e95d9af8)
   Ёпрст
 
29 - 29.01.19 - 12:23
(28) ну и что, ссылка то всё равно есть
   pishpish
 
30 - 29.01.19 - 12:26
(29) Я примерно идею понял.
Она подразумевает что на стороне приемника у меня ссылка хранится. Видимо без этого никак. Придется хранить ссылку в строковом представлении и по переданному значению битой находить и удалять записи в регистре.
   Ёпрст
 
31 - 29.01.19 - 12:28
(30) у тя ссылка есть всегда и в источнике. Твой <объект не найден> это просто её представление, сама ссылка никуда не делась. передавай её и усё.
   pishpish
 
32 - 29.01.19 - 12:32
(31) Допустим у меня есть ссылка и по этому отбору я хочу удалить записи в регистре сведений.
Там видимо нужно использовать трюки с ВыгрузитьРегистр().. а его в УниверсальнойОбработкаЗагрузкиДанныхХМЛ нет..

или я чето туплю.. что обеспечит мне очищение набора по ссылке?
   pishpish
 
33 - 29.01.19 - 12:52
(30) Я просто где еще запутался.. Ведь при удалении ссылок задействуется такая штука как УдалениеОбъекта(Ссылка) и такая хрень как то может передаваться через план обмена. Тут система сама работает.
А с регистром у меня получается какое то трюкачество, фактически через битые ссылки самому понимать что к чему.
 
 
   Ёпрст
 
34 - 29.01.19 - 13:30
(32) чет-то у вас всё время показания меняются... то документ в регистр, то регитрв регистр, то обмен по плану обмена, теперь вот обработка универсальнаяВыгрузка..
   pishpish
 
35 - 29.01.19 - 13:39
Запись регистра Накопления в запись регистра Сведений.
При этом не хочу вводить сущность документ в приемник, там придется хранить строковое представление гуида.
Обмен по плану обмена, но пока тестю в УниверсальнойВыгрузкеХМЛ.
Вот.
   Ёпрст
 
36 - 29.01.19 - 13:41
Тогда делаешь ПКО РегистрНакопления.Нужный - РегистрСведения.Запись

если через планы обмена, то при распроведении дока, будет само выгружаться сведения об удаленной записи, там тэг ПустойНабор="true" будет в файле
   Ёпрст
 
37 - 29.01.19 - 13:42
и оно само будет удалять записи в рег сведений при загрузке.
Вообще делать ничего спецом не нужно, и запрос тоже не нужен
   pishpish
 
38 - 29.01.19 - 13:52
(37) Что прям в ПВД когда в объекте выборке стоит РегистрНакаоленияЗапись и прилетает Регистратор <Объект не найден> (28:a20400155d28b42411e923a3e95d9af8).. то как то может опустеть набор в приемнике регистра сведений?

У меня каша сейчас в голове и проверить не могу.

Я понимаю схему когда приезжает битая ссылка и я через ВыгрузитьРегистр задаю отбор на мой битый гуид. В таком случае предполагаю что очистится.

А твоя схему чет не понял, чтоб прям автоматически.
   Ёпрст
 
39 - 29.01.19 - 13:58
   Ёпрст
 
40 - 29.01.19 - 14:00
B в ПВД тоже добавь свой регистр.
Далее выгружай по плану обмена.
Для проверки, проводишь документ и отменяешь проведение, выгружаешь, смотришь файло обмена.
Там будет запись  с пустым набором. по нему твоя запись в рег сведений сама очистится
   pishpish
 
41 - 29.01.19 - 14:01
(40) Звучит хорошо.. а что это за правила?
   Ёпрст
 
42 - 29.01.19 - 14:04
(41) Это пример, как сделать вам
   pishpish
 
43 - 29.01.19 - 14:08
(42) Хорошо, спасибо! попробую.. думал мало ли может в типовых гдето делают так
   Ёпрст
 
44 - 29.01.19 - 14:11
Типовые правила не выгружают регистр накопления как есть (отдельным ПКО) ибо на стороне приёмника, что в ОбменДаннымиXML что в УниверсальнойОбработкиXML нет кода обработки регистрНакопления.запись, есть только РегистрСведений.Запись.
Хотя данные и выгружаются
   pishpish
 
45 - 29.01.19 - 14:17
Подожди ка.. Ты сейчас убил меня)
А как тогда то? У меня БСП нет если что..

Я планировал выкрутиться УнивесальнойОбработкойХМЛ, ну максимум ОбменДаннымиХМЛ из старых типовых..
   Ёпрст
 
46 - 29.01.19 - 14:20
(45) ёёё.. ты читать то будешь ?
У тебя будет всё хорошо, ибо тебе загружать нужно Регсведений.
   pishpish
 
47 - 29.01.19 - 14:23
(46) ААА ок.. ок.. фуфь
   pishpish
 
48 - 29.01.19 - 15:01
(46) А я вот еще подумал.. если по регистру накопления в плане обмена все равно сидит Регистратор в таблице изменений..
То смысл мне эту запись регать, может тогда сразу сам документ и регистрировать. Там уже если нужно от него и влезу в регистр.
   pishpish
 
49 - 29.01.19 - 16:00
(46) Кстати, я провел небольшой тест -
Создал регистр накопления с авторегистрацией. При проведении значит в план обмена он регается, далее из простейших правил РН - РС через план обмена ну чтото выгружает.
Далее если удалить док из базы, то в правилах вобоще перестает выгружать.
 
 Рекламное место пустует
   pishpish
 
50 - 29.01.19 - 16:01
(46) То есть
Для проверки, проводишь документ и отменяешь проведение, выгружаешь, смотришь файло обмена.
Там будет запись  с пустым набором. по нему твоя запись в рег сведений сама очистится

- не прокатило
   Ёпрст
 
51 - 29.01.19 - 16:02
(49) а нафига ты его удаляешь ? Просто распроведи
   Ёпрст
 
52 - 29.01.19 - 16:02
(50) отмени проведение<> удали документ непосредственно
   Ёпрст
 
53 - 29.01.19 - 16:03
Битые ссылки, возможно, не попадают автоматом в эти правила. Тогда нужно для них писать запрос
   Ёпрст
 
54 - 29.01.19 - 16:04
Если обычная отмена проведения - то летит пустой набор в выгрузке
   pishpish
 
55 - 29.01.19 - 16:11
(54) К сожалению при отмене пустой набор не летит.
Не получилось.
   Ёпрст
 
56 - 29.01.19 - 16:43
Тока проверил - всё летит.
   Ёпрст
 
57 - 29.01.19 - 16:44
НаборЗаписейРегистра Нпп="1" Тип="РегистрНакопленияЗапись.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов" ИмяПравила="ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов" ПустойНабор="true">
    <Отбор>
        <Свойство Имя="Регистратор" Тип="ДокументСсылка.РеализацияТоваровУслуг"><Ссылка>
    <Свойство Имя="{КлючПоискаВИБИсточнике}">
        <Значение>{"#",6709bdcb-b7c6-4f18-823d-d1b66c0ffbd0,558:94f6005056851d4111e922dece4c5983}</Значение>

    </Свойство>
    <Свойство Имя="{ИмяТипаВИБИсточнике}">
        <Значение>ДокументСсылка.РеализацияТоваровУслуг</Значение>
    </Свойство>
    <Свойство Имя="{УникальныйИдентификатор}">
        <Значение>ce4c5983-22de-11e9-94f6-005056851d41</Значение>
    </Свойство>
    <Свойство Имя="Дата">
        <Значение>2019-01-29T12:04:16</Значение>
   Ёпрст
 
58 - 29.01.19 - 16:44
вот такая запись в файле обмена
   ам794123
 
59 - 29.01.19 - 16:55
(0) посмотри в каких нибудь типовых правилах обработчик _ПриПолученииИнформацииОбУдалении и сделай аналогично
   pishpish
 
60 - 29.01.19 - 22:22
(57) У меня все еще не получается.
Давай опять на более простом примере. Я вот сейчас тестил.
Смотри, все происходит по плану обмена.
РегистрСведений рассмотрим как более простой пример.

Запись передалется в запись, ок.
Теперь в источнике я удаляю запись, в этот момент в таблице изменений продолжают сидеть значения как в примере из (19). И допустим произвольной выборкой такой можно собрать.

Но по плану обмену, по узлу, по стандартной выборке ведь он даже не войдет выборку по регистру в таком случае.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует