Письменно дата в СКД

Автор: | Октябрь 5, 2021
Функция ФормаДатВОтчете (ДатаНачала, ДатаОкончания)
	
	РазницаДат =  КоличествоДнейВПериоде(НачалоДня(ДатаНачала), НачалоДня(ДатаОкончания))+1 ; 
	КоличествоДнейВМесяце = КоличествоДнейВПериоде(НачалоМесяца(ДатаНачала), КонецМесяца(ДатаОкончания))+1 ;
	КоличествоДнейВКвартале = КоличествоДнейВПериоде(НачалоКвартала(ДатаНачала), КонецКвартала(ДатаОкончания))+1 ;
	КоличествоДнейВГоду = КоличествоДнейВПериоде(НачалоГода(ДатаНачала), КонецГода(ДатаОкончания))+1 ;	
	КварталНачальнойДаты = Цел((Месяц(ДатаНачала) - 1) / 3) + 1;
	
	Если РазницаДат = КоличествоДнейВМесяце и РазницаДат < 32 Тогда
		Возврат Формат(ДатаНачала, "ДФ='MMMM yyyy ''г.'''") 
	ИначеЕсли РазницаДат = КоличествоДнейВКвартале и РазницаДат < 364 Тогда
		Возврат Строка(КварталНачальнойДаты) + " квартал"
	ИначеЕсли РазницаДат = КоличествоДнейВГоду и РазницаДат > 364 тогда
		Возврат Формат(ДатаНачала, "ДФ='yyyy ''г.'''")
	Иначе 
		Возврат Формат(ДатаНачала, "ДФ='d MMMM yyyy ''г.'''") + " - " +  Формат(ДатаОкончания, "ДФ='d MMMM yyyy ''г.'''")
	КонецЕсли;
		
КонецФункции

Функция КоличествоДнейВПериоде(ДатаНачала, ДатаОкончания)
	
	КоличествоДней = 0;
	
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	| РАЗНОСТЬДАТ(&ДатаНачала, &ДатаОкончания, ДЕНЬ) КАК Результат";
	
	Запрос.УстановитьПараметр("ДатаНачала",  НачалоДня(ДатаНачала));
	Запрос.УстановитьПараметр("ДатаОкончания", НачалоДня(ДатаОкончания));
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	КоличествоДней = 0;
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		КоличествоДней = ВыборкаДетальныеЗаписи.Результат;
	КонецЦикла;

	Возврат КоличествоДней;
	
КонецФункции

КонецФункции

Функция КоличествоДнейВПериоде(ДатаНачала, ДатаОкончания)

КоличествоДней = 0;

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РАЗНОСТЬДАТ(&ДатаНачала, &ДатаОкончания, ДЕНЬ) КАК Результат";

Запрос.УстановитьПараметр("ДатаНачала",  НачалоДня(ДатаНачала));
Запрос.УстановитьПараметр("ДатаОкончания", НачалоДня(ДатаОкончания));

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

КоличествоДней = 0;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    КоличествоДней = ВыборкаДетальныеЗаписи.Результат;
КонецЦикла;

Возврат КоличествоДней;

КонецФункции