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

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

Написал запрос во внешней обработке на получение данных по графикам работы сотрудников, но при запуске получаю следующую ошибку:
"{ВнешняяОбработка.ЗаполнениеГрафиковВахты.Форма.Форма.Форма(216)}: Ошибка при вызове метода контекста (Выполнить)
           РезультатЗапросаГр = ЗапросГр.Выполнить().Выгрузить();
по причине:
{(19, 5)}: Таблица не найдена "ВТГрафикРаботыСотрудниковПериоды"
<<?>>ВТГрафикРаботыСотрудниковПериоды КАК ГрафикРаботыСотрудниковПериоды"

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

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

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

В чём ошибка?
---
Вообще график правильно получать из кадровых данных сотрудника на дату, используя шаблонные функции.
Пример:

```1c
    ТолькоРазрешенные = Истина;
    КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, "Сотрудник, ГрафикРаботы", ДатаПолученияДанных);
```
---
Там, где вы взяли этот запрос, где то должен быть еще один, который собирает таблицу ВТГрафикРаботыСотрудниковПериоды. Его к этому запросу нужно присоединить или через менеджер временных таблиц.
---
, где брал этот запрос больше ничего нет.
---
Поищите в других функциях, процедурах. По имени таблицы можно поискать
---
возможно в другой процедуре этот запрос получается. По названию таблиц понятно, что это программный интерфейс ЗУП вызван. Надо его вызов также скопировать туда, где Ваш запрос.
---
Вообще график правильно получать из кадровых данных сотрудника на дату, используя шаблонные функции.
Пример:

```1c
    ТолькоРазрешенные = Истина;
    КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, "Сотрудник, ГрафикРаботы", ДатаПолученияДанных);
```
---
Не совсем правильно, т.к. график может меняться втечение приода или на какие то дни заведен индивидуальный график. Это надо учитывать
---
, мне надо по текущему графику работы, указанному при принятии на работу, создать индивидуальный график (в моей организации хотят автоматом рассчитывать дежурства особым образом)!
---
Если график не будет меняться в месяце, за который делаете индивидуальный график или это не важно, то в (3) вариант наиболее простой
---
Тогда можно таким способом получать

```1c
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;

    ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТПериоды(Запрос.МенеджерВременныхТаблиц, ДатаНачала, ДатаОкончания, "ДЕНЬ", ,"ВТПериоды" , ИСТИНА);

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

    Описатель = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотруднико­в(МенеджерВременныхТаблиц, "ВТСотрудники");
    Описатель.ИмяВТКадровыеДанныеСотрудников = "ВТКадровыеДанныеСотрудников";
    КадровыеДанные = "Сотрудник, ГрафикРаботы";
    КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(Описатель, ИСТИНА, КадровыеДанные);
```
---
, не совсем понял, как получить на конкретную дату "ВидУчетаВремени"?

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

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

Большое спасибо!
Этого вполне достаточно, в данной конструкции есть практически я нужная мне информация, большая скорость обработки не требуется!
(Без запроса вполне сойдёт)
---
, можете подсказать, получится ли получить нужные мне данные через эту функцию?

Мне нужны данные из графика работы сотрудников за конкретный месяц.
Я использую такую конструкцию:

```1c
    КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, "Сотрудник, Подразделение", ДатаПолученияДанных);

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

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

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

    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
```

Но в цикле

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

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

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

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

Заранее благодарен!
---
, я понял, что ищу данные не там!

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

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

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

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

Будут вопросы, задавайте, поясню!
---
.