|
КД2: удаление записей набора регистра сведений
| ☑ |
0
Olga O
05.03.25
✎
14:20
|
Всем доброго дня! У меня не самый большой опыт в КД2.
Задача: в базе-источнике есть документ. При его проведении из базы-источника должен выгрузиться не сам этот документ, а набор данных, получаемый запросом. При загрузке в базу-приёмник эти данные записываются в регистр сведений (непериодический, независимый).
Передаю данные по одной записи (если их нет, ничего не передаётся). В результате добавить/изменить конкретную запись регистра получается, но они не удаляются.
Может быть, есть идеи или примеры, как загружать сразу весь набор записей регистра, в т.ч. пустой?
Документ-источник может быть изменён или помечен на удаление, и соответствующий ему набор записей регистра в приёмнике может измениться или стать пустым. Но по моим правилам все записи, не попавшие в отбор при загрузке, остаются без изменений.
|
|
1
azt-yur
05.03.25
✎
15:08
|
Создайте правило "УдалениеЗаписейРегистра" с выгрузкой свойств по измерениям регистра. В обработчике После загрузки добавьте подобный текст:
НЗ = РегистрыСведений.ИмяРегистра.СоздатьНаборЗаписей();
НЗ.Отбор.Измерение1.Установить(Объект.Измерение1);
НЗ.Отбор.Измерение2.Установить(Объект.Измерение2);
НЗ.Записать();
Отказ = Истина;
Перед отправкой основных записей по документу отправляйте это удаление по основным измерениям.
Также в обработчике конвертации При получении удаления документа отправляйте это же удаление.
|
|
2
Fedor-1971
05.03.25
✎
15:36
|
(0) Сложи данные для регистра в параметр документа и в событии после загрузки обновляй в своём регистре сведений
|
|
3
Fedor-1971
05.03.25
✎
16:06
|
2+ примерно так:
1. В ПКС называешь приёмник ДанныеРС и ставишь переключатель "Передавать данные в параметр"
2. В Перед выгрузкой делаешь структуру с нужными полями для РС и свойством "ПростоОчистить"
3. В ПКО после загрузки
Если ПараметрыОбъекта <> Неопределено Тогда
чтоТамЕсть = ПараметрыОбъекта["ДанныеРС"];
Если ЧтоТамЕсть.ПростоОчистить тогда
.. тут тупо чистим регистр ...
Иначе
.. тут просто заполняем запись регистра (если в нём использована ссылка на Документ, сначала запиши оный) ..
КонецЕсли;
Как-то так, поиграйся
|
|
4
Волшебник
05.03.25
✎
16:12
|
Каждый программист 1С хотя бы раз в своей карьере должен удалить важный регистр сведений.
|
|
5
Hawk_1c
05.03.25
✎
16:31
|
(4) С помощью обмена? Или достаточно прочитать без отбора и записать?
|
|
6
Волшебник
05.03.25
✎
16:32
|
(5) Ну вот как в (1)
Есть попытка установить отбор, но нет проверки, что он установился.
|
|
7
Fedor-1971
05.03.25
✎
16:46
|
(6) Не, там нормально, потрутся записи в соответствии с отбором, это эквивалентно:
НЗ.Прочитать(); // просто, так более контролируемо
НЗ.Очистить();
только
НЗ.Записать(Истина);
|
|
8
Волшебник
05.03.25
✎
17:15
|
(7) Если типы не совпадают, то потрётся гораздо больше
|
|
9
Fedor-1971
05.03.25
✎
17:31
|
(8) Это вряд ли, там сравнение на равенство, и может потереться больше записей, которые с составным типом и в Измерение передали неподходящий тип, т.е. по факту отбор будет Измерение = Неопределено, но, обычно, Измерения стараются заполнять
|
|
10
Волшебник
05.03.25
✎
17:48
|
(9) Ой, кому Вы будете рассказывать?..
|
|
11
Olga O
06.03.25
✎
10:45
|
(1) Спасибо большое, сделала по этому алгоритму, вроде всё получилось!
|
|
12
Olga O
06.03.25
✎
10:46
|
Благодарю всех за участие!
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший