Имя: Пароль:
1C
1С v8
Почему при повторном проведении документа движения удаляются?
0 Philipp121995
 
28.05.17
22:15
Процедура ОбработкаПроведения(Отказ, Режим)
    
    // Запросом получили только те записи регистра сведений, у которых плательщик=истина
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПлательщикиСрезПоследних.ФизЛицо КАК ФизЛицо,
        |    ДопРегистрДолгиПоВзносамПрихСрезПоследних.ФизЛицо КАК ФизЛицо1,
        |    ДопРегистрДолгиПоВзносамПрихСрезПоследних.Долг КАК Долг,
        |    ДопРегистрДолгиПоВзносамПрихСрезПоследних.Период КАК Период,
        |    ПлательщикиСрезПоследних.Плательщик КАК Плательщик,
        |    РАЗНОСТЬДАТ(ДопРегистрДолгиПоВзносамПрихСрезПоследних.Период, &Дата, ГОД) КАК РазнДат,
        |    ДопРегистрДолгиПоВзносамПрихСрезПоследних.Регистратор КАК Регистратор
        |ИЗ
        |    РегистрСведений.Плательщики.СрезПоследних(&Дата, ) КАК ПлательщикиСрезПоследних
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДопРегистрДолгиПоВзносамПрих.СрезПоследних КАК ДопРегистрДолгиПоВзносамПрихСрезПоследних
        |        ПО ПлательщикиСрезПоследних.ФизЛицо = ДопРегистрДолгиПоВзносамПрихСрезПоследних.ФизЛицо
        |ГДЕ
        |    ПлательщикиСрезПоследних.Плательщик = ИСТИНА";
        

    Запрос.УстановитьПараметр("Дата", Дата);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    //Запрос2 Получение размера ежегодного взноса
    Запрос2 = Новый Запрос;
    Запрос2.Текст =
        "ВЫБРАТЬ
        |    РазмерЕжегодногоВзносаСрезПоследних.РазмерВзноса КАК РазмерВзноса
        |ИЗ
        |    РегистрСведений.РазмерЕжегодногоВзноса.СрезПоследних КАК РазмерЕжегодногоВзносаСрезПоследних";
    
    РезультатЗапроса2 = Запрос2.Выполнить();
    
    Если НЕ РезультатЗапроса2.Пустой() Тогда  //проверка существования размера взноса
    
        ВыборкаДетальныеЗаписи2 = РезультатЗапроса2.Выбрать();
        
        ВыборкаДетальныеЗаписи2.Следующий();
            
        Движения.ДолгиПоВзносам.Записывать = Истина;
        Движения.ДопРегистрДолгиПоВзносамПрих.Записывать = Истина;
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            
            Если ВыборкаДетальныеЗаписи.Долг = NULL ИЛИ ВыборкаДетальныеЗаписи.РазнДат >= 1 ИЛИ
                                                        ВыборкаДетальныеЗаписи.Регистратор = Ссылка Тогда
                                                        
                Если ВыборкаДетальныеЗаписи.РазнДат = NULL Тогда
                    ПеременнаяСч = 1;
                Иначе ПеременнаяСч = Число(Строка(ВыборкаДетальныеЗаписи.РазнДат));
                КонецЕсли;
                
                ДатаПериод = Дата;
                                                            
                Для Счетчик = 1 ПО ПеременнаяСч Цикл
                                                            
                    // регистр ДолгиПоВзносам Приход
                    Движение = Движения.ДолгиПоВзносам.Добавить();
                    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
                    Движение.Период = НачалоГода(ДатаПериод);
                    Движение.ФизЛицо = ВыборкаДетальныеЗаписи.ФизЛицо;
                    Движение.ВидВзноса = Справочники.ВидыВзносов.ВзносЕжегодный;
                    Движение.Долг =ВыборкаДетальныеЗаписи2.РазмерВзноса;

                    // регистр ДопРегистрДолгиПоВзносамПрих
                    Движение = Движения.ДопРегистрДолгиПоВзносамПрих.Добавить();
                    Движение.Период = НачалоГода(ДатаПериод);
                    Движение.ФизЛицо = ВыборкаДетальныеЗаписи.ФизЛицо;
                    Движение.ВидВзноса = Справочники.ВидыВзносов.ВзносЕжегодный;
                    Движение.Долг = ВыборкаДетальныеЗаписи2.РазмерВзноса;
                    ДатаПериод = ДобавитьМесяц(ДатаПериод, -12);
                КонецЦикла;
                            
            КонецЕсли;
        КонецЦикла;
    Иначе
        Сообщить("Вы ни разу не установили размер ежегодного взноса. Перейдите в раздел ""Операции""
        |и создайте соответствующий документ.");
        Отказ = Истина;
    КонецЕсли;
    
КонецПроцедуры
1 h-sp
 
28.05.17
23:41
ну по-умолчанию, если вообще ничего не делать, они и должны удаляться.
2 Philipp121995
 
28.05.17
23:52
(1) Я понял почему. При повторном проведении условия уже не выполняются. Поэтому хочу перед проведением удалить старые движения. Как это сделать?
3 Bigbro
 
29.05.17
03:58
вообще иногда в запросе выкидывают текущий документ и его движения, чтобы условия выполнялись независимо от движений текущего документа.
иначе вот представь ты удаляешь движения, делаешь проверку, и выясняешь что не надо было удалять и перепроводить. обратно будешь движения записывать?
4 kuzyara
 
29.05.17
05:46
УдалениеДвижений (RegisterRecordsDeletion)
Значения

НеУдалятьАвтоматически (AutoDeleteOff)
УдалятьАвтоматически (AutoDelete)
УдалятьАвтоматическиПриОтменеПроведения (AutoDeleteOnUnpost)

Описание:

Содержит варианты удаления движений документа по регистрам при проведении и отмене проведения.

Доступность:

Сервер, толстый клиент, внешнее соединение.
5 1dvd
 
29.05.17
07:26
а чего у тебя второй зарпос без параметров вообще? всегда берёт на текущую дату? даже если через 10 лет перепровести?
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан