5 мая 2017 г.

1С Пометить на удаление все документы за период



Сразу в карьер.



Собственно все доки можно получить обойдя в цикле Метаданные.Документы, но нельзя отобрать по дате. Запросом можно отобрать по дате, но только определенный документ.
Т.о. мы просто загребем имена доков из метаданных и в цикле будет подставлять в запрос и обрабатывать циклом результат.
Собственно код для УФ:


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

&НаКлиенте
Процедура ПометитьВсеДокументыНаУдаление(Команда)
 ОчиститьСообщения();
 ПометитьВсеДокументыНаУдалениеНаСервере();
 
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
 ЭтотОбъект.ДатаКон=ТекущаяДата();
 ЭтотОбъект.УстановитьПометку=Истина;
КонецПроцедуры

Все это в модуле формы. На форме кнопка "ПометитьВсеДокументыНаУдаление" и даты начала/конца. Также, на всякий случай галка снять или поставить пометку.



Комментариев нет:

Отправить комментарий