//Процедура возвращает массив рабочих дней за два месяца
Процедура ЗапросКалендаря()
ЗапросКалендаря=Новый Запрос;
ЗапросКалендаря.Текст="ВЫБРАТЬ
| РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
|ИЗ
| РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
|ГДЕ
| РегламентированныйПроизводственныйКалендарь.Пятидневка = 1
| И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря >= &НачалоПериода
| И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= &КонецПериода";
ЗапросКалендаря.УстановитьПараметр("НачалоПериода",ДобавитьМесяц(ТекущаяДата(),-1)); //НачалоПериода
ЗапросКалендаря.УстановитьПараметр("КонецПериода",ДобавитьМесяц(ТекущаяДата(),1)); //КонецПериода
Период=ЗапросКалендаря.Выполнить().Выбрать();
ДваМесяцаРабочихДней=Новый Массив;
Пока Период.Следующий() Цикл
ДваМесяцаРабочихДней.Добавить(Период.ДатаКалендаря);
КонецЦикла;
КонецПроцедуры
//Использование
Процедура ПолучитьТриДняНазад()
ОткатитьНазадНа=3;//3 дня
Сообщить(НачалоДня(ДваМесяцаРабочихДней[ДваМесяцаРабочихДней.Количество()-ОткатитьНазадНа-1]))
КонецПроцедуры
//Вариант самой 1С (нашел в форме отбора просроченных заказов)
Процедура ДниПросрочки()
ОткатитьНазадНа=3;//3 дня
//Пытаемся учитывать только рабочие дни по календарю
ПолучитьДаты = Новый Запрос;
ПолучитьДаты.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| РегламентированныйПроизводственныйКалендарь.Год
|ИЗ
| РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
|ГДЕ
| РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачГода И &КонГода";
ПолучитьДаты.УстановитьПараметр("НачГода",НачалоГода(ТекущаяДата()));
ПолучитьДаты.УстановитьПараметр("КонГода",КонецГода(ТекущаяДата()));
ПолучилиДаты = ПолучитьДаты.Выполнить();
Если ПолучилиДаты.Пустой() Тогда
ТребуемаяДатаОплаты=НачалоДня(ТекущаяДата()-24*60*60*ОткатитьНазадНа);
//ТребуемаяДатаОтгрузки=НачалоДня(ТекущаяДата()-24*60*60*ОткатитьНазадНа);
Иначе
ТребуемаяДатаОплаты=ЗаполнениеДокументов.ОпределитьДату(НачалоДня(ТекущаяДата()),-ОткатитьНазадНа);
//ТребуемаяДатаОтгрузки=ЗаполнениеДокументов.ОпределитьДату(НачалоДня(ТекущаяДата()),-ОткатитьНазадНа);
КонецЕсли;
Сообщить(ТребуемаяДатаОплаты);
КонецПроцедуры
//КалендарныеДни - функция, разберетесь сами
Функция ПолучитьДень(ИсходнаяДата, КоличествоПрибавляемыхДней)
Запрос = Новый Запрос("
|ВЫБРАТЬ
|ДОБАВИТЬКДАТЕ(&ИсходнаяДата, ДЕНЬ, &Количество) как Дата");
Запрос.УстановитьПараметр("ИсходнаяДата", ИсходнаяДата);
Запрос.УстановитьПараметр("Количество", КоличествоПрибавляемыхДней);
Возврат Запрос.Выполнить().Выгрузить()[0].Дата;
КонецФункции
пятница, 26 июня 2015 г.
1С Вычесть рабочие дни на основе ПК (НеВЗапросе)
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий