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

Значение не является значением объектного типа

Автор Полина, 20 дек 2018, 04:05

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

Полина

Здравствуйте! Помогите, пожалуйста! Не могу понять почему не хочет делать движение по Количеству и по Партиям. Пытаюсь сделать партионный учет

Процедура ОбработкаПроведения(Отказ, Режим)
   // регистр ТоварыНаСкладах Расход
   
   
   МенеджерВТ = Новый МенеджерВременныхТаблиц;
   
   Запрос = Новый Запрос;
   
   Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
   Запрос.Текст =
      "ВЫБРАТЬ
      |   РасходнаяНакладнаяТовары.Номенклатура КАК Номенклатура,
      |   РасходнаяНакладнаяТовары.Склад КАК Склад,
      |   СУММА(РасходнаяНакладнаяТовары.Количество) КАК КоличествоВДокументе,
      |   РасходнаяНакладнаяТовары.Сумма КАК СуммаВДокументе,
      |   ТоварыНаСкладах.Партия КАК Партия
      |ПОМЕСТИТЬ НоменклатураДокумента
      |ИЗ
      |   Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары,
      |   РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
      |      ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходнаяНакладная КАК ПриходнаяНакладная
      |      ПО ТоварыНаСкладах.Регистратор = ПриходнаяНакладная.Ссылка
      |         И ТоварыНаСкладах.Партия = ПриходнаяНакладная.Ссылка
      |ГДЕ
      |   РасходнаяНакладнаяТовары.Ссылка = &Ссылка
      |
      |СГРУППИРОВАТЬ ПО
      |   РасходнаяНакладнаяТовары.Номенклатура,
      |   РасходнаяНакладнаяТовары.Склад,
      |   РасходнаяНакладнаяТовары.Сумма,
      |   ТоварыНаСкладах.Партия";
   
   Запрос.УстановитьПараметр("Ссылка", Ссылка);
   
   РезультатЗапроса = Запрос.Выполнить();
   
   Запрос2=Новый Запрос;
   Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;//ТОВАРЫ ОСТАТКИ НЕ ПРАВИЛЬНО ПОЛУЧЕНЫ ГДЕ АПРОС ПО СКЛАДУ? учись получать товары по складам!
   //ПРИМЕР ПОСТАВЬ 200 ТОВАРОВ НА СКЛАД 1
   //СПИШИ По 100 С КАЖДОГО СКЛАДА ОДНИМ ДОКУМЕНТОМ ПРОЖИ
   
   Запрос2.Текст =  "ВЫБРАТЬ
                    |   НоменклатураДокумента.Номенклатура КАК Номенклатура,
                    |   НоменклатураДокумента.СуммаВДокументе КАК СуммаВДокументе,
                    |   ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
                    |   НоменклатураДокумента.Склад КАК Склад,
                    |   ЕСТЬNULL(ТоварыНаСкладахОстатки.СуммаОстаток, 0) КАК СуммаОстаток,
                    |   ТоварыНаСкладахОстатки.Партия КАК Партия,
                    |   НоменклатураДокумента.КоличествоВДокументе КАК КоличествоВДокументе
                    |ИЗ
                    |   НоменклатураДокумента КАК НоменклатураДокумента
                    |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
                    |            &Период,
                    |            (Номенклатура, Склад) В
                    |               (ВЫБРАТЬ
                    |                  НоменклатураДокумента.Номенклатура,
                    |                  НоменклатураДокумента.Склад
                    |               ИЗ
                    |                  НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки
                    |      ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
                    |         И НоменклатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад
                    |ИТОГИ
                    |   МАКСИМУМ(СуммаВДокументе),
                    |   СУММА(КоличествоОстаток),
                    |   МАКСИМУМ(КоличествоВДокументе)
                    |ПО
                    |   Номенклатура";
   Запрос2.УстановитьПараметр("Период",МоментВремени());

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

antoneus

Это все прекрасно, но хоть на какую строчку ругается-то? Приведите текст ошибки целиком.
Добавлено: 20 дек 2018, 17:24


Если ВыборкаДетальныеЗаписи.КоличествоОстаток <> 0 Тогда
   Движение = Себестоимость;
КонецЕсли;


И вот легким движением руки Движение уже не движение, а число :)

Полина

Цитата: antoneus от 20 дек 2018, 10:42
Это все прекрасно, но хоть на какую строчку ругается-то? Приведите текст ошибки целиком.
Добавлено: 20 дек 2018, 17:24


Если ВыборкаДетальныеЗаписи.КоличествоОстаток <> 0 Тогда
   Движение = Себестоимость;
КонецЕсли;


И вот легким движением руки Движение уже не движение, а число :)
Да, не по глазам было)
А вот , не подскажите, почему он в 3 Запросе не видит, какой склад, пока не начала делать партионный учет, все было хорошо


Процедура ОбработкаПроведения(Отказ, Режим)
   // регистр ТоварыНаСкладах Расход
   Движения.ТоварыНаСкладах.Записывать = Истина;
   
   
   МенеджерВТ = Новый МенеджерВременныхТаблиц;
   
   Запрос = Новый Запрос;
   
   Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
   Запрос.Текст = "ВЫБРАТЬ
                  |   РасходнаяНакладнаяТовары.Номенклатура КАК Номенклатура,
                  |   РасходнаяНакладнаяТовары.Склад КАК Склад,
                  |   РасходнаяНакладнаяТовары.Количество КАК КоличествоВДокументе,
                  |   РасходнаяНакладнаяТовары.Сумма КАК СуммаВДокументе
                  |ПОМЕСТИТЬ НоменклатураДокумента
                  |ИЗ
                  |   Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары
                  |ГДЕ
                  |   РасходнаяНакладнаяТовары.Ссылка = &Ссылка
                  |
                  |СГРУППИРОВАТЬ ПО
                  |   РасходнаяНакладнаяТовары.Номенклатура,
                  |   РасходнаяНакладнаяТовары.Склад,
                  |   РасходнаяНакладнаяТовары.Количество,
                  |   РасходнаяНакладнаяТовары.Сумма";
   
   Запрос.УстановитьПараметр("Ссылка", Ссылка);
   
   РезультатЗапроса = Запрос.Выполнить();
   
   Запрос2=Новый Запрос;
   Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
   Запрос2.Текст =  "ВЫБРАТЬ
                    |   НоменклатураДокумента.Номенклатура КАК Номенклатура,
                    |   НоменклатураДокумента.СуммаВДокументе КАК СуммаВДокументе,
                    |   ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
                    |   НоменклатураДокумента.Склад КАК Склад,
                    |   ЕСТЬNULL(ТоварыНаСкладахОстатки.СуммаОстаток, 0) КАК СуммаОстаток,
                    |   ТоварыНаСкладахОстатки.Партия КАК Партия,
                    |   НоменклатураДокумента.КоличествоВДокументе КАК КоличествоВДокументе
                    |ИЗ
                    |   НоменклатураДокумента КАК НоменклатураДокумента
                    |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
                    |            &Период,
                    |            (Номенклатура, Склад) В
                    |               (ВЫБРАТЬ
                    |                  НоменклатураДокумента.Номенклатура,
                    |                  НоменклатураДокумента.Склад
                    |               ИЗ
                    |                  НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки
                    |      ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
                    |         И НоменклатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад
                    |ИТОГИ
                    |   МАКСИМУМ(СуммаВДокументе),
                    |   СУММА(КоличествоОстаток),
                    |   МАКСИМУМ(КоличествоВДокументе)
                    |ПО
                    |   Номенклатура";
   Запрос2.УстановитьПараметр("Период",МоментВремени());
   
   //Движения.ТоварыНаСкладах.БлокироватьДляИзменения = Истина;
   //////
   //Движения.ТоварыНаСкладах.Записать();   
   ////
   РезультатЗапроса = Запрос2.Выполнить();
   
   //ТЗ = РезультатЗапроса.Выгрузить();
   
   ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
      
      ОсталосьСписать = ВыборкаДетальныеЗаписи.КоличествоВДокументе;
      
      ВыборкаДетальныеЗаписиПартии = ВыборкаДетальныеЗаписи.Выбрать();
      Пока ВыборкаДетальныеЗаписиПартии.Следующий() И ОсталосьСписать <> 0 Цикл
          //Если ВыборкаДетальныеЗаписи.КоличествоОстаток <> 0 Тогда

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

Теги:

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

Рейтинг@Mail.ru

Поиск