Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
27 ноя 2021, 12:32

удаление непроведенных документов

Автор margo, 05 окт 2021, 12:38

0 Пользователей и 1 гость просматривают эту тему.

margo

Добрый день

Запускаем регламентное задание для удаления непроведенных документов

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

    КонецЦикла;

КонецПроцедуры

margo

Цитата: margo от 05 окт 2021, 12:38Добрый день

Запускаем регламентное задание для удаления непроведенных документов

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

    КонецЦикла;

КонецПроцедуры


но рз прерывается с ошибками
{ОбщийМодуль.РегламентныеИФоновыеЗадания_Soldi.Модуль(804)}: Помилка при виклику методу контексту (Выполнить)
через:

через:
{(3163, 10)}: Неоднозначне поле "РаспределениеОсновногоЗаработка.Проведен"
(<<?>>РаспределениеОсновногоЗаработка.Проведен = Ложь) и (РаспределениеОсновногоЗаработка.ПометкаУдаления = Ложь)

что не так?

LexaK

на первый взгляд ошибки не видно, не оптимально правда
попробуйте такой код, немного оптимизировано

Процедура ПометкаНаУдалениеНеПроведенныхДокументов() Экспорт
   
Дата = НачалоДня(ТекущаяДата());
ПометкаУдаления = истина;

лкШаблон = "Выбрать ссылка из Документ.ТипДокумента где Дата < &Дата и Не проведен и Не ПометкаУдаления ";

Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Дата", Дата);

    Для каждого Документ Из Метаданные.Документы Цикл
   
        ВидДок = Документ.Имя;
Если НРег(ВидДок) = "распределениеосновногозаработка" Тогда
//сразу пропускаем этот тип
Продолжить;
КонецЕсли;       
     
        Если ЗначениеЗаполнено(Запрос.Текст) Тогда
             Запрос.Текст = Запрос.Текст + "
             |    ОБЪЕДИНИТЬ ВСЕ
             |";   
         КонецЕсли;
         Запрос.Текст = Запрос.Текст + СтрЗаменить(лкШаблон, "ТипДокумента", ВидДок);

    КонецЦикла;
     
выборка = запрос.Выполнить().Выбрать();
пока выборка.следующий() цикл
     об = выборка.ссылка.получитьобъект();
     об.установитьпометкуудаления(пометкаудаления);
конеццикла;

КонецПроцедуры
ответ Понравился? (в смысле пригодился?)

margo


Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск