Создание произвольно вводимого периода в форме

1. MORSON 27.12.23 01:31 Сейчас в теме
Здраствуйте, имеется следующий макет и код.

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	
	// Запрос у пользователя начальной даты
	НачалоПериода = ВвестиДату("Введите начальную дату", ТекущаяДата());

	// Запрос у пользователя конечной даты
	КонецПериода = ВвестиДату("Введите конечную дату", ТекущаяДата());

	
	ТабДок = Новый ТабличныйДокумент;
	ПечатьНаВыбор(ТабДок, ПараметрКоманды, НачалоПериода, КонецПериода);
	ТабДок.Показать("Печать на выбор");
		
КонецПроцедуры


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

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

	Запрос.УстановитьПараметр("СсылкаНаДокумент", СсылкаНаДокумент);
	Запрос.УстановитьПараметр("Дата1", НачалоПериода); // НачалоПериода - это ваша переменная с начальной датой
	Запрос.УстановитьПараметр("Дата2", КонецПериода); // КонецПериода - это ваша переменная с конечной датой

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

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

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

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

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

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

	Если ВыборкаНачисленияЗП.Следующий() Тогда
	    СуммаНачисленияЗП = ВыборкаНачисленияЗП.СуммаНачисленияЗП;
	КонецЕсли;

	// Запрос для суммы НачисленияДополнительные.СуммаН
	ЗапросНачисленияДополнительные = Новый Запрос;
	ЗапросНачисленияДополнительные.Текст = 
	    "ВЫБРАТЬ
	    |    СУММА(НачислениеЗПСотрудникаНачисленияДополнительные.СуммаН) КАК СуммаНачисленияДополнительные
	    |ИЗ
	    |    Документ.НачислениеЗПСотрудника.НачисленияДополнительные КАК НачислениеЗПСотрудникаНачисленияДополнительные
	    |ГДЕ
	    |    НачислениеЗПСотрудникаНачисленияДополнительные.Ссылка.Ссылка = &СсылкаНаДокумент";

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

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

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

	Если ВыборкаНачисленияДополнительные.Следующий() Тогда
	    СуммаНачисленияДополнительные = ВыборкаНачисленияДополнительные.СуммаНачисленияДополнительные;
	КонецЕсли;

	// Расчет СальдоКонецН
	СальдоКонецН = СуммаНачисленияЗП + СуммаНачисленияДополнительные;

	// Вывод результата
	ОбластьПодвалНач.Параметры.СальдоКонецН = СальдоКонецН;
	ТабДок.Вывести(ОбластьПодвалНач);

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

	КонецЦикла;
	
	
	//подвал уд

// Запрос для суммы выплат
	ЗапросСуммаВыплат = Новый Запрос;
	ЗапросСуммаВыплат.Текст = 
		"ВЫБРАТЬ
		|	СУММА(НачислениеЗПСотрудникаВыплатыУдержанияБелые.СуммаВып) КАК СуммаВып
		|ИЗ
		|	Документ.НачислениеЗПСотрудника.ВыплатыУдержанияБелые КАК НачислениеЗПСотрудникаВыплатыУдержанияБелые
		|ГДЕ
		|	НачислениеЗПСотрудникаВыплатыУдержанияБелые.Ссылка.Ссылка = &СсылкаНаДокумент";

	ЗапросСуммаВыплат.УстановитьПараметр("СсылкаНаДокумент", СсылкаНаДокумент);

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

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

	Если ВыборкаСуммаВыплат.Следующий() Тогда
		СуммаВыплат = ВыборкаСуммаВыплат.СуммаВып;
	КонецЕсли;

	// Запрос для суммы удержаний
	ЗапросСуммаУдержаний = Новый Запрос;
	ЗапросСуммаУдержаний.Текст = 
		"ВЫБРАТЬ
		|	СУММА(НачислениеЗПСотрудникаУдержания.СуммаУ) КАК СуммаУ
		|ИЗ
		|	Документ.НачислениеЗПСотрудника.Удержания КАК НачислениеЗПСотрудникаУдержания
		|ГДЕ
		|	НачислениеЗПСотрудникаУдержания.Ссылка.Ссылка = &СсылкаНаДокумент";

	ЗапросСуммаУдержаний.УстановитьПараметр("СсылкаНаДокумент", СсылкаНаДокумент);

	РезультатЗапросаСуммаУдержаний = ЗапросСуммаУдержаний.Выполнить();

	ВыборкаСуммаУдержаний = РезультатЗапросаСуммаУдержаний.Выбрать();

	Если ВыборкаСуммаУдержаний.Следующий() Тогда
		СуммаУдержаний = ВыборкаСуммаУдержаний.СуммаУ;
	КонецЕсли;
	
	
	
	

	// Подвал уд
	СальдоКонецУ = СуммаВыплат + СуммаУдержаний;
    СальдоКонец = СальдоНачало + СальдоКонецН - СальдоКонецУ;
	
	ОбластьПодвалУд.Параметры.СальдоКонец = СальдоКонец;
	ОбластьПодвалУд.Параметры.СальдоКонецУ = СальдоКонецУ;
	ТабДок.Вывести(ОбластьПодвалУд);

КонецПроцедуры
Показать


Не могу разобраться как сделать так, чтобы дату по которой будет выводиться отчёт пользователь мог вписывать самостоятельно. Вроде с запросом разобрался использовал данный способ, но при выполнении программа выдаёт ошибку на 3 фото. Может сможет кто-нибудь подсказать?

//Строка таблицы Начисления
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	НачисленнаяЗПОборотыОбороты.Отделение КАК Отделение,
		|	НачисленнаяЗПОборотыОбороты.Должность КАК Должность,
		|	НачисленнаяЗПОборотыОбороты.СуммаЗПОборот КАК СуммаЗПОборот,
		|	НачисленнаяЗПОборотыОбороты.ВидРасчета КАК ВидРасчета,
		|	НачисленнаяЗПОборотыОбороты.ПериодМес КАК ПериодМес
		|ИЗ
		|	РегистрНакопления.НачисленнаяЗПОбороты.Обороты(
		|		&Дата1,
		|		&Дата2,
		|		Сотрудник = &Сотрудник
		|			И Организация = &Организация
		|			И Поликлиника = &Поликлиника) КАК НачисленнаяЗПОборотыОбороты
		|
		|УПОРЯДОЧИТЬ ПО
		|	ВидРасчета,
		|	ПериодМес,
		|	Отделение,
		|	Должность,
		|	СуммаЗПОборот";

	Запрос.УстановитьПараметр("СсылкаНаДокумент", СсылкаНаДокумент);
	Запрос.УстановитьПараметр("Дата1", НачалоПериода); // НачалоПериода - это ваша переменная с начальной датой
	Запрос.УстановитьПараметр("Дата2", КонецПериода); // КонецПериода - это ваша переменная с конечной датой

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

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

	// Обработка результатов запроса
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		ОбластьСтрокаТаблицыНач.Параметры.Отделение = ВыборкаДетальныеЗаписи.Отделение;
		ОбластьСтрокаТаблицыНач.Параметры.Должность = ВыборкаДетальныеЗаписи.Должность;
		ОбластьСтрокаТаблицыНач.Параметры.СуммаНачисления = ВыборкаДетальныеЗаписи.СуммаЗПОборот;
		
		ТабДок.Вывести(ОбластьСтрокаТаблицыНач);
	КонецЦикла;
Показать
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
7. n_mezentsev 48 27.12.23 15:18 Сейчас в теме
Предлагаю освоить использование стандартного периода (удобнее пользователю, правильнее - вам, хотя бы на время обратите внимание):
&НаКлиенте
Асинх Процедура Команда1(Команда)
	Период = Новый СтандартныйПериод;
	Диалог = Новый ДиалогРедактированияСтандартногоПериода();
	// отображение диалога с вариантами периодов
	Период.Вариант = ВариантСтандартногоПериода.ЭтотМесяц;
	Диалог.Период = Период;
	Результат = Ждать Диалог.РедактироватьАсинх();
	Если Результат <> Неопределено Тогда 
	    Период = Диалог.Период;
		Сообщить("Выбран период с " + Период.ДатаНачала + " по " + Период.ДатаОкончания);
	КонецЕсли; 
	
	//отображение в режиме календаря (легко переключается, но кто об этом знает)
	Период = Новый СтандартныйПериод;
	Диалог.Период = Период;
	Результат = Ждать Диалог.РедактироватьАсинх();
	Если Результат <> Неопределено Тогда 
	    Период = Диалог.Период;
		Сообщить("Выбран период с " + Период.ДатаНачала + " по " + Период.ДатаОкончания);
	КонецЕсли;

КонецПроцедуры
Показать

чтобы у пользователя был один из ниже указанных вариантов
Прикрепленные файлы:
2. Oldsad 27.12.23 05:00 Сейчас в теме
Глобальный контекст (Global context)
ВвестиДату (InputDate)
Синтаксис:

...

Примечание:
Если для конфигурации свойство РежимИспользованияМодальности установлено в НеИспользовать, следует использовать метод ПоказатьВводДаты.


взято из синтаксис помощника
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Oldsad 27.12.23 05:00 Сейчас в теме
Глобальный контекст (Global context)
ВвестиДату (InputDate)
Синтаксис:

...

Примечание:
Если для конфигурации свойство РежимИспользованияМодальности установлено в НеИспользовать, следует использовать метод ПоказатьВводДаты.


взято из синтаксис помощника
3. ActionBlog 27.12.23 09:30 Сейчас в теме
У Вас в конфигурации запрещено использовать модальные окна (это те, которые блокируют интерфейс), поэтому вместо Ввестидату Вам следует использовать ПоказатьВводДаты. Вам придется немного переписать код и, возможно, изучить как работает метод "ПоказатьВводДаты"
4. starjevschik 27.12.23 11:25 Сейчас в теме
Там еще можно сразу период задавать, а не спрашивать пользователя о каждой дате отдельно...
5. MORSON 27.12.23 11:27 Сейчас в теме
(4)Через метод "ПоказатьВводДаты"? Или вообще в принципе?
6. ActionBlog 27.12.23 12:11 Сейчас в теме
(5)Нет, через ПоказатьВводДаты можно только одну дату ввести. Я думаю, MORSON имел ввиду в принципе.
7. n_mezentsev 48 27.12.23 15:18 Сейчас в теме
Предлагаю освоить использование стандартного периода (удобнее пользователю, правильнее - вам, хотя бы на время обратите внимание):
&НаКлиенте
Асинх Процедура Команда1(Команда)
	Период = Новый СтандартныйПериод;
	Диалог = Новый ДиалогРедактированияСтандартногоПериода();
	// отображение диалога с вариантами периодов
	Период.Вариант = ВариантСтандартногоПериода.ЭтотМесяц;
	Диалог.Период = Период;
	Результат = Ждать Диалог.РедактироватьАсинх();
	Если Результат <> Неопределено Тогда 
	    Период = Диалог.Период;
		Сообщить("Выбран период с " + Период.ДатаНачала + " по " + Период.ДатаОкончания);
	КонецЕсли; 
	
	//отображение в режиме календаря (легко переключается, но кто об этом знает)
	Период = Новый СтандартныйПериод;
	Диалог.Период = Период;
	Результат = Ждать Диалог.РедактироватьАсинх();
	Если Результат <> Неопределено Тогда 
	    Период = Диалог.Период;
		Сообщить("Выбран период с " + Период.ДатаНачала + " по " + Период.ДатаОкончания);
	КонецЕсли;

КонецПроцедуры
Показать

чтобы у пользователя был один из ниже указанных вариантов
Прикрепленные файлы:
8. MORSON 28.12.23 10:42 Сейчас в теме
(7)Не подскажите пожалуйста, а как можно ли в это окно выбора периода ещё как-то впихнуть выбор сотрудника?
9. n_mezentsev 48 28.12.23 11:14 Сейчас в теме
(8) Впихнуть сюда не выйдет. Для этого вам либо нужна своя форма, где вы будете настраивать ВСЕ параметры либо вызов еще одного диалога
Сотрудник = Неопределено;
	Результат = Ждать ВвестиЗначениеАсинх(Сотрудник, "Укажите сотрудника", Тип("СправочникСсылка.Сотрудники"));
	Если Результат <> Неопределено Тогда 
		Сотрудник = Результат; 
		Сообщить("Сегодня дежурит: " + Сотрудник);
        Иначе
                 Сообщить("Выбор сотрудника отменен");
	КонецЕсли;


Хотя я не уверен, что подобный поочередный вызов входит в стандартный Look&Feel 1С - все-таки обычно параметры задаются на форме или подвязываются к ее элементам (например, выбранным строкам), но все зависит от ситуации, конечно
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот