Портал компании
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Автоматизация Бизнеса
Сервисный центр 1С

Автоматизация сервисного центра

Программа для сервисных центров и ЦТО
Подробнее

Программист 1С

Доработки для 1С

Любые доработки систем 1С всего за 2400 р.час. Возможно уже есть готовые. Полный каталог разработок

Разработки для 1С
Учет по серийным номерам 1С

Учет товаров по серийным номерам

Модуль позволяющий вести учет по серийным номерам и выводить на печать гарантийные талоны. Подробнее

Автосервис 1С

Дополнение для автосервиса

Автоматизация СТО, шиномонтажной мастерской или мойки. Ознакомиться

Рассылка SMS 1С

Рассылка СМС

Уведомление клиентов или сотрудников с помощью СМС сообщений из 1С. Перейти

Модули для 1С

Модули, дополнения и отчеты для 1С

Больший список готовых решений для Вашей компании. Поддержка и сопровождение. Полный каталог разработок

 

Быстрый переход





Яндекс.Метрика
Меню раздела:

Быстрый поиск

 

Информация



 

[CODE] Прибавить рабочие часы к дате с использованием производственного календаря и графика работы



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


Количество показов: 577
Дата изменения: 20.12.2023 06:22:57

Возврат к списку

(Голосов: 2, Рейтинг: 2.85)

Андрей, 26.11.2024 10:13:33
Штука классная но под ерп не взлетело
Константы.пмГрафикРаботы.Получить(); Этого там нет но нашел откуда взять
Елена, 11.01.2024 18:22:21
это отличная штука! у нас плавающие графики и Excel со сменами монтажников - тяжело сводить было к датам окончания объекта

спасибо от всей нашей компании!
Ваше имя:
Защита от автоматических сообщений:
Защита от автоматических сообщений Символы на картинке:


Модули   Статьи   Отзывы   Кабинет   Поддержка  
@ !pride, 1module. Все права защищены. 2003 - 2024