ElizabethP
@ElizabethP

Почему выдается Ошибка чтения значения в 1с?

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

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

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


Почему в отладчике выдается "Ошибка чтения значений"? Гуглил так и не нагуглил, не понимаю в чем ошибка. Буду рад помощи, спасибо заранее
  • Вопрос задан
  • 994 просмотра
Пригласить эксперта
Ответы на вопрос 2
Fragster
@Fragster
помогло? отметь решением!
Выборка получена, но её обход (пока выборка.следующий() и т.п.) не осуществляется. Вообще в текущем варианте в выборке несколько строк, включая возможные null по номенклатуре. Я бы выкинул этот код и начал бы со словестного описания желаемого алгоритма.
Ответ написан
Комментировать
fosihas
@fosihas
Автоматизации учета на 1С.
Ну алгоритм не корректен.
Как понял цель найти остатки, если их хватает создать запись.

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

Без перебора результата выборки из запроса.

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


Подглядите туточки
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы