![]() |
![]() |
![]() |
1С:Предприятие
:: 1С:Предприятие 8 общая
|
|
| ||
budnik 27.11.13 - 14:04 | Поскажите как лучше
к начальной дате прибавить n дней исключая праздники. ВЫБРАТЬ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, РегламентированныйПроизводственныйКалендарь.Год, РегламентированныйПроизводственныйКалендарь.Пятидневка, РегламентированныйПроизводственныйКалендарь.Шестидневка, РегламентированныйПроизводственныйКалендарь.КалендарныеДни, РегламентированныйПроизводственныйКалендарь.ВидДня ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь ГДЕ НЕ РегламентированныйПроизводственныйКалендарь.ВидДня = &ВидДня | ||
skunk 1 - 27.11.13 - 14:06 | тебе именно как прибавить дтНужнаяДата = дтНачальная + чисКоличествоДней * чисКоличествоСекундВДне | ||
budnik 2 - 27.11.13 - 14:10 | Праздники надо исключить | ||
skunk 3 - 27.11.13 - 14:12 | исключай ... | ||
1Сергей 4 - 27.11.13 - 14:13 | дтНужнаяДата = дтНачальная + (чисКоличествоДней - чисКоличествоПраздников) * чисКоличествоСекундВДне | ||
skunk 5 - 27.11.13 - 14:13 | точнее наоборот ... если я правильно понимаю ...
смотришь какие праздники и выходные попадают в твой период и делаешь оффсет | ||
skunk 6 - 27.11.13 - 14:14 | (4)думаю ему надо на оборот
дтНужнаяДата = дтНачальная + (чисКоличествоДней + чисКоличествоПраздников) * чисКоличествоСекундВДне | ||
Fragster Модератор 7 - 27.11.13 - 14:14 | // добавляет к дате количество рабочих дней по пятидневке/шестидневке/семидневке Функция ДобавитьДниКДатеСУчетомВыходных(Дата, КоличествоДней, РабочихДней=5) Экспорт НачальнаяДата = НачалоДня(Дата); Построитель = Новый ПостроительЗапроса; Если КоличествоДней > 0 Тогда Построитель.Текст = "ВЫБРАТЬ | РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК ДатаКалендаря, | РегламентированныйПроизводственныйКалендарь.Пятидневка, | РегламентированныйПроизводственныйКалендарь.Шестидневка, | РегламентированныйПроизводственныйКалендарь.КалендарныеДни |ПОМЕСТИТЬ КусокКалендаря |ИЗ | РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь |ГДЕ | РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &Дата1 И &Дата2 | |ИНДЕКСИРОВАТЬ ПО | ДатаКалендаря |; | //////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ ПЕРВЫЕ 1 | КусокКалендаря.ДатаКалендаря КАК ДатаКалендаря |ИЗ | КусокКалендаря КАК КусокКалендаря | ВНУТРЕННЕЕ СОЕДИНЕНИЕ КусокКалендаря КАК Накопление | ПО КусокКалендаря.ДатаКалендаря >= Накопление.ДатаКалендаря |{ГДЕ | (СУММА(Накопление.Пятидневка) - 1) КАК Пятидневка, | (СУММА(Накопление.Шестидневка) - 1) КАК Шестидневка, | (СУММА(Накопление.КалендарныеДни) - 1) КАК КалендарныеДни} | |СГРУППИРОВАТЬ ПО | КусокКалендаря.ДатаКалендаря | |УПОРЯДОЧИТЬ ПО | ДатаКалендаря"; ИначеЕсли КоличествоДней < 0 Тогда Построитель.Текст = "ВЫБРАТЬ | РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК ДатаКалендаря, | РегламентированныйПроизводственныйКалендарь.Пятидневка, | РегламентированныйПроизводственныйКалендарь.Шестидневка, | РегламентированныйПроизводственныйКалендарь.КалендарныеДни |ПОМЕСТИТЬ КусокКалендаря |ИЗ | РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь |ГДЕ | РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &Дата2 И &Дата1 | |ИНДЕКСИРОВАТЬ ПО | ДатаКалендаря |; | //////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ ПЕРВЫЕ 1 | КусокКалендаря.ДатаКалендаря КАК ДатаКалендаря |ИЗ | КусокКалендаря КАК КусокКалендаря | ВНУТРЕННЕЕ СОЕДИНЕНИЕ КусокКалендаря КАК Накопление | ПО КусокКалендаря.ДатаКалендаря <= Накопление.ДатаКалендаря |{ГДЕ | (-СУММА(Накопление.Пятидневка) + 1) КАК Пятидневка, | (-СУММА(Накопление.Шестидневка) + 1) КАК Шестидневка, | (-СУММА(Накопление.КалендарныеДни) + 1) КАК КалендарныеДни} | |СГРУППИРОВАТЬ ПО | КусокКалендаря.ДатаКалендаря | |УПОРЯДОЧИТЬ ПО | ДатаКалендаря УБЫВ"; ИначеЕсли КоличествоДней = 0 Тогда Возврат НачальнаяДата; Иначе ВызватьИсключение "Неверное количество добавляемых дней"; КонецЕсли; Построитель.Параметры.Вставить("Дата1", НачальнаяДата); КолНедель = Цел(КоличествоДней / РабочихДней) + ?(КоличествоДней > 0, 1, -1); КолЛет = Цел(КолНедель / 52) + ?(КоличествоДней > 0, 1, -1); Добавляем = КолНедель * 7 + КолЛет * 20;// с запасом, например для майских праздников или новогодних каникул, допустим, у нас праздничных дней 20 в году Построитель.Параметры.Вставить("Дата2", НачальнаяДата + 86400*Добавляем); Если РабочихДней = 5 Тогда ЭлементОтбора = Построитель.Отбор.Добавить("Пятидневка"); ИначеЕсли РабочихДней = 6 Тогда ЭлементОтбора = Построитель.Отбор.Добавить("Шестидневка"); ИначеЕсли РабочихДней = 7 Тогда ЭлементОтбора = Построитель.Отбор.Добавить("КалендарныеДни"); Иначе ВызватьИсключение "Неверное количество рабочих дней"; КонецЕсли; ЭлементОтбора.Установить(Цел(КоличествоДней), Истина); Построитель.Выполнить(); Если Построитель.Результат.Пустой() Тогда ВызватьИсключение "Не могу определить дату с учетом регламентированного календаря!"; Иначе Выборка = Построитель.Результат.Выбрать(); Выборка.Следующий(); Возврат Выборка.ДатаКалендаря; КонецЕсли; КонецФункции | ||
Feunoir 8 - 27.11.13 - 14:16 | ЗаполнениеДокументов.ОпределитьДату(ДатаНач, ЧислоДней) // Функция возвращает дату отстоящую на заданное количество рабочих дней от начальной в соответствии с //регламентированным производственным календарем // //Параметры: // ДатаНач - начальная дата // ЧислоДней - количество рабочих дней, на которое искомая дата должна отстоять от начальной // | ||
budnik 9 - 27.11.13 - 14:48 | Спасибо. |
|
Список тем форума
|
Правила | Описание | Реклама на форуме | Волшебные решения | Поиск | Секции | Рейтинг | Книга знаний | Вики-миста (КЗ2) | Мобильная | Архив | Модераторы | Галерея | Регистрация | 18+ |