Контроль остатков

1. G_104675376381940917085 26.05.24 14:36 Сейчас в теме
Почему если я хочу продавать товаров больше чем на складе, у меня выдаёт такую ошибку? Если я хочу продать товаров 10, а на складе у меня всего 5,то выдаёт эту ошибку

Преобразование значения к типу Число не может быть выполнено
{Документ.РасходнаяНакладная.МодульОбъекта(196)}: Движение.Прибыль = СуммаДокумента - СуммаСебестоимости;


Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    // регистр Взаиморасчёты Приход
    Движения.Взаиморасчёты.Записывать = Истина;
    Движение = Движения.Взаиморасчёты.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    Движение.Период = Дата;
    Движение.Контрагент = Клиент;
    Движение.Сумма = СуммаДокумента;
    
    // регистр ТоварыНаСкладах Расход
    Движения.ТоварыНаСкладах.Записывать = Истина;
    Для Каждого ТекСтрокаТовары Из Товары Цикл
        Движение = Движения.ТоварыНаСкладах.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Номенклатура = ТекСтрокаТовары.Товар;
        Движение.Склад = Склад;
        Движение.Количество = ТекСтрокаТовары.Количество;
    КонецЦикла;
    
    
    
    Запрос1 = Новый Запрос;
    Запрос1.Текст = 
    "ВЫБРАТЬ
    |    РасходнаяНакладнаяТовары.Товар КАК Товар,
    |    СУММА(РасходнаяНакладнаяТовары.Количество) КАК Количество,
    |    РасходнаяНакладнаяТовары.Ссылка.Склад КАК Склад
    |ПОМЕСТИТЬ ВременнаяТабличнаяЧастьТовары
    |ИЗ
    |    Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары
    |ГДЕ
    |    РасходнаяНакладнаяТовары.Ссылка = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    |    РасходнаяНакладнаяТовары.Товар,
    |    РасходнаяНакладнаяТовары.Ссылка.Склад
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    |    ВременнаяТабличнаяЧастьТовары.Товар КАК Товар,
    |    ВременнаяТабличнаяЧастьТовары.Товар.Представление КАК ТоварПредставление,
    |    ВременнаяТабличнаяЧастьТовары.Количество КАК Количество,
    |    ВременнаяТабличнаяЧастьТовары.Склад КАК Склад,
    |    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток
    |ИЗ
    |    ВременнаяТабличнаяЧастьТовары КАК ВременнаяТабличнаяЧастьТовары
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
    |                &Дата,
    |                (Номенклатура, Склад) В
    |                    (ВЫБРАТЬ
    |                        ВременнаяТабличнаяЧастьТовары.Товар КАК Товар,
    |                        ВременнаяТабличнаяЧастьТовары.Склад КАК Склад
    |                    ИЗ
    |                        ВременнаяТабличнаяЧастьТовары КАК ВременнаяТабличнаяЧастьТовары)) КАК ТоварыНаСкладахОстатки
    |        ПО ВременнаяТабличнаяЧастьТовары.Товар = ТоварыНаСкладахОстатки.Номенклатура
    |            И ВременнаяТабличнаяЧастьТовары.Склад = ТоварыНаСкладахОстатки.Склад
    |
    |УПОРЯДОЧИТЬ ПО
    |    Товар,
    |    Склад";
    
    Запрос1.УстановитьПараметр("Склад", Склад);
    Запрос1.УстановитьПараметр("Ссылка", Ссылка); 
    Запрос1.УстановитьПараметр("Дата",Дата);
    
    РезультатЗапроса1 = Запрос1.Выполнить();
    
    Выборка = РезультатЗапроса1.Выбрать();
    Пока Выборка.Следующий() Цикл
        Если Выборка.Количество > Выборка.КоличествоОстаток Тогда
            Сообщить("Не хватает товара " + Выборка.ТоварПредставление + " " + (Выборка.Количество - Выборка.КоличествоОстаток));
            Отказ = Истина;
        КонецЕсли;
        Если Отказ Тогда
            Продолжить;
        КонецЕсли;

        // регистр ТоварыНаСкладах Расход
        Движения.ТоварыНаСкладах.Записывать = Истина;
        Для Каждого ТекСтрокаТовары Из Товары Цикл
            Движение = Движения.ТоварыНаСкладах.Добавить();
            Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
            Движение.Период = Дата;
            Движение.Номенклатура = ТекСтрокаТовары.Товар;
            Движение.Склад = Склад;
            Движение.Количество = ТекСтрокаТовары.Количество;
        КонецЦикла;
        
    КонецЦикла;
    
    
    
    Если НЕ Отказ Тогда            
        
        Запрос = Новый Запрос;
        Запрос.Текст = 
        "ВЫБРАТЬ
        |    СебестоимостьТоваровОстатки.Номенклатура КАК Номенклатура,
        |    СебестоимостьТоваровОстатки.СуммаОстаток КАК Сумма,
        |    СебестоимостьТоваровОстатки.КоличествоОстаток КАК Количество
        |ИЗ
        |    РегистрНакопления.СебестоимостьТоваров.Остатки(
        |            &МоментВремени,
        |            Номенклатура В
        |                (ВЫБРАТЬ
        |                    РасходнаяНакладнаяТовары.Товар КАК Товар
        |                ИЗ
        |                    Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары
        |                ГДЕ
        |                    РасходнаяНакладнаяТовары.Ссылка = &Ссылка)) КАК СебестоимостьТоваровОстатки";
        
        Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
        Запрос.УстановитьПараметр("Ссылка", Ссылка);
        
        РезультатЗапроса = Запрос.Выполнить();
        
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        
        СуммаСебестоимости = 0;
        
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            Если  ВыборкаДетальныеЗаписи.Количество <> 0 Тогда 
                СебестоимостьЕдиницы = ВыборкаДетальныеЗаписи.Сумма/ВыборкаДетальныеЗаписи.Количество;
            Иначе 
                СебестоимостьЕдиницы = 0;
            КонецЕсли;  
            Движения.СебестоимостьТоваров.Записывать = Истина;
            Движения.Продажи.Записывать = Истина;
            Движение = Движения.СебестоимостьТоваров.Добавить();
            Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
            Движение.Период = Дата;
            
            СтрокаТЧ = Товары.Найти(ВыборкаДетальныеЗаписи.Номенклатура,"Товар");
            
            Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
            Движение.Количество = СтрокаТЧ.Количество; 
            СебестоимостьСписания = СебестоимостьЕдиницы * СтрокаТЧ.Количество;
            Движение.Сумма = СебестоимостьСписания; 
            
            // Движения по регистру продажи
            Движение = Движения.Продажи.Добавить();
            Движение.Период = Дата;
            Движение.Клиент = Клиент;
            Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
            Движение.Количество = СтрокаТЧ.Количество;
            Движение.Сумма = СтрокаТЧ.Сумма;
            Движение.СебестоимостьТовара = СебестоимостьСписания; 
            
            СуммаСебестоимости = СуммаСебестоимости + СебестоимостьСписания;
            
        КонецЦикла;    
    КонецЕсли;
    
    Движения.РегистрБухУчёт.Записывать = Истина;
    
    Проводка = Движения.РегистрБухУчёт.Добавить();
    Проводка.Период = Дата;
    Проводка.СчетДт = ПланыСчетов.БухгалтерскийУчёт.Покупатели;
    Проводка.СчетКт = ПланыСчетов.БухгалтерскийУчёт.Выручка;
    Проводка.Сумма = СуммаДокумента; 
    
    Проводка = Движения.РегистрБухУчёт.Добавить();
    Проводка.Период = Дата;
    Проводка.СчетДт = ПланыСчетов.БухгалтерскийУчёт.Себестоимость;
    Проводка.СчетКт = ПланыСчетов.БухгалтерскийУчёт.Товары;
    Проводка.Сумма = СуммаСебестоимости; 
    
    Движения.ЭффективностьПродаж.Записывать = Истина;
    Движение = Движения.ЭффективностьПродаж.Добавить();
    Движение.Период = Дата;
    Движение.Сотрудник = Сотрудник;
    Движение.КоличествоОтгрузок = 1;
    Движение.Выручка = СуммаДокумента;
    Движение.Прибыль = СуммаДокумента - СуммаСебестоимости;
    
    
КонецПроцедуры
Показать
По теме из базы знаний
Найденные решения
3. spacecraft 26.05.24 15:04 Сейчас в теме
(1)
Если НЕ Отказ Тогда

Себестоимость инициируется и заполняется в этом блоке.
Если Отказ, тогда в этот блок не заходит и Себестоимость = Неопределено.
Соответственно
Движение.Прибыль = СуммаДокумента - Неопределено; выдаст такую ошибку.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. G_104675376381940917085 26.05.24 14:39 Сейчас в теме
(1) В отладчике я посмотрел, если я хочу продать больше товаров чем есть, то себестоимость этого товара будет 0, но почему тогда выдаёт эту ошибку
3. spacecraft 26.05.24 15:04 Сейчас в теме
(1)
Если НЕ Отказ Тогда

Себестоимость инициируется и заполняется в этом блоке.
Если Отказ, тогда в этот блок не заходит и Себестоимость = Неопределено.
Соответственно
Движение.Прибыль = СуммаДокумента - Неопределено; выдаст такую ошибку.
4. G_104675376381940917085 26.05.24 15:22 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот