ЗУП 3.1 запрос на получение Графика Работы Сотрудников

1. PovAndy 30.04.21 15:32 Сейчас в теме
Здравствуйте!
Пока только изучаю программирование на 1С.

Установлена ЗУП 3.1 (3.1.17.138) 1С:Предприятие 8.3 (8.3.18.1289)

Написал запрос во внешней обработке на получение данных по графикам работы сотрудников, но при запуске получаю следующую ошибку:
"{ВнешняяОбработка.ЗаполнениеГрафиковВахты.Форма.Форма.Форма(216)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапросаГр = ЗапросГр.Выполнить().Выгрузить();
по причине:
{(19, 5)}: Таблица не найдена "ВТГрафикРаботыСотрудниковПериоды"
<<?>>ВТГрафикРаботыСотрудниковПериоды КАК ГрафикРаботыСотрудниковПериоды"
	// Получаем графики работы сотрудников
	ЗапросГр = Новый Запрос;				
        ЗапросГр.Текст =
		"ВЫБРАТЬ
		|    ГрафикРаботыСотрудниковПериоды.Сотрудник КАК Сотрудник,
	    |    ГрафикРаботыСотрудниковПериоды.ДатаНачала КАК ДатаНачала,
	    |    ГрафикРаботыСотрудниковПериоды.ДатаОкончания КАК ДатаОкончания,
	    |    СУММА(ВЫБОР
	    |            КОГДА ДанныеПроизводственногоКалендаря.ВидДня В (ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий), ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
	    |                ТОГДА 1
	    |            ИНАЧЕ 0
	    |        КОНЕЦ) КАК НормаДнейПоПроизводственномуКалендарю,
	    |    СУММА(ВЫБОР
	    |            КОГДА ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный)
	    |                ТОГДА 7
	    |            КОГДА ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
	    |                ТОГДА 8
	    |            ИНАЧЕ 0
	    |        КОНЕЦ) КАК НормаЧасовПоПроизводственномуКалендарю
	    |ПОМЕСТИТЬ ВТДанныеПроизводственногоКалендаряПоСотрудникам
	    |ИЗ
	    |    ВТГрафикРаботыСотрудниковПериоды КАК ГрафикРаботыСотрудниковПериоды
	    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГрафикиРаботыСотрудников КАК ГрафикиРаботыСотрудников
	    |        ПО ГрафикРаботыСотрудниковПериоды.ГрафикРаботы = ГрафикиРаботыСотрудников.Ссылка
	    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
	    |        ПО ГрафикРаботыСотрудниковПериоды.НачалоПериода <= ДанныеПроизводственногоКалендаря.Дата
	    |            И ГрафикРаботыСотрудниковПериоды.КонецПериода >= ДанныеПроизводственногоКалендаря.Дата
	    |            И (ГрафикиРаботыСотрудников.ПроизводственныйКалендарь = ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь)
	    |
	    |СГРУППИРОВАТЬ ПО
	    |    ГрафикРаботыСотрудниковПериоды.Сотрудник,
	    |    ГрафикРаботыСотрудниковПериоды.ДатаНачала,
	    |    ГрафикРаботыСотрудниковПериоды.ДатаОкончания";

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

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


В чём ошибка?
По теме из базы знаний
Найденные решения
3. Sakuraso 30.04.21 15:47 Сейчас в теме
(1)Вообще график правильно получать из кадровых данных сотрудника на дату, используя шаблонные функции.
Пример:
ТолькоРазрешенные = Истина;
	КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, "Сотрудник, ГрафикРаботы", ДатаПолученияДанных);
teca; shalupov61; DoctorRoot; user1600441; user1592156; PovAndy; +6 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. WasiliyMay 8 30.04.21 15:40 Сейчас в теме
(1) Там, где вы взяли этот запрос, где то должен быть еще один, который собирает таблицу ВТГрафикРаботыСотрудниковПериоды. Его к этому запросу нужно присоединить или через менеджер временных таблиц.
4. PovAndy 30.04.21 15:48 Сейчас в теме
(2), где брал этот запрос больше ничего нет.
7. WasiliyMay 8 30.04.21 15:51 Сейчас в теме
(4)Поищите в других функциях, процедурах. По имени таблицы можно поискать
11. biimmap 1860 30.04.21 16:07 Сейчас в теме
(4) возможно в другой процедуре этот запрос получается. По названию таблиц понятно, что это программный интерфейс ЗУП вызван. Надо его вызов также скопировать туда, где Ваш запрос.
3. Sakuraso 30.04.21 15:47 Сейчас в теме
(1)Вообще график правильно получать из кадровых данных сотрудника на дату, используя шаблонные функции.
Пример:
ТолькоРазрешенные = Истина;
	КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, "Сотрудник, ГрафикРаботы", ДатаПолученияДанных);
teca; shalupov61; DoctorRoot; user1600441; user1592156; PovAndy; +6 Ответить
5. WasiliyMay 8 30.04.21 15:49 Сейчас в теме
(3)Не совсем правильно, т.к. график может меняться втечение приода или на какие то дни заведен индивидуальный график. Это надо учитывать
8. PovAndy 30.04.21 15:52 Сейчас в теме
(5), мне надо по текущему графику работы, указанному при принятии на работу, создать индивидуальный график (в моей организации хотят автоматом рассчитывать дежурства особым образом)!
9. WasiliyMay 8 30.04.21 15:55 Сейчас в теме
(8)Если график не будет меняться в месяце, за который делаете индивидуальный график или это не важно, то в (3) вариант наиболее простой
10. Sakuraso 30.04.21 15:55 Сейчас в теме
(5)Тогда можно таким способом получать
        Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	
	ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТПериоды(Запрос.МенеджерВременныхТаблиц, ДатаНачала, ДатаОкончания, "ДЕНЬ", ,"ВТПериоды" , ИСТИНА);
	
	Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
	               |	Сотрудники.Ссылка КАК Сотрудник,
	               |	КОНЕЦПЕРИОДА(ВТПериоды.Период, ДЕНЬ) КАК Период
	               |ПОМЕСТИТЬ ВТСотрудники
	               |ИЗ
	               |	Справочник.Сотрудники КАК Сотрудники
	               |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТПериоды КАК ВТПериоды
	               |		ПО (ИСТИНА)
	               |ГДЕ
	               |	Сотрудники.Ссылка = &Сотрудник"
	
	Описатель = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотруднико­в(МенеджерВременныхТаблиц, "ВТСотрудники");
	Описатель.ИмяВТКадровыеДанныеСотрудников = "ВТКадровыеДанныеСотрудников";	
	КадровыеДанные = "Сотрудник, ГрафикРаботы";
	КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(Описатель, ИСТИНА, КадровыеДанные);
Показать
Neuroproton; zavis11; Amadeus8; +3 Ответить
15. PovAndy 25.05.21 15:20 Сейчас в теме
(10), не совсем понял, как получить на конкретную дату "ВидУчетаВремени"?

Мне надо определить по рабочему графику (по Графику работы сотрудника), есть ли выходной на определённую дату?

Как не пробую, вижу только недельный цикл из "Шаблона настроек графика", но не могу получить информацию на конкретную дату!
16. Sakuraso 25.05.21 15:43 Сейчас в теме
(15)Добрый день, смотрите в регистр сведений "Графики работы по видам времени", из самих настроек графика никогда не вздумайте читать.
20. Neuroproton 18 29.03.24 11:42 Сейчас в теме
(10) не совсем в тему, но хочу выразить огромную благодарность за этот код, очень помогло в реализации другой задачи
6. PovAndy 30.04.21 15:49 Сейчас в теме
(3), это намного проще!
Попробую на практике и отпишусь, меня такая конструкция устроит!
12. PovAndy 30.04.21 16:09 Сейчас в теме
(3)
ТолькоРазрешенные = Истина;
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, "Сотрудник, Подразделение", ДатаПолученияДанных);


Большое спасибо!
Этого вполне достаточно, в данной конструкции есть практически я нужная мне информация, большая скорость обработки не требуется!
(Без запроса вполне сойдёт)
13. PovAndy 14.05.21 09:04 Сейчас в теме
(3), можете подсказать, получится ли получить нужные мне данные через эту функцию?

Мне нужны данные из графика работы сотрудников за конкретный месяц.
Я использую такую конструкцию:
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, "Сотрудник, Подразделение", ДатаПолученияДанных);

					ЧасовВДеньПоГрафику	= 0;
					Для Каждого КадровыеДанныеСотрудника Из КадровыеДанныеСотрудников Цикл
						// Рассчитаем количество часов в день по графику
						ЧасовВНеделюПоГрафику	= КадровыеДанныеСотрудника.Регистратор.ГрафикРаботы.ДлительностьРабочейНедели;
						ЧасовВДеньПоГрафику	= ЧасовВНеделюПоГрафику/5;
					КонецЦикла;
					
					//	Откроем табличную чать данных о рабочем времени сотрудника по табелю (Для поиска выходных)
						Для Каждого ДанныеОРабочихЧасахСотрудника Из КадровыеДанныеСотрудника.Регистратор.ГрафикРаботы.ДанныеОРабочихЧасах Цикл

							Если ДанныеОРабочихЧасахСотрудника.ВидВремени.БуквенныйКод = "В" Тогда  // Находим выходные и прописываем их в индивидуальный график
								ДеньМесяца	= ДанныеОРабочихЧасахСотрудника.НомерДняЦикла;
								Если СменыИГ["ВидВремени"+Строка(ДеньМесяца)].БуквенныйКод <> "Д" Тогда
									СтрокаИндГрафикРаботыДок	= ИндГрафикРаботыДок.ДанныеОВремени.Найти(ДеньМесяца,"НомерСтроки");
											// Заполним все выходные дни
									СтрокаИндГрафикРаботыДок["ВидВремени"+Строка(ДеньМесяца)]	= ДанныеОРабочихЧасахСотрудника.ВидВремени;
									СтрокаИндГрафикРаботыДок["Часов"+Строка(ДеньМесяца)]	= 0;

								
								КонецЕсли;
							КонецЕсли;
						КонецЦикла;
Показать


Но в цикле
Для Каждого ДанныеОРабочихЧасахСотрудника Из КадровыеДанныеСотрудника.Регистратор.ГрафикРаботы.ДанныеОРабочихЧасах Цикл

выдаётся только 7 дней, затем цикл заканчивается!

Я что-то делаю не так или это невозможно в данной функции?

В "СписокСотрудников" указан только один сотрудник.

Заранее благодарен!
14. PovAndy 17.05.21 09:11 Сейчас в теме
(13), я понял, что ищу данные не там!

Я открываю "Расписание работы" из настроек "Графика работы", т.е. шаблон, на основе которого заполняется конкретный график.
А мне нужны данные из уже заполненного документа "График работы".

Пока не разобрался, как их получить, пробую различные способы...

О результатах отпишусь!
17. Hla 82 31.01.22 14:33 Сейчас в теме
(14) Напишите пожалуйста о результатах.
19. PovAndy 10.02.22 11:43 Сейчас в теме
(17), в итоге не стали сильно заморачиваться, я заполнил вручную шаблон:
- В настройках графика работы указал "Способ заполнения" - "По циклам"
- В видах времени указал Дневные и Ночные часы
- В расписании заполнил часы работы (Ночь и День) по дням, начиная с понедельника столько дней, сколько будет повторяться цикл - что бы получилось целое количество недель! (Для каждого работника-сторожа отдельно, у нас их 3 человека. Цикличность получилась 21 день, т.е. 3 недели)
- Указал дату начала отсчёта графика (Обязательно с понедельника)

А дальше, автоматом заполняется График работы и остаётся подкорректировать время в праздничные дни (или там, где будет несоответствие), таких каждый месяц набирается 1-3-5, не больше! Но это меньше ,чем заполнять график полностью вручную!

Будут вопросы, задавайте, поясню!
Прикрепленные файлы:
18. PovAndy 10.02.22 11:42 Сейчас в теме
Оставьте свое сообщение

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