Имя: Пароль:
1C
1С v8
Как выборочно удалить некоторые записи из регистра накопления?
0 MathaiShung
 
25.04.16
19:55
Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    СвободныеОстаткиОстатки.Номенклатура,
    |    СвободныеОстаткиОстатки.КоличествоВСвободномОстаткеОстаток
    |ИЗ
    |    РегистрНакопления.СвободныеОстатки.Остатки(
    |            ,
    |            (Номенклатура, Склад) В
    |                (ВЫБРАТЬ
    |                    ТабИзменившихсяТоваров.Номенклатура,
    |                    ТабИзменившихсяТоваров.Склад
    |                ИЗ
    |                    ТабИзменившихсяТоваров КАК ТабИзменившихсяТоваров)) КАК СвободныеОстаткиОстатки
    |ГДЕ
    |    СвободныеОстаткиОстатки.КоличествоВСвободномОстаткеОстаток < 0";
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        
        //Удаление ранее записаных движений по соответствующей номенклатуре
        Движения.РезервированиеТоваров.Удалить(//индекс записи);
        Движения.СвободныеОстатки.Удалить(//индекс записи);
        
        Нехватка = ВыборкаДетальныеЗаписи.КоличествоВСвободномОстаткеОстаток;
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "В документе №"+Номер+" от "+Дата+" на складе не хватает "+Нехватка+" единиц товара "+ВыборкаДетальныеЗаписи.Номенклатура;
        Сообщение.Сообщить();
    КонецЦикла;

Перед запросом осуществляется запись движений в регистры РезервированиеТоваров и СвободныеОстатки. Всё происходит не в обработчике проведения, поэтому движения нужно удалить самостоятельно. Подскажите пожалуйста, как получить индекс интересующей меня записи, или каким-то другим способом отобрать записи по нужной номенклатуре для их последующего удаления из соответствующих регистров?
1 Джинн
 
25.04.16
20:05
> Всё происходит не в обработчике проведения

Кривая архитектура по-определению.
2 MathaiShung
 
25.04.16
20:06
(1) Почему? Это специально сделано как экспортная процедура для резервирования товаров без проведения документа.
3 Джинн
 
25.04.16
20:08
Справка-расчет что показывает?

Изначально из Расчетов по реализации берется. Если пишет в долги, значит не закрытые документы есть.
4 MathaiShung
 
25.04.16
20:12
(3) Не знаю, у меня это учебная задача и не типовая конфигурация. Меня интересует как в данном конкретном случае решить эту проблему.
5 Джинн
 
25.04.16
20:15
(2) Даже если что-то специально делают через жпо, то это ничего не меняет.
6 kosts
 
25.04.16
21:10
(0) Так можно.
Что бы удалить записи из регистра подчиненного регистратору, надо обрабатывать движения по регистраторам.
Т.е. выборка должна вернуть только регистраторы.
Затем по каждому регистратору читаешь, перебираешь движения (без запроса) и записываешь в новый набор в том виде который нужен.
Для уменьшения проблем если есть какие-то подписки, можно установить признак обмена.
Только если документ будет перепроведен, то всё вернется на круги обратно.
7 MathaiShung
 
26.04.16
11:30
(6) Ага, кажется ясно, попробую... Спасибо!