Удаление записей регистратора в подчиненном регистратору регистре сведений

1. ilnur75 07.06.17 19:41 Сейчас в теме
платформа учебная 8.3 .
что имеется:
документ Реализация записывает в РС :
измерение - услуга, контрагент, Документ(ссылку),
ресурс - Дата (остается пустой)

документ Планирование заполняет по кнопке Выполнить данные указанные выше , и вручную заполняется Дата.

При проведении дока Планирование записи дока Реализации становятся неактивными, таким образом из-за того что дата не заполнена , в будущий запрос эти записи уже не попадают при работе с доком Планирование.

Сделал в модуле объекта дока Реализации процедуру:



Но в итоге удаляются все записи регистратора Планирование, даже если выбрать отмену проведения только одного из доков Реализация,.т.е. если есть записи регистратора по докам План1, План2 и т.д. то все они удаляются из РС. Конечно признак проведения с них тоже снимается.

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

Профессионалы отзовитесь, помогите учащемуся.
По теме из базы знаний
Найденные решения
3. Dream_kz 129 07.06.17 20:04 Сейчас в теме
(2) Ну если в РС есть измерение Документ, то тогда легко:

Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ПланированиеОказанияУслугСрезПоследних.Регистратор
        |ИЗ
        |    РегистрСведений.ПланированиеОказанияУслуг.СрезПоследних(,Документ = &Документ) КАК ПланированиеОказанияУслугСрезПоследних
        |ГДЕ
        |    ПланированиеОказанияУслугСрезПоследних.Регистратор Ссылка Документ.ПланированиеОказанияУслуг";
    
    Запрос.УстановитьПараметр("Документ", Ссылка);
Показать
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. ilnur75 07.06.17 19:50 Сейчас в теме
что-то код процедуры не загрузился
вот такая процедура:

Процедура ОбработкаУдаленияПроведения(Отказ)
	// отмена проведения докПродажи
	// должна приводить  к отмене проведения докаПланирование
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ПланированиеОказанияУслугСрезПоследних.Регистратор
		|ИЗ
		|	РегистрСведений.ПланированиеОказанияУслуг.СрезПоследних КАК ПланированиеОказанияУслугСрезПоследних
		|ГДЕ
		|	ТИПЗНАЧЕНИЯ(ПланированиеОказанияУслугСрезПоследних.Регистратор) = ТИП(Документ.ПланированиеОказанияУслуг)";
	
	Запрос.УстановитьПараметр("Регистратор", Документы.ПланированиеОказанияУслуг);
	
	Результат = Запрос.Выполнить().Выгрузить();
	
	Для каждого ЭлементРезультата Из Результат Цикл
		ДокументОбъект = ЭлементРезультата.регистратор.ПолучитьОбъект();
		ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
		
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Документ  " + ДокументОбъект + "  удален из регистра сведений Планирование, т.к. сделана отмена проведения документа РеализацияТоваров/услуг " + Номер;
		Сообщение.Сообщить(); 
	КонецЦикла; 	
		
	
	КонецПроцедуры
Показать
3. Dream_kz 129 07.06.17 20:04 Сейчас в теме
(2) Ну если в РС есть измерение Документ, то тогда легко:

Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ПланированиеОказанияУслугСрезПоследних.Регистратор
        |ИЗ
        |    РегистрСведений.ПланированиеОказанияУслуг.СрезПоследних(,Документ = &Документ) КАК ПланированиеОказанияУслугСрезПоследних
        |ГДЕ
        |    ПланированиеОказанияУслугСрезПоследних.Регистратор Ссылка Документ.ПланированиеОказанияУслуг";
    
    Запрос.УстановитьПараметр("Документ", Ссылка);
Показать
8. ilnur75 08.06.17 19:14 Сейчас в теме
(3)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПланированиеОказанияУслугСрезПоследних.Регистратор
|ИЗ
| РегистрСведений.ПланированиеОказанияУслуг.СрезПоследних(,Документ = &Документ) КАК ПланированиеОказанияУслугСрезПоследних
|ГДЕ
| ПланированиеОказанияУслугСрезПоследних.Регистратор Ссылка Документ.ПланированиеОказанияУслуг";

Запрос.УстановитьПараметр("Документ", Ссылка);


Спасибо, Ваш способ работает.
Но немного хотелось бы его доработать.

Что получается.
Если одна ссылка тогда все отрабатывает, удаляется из РС только тот док.Планирование, провидение которого отменяется докомРеализация и набор записей этого докаРеализация.

В чем загвоздка.
В доке Планирование могут быть несколько ссылок на разные докиРеализация.
В этом случае отмена проведения какого-то одного из этих доковРеализация , удаляет только его записи, оставляя записи другого докаРеализация из того же докаПланирование.

я сделал видеозапись, на ней виден весь процесс проведения доков Реализация, какие записи появились в РС, проведение дока планирование, после что стало с записями в регистре, и что произошло в регистре после отмены проведения одного из доков Реализация.

надеюсь видеозапись будет понятной без слов.
Прикрепленные файлы:
Запись_2017_06_08_21_02_40_291.mp4
9. Dream_kz 129 08.06.17 19:25 Сейчас в теме
(8)
В этом случае отмена проведения какого-то одного из этих доковРеализация , удаляет только его записи, оставляя записи другого докаРеализация из того же докаПланирование.

Видео не смотрел, извините.
А надо то в итоге как?
Если чтоб удалялись записи Реализации (этой) и Планирования (по этому документу) то:
Набор = РегистрыСведений.ПланированиеОказанияУслуг.СоздатьНаборЗаписей(); 
Набор.Отбор.Регистратор.Установить(Выборка.Регистратор);
Набор.Отбор.Документ.Установить(Ссылка);
Набор.Записать();
4. iskdv 08.06.17 08:07 Сейчас в теме
нбУд = РегистрыСведений.ПланированиеОказанияУслуг.СоздатьНаборЗаписей();
нбУд.Отбор.Документ.Установить( План1 );
нбУд.Прочитать();
нбУд.Очистить();
нбУд.Записать();
5. Dream_kz 129 08.06.17 08:21 Сейчас в теме
(4) Так-то РС подчиненный регистратору.
6. iskdv 08.06.17 08:29 Сейчас в теме
Движение = План1.Движения.ПланированиеОказанияУслуг;
Движение.Прочитать();
Движение.Очистить();
Движение.Записать();
7. iskdv 08.06.17 08:30 Сейчас в теме
если План1 -- это ссылка:

об = План1.ПолучитьОбъект();
Движение = об.Движения.ПланированиеОказанияУслуг; 
Движение.Прочитать(); 
Движение.Очистить(); 
Движение.Записать();
10. ilnur75 08.06.17 21:50 Сейчас в теме
видео всего чуть более 1 мин. это не вирус.

тогда попытаюсь объяснить.
смотрим скрины.

первый скрин - это после проведения доков Реализация №17 и №20.
и после проведения одного дока Планирование №1.
на скрине видим то что получилось в РС.

Напомню что в док Планирование попадает запросом по РС (на основе доков Реализация) все наборы записей, у которых ресурс ПланДата не заполнен. На скрине это видно. Активность я отключил , как написал выше.

Видим в РС есть четыре записи,
1) с регистратором Реализация 17
2) две записи регистратора Реализация 20 ,
3) одна запись регистратора Планирование №1.

Первые два пункта (ссылки ) также есть в док Планирование №1. (см. второй скрин)

Отмена проведения Реализации №17 (неважно какой документ из Реализация можно и №20, на примере сделаю на Реализации №17)
удалит только свою запись, в РС остаются лишние неактивные записи Реализации №20, они уже просто занимают место в РС. Получится так как на третьем скрине.
Вот это надо устранить.
Прикрепленные файлы:
12. Dream_kz 129 10.06.17 18:34 Сейчас в теме
(10) Убирать лишние реализации лучше при отмене проведения планирования, там же есть ссылки на все реализации? Убираем проведение одной реализации, она распроводит планирование, а планирование в свою очередь снимает с проведения оставшиеся реализации. Подобным кодом что я писал вышел, из планирования реализации найти не сложно

Набор = РегистрыСведений.ПланированиеОказанияУслуг.СоздатьНаборЗаписей(); 
Набор.Отбор.Регистратор.Установить(СсылкаНаРеализацииКоторыеНадоУдалить);
Набор.Отбор.Документ.Установить(СсылкаНаРеализацииКоторыеНадоУдалить);
Набор.Записать();
15. ilnur75 10.06.17 19:10 Сейчас в теме
(12)
Убирать лишние реализации лучше при отмене проведения планирования, там же есть ссылки на все реализации?

ссылки на реализации есть в табчасти в Планировании, которая заполняется запросом к РС.
Отмена Планирования их не уберет из РС, потому что в РС эти ссылки попадают при проведении другого регистратора - Реализация.
16. Dream_kz 129 10.06.17 19:15 Сейчас в теме
(15) Никто не запрещает изменять записи других документов, владелец записи (регистратор) в данном случае просто измерение, если его установить, можно из планирования удалять движения реализаций
11. ilnur75 10.06.17 18:17 Сейчас в теме
Набор.Отбор.Регистратор.Установить(Выборка.Регистратор);
Набор.Отбор.Документ.Установить(Ссылка);

полагаю в этой строке
Набор.Отбор.Документ.Установить(Ссылка)
должен устанавливаться параметр , который был нами установлен в параметрах вирт.таблицы в запросе, но как его прописать при установке значения отбора?
13. ilnur75 10.06.17 18:57 Сейчас в теме
направление как бы понятно, но тогда возможна ситуация когда
док Планирование еще не создан, а у дока Реализация уже хотят отменить проведение?

не понятно как прописывать СсылкаНаРеализацииКоторыеНадоУдалить
или как установить значение для этой ссылки? ведь этих ссылок несколько?
14. Dream_kz 129 10.06.17 19:08 Сейчас в теме
(13) Ну и что? Планирование не найдется, другие реализации будут не тронуты. Не совсем хорошо, когда одна реализация меняют другую.

В цикле ставить ссылки. В Планирование найти эти документы и удалять записи
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)