Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
24 июн 2024, 06:22

Ошибка "преобразование к типу число не может быть выполнено"

Автор Sasha1C, 20 ноя 2023, 17:26

0 Пользователей и 1 гость просматривают эту тему.

Sasha1C

Добрый день столкнулся с ошибкой "преобразование к типу число не может быть выполнено", Код выборкиВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

КоличествоСписать = ВыборкаНоменклатуры.Количество();

Пока КоличествоСписать > 0 И ВыборкаДетальныеЗаписи.Следующий() Цикл
КоличествоПоПартии = Мин(КоличествоСписать,ВыборкаДетальныеЗаписи.КоличествоПоПартии);

Себестоимость = ?(КоличествоПоПартии = ВыборкаДетальныеЗаписи.КоличествоПоПартии,ВыборкаДетальныеЗаписи.СуммаПоПартии, ВыборкаДетальныеЗаписи.СуммаПоПартии / ВыборкаДетальныеЗаписи.КоличествоПоПартии);
                                     
Также показываю текст запроса
ВЫБРАТЬ
&Склад КАК Склад,
ПродажаТоваровТовары.Номенклатура КАК Номенклатура,
СУММА(ПродажаТоваровТовары.Количество) КАК Количество,
СУММА(ПродажаТоваровТовары.Сумма) КАК Сумма
ПОМЕСТИТЬ ВТ
ИЗ
Документ.ПродажаТоваров.Товары КАК ПродажаТоваровТовары
ГДЕ
ПродажаТоваровТовары.Ссылка = &Ссылка

СГРУППИРОВАТЬ ПО
ПродажаТоваровТовары.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ.Номенклатура КАК Номенклатура,
ВТ.Количество КАК Количество,
ВТ.Сумма КАК Сумма,
ОстаткиПоПартиямОстатки.Номенклатура КАК НоменклатураПартии,
ОстаткиПоПартиямОстатки.Партия КАК Партия,
ЕСТЬNULL(ОстаткиПоПартиямОстатки.КоличествоОстаток, 0) КАК КоличествоПоПартии,
ЕСТЬNULL(ОстаткиПоПартиямОстатки.СуммаОстаток, 0) КАК СуммаПоПартии
ИЗ
РегистрНакопления.ОстаткиПоПартиям.Остатки(
&МоментДокумента,
Номенклатура В
(ВЫБРАТЬ
ВТ.Номенклатура КАК Номенклатура
ИЗ
ВТ КАК ВТ)) КАК ОстаткиПоПартиямОстатки
ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ
ПО ОстаткиПоПартиямОстатки.Номенклатура = ВТ.Номенклатура

УПОРЯДОЧИТЬ ПО
ОстаткиПоПартиямОстатки.Партия.МоментВремени УБЫВ
ИТОГИ
МАКСИМУМ(Количество),
СУММА(КоличествоПоПартии)
ПО
Номенклатура

проблема заключается в том, что оба парметра являются числами, и такой ошибки быть не должно. Сама ошибка происходит на этом этапе Себестоимость = ?(КоличествоПоПартии = ВыборкаДетальныеЗаписи.КоличествоПоПартии". Как исправить эту проблему?

Максим75

Sasha1C, код обхода выборки можете полный дать.
если он полный, то там посмотрите

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
       
КоличествоСписать = ВыборкаНоменклатуры.Количество();

ВыборкаНоменклатуры - это что?

Sasha1C

Максим75, Это полный обход выборки. А сам запрос есть в прошлом сообщении. Убрал один из элементов из этого выражения " КоличествоПоПартии = ВыборкаДетальныеЗаписи.КоличествоПоПартии" и все заработало, попробовал убрать также второе вторую запись, и опять заработало, не могу понять где искать ошибку. Весь код брал отсюда "https://infostart.ru/1c/articles/1750344/"  Заранее спасибо. Если МетодСписания = Перечисления.СпособыСписания.ФИФО Тогда
        Запрос.Текст = СтрЗаменить(Запрос.Текст, ".МоментВремени УБЫВ", ".МоментВремени");
    КонецЕсли;
   
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаНоменклатуры = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   
    Пока ВыборкаНоменклатуры.Следующий() Цикл
       
        Движение = Движения.ОстаткиПоПартиям.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Номенклатура = ВыборкаНоменклатуры.Номенклатура;
        Движение.Партия = Ссылка;
        Движение.Количество = ВыборкаНоменклатуры.Количество;
        Движение.Сумма = ВыборкаНоменклатуры.Сумма;
       
        НеХватает = ВыборкаНоменклатуры.Количество - ВыборкаНоменклатуры.КоличествоПоПартии;
       
        Если НеХватает > 0 Тогда
            Отказ = Истина;
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Не хватает товара по партии, есть = " + ВыборкаНоменклатуры.КоличествоПоПартии + ". А нужно= " + ВыборкаНоменклатуры.Количество;
            Сообщение.Сообщить();
        КонецЕсли;
       
        Если Отказ Тогда
           
            Продолжить;
           
        КонецЕсли;

        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
       
        КоличествоСписать = ВыборкаНоменклатуры.Количество();
       
        Пока КоличествоСписать > 0 И ВыборкаДетальныеЗаписи.Следующий() Цикл
            КоличествоПоПартии = Мин(КоличествоСписать,ВыборкаДетальныеЗаписи.КоличествоПоПартии);
                   
            Себестоимость = ?(КоличествоПоПартии = ВыборкаДетальныеЗаписи.КоличествоПоПартии,ВыборкаДетальныеЗаписи.СуммаПоПартии, ВыборкаДетальныеЗаписи.СуммаПоПартии / ВыборкаДетальныеЗаписи.КоличествоПоПартии);
                                                 
              Движение = Движения.ОстаткиПоПартиям.Добавить();
              Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
              Движение.Период = Дата;
              Движение.Номенклатура =ВыборкаДетальныеЗаписи.Номенклатура;
              Движение.Партия = ВыборкадетальныеЗаписи.Партия;
              Движение.Количество = КоличествоПоПартии;
              Движение.Сумма = Себестоимость;
             
        КонецЦикла;
    КонецЦикла;
   

Максим75

Sasha1C, я Вам за это и писал, посмотрите внимательно мое письмо.
еще раз показываю:

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); -  это обход выборки
       
КоличествоСписать = ВыборкаНоменклатуры.Количество();  -  а это что? ВыборкаНоменклатуры как-то определялась?

Сейчас Вы исправили:
ВыборкаНоменклатуры = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);  - определили, что такое ВыборкаНоменклатуры
   
    Пока ВыборкаНоменклатуры.Следующий() Цикл

Убрали теперь ВыборкаДетальныеЗаписи - и все, ошибки нет.

Sasha1C

Максим75, Спасибо, я просто не сразу сообразил, где была моя ошибка.

Теги: ошибка 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск