Calendarik( C_Date )

Законченные решения. Заполняется по результатам дискуссий в «Практике».
Ответить
Alexei Sytch
Сообщения: 106
Зарегистрирован: 21 сен 2017, 18:48
Откуда: Минск

Calendarik( C_Date )

Сообщение Alexei Sytch » 22 янв 2018, 22:23

НАЗНАЧЕНИЕ
Выводит в несколько строк календарик для нужного месяца, на котором подсвечена выбранная дата (и выделена текущая дата). Удобно для визуального отображения введенных дат, сроков на календарике

ФОРМАТ
Calendarik( C_Date )
C_Date - дата или поле с датой

УКАЗАНИЯ ПО ИСПОЛЬЗОВАНИЮ

Календарик отображается как текстовый параграф. Используйте шрифт небольшого размера и межстрочный интервал и позицию табулятора для настройки внешнего вида (например, Consolas 11 и Табулятор в позициях : 15,35,55,75,95,115)

Прототип: http://www.briandunning.com/cf/418 */

Код: Выделить всё

/*Calendarik( C_Date )
Автор: Алексей Сыч
Прототип:  http://www.briandunning.com/cf/418 
Назначение: Выводит в несколько строк календарик для нужного месяца, на котором подсвечена выбранная дата (и выделена текущая дата). Удобно визуального отображения введенных дат, контрольных сроков на привычном  календарике (понедельник-воскресенье сверху вниз, а не слева направо).
Календарик отображается как текстовый параграф. Используйте шрифт небольшого размера и межстрочный интервал и позицию табулятора для настройки внешнего вида (например,  Consolas 11  и Табулятор в позициях : 15,35,55,75,95,115) 
*/


Let
(
 [
  //c_date=Date;  
  RED  		= RGB ( 200 ; 50  ; 50   );	// цвет для выходных
  GREY		= RGB ( 161 ; 161; 161 );	// цвета дней следующего и прошлого месяцев
  BLUE 		= RGB ( 50   ; 50  ; 200 );	// цвет для сегодня
  
  DAY15_DATE	= Date(Month(C_Date);15;Year(C_Date)); //ПДМ - 15 день месяца
  DAY15_DOW	= Choose(DayOfWeek(DAY15_DATE);0;7;1;2;3;4;5;6);//ПДМДН- день недели 
  DAYS		= Day(Date(Month(C_Date)+1;1;Year(C_Date))-1);//КДМ-количество дней в месяце
  DAY15_DAYS_DOW= Choose(DayOfWeek(DAY15_DATE+DAYS);7;1;2;3;4;5;6); 
  TODAY 		= If( Month (Get(CurrentDate))=Month(c_Date) and Year(Get(CurrentDate))=Year(c_Date) ; 
			TextStyleAdd(TextColor(Day(Get(CurrentDate));GREY);Bold);  	// any other styles for today can be added here
			Day(Get(CurrentDate)));							// if today is not current month - no color
  TODAY 		= If(Length ( TODAY ) =1 ; "	 " & TODAY;"	" & TODAY); 	// adding <tab> and <space> to align one digit days

  STRING      	= List(
"	 1";
"	 2";
"	 3";
"	 4";
"	 5";
"	 6";
"	 7";
"	 8";
"	 9";
"	10";
"	11"; 
"	12";
"	13";
"	14";
"	15";
"	16";
"	17";
"	18";
"	19";
"	20";
"	21";
"	22";
"	23";
"	24";
"	25";
"	26";
"	27";
"	28";
"	29";
"	30";
"	31");

  Formula 	=
"GetValue((STRING);Day(DAY15_DATE-14-(DAY15_DOW-$ROW) )) & 
GetValue((STRING);Day(DAY15_DATE-7 -(DAY15_DOW-$ROW) )) &
GetValue((STRING);Day(DAY15_DATE   -(DAY15_DOW-$ROW) )) &
GetValue((STRING);Day(DAY15_DATE+7 -(DAY15_DOW-$ROW) )) &
GetValue((STRING);Day(DAY15_DATE+14-(DAY15_DOW-$ROW) )) &
GetValue((STRING);Day(DAY15_DATE+21-(DAY15_DOW-$ROW) ))";
  
  STR	= GetValue(STRING ; DAYS)

 ];
"			"&Choose(Month(c_date);"";"январь";"февраль";"март";"апрель";"май";"июнь";"июль";"август";"сентябрь";"октябрь";"ноябрь";"декабрь")&¶&

Substitute(
//ряд Понедельников
Let($ROW=1;"")&
If(
Month(c_date)=Month (DAY15_DATE-14-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE-14-(DAY15_DOW-$ROW) ))
;"	")//if
  & 
GetValue((STRING);Day(DAY15_DATE-7 -(DAY15_DOW-$ROW) )) &
GetValue((STRING);Day(DAY15_DATE   -(DAY15_DOW-$ROW) )) &
GetValue((STRING);Day(DAY15_DATE+7 -(DAY15_DOW-$ROW) )) &
If(
Month(c_date)=Month (DAY15_DATE+14-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE+14-(DAY15_DOW-$ROW) )) 
;"	") &
If(
Month(c_date)=Month (DAY15_DATE+21-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE+21-(DAY15_DOW-$ROW) )) 
;"	") //if current month 
&¶&
//вторники
Let($ROW=2;"")&
If(
Month(c_date)=Month (DAY15_DATE-14-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE-14-(DAY15_DOW-$ROW) ))
;"	")//if
  & 
GetValue((STRING);Day(DAY15_DATE-7 -(DAY15_DOW-$ROW) )) &
GetValue((STRING);Day(DAY15_DATE   -(DAY15_DOW-$ROW) )) &
GetValue((STRING);Day(DAY15_DATE+7 -(DAY15_DOW-$ROW) )) &
If(
Month(c_date)=Month (DAY15_DATE+14-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE+14-(DAY15_DOW-$ROW) )) 
;"	") &
If(
Month(c_date)=Month (DAY15_DATE+21-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE+21-(DAY15_DOW-$ROW) )) 
;"") //if current month 
&¶&

//среды
Let($ROW=3;"")&
If(
Month(c_date)=Month (DAY15_DATE-14-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE-14-(DAY15_DOW-$ROW) ))
;"	")//if
  & 
GetValue((STRING);Day(DAY15_DATE-7 -(DAY15_DOW-$ROW) )) &
GetValue((STRING);Day(DAY15_DATE   -(DAY15_DOW-$ROW) )) &
GetValue((STRING);Day(DAY15_DATE+7 -(DAY15_DOW-$ROW) )) &
If(
Month(c_date)=Month (DAY15_DATE+14-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE+14-(DAY15_DOW-$ROW) )) 
;"	") &
If(
Month(c_date)=Month (DAY15_DATE+21-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE+21-(DAY15_DOW-$ROW) )) 
;"	") //if current month )) 
&¶&

//четверги
Let($ROW=4;"")&
If(
Month(c_date)=Month (DAY15_DATE-14-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE-14-(DAY15_DOW-$ROW) ))
;"	")//if
  & 
GetValue((STRING);Day(DAY15_DATE-7 -(DAY15_DOW-$ROW) )) &
GetValue((STRING);Day(DAY15_DATE   -(DAY15_DOW-$ROW) )) &
GetValue((STRING);Day(DAY15_DATE+7 -(DAY15_DOW-$ROW) )) &
If(
Month(c_date)=Month (DAY15_DATE+14-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE+14-(DAY15_DOW-$ROW) )) 
;"	") &
If(
Month(c_date)=Month (DAY15_DATE+21-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE+21-(DAY15_DOW-$ROW) )) 
;"	") //if current month )) 
&¶&

//пятницы

Let($ROW=5;"")&
If(
Month(c_date)=Month (DAY15_DATE-14-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE-14-(DAY15_DOW-$ROW) ))
;"	")//if
  & 
GetValue((STRING);Day(DAY15_DATE-7 -(DAY15_DOW-$ROW) )) &
GetValue((STRING);Day(DAY15_DATE   -(DAY15_DOW-$ROW) )) &
GetValue((STRING);Day(DAY15_DATE+7 -(DAY15_DOW-$ROW) )) &
If(
Month(c_date)=Month (DAY15_DATE+14-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE+14-(DAY15_DOW-$ROW) )) 
;"	") &
If(
Month(c_date)=Month (DAY15_DATE+21-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE+21-(DAY15_DOW-$ROW) )) 
;"	") //if current month 
&¶&

TextColor(   //for weekends

//субботы
Let($ROW=6;"")&
If(
Month(c_date)=Month (DAY15_DATE-14-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE-14-(DAY15_DOW-$ROW) ))
;"	")//if
  & 
GetValue((STRING);Day(DAY15_DATE-7 -(DAY15_DOW-$ROW) )) &
GetValue((STRING);Day(DAY15_DATE   -(DAY15_DOW-$ROW) )) &
GetValue((STRING);Day(DAY15_DATE+7 -(DAY15_DOW-$ROW) )) &
If(
Month(c_date)=Month (DAY15_DATE+14-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE+14-(DAY15_DOW-$ROW) )) 
;"	") &
If(
Month(c_date)=Month (DAY15_DATE+21-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE+21-(DAY15_DOW-$ROW) )) 
;"	") //if current month 
&¶&

//воскресенья

Let($ROW=7;"")&
If(
Month(c_date)=Month (DAY15_DATE-14-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE-14-(DAY15_DOW-$ROW) ))
;"	")//if
  & 
GetValue((STRING);Day(DAY15_DATE-7 -(DAY15_DOW-$ROW) )) &
GetValue((STRING);Day(DAY15_DATE   -(DAY15_DOW-$ROW) )) &
GetValue((STRING);Day(DAY15_DATE+7 -(DAY15_DOW-$ROW) )) &
If(
Month(c_date)=Month (DAY15_DATE+14-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE+14-(DAY15_DOW-$ROW) )) 
;"	") &
If(
Month(c_date)=Month (DAY15_DATE+21-(DAY15_DOW-$ROW));
GetValue((STRING);Day(DAY15_DATE+21-(DAY15_DOW-$ROW) )) 
;"	") //if current month

;RED)//end of add color for weekends

//select c_date and today
;[ TODAY ; TODAY ]; // today
[GetValue(STRING;Day(c_Date)); //c_date with highlight
Let([a=GetValue(STRING;Day(c_Date));
a=TextColor(a;BLUE);
//a=TextSize(a;"12");
a=TextStyleAdd(Right(a;2);Bold+HighlightYellow)]; "	"&a)]

)//end of select for c_date and today


) //let
Вложения
Calendarik.GIF
Calendarik.GIF (6.5 КБ) 41723 просмотра

Ответить