ЗУП 3.1 запрос на получение Графика Работы Сотрудников
Здравствуйте!
Пока только изучаю программирование на 1С.
Установлена ЗУП 3.1 (3.1.17.138) 1С:Предприятие 8.3 (8.3.18.1289)
Написал запрос во внешней обработке на получение данных по графикам работы сотрудников, но при запуске получаю следующую ошибку:
"{ВнешняяОбработка.ЗаполнениеГрафиковВахты.Форма.Форма.Форма(216)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапросаГр = ЗапросГр.Выполнить().Выгрузить();
по причине:
{(19, 5)}: Таблица не найдена "ВТГрафикРаботыСотрудниковПериоды"
<<?>>ВТГрафикРаботыСотрудниковПериоды КАК ГрафикРаботыСотрудниковПериоды"
В чём ошибка?
Пока только изучаю программирование на 1С.
Установлена ЗУП 3.1 (3.1.17.138) 1С:Предприятие 8.3 (8.3.18.1289)
Написал запрос во внешней обработке на получение данных по графикам работы сотрудников, но при запуске получаю следующую ошибку:
"{ВнешняяОбработка.ЗаполнениеГрафиковВахты.Форма.Форма.Форма(216)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапросаГр = ЗапросГр.Выполнить().Выгрузить();
по причине:
{(19, 5)}: Таблица не найдена "ВТГрафикРаботыСотрудниковПериоды"
<<?>>ВТГрафикРаботыСотрудниковПериоды КАК ГрафикРаботыСотрудниковПериоды"
// Получаем графики работы сотрудников
ЗапросГр = Новый Запрос;
ЗапросГр.Текст =
"ВЫБРАТЬ
| ГрафикРаботыСотрудниковПериоды.Сотрудник КАК Сотрудник,
| ГрафикРаботыСотрудниковПериоды.ДатаНачала КАК ДатаНачала,
| ГрафикРаботыСотрудниковПериоды.ДатаОкончания КАК ДатаОкончания,
| СУММА(ВЫБОР
| КОГДА ДанныеПроизводственногоКалендаря.ВидДня В (ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий), ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ) КАК НормаДнейПоПроизводственномуКалендарю,
| СУММА(ВЫБОР
| КОГДА ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный)
| ТОГДА 7
| КОГДА ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
| ТОГДА 8
| ИНАЧЕ 0
| КОНЕЦ) КАК НормаЧасовПоПроизводственномуКалендарю
|ПОМЕСТИТЬ ВТДанныеПроизводственногоКалендаряПоСотрудникам
|ИЗ
| ВТГрафикРаботыСотрудниковПериоды КАК ГрафикРаботыСотрудниковПериоды
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГрафикиРаботыСотрудников КАК ГрафикиРаботыСотрудников
| ПО ГрафикРаботыСотрудниковПериоды.ГрафикРаботы = ГрафикиРаботыСотрудников.Ссылка
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
| ПО ГрафикРаботыСотрудниковПериоды.НачалоПериода <= ДанныеПроизводственногоКалендаря.Дата
| И ГрафикРаботыСотрудниковПериоды.КонецПериода >= ДанныеПроизводственногоКалендаря.Дата
| И (ГрафикиРаботыСотрудников.ПроизводственныйКалендарь = ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь)
|
|СГРУППИРОВАТЬ ПО
| ГрафикРаботыСотрудниковПериоды.Сотрудник,
| ГрафикРаботыСотрудниковПериоды.ДатаНачала,
| ГрафикРаботыСотрудниковПериоды.ДатаОкончания";
ЗапросГр.УстановитьПараметр("ДатаНачала",НачПериодГрафиковРаботы);
ЗапросГр.УстановитьПараметр("ДатаОкончания",КонПериодГрафиковРаботы);
ЗапросГр.УстановитьПараметр("Сотрудник",Сотрудник);
РезультатЗапросаГр = ЗапросГр.Выполнить().Выгрузить();
ПоказатьВ чём ошибка?
По теме из базы знаний
- Универсальные функции ЗУП 3.1 / ЗКГУ 3.1, которые помогут в разработке
- Внешние печатные формы для 1С:Зарплата и управление персоналом 3.1
- Пример создания кадрового отчета для ЗУП 3.1
- Практическое применение менеджера расчета для расчета зарплаты "на лету" через отчет за произвольное количество месяцев в конфигурации ЗУП 3.1 и ERP
- Личный кабинет сотрудника в 1С ЗУП 3.1 в Telegram
Найденные решения
(1)Вообще график правильно получать из кадровых данных сотрудника на дату, используя шаблонные функции.
Пример:
Пример:
ТолькоРазрешенные = Истина;
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, "Сотрудник, ГрафикРаботы", ДатаПолученияДанных);
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)Вообще график правильно получать из кадровых данных сотрудника на дату, используя шаблонные функции.
Пример:
Пример:
ТолькоРазрешенные = Истина;
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, "Сотрудник, ГрафикРаботы", ДатаПолученияДанных);
(5)Тогда можно таким способом получать
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТПериоды(Запрос.МенеджерВременныхТаблиц, ДатаНачала, ДатаОкончания, "ДЕНЬ", ,"ВТПериоды" , ИСТИНА);
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Сотрудники.Ссылка КАК Сотрудник,
| КОНЕЦПЕРИОДА(ВТПериоды.Период, ДЕНЬ) КАК Период
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТПериоды КАК ВТПериоды
| ПО (ИСТИНА)
|ГДЕ
| Сотрудники.Ссылка = &Сотрудник"
Описатель = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотруднико в(МенеджерВременныхТаблиц, "ВТСотрудники");
Описатель.ИмяВТКадровыеДанныеСотрудников = "ВТКадровыеДанныеСотрудников";
КадровыеДанные = "Сотрудник, ГрафикРаботы";
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(Описатель, ИСТИНА, КадровыеДанные);
Показать
(10), не совсем понял, как получить на конкретную дату "ВидУчетаВремени"?
Мне надо определить по рабочему графику (по Графику работы сотрудника), есть ли выходной на определённую дату?
Как не пробую, вижу только недельный цикл из "Шаблона настроек графика", но не могу получить информацию на конкретную дату!
Мне надо определить по рабочему графику (по Графику работы сотрудника), есть ли выходной на определённую дату?
Как не пробую, вижу только недельный цикл из "Шаблона настроек графика", но не могу получить информацию на конкретную дату!
(3)
Большое спасибо!
Этого вполне достаточно, в данной конструкции есть практически я нужная мне информация, большая скорость обработки не требуется!
(Без запроса вполне сойдёт)
ТолькоРазрешенные = Истина;
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, "Сотрудник, Подразделение", ДатаПолученияДанных);
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, "Сотрудник, Подразделение", ДатаПолученияДанных);
Большое спасибо!
Этого вполне достаточно, в данной конструкции есть практически я нужная мне информация, большая скорость обработки не требуется!
(Без запроса вполне сойдёт)
(3), можете подсказать, получится ли получить нужные мне данные через эту функцию?
Мне нужны данные из графика работы сотрудников за конкретный месяц.
Я использую такую конструкцию:
Но в цикле
выдаётся только 7 дней, затем цикл заканчивается!
Я что-то делаю не так или это невозможно в данной функции?
В "СписокСотрудников" указан только один сотрудник.
Заранее благодарен!
Мне нужны данные из графика работы сотрудников за конкретный месяц.
Я использую такую конструкцию:
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, "Сотрудник, Подразделение", ДатаПолученияДанных);
ЧасовВДеньПоГрафику = 0;
Для Каждого КадровыеДанныеСотрудника Из КадровыеДанныеСотрудников Цикл
// Рассчитаем количество часов в день по графику
ЧасовВНеделюПоГрафику = КадровыеДанныеСотрудника.Регистратор.ГрафикРаботы.ДлительностьРабочейНедели;
ЧасовВДеньПоГрафику = ЧасовВНеделюПоГрафику/5;
КонецЦикла;
// Откроем табличную чать данных о рабочем времени сотрудника по табелю (Для поиска выходных)
Для Каждого ДанныеОРабочихЧасахСотрудника Из КадровыеДанныеСотрудника.Регистратор.ГрафикРаботы.ДанныеОРабочихЧасах Цикл
Если ДанныеОРабочихЧасахСотрудника.ВидВремени.БуквенныйКод = "В" Тогда // Находим выходные и прописываем их в индивидуальный график
ДеньМесяца = ДанныеОРабочихЧасахСотрудника.НомерДняЦикла;
Если СменыИГ["ВидВремени"+Строка(ДеньМесяца)].БуквенныйКод <> "Д" Тогда
СтрокаИндГрафикРаботыДок = ИндГрафикРаботыДок.ДанныеОВремени.Найти(ДеньМесяца,"НомерСтроки");
// Заполним все выходные дни
СтрокаИндГрафикРаботыДок["ВидВремени"+Строка(ДеньМесяца)] = ДанныеОРабочихЧасахСотрудника.ВидВремени;
СтрокаИндГрафикРаботыДок["Часов"+Строка(ДеньМесяца)] = 0;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПоказатьНо в цикле
Для Каждого ДанныеОРабочихЧасахСотрудника Из КадровыеДанныеСотрудника.Регистратор.ГрафикРаботы.ДанныеОРабочихЧасах Цикл
выдаётся только 7 дней, затем цикл заканчивается!
Я что-то делаю не так или это невозможно в данной функции?
В "СписокСотрудников" указан только один сотрудник.
Заранее благодарен!
(13), я понял, что ищу данные не там!
Я открываю "Расписание работы" из настроек "Графика работы", т.е. шаблон, на основе которого заполняется конкретный график.
А мне нужны данные из уже заполненного документа "График работы".
Пока не разобрался, как их получить, пробую различные способы...
О результатах отпишусь!
Я открываю "Расписание работы" из настроек "Графика работы", т.е. шаблон, на основе которого заполняется конкретный график.
А мне нужны данные из уже заполненного документа "График работы".
Пока не разобрался, как их получить, пробую различные способы...
О результатах отпишусь!
(17), в итоге не стали сильно заморачиваться, я заполнил вручную шаблон:
- В настройках графика работы указал "Способ заполнения" - "По циклам"
- В видах времени указал Дневные и Ночные часы
- В расписании заполнил часы работы (Ночь и День) по дням, начиная с понедельника столько дней, сколько будет повторяться цикл - что бы получилось целое количество недель! (Для каждого работника-сторожа отдельно, у нас их 3 человека. Цикличность получилась 21 день, т.е. 3 недели)
- Указал дату начала отсчёта графика (Обязательно с понедельника)
А дальше, автоматом заполняется График работы и остаётся подкорректировать время в праздничные дни (или там, где будет несоответствие), таких каждый месяц набирается 1-3-5, не больше! Но это меньше ,чем заполнять график полностью вручную!
Будут вопросы, задавайте, поясню!
- В настройках графика работы указал "Способ заполнения" - "По циклам"
- В видах времени указал Дневные и Ночные часы
- В расписании заполнил часы работы (Ночь и День) по дням, начиная с понедельника столько дней, сколько будет повторяться цикл - что бы получилось целое количество недель! (Для каждого работника-сторожа отдельно, у нас их 3 человека. Цикличность получилась 21 день, т.е. 3 недели)
- Указал дату начала отсчёта графика (Обязательно с понедельника)
А дальше, автоматом заполняется График работы и остаётся подкорректировать время в праздничные дни (или там, где будет несоответствие), таких каждый месяц набирается 1-3-5, не больше! Но это меньше ,чем заполнять график полностью вручную!
Будут вопросы, задавайте, поясню!
Прикрепленные файлы:
![](/upload/forum/upload/433/433ca2abef386bf3acc9866e6a5e5be0.jpg)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот