|
Ошибка: Преобразование значения к типу Число не может быть выполнено | ☑ | ||
---|---|---|---|---|
0
MathaiShung
30.04.16
✎
18:49
|
При попытке списать себестоимость товаров возникает эта ошибка, указывает на на модуль менеджера документа ПродажаТоваров, где находится обработчик списания себестоимости.
Проверю в отладчике - все переменные в выражении на которое ссылается ошибка итак имеют тип число, зачем тогда вообще что-то преобразовывать? В чём тогда ошибка, не могу понять, что не так?? Может у кого было что-то подобное, подскажите пожалуйста. |
|||
1
MathaiShung
30.04.16
✎
18:51
|
(0) NULL в переменные не попадает
|
|||
2
Lexey_
30.04.16
✎
19:16
|
(0) код и полный текст ошибки нужно угадать?
|
|||
3
MathaiShung
30.04.16
✎
19:24
|
(2) Текст ошибки: Документ.ПродажаТоваров.МодульМенеджера(287)}: Преобразование значения к типу Число не может быть выполнено
СтоимостьКСписанию = ВыборкаДетальныеЗаписи.СуммаОстаток/ВыборкаДетальныеЗаписи.КоличествоОстаток*КоличествоКСписанию; Код: Функция СписатьСебестоимостьТоваровДокумента(ДокументСсылка) Экспорт НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ПродажаТоваровТовары.Номенклатура, | ПродажаТоваровТовары.Ссылка.Склад |ИЗ | Документ.ПродажаТоваров.Товары КАК ПродажаТоваровТовары |ГДЕ | ПродажаТоваровТовары.Ссылка = &Ссылка | И ПродажаТоваровТовары.Номенклатура.ВидНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ВидыТоваров.Услуга)"; Запрос.УстановитьПараметр("Ссылка",ДокументСсылка); Результат = Запрос.Выполнить(); Если НЕ Результат.Пустой() Тогда ТаблицаДляБлокирования = Результат.Выгрузить(); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.ИсточникДанных = ТаблицаДляБлокирования; ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура"); ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Склад","Склад"); Блокировка.Заблокировать(); КонецЕсли; ФлагУспешностиСписания = Истина; НаборЗаписей = РегистрыНакопления.ОстаткиНоменклатуры.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка); НаборЗаписей.Записать(); //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПродажаТоваровТовары.Номенклатура КАК Номенклатура, | ПродажаТоваровТовары.Ссылка.Склад КАК Склад, | СУММА(ПродажаТоваровТовары.Количество) КАК Количество, | ПродажаТоваровТовары.Ссылка.Дата |ПОМЕСТИТЬ ТабДок |ИЗ | Документ.ПродажаТоваров.Товары КАК ПродажаТоваровТовары |ГДЕ | ПродажаТоваровТовары.Ссылка = &Ссылка | И ПродажаТоваровТовары.Номенклатура.ВидНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ВидыТоваров.Услуга) | |СГРУППИРОВАТЬ ПО | ПродажаТоваровТовары.Номенклатура, | ПродажаТоваровТовары.Ссылка.Склад, | ПродажаТоваровТовары.Ссылка.Дата | |ИНДЕКСИРОВАТЬ ПО | Номенклатура, | Склад |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТабДок.Дата КАК Дата, | ТабДок.Склад, | ТабДок.Номенклатура КАК Номенклатура, | ТабДок.Количество КАК Количество, | ОстаткиНоменклатурыОстатки.Партия КАК Партия, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) КАК СуммаОстаток |ИЗ | ТабДок КАК ТабДок | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки( | &Момент, | (Номенклатура, Склад) В | (ВЫБРАТЬ | ТабДок.Номенклатура, | ТабДок.Склад | ИЗ | ТабДок КАК ТабДок)) КАК ОстаткиНоменклатурыОстатки | ПО ТабДок.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура |"; Если РегистрыСведений.УчётнаяПолитика = Перечисления.МетодыСписания.FIFO Тогда Запрос.Текст = Запрос.Текст + " |УПОРЯДОЧИТЬ ПО | Номенклатура, | Дата, | Партия"; Иначе Запрос.Текст = Запрос.Текст + " |УПОРЯДОЧИТЬ ПО | Номенклатура, | Дата УБЫВ, | Партия"; КонецЕсли; Запрос.Текст = Запрос.Текст + " |ИТОГИ | МАКСИМУМ(Количество), | СУММА(КоличествоОстаток), | СУММА(СуммаОстаток) |ПО | Номенклатура"; Запрос.УстановитьПараметр("Ссылка", ДокументСсылка); Запрос.УстановитьПараметр("Момент",ДокументСсылка.МоментВремени()); РезультатЗапроса = Запрос.Выполнить(); ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА Пока ВыборкаНоменклатура.Следующий() Цикл Если ВыборкаНоменклатура.КоличествоОстаток < ВыборкаНоменклатура.Количество Тогда ФлагУспешностиСписания = Ложь; Сообщение = Новый СообщениеПользователю; Нехватка = ВыборкаНоменклатура.Количество - ВыборкаНоменклатура.КоличествоОстаток; Сообщение.Текст = "В документе №"+ДокументСсылка.Номер+" от "+ДокументСсылка.Дата+" на складе не хватает "+Нехватка+" единиц товара "+ВыборкаНоменклатура.Номенклатура; Сообщение.Сообщить(); Иначе КоличествоНадоСписать = ВыборкаНоменклатура.Количество; ВыборкаДетальныеЗаписи = ВыборкаНоменклатура.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.КоличествоОстаток <= КоличествоНадоСписать Тогда КоличествоКСписанию = ВыборкаДетальныеЗаписи.КоличествоОстаток; СтоимостьКСписанию = ВыборкаДетальныеЗаписи.СуммаОстаток; КоличествоНадоСписать = КоличествоНадоСписать - КоличествоКСписанию; Иначе КоличествоНадоСписать = КоличествоКСписанию; Если ВыборкаДетальныеЗаписи.КоличествоОстаток <>0 Тогда СтоимостьКСписанию = ВыборкаДетальныеЗаписи.СуммаОстаток/ВыборкаДетальныеЗаписи.КоличествоОстаток*КоличествоКСписанию; Иначе СтоимостьКСписанию = ВыборкаДетальныеЗаписи.СуммаОстаток; КонецЕсли; КоличествоНадоСписать = 0; КонецЕсли; Движение = НаборЗаписей.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = ВыборкаДетальныеЗаписи.Дата; Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Склад = ВыборкаДетальныеЗаписи.Склад; Движение.Партия = ВыборкаДетальныеЗаписи.Партия; Движение.Количество = КоличествоКСписанию; Движение.Сумма = СтоимостьКСписанию; Если КоличествоНадоСписать <= 0 Тогда Прервать; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; Если ФлагУспешностиСписания И НаборЗаписей.Количество() <> 0 Тогда НаборЗаписей.Записать(); КонецЕсли; ЗафиксироватьТранзакцию(); Возврат ФлагУспешностиСписания; КонецФункции |
|||
4
Lexey_
30.04.16
✎
19:25
|
(3) 287 это какая строка?
|
|||
5
MathaiShung
30.04.16
✎
19:28
|
(4) Строка: СтоимостьКСписанию = ВыборкаДетальныеЗаписи.СуммаОстаток/ВыборкаДетальныеЗаписи.КоличествоОстаток*КоличествоКСписанию (после Пока ВыборкаДетальныеЗаписи.Следующий, в ветке Иначе)
|
|||
6
tixis
30.04.16
✎
19:33
|
Не верю, , делаешь остановка по ошибке + срин табло с переменными
|
|||
7
Lexey_
30.04.16
✎
19:33
|
(5) видимо,КоличествоКСписанию не определена, отладчик поможет
|
|||
8
tixis
30.04.16
✎
19:35
|
(7) тоже к этому склоняюсь ))
|
|||
9
MathaiShung
30.04.16
✎
19:43
|
(6) (7) Да, действительно - сейчас сделал остановку по ошибке и показал КоличествоКсписанию - Необределено. До этого тоже думал на эту переменную, но просто точку останова ставил и Неопределено не было, возвращалось число.
|
|||
10
Lexey_
30.04.16
✎
19:45
|
(9) не там ставил
|
|||
11
MathaiShung
30.04.16
✎
19:49
|
(10) Да как не там, вроде в том же самом месте, а результаты разные, вот:
https://yadi.sk/d/G0aL_DRirQk2x https://yadi.sk/d/48P9YiMarQk5j |
|||
12
hhhh
30.04.16
✎
22:28
|
(11) это же внутри цикла происходит, 999 раз может быть число, а на 1000-й раз не число.
|
|||
13
Злопчинский
01.05.16
✎
00:41
|
Я конечно могу ошибаться
Но Цикл выборкадетальные записи Если Условие Тогда // !!!!! Условие на первом проходе не выполнилось Иначе //здесь млин КоличествоКСписнию - откуда инициализировано будет??? |
|||
14
Lexey_
01.05.16
✎
00:43
|
(13) да-да, это уже выяснилось
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |