Не заполненные даты в дневнике. ППМ

Я уже ранее написал запрос, который показывал мне не завершенные в дневнике даты.

Когда я заканчиваю дневник за дату, я пишу в начале даты запись дневника с заголовком ОК:

Прошлый запрос показывал мне даты без таких записей.

Но он не работал, если за день не было вообще никаких записей.

Пришлось написать обработку, которая строит массив дат и получает не завершенные даты запросом:

Все бы ничего, но иногда я ставлю ОК в середине дня, если дописал записи только до этого момента. А это не завершенные дни, такие тоже надо дописывать.

В итоге доработал запрос и он стал таким:

Форма обработки простая:

Код тоже не сложный:


&НаСервере
Процедура СформироватьНаСервере()      
	Тдаты = Новый ТаблицаЗначений();
	ТДаты.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
	
	Дата = Дата1;
	Пока Дата <= Дата2 Цикл
		ТДаты.Добавить().Дата = Дата;
		Дата = Дата + 24*3600;
	КонецЦикла;
	
	З = Новый Запрос(
	"ВЫБРАТЬ
	|	ТДаты.Дата КАК ДАТА
	|ПОМЕСТИТЬ ТДаты
	|ИЗ
	|	&ТДаты КАК ТДаты
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	ТДаты.ДАТА КАК Дата
	|ИЗ
	|	ТДаты КАК ТДаты
	|ГДЕ
	|	НЕ ТДаты.ДАТА В
	|				(ВЫБРАТЬ РАЗЛИЧНЫЕ
	|					НАЧАЛОПЕРИОДА(ВнутреннийДневник.Дата, ДЕНЬ) КАК Дата
	|				ИЗ
	|					Справочник.Дневник КАК ВнутреннийДневник
	|						ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
	|							МИНИМУМ(Т.Дата) КАК МинДата,
	|							НАЧАЛОПЕРИОДА(Т.Дата, ДЕНЬ) КАК День
	|						ИЗ
	|							Справочник.Дневник КАК Т
	|						СГРУППИРОВАТЬ ПО
	|							НАЧАЛОПЕРИОДА(Т.Дата, ДЕНЬ)) КАК ВнутреннийДневникМин
	|						ПО
	|							НАЧАЛОПЕРИОДА(ВнутреннийДневник.Дата, ДЕНЬ) = ВнутреннийДневникМин.День
	|				ГДЕ
	|					ВнутреннийДневник.Наименование ПОДОБНО &Подстрока
	|					И ВнутреннийДневник.Дата = ВнутреннийДневникМин.МинДата)");
	З.УстановитьПараметр("Тдаты", Тдаты);                                  
	З.УстановитьПараметр("Подстрока", Подстрока);                                  
	Выборка = З.Выполнить().Выбрать();
	Сч = 1;
	Пока Выборка.Следующий() Цикл
		Сообщить("" + Сч + ": " + Формат(Выборка.Дата, "ДФ=dd.MM.yyyy") + " " + ДеньНедели(Выборка.Дата)) ;
		Сч = Сч + 1;
	КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура Сформировать(Команда)
	Если НЕ ЗначениеЗаполнено(Дата1) Тогда
		ПоказатьПредупреждение(, "Заполните начальную дату!");
		Возврат;
	КонецЕсли;
	ОчиститьСообщения();
	СформироватьНаСервере();
КонецПроцедуры

Дневник веду с 3 мая 2020, пометки ОК начал делать с 25 июля 2020.

В итоге полный список пропущенных дней содержит 44 пропуска:

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *