|
Преобразование значения к типу Число не может быть выполнено | ☑ | ||
|---|---|---|---|---|
|
0
Anilad
11.02.26
✎
11:13
|
ЧИтаю книгу 1С:Предприятие 8.3. Практическое пособие разработчика. Примеры и типовые приемы. Издание 3-е. При расчете з/п выдает следующую ошибку:
Ошибка при выполнении обработчика - 'ОбработкаПроведения' по причине: Преобразование значения к типу Число не может быть выполнено {ОбщийМодуль.ПроведениеРасчетов.Модуль(35)}:ЗаписьРегистра.Результат = (ЗаписьРегистра.ИсходныеДанные/ВыборкаРезультата.Норма) * ВыборкаРезультата.Факт; {Документ.НачисленияСотрудникам.МодульОбъекта(42)}:ПроведениеРасчетов.РассчитатьНачисления(Движения.Начисления, [ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка] Текст программы общего модуля: Процедура РассчитатьНачисления(НаборЗаписейРегистра , ТребуемыйВидРасчета, СписокСотрудников) Экспорт Регистратор = НаборЗаписейРегистра.Отбор.Регистратор.Значение; // Рассчитать первичные записи Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НачисленияДанныеГрафика.ЗначениеПериодДействия КАК Норма, | НачисленияДанныеГрафика.ЗначениеФактическийПериодДействия | КАК Факт, | НачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки |ИЗ | РегистрРасчета.Начисления.ДанныеГрафика(Регистратор = | &Регистратор И | ВидРасчета = &ВидРасчета И Сотрудник В (&СписокСотрудников)) | КАК НачисленияДанныеГрафика"; Запрос.УстановитьПараметр("Регистратор", Регистратор); Запрос.УстановитьПараметр("ВидРасчета", ТребуемыйВидРасчета); Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников); ВыборкаРезультата = Запрос.Выполнить().Выбрать(); Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл СтруктураНомер = Новый Структура("НомерСтроки"); СтруктураНомер.НомерСтроки = ЗаписьРегистра.НомерСтроки; ВыборкаРезультата.Сбросить(); Если ВыборкаРезультата.НайтиСледующий(СтруктураНомер) Тогда Если ВыборкаРезультата.Норма = 0 Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Вид расчета: Оклад – Нет рабочих дней в заданном периоде"; Сообщение.Сообщить(); ЗаписьРегистра.Результат = 0; Иначе // Рассчитать оклад по фактическому периоду и исходным данным ЗаписьРегистра.Результат = (ЗаписьРегистра.ИсходныеДанные/ВыборкаРезультата.Норма) * ВыборкаРезультата.Факт; Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Выполнен расчет " + ЗаписьРегистра.Регистратор + " – " + ЗаписьРегистра.ВидРасчета + " – " + ЗаписьРегистра.Сотрудник; Сообщение.Сообщить(); КонецЕсли; КонецЕсли; КонецЦикла; // Рассчитать вторичные записи ИначеЕсли ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Премия Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НачисленияБазаНачисления.РезультатБаза КАК База, | НачисленияБазаНачисления.НомерСтроки КАК НомерСтроки |ИЗ | РегистрРасчета.Начисления.БазаНачисления(&ИзмеренияОсновного, | &ИзмеренияБазового, , Регистратор = | &Регистратор И ВидРасчета = &ВидРасчета И | Сотрудник В (&СписокСотрудников)) | КАК НачисленияБазаНачисления"; Измер = Новый Массив(1); Измер[0] = "Сотрудник"; Запрос.УстановитьПараметр("ИзмеренияОсновного", Измер); Запрос.УстановитьПараметр("ИзмеренияБазового", Измер); Запрос.УстановитьПараметр("Регистратор", Регистратор); Запрос.УстановитьПараметр("ВидРасчета", ТребуемыйВидРасчета); Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников); ВыборкаРезультата = Запрос.Выполнить().Выбрать(); КонецЕсли; КонецПроцедуры Модуль Документа: Процедура ОбработкаПроведения(Отказ, Режим) //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! // регистр Начисления Движения.Начисления.Записывать = Истина; Для Каждого ТекСтрокаНачисления Из Начисления Цикл Движение = Движения.Начисления.Добавить(); Движение.Сторно = Ложь; Движение.ВидРасчета = ТекСтрокаНачисления.ВидРасчета; Движение.ПериодДействияНачало = ТекСтрокаНачисления.ДатаНачала; Движение.ПериодДействияКонец = КонецДня(ТекСтрокаНачисления.ДатаОкончания); Движение.ПериодРегистрации = Дата; Движение.БазовыйПериодНачало = ТекСтрокаНачисления.ДатаНачала; Движение.БазовыйПериодКонец = КонецДня(ТекСтрокаНачисления.ДатаОкончания); Движение.Сотрудник = ТекСтрокаНачисления.Сотрудник; Движение.ГрафикРаботы = ТекСтрокаНачисления.ГрафикРаботы; Движение.ИсходныеДанные = ТекСтрокаНачисления.Начислено; КонецЦикла; //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Записываем движения регистров Движения.Начисления.Записать(); // Получим список всех сотрудников, содержащихся в документе Запрос = Новый Запрос( "ВЫБРАТЬ РАЗЛИЧНЫЕ | НачисленияСотрудникамНачисления.Сотрудник |ИЗ | Документ.НачисленияСотрудникам.Начисления КАК | НачисленияСотрудникамНачисления | |ГДЕ | НачисленияСотрудникамНачисления.Ссылка = &ТекущийДокумент"); Запрос.УстановитьПараметр("ТекущийДокумент", Ссылка); // Сформируем список сотрудников ТаблЗнач = Запрос.Выполнить().Выгрузить(); МассивСотрудников = ТаблЗнач.ВыгрузитьКолонку("Сотрудник"); // Вызов процедуры РассчитатьНачисления из общего модуля ПроведениеРасчетов.РассчитатьНачисления(Движения.Начисления, ПланыВидовРасчета.ОсновныеНачисления.Оклад, МассивСотрудников); Движения.Начисления.Записать( , Истина); ПроведениеРасчетов.РассчитатьНачисления(Движения.Начисления, ПланыВидовРасчета.ОсновныеНачисления.Премия, МассивСотрудников); Движения.Начисления.Записать( , Истина); КонецПроцедуры Подскажите, пж, в чем проблема |
|||
|
1
mikecool
11.02.26
✎
11:14
|
Null, Неопределено - выбирай на вкус
|
|||
|
2
Гипервизор
11.02.26
✎
11:17
|
(0) Вот тут у вас типа математика типа с числами:
(ИсходныеДанные / Норма) * Факт Вот и проверьте тип этих значений в отладчике. |
|||
|
3
mikecool
11.02.26
✎
11:24
|
моя ставка ВыборкаРезультата - пусто
|
|||
|
4
Anilad
11.02.26
✎
11:28
|
(3) пишет, что ВыборкаРезультата число со значением 20
|
|||
|
5
Anilad
11.02.26
✎
11:31
|
(2) везде тип число
|
|||
|
6
PLUT
гуру
11.02.26
✎
11:31
|
(4) ЗаписьРегистра.ИсходныеДанные какое значение? (в строке 35 по коду ашипки из (0))
|
|||
|
7
Anilad
11.02.26
✎
11:38
|
В общем гайс, оказалось, что я одному сотруднику неправильно написал период расчета зп. У меня зп рассчитывалась за 2026 год, а я ему поставил 2025))))) ахахахахах. 2 час с этой фигней возился лол
|
|||
|
8
Гипервизор
11.02.26
✎
11:44
|
(7) Малоинформативно.
|
|||
|
9
Anilad
11.02.26
✎
11:46
|
(8) какая тебе информация нужна?
|
|||
|
10
Гипервизор
11.02.26
✎
11:51
|
(9) Как связан неправильный период расчёта с ошибкой преобразования значения к типу Число?
|
|||
|
11
Волшебник
11.02.26
✎
21:30
|
(0) тупой бот
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |