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

Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
У вас в разных запросах поля по разному называютсяч, а ищите вы по одному полю...
[IS-QUOTE] | ЗанятиеШтатныеПозицииОстатки.КоличествоСтавокОстаток КАК КоличествоСтавокОстаток[/QUOTE]
Если ВыборкаДетальныеЗаписиРасписание.НайтиСледующий(КоличествоСтавок) Тогда
СтавкиРасписание = ВыборкаДетальныеЗаписиРасписание.КоличествоСтавок;
КонецЕсли;
Если ВыборкаДетальныеЗаписиПозиции.НайтиСледующий(КоличествоСтавок) Тогда
СтавкиПозиции = ВыборкаДетальныеЗаписиПозиции.КоличествоСтавокОстаток;
КонецЕсли;
СтавкиРасписание = ВыборкаДетальныеЗаписиРасписание.КоличествоСтавок;
КонецЕсли;
Если ВыборкаДетальныеЗаписиПозиции.НайтиСледующий(КоличествоСтавок) Тогда
СтавкиПозиции = ВыборкаДетальныеЗаписиПозиции.КоличествоСтавокОстаток;
КонецЕсли;
У вас в разных запросах поля по разному называютсяч, а ищите вы по одному полю...
| ШтатноеРасписание.КоличествоСтавок КАК КоличествоСтавок
[IS-QUOTE] | ЗанятиеШтатныеПозицииОстатки.КоличествоСтавокОстаток КАК КоличествоСтавокОстаток[/QUOTE]
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот