Имя: Пароль:
1C
 
КД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
Благодарю всех за участие!
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс