E
E
ElizabethP2020-07-23 20:08:54
1C
ElizabethP, 2020-07-23 20:08:54

Why is an Error reading a value in 1s being issued?

Процедура ОбработкаПроведения(Отказ, Режим)
  Движения.ОстаткиТоваров.Записывать = Истина;
  Движения.Продажи.Записывать = Истина;

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

    СуммаСебестоимость = Выборка.СуммаОстаток / Выборка.КоличествоОстаток * Выборка.Количество;
    
  Для Каждого ТекСтрокаРасходТЧ Из РасходТЧ Цикл
    Движение = Движения.ОстаткиТоваров.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
    Движение.Период = Дата;
    Движение.Номенклатура = ТекСтрокаРасходТЧ.Номенклатура;
    Движение.Количество = Выборка.Количество;
    Движение.Сумма = СуммаСебестоимость;
    
    Движение = Движения.Продажи.Добавить();
    Движение.Период = Дата;
    Движение.Номенклатура = ТекСтрокаРасходТЧ.Номенклатура;
    Движение.Количество = Выборка.Количество;
    Движение.Сумма = Выборка.Сумма;
      
  КонецЦикла;		
  КонецПроцедуры


Why does the debugger give "Error reading values"? Googled and did not google, I do not understand what the error is. I would be glad to help, thanks in advance

Answer the question

In order to leave comments, you need to log in

2 answer(s)
A
Anton Anton, 2020-07-23
@Fragster

The selection is received, but its traversal (while selection.next(), etc.) is not carried out. In general, in the current version, there are several lines in the selection, including possible nulls by nomenclature. I would throw out this code and start with a verbal description of the desired algorithm.

K
Konstantin, 2020-07-24
@fosihas

Well, the algorithm is not correct.
As I understood the goal is to find the remains, if they are enough to create a record.

Выборка = РезультатЗапроса.Выбрать();
 Если Выборка.Количество > Выборка.КоличествоОстаток Тогда
          Движения.ОстаткиТоваров.Записывать = Ложь;
      Движения.Продажи.Записывать = Ложь;
      Сообщить("Недостаточно товара на складе!");
  КонецЕсли;

Without enumeration of the result of the selection from the query.
And then it also goes through only the rows of the tabular part of the document, and not the selection of data on the remains.
Для Каждого ТекСтрокаРасходТЧ Из РасходТЧ Цикл
    Движение = Движения.ОстаткиТоваров.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Peep here

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question