Имя: Пароль:
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 лет перепровести?
Ошибка? Это не ошибка, это системная функция.