30 июня 2015 г.

1С получить список просроченных заказов


Процедура ПолучитьДокументыПоСтд()
 СрокОплатыСравнение = 2;// 1 - Неважно 2 - Просрочен (более чем на)
 СрокОтгрузкиСравнение = 1;// 1 - Неважно
 НаличиеРезервов = 3;// 1 - Неважно 3 - С резервами
 РазмещениеРезервов = 1; // 1 - На складах и в заказах
 СостояниеОплаты = 2;// 1 - Неважно 2 - Не оплачен полностью (неоплачен либо оплачен частично)
 СостояниеОтгрузки = 1; // 1 - Неважно
    ДатаНач = НачалоДня(ЭтотОбъект.РекДатаНач);//начало периода отбора месяцназад
 ДатаКон = КонецДня(ЭтотОбъект.РекДатаКон);//конец периода отбора месяцвперед
 ПустаяДата=Дата('00010101');
 ДатаОплаты=НачалоДня(ТекущаяДата());
 ДатаОтгрузки=НачалоДня(ТекущаяДата());
 ПричинаЗакрытияЗаказа = Справочники.ПричиныЗакрытияЗаказов.ПустаяСсылка();
 //сообщить(""+ДатаНач+" "+ДатаКон+"");

 //Пытаемся учитывать только рабочие дни по календарю
 ПолучитьДаты = Новый Запрос;
  ПолучитьДаты.Текст = 
  "ВЫБРАТЬ РАЗРЕШЕННЫЕ
  | РегламентированныйПроизводственныйКалендарь.Год
  |ИЗ
  | РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
  |ГДЕ
  | РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачГода И &КонГода";
  
 ПолучитьДаты.УстановитьПараметр("НачГода",НачалоГода(ТекущаяДата()));
 ПолучитьДаты.УстановитьПараметр("КонГода",КонецГода(ТекущаяДата()));
 
 ПолучилиДаты = ПолучитьДаты.Выполнить();
 //РекДнейВПлюч - реквизит формы, число
 Если ПолучилиДаты.Пустой() Тогда
   ТребуемаяДатаОплаты=НачалоДня(ТекущаяДата()-24*60*60*ЭтотОбъект.РекДнейВПлюс);
   ТребуемаяДатаОтгрузки=НачалоДня(ТекущаяДата()-24*60*60*ЭтотОбъект.РекДнейВПлюс);
  Иначе
   ТребуемаяДатаОплаты=ЗаполнениеДокументов.ОпределитьДату(НачалоДня(ТекущаяДата()),-ЭтотОбъект.РекДнейВПлюс);
   ТребуемаяДатаОтгрузки=ЗаполнениеДокументов.ОпределитьДату(НачалоДня(ТекущаяДата()),-ЭтотОбъект.РекДнейВПлюс);
 КонецЕсли;


 

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


Результат=Запрос.Выполнить();
//Сообщить(Результат.Выбрать().Количество());
Если НЕ Результат.Пустой() Тогда
 СписокЗаказов=Новый ТаблицаЗначений;
 СписокЗаказов=Результат.Выгрузить();
 ЭлементыФормы.СписокЗаказов.СоздатьКолонки();//Поле ввода, ТаблицаЗначений
 СоздатьДокументЗЗП(); //переход к процедуре подготовки документа ЗакрытиеЗаказовПокупателей
Иначе
 Предупреждение("Просроченные заказы не найдены!");
 Возврат;
КонецЕсли;
КонецПроцедуры

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

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