|
|
|
Преобразование значения к типу Число не может быть выполнено | ☑ | ||
|---|---|---|---|---|
|
0
LayneTredz
27.10.15
✎
22:32
|
Доброго времени суток. Очень прошу помочь, ибо уже третий день пытаюсь понять в чем проблема, но все бестолку.
Имеется такой код: ... Процедура ОбработкаПроведения(Отказ, Режим) //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! Движения.ОстаткиМатериалов.Записывать = Истина; Движения.СтоимостьМатериалов.Записывать = Истина; Движения.Продажи.Записывать = Истина; //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! МенеджерВТ = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | ОказаниеУслугиПереченьНоменклатуры.Номенклатура, | ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры, | СУММА(ОказаниеУслугиПереченьНоменклатуры.Количество) КАК КоличествоВДокументе, | СУММА(ОказаниеУслугиПереченьНоменклатуры.Сумма) КАК СуммаВДокументе |ПОМЕСТИТЬ НоменклатураДокумента |ИЗ | Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры |ГДЕ | ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | ОказаниеУслугиПереченьНоменклатуры.Номенклатура, | ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Результат = Запрос.Выполнить(); Запрос2 = Новый Запрос; Запрос2.МенеджерВременныхТаблиц = МенеджерВТ; Запрос2.Текст = "ВЫБРАТЬ | НоменклатураДокумента.Номенклатура, | НоменклатураДокумента.ВидНоменклатуры, | НоменклатураДокумента.КоличествоВДокументе, | НоменклатураДокумента.СуммаВДокументе, | ЕСТЬNULL(СтоимостьМатериаловОстатки.СтоимостьОстаток, 0) КАК Стоимость, | ЕСТЬNULL(ОстаткиМатериаловОстатки.КоличествоОстаток, 0) КАК Количество |ИЗ | НоменклатураДокумента КАК НоменклатураДокумента | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки( | , | Материал В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента)) КАК СтоимостьМатериаловОстатки | ПО НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки( | , | Материал В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента)) КАК ОстаткиМатериаловОстатки | ПО НоменклатураДокумента.Номенклатура = ОстаткиМатериаловОстатки.Материал"; Движения.СтоимостьМатериалов.Записать(); Движения.ОстаткиМатериалов.Записать(); Результат = Запрос2.Выполнить(); ТЗ = Результат.Выгрузить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.Количество = 0 Тогда СтоимостьМатариала = 0; Иначе СтоимостьМатериала = ВыборкаДетальныеЗаписи.Стоимость / ВыборкаДетальныеЗаписи.Количество; КонецЕсли; Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда //регистр Остатки Материалов Расход Движение = Движения.ОстаткиМатериалов.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Склад = Склад; Движение.Количество = ВыборкаДетальныеЗаписи.Количество; //регистр Стоимость Материалов Расход Движение = Движения.СтоимостьМатериалов.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Стоимость = ВыборкаДетальныеЗаписи.КоличествоВДокументе * СтоимостьМатериала; КонецЕсли; //регистр Продажи Движение = Движения.Продажи.Добавить(); Движение.Период = Дата; Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Клиент = Клиент; Движение.Мастер = Мастер; Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе; Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе; Движение.Стоимость = СтоимостьМатериала * ВыборкаДетальныеЗаписи.КоличествоВДокументе; КонецЦикла; КонецПроцедуры ... При проведение документа выдает ошибку "Преобразование значения к типу Число не может быть выполнено" на последней строке. Проверял тип реквизита Стоимость у регистра накопления Продажи - нет, все верно, число. Ведь строка ... Движение.Стоимость = ВыборкаДетальныеЗаписи.КоличествоВДокументе * СтоимостьМатериала; ... проходит, значит, и последняя строка должна проходить. Код скопипастен из книги "Практическое пособие разработчика 1С:Предприятие 8.2" , поэтому я даже понятия не имею, где может быть ошибка. |
|||
|
1
LayneTredz
27.10.15
✎
22:36
|
Имеется ввиду, эта же строка у регистра накопления "Стоимость Материалов"
|
|||
|
2
FIXXXL
27.10.15
✎
22:37
|
Если есь левое соединение, возможен null
В запросе null не обрабатывается, отсюда и ошибка |
|||
|
3
FIXXXL
27.10.15
✎
22:38
|
Хотя обрабатываеся вроде...
|
|||
|
4
LayneTredz
27.10.15
✎
22:40
|
(2) В том то и дело что функция ЕСТЬNULL описана, поэтому ошибок быть не должно, я уж не совсем дурак)
|
|||
|
5
фобка
27.10.15
✎
22:42
|
отладчик
|
|||
|
6
фобка
27.10.15
✎
22:44
|
Отставить - количествовдокументе - неопределено.
Ты первый результат вообще зачем сделал? |
|||
|
7
LayneTredz
27.10.15
✎
23:08
|
(6) Ну как, первый запрос создает общий набор данных, а второй вытаскивает из них только необходимые для него и добавочно взаимодействует с регистрами. А чтобы первый запрос был сформирован, как я понял и существует строка:
... Результат = Запрос.Выполнить(); ... |
|||
|
8
LayneTredz
27.10.15
✎
23:10
|
(6) К слову, ошибку с неопределением я тоже видел, но опять же, она была на последней строке, то есть такая же строка в регистре Стоимость Материалов опять же проходила спокойно.
|
|||
|
9
LayneTredz
27.10.15
✎
23:28
|
(6) Хотя скорее всего первый запрос необходим для получения виртуальных таблиц с данными, которые я не смог бы вытащить из виртуальных таблиц сгенерированных системой.
|
|||
|
10
Aleksandr N
28.10.15
✎
00:12
|
(0) Там могут быть значения null. Попробуйте в запросе сделать проверку на null через isnull.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |