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

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

В таком случае все равно таблице изменеий остается такая строка. Разве это правильно? При выгрузке она же полетит.
17 Ёпрст
 
29.01.19
10:26
(15) Открой наконец консоль запросов и посмотри
18 pishpish
 
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);
                        НаборЗаписей.Прочитать();
                        ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена,НаборЗаписей);
                    КонецЦикла;
21 pishpish
 
29.01.19
11:17
(19) Спасибо! как такой факт получить теперь понятно.
Все еще не совсем понимаю как провернуть это через Стандартную выборку, когда на вход подается запись регистра.
22 Альбатрос
 
29.01.19
11:25
(21) Сделать не стандартную?
23 Ёпрст
 
29.01.19
11:29
(21) дык делай отдельным пвд. там свой запрос на получение записей и всё.
24 pishpish
 
29.01.19
11:35
(22) Когда в рамках плана обмена выгружается, то там возможна только Стандартная выгрузка. Произвольный алгоритм игнорится.
25 pishpish
 
29.01.19
11:39
(23) Я с темы на тему прыгаю сейчас.. видимо принцип все таки не понимаю.
Может еще раз подскажете в чем у меня ошибка в рассуждениях.

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

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

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

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

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

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

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

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

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

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

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