Как ввести в переменную элемент из табличной части

1. Snigse 30.03.21 16:28 Сейчас в теме
Осваиваю работу с 1С стоит задача создать проверку на провод документа, чтобы программа проверяла наличие идентичной записи в регистре сведений по товару за сегодняшнюю дату. Но столкнулся с проблемой. Дело в том, что нужные мне реквизиты находятся в табличной части которая относится к документу "Приход_Товара". И если с реквизитом "Фирма_Поставщик" проблем не возникает, то как достать "Название" и "Количество" Относящиеся к табличной части ума не приложу.

Собственно сам псевдокод:
Функция ТоварУжеПоступил(Наименование,Фирма,Период) // Значение свойств выставляется при испозовании ф-ции
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Перемещения_Товаров.Период КАК Период
		|ИЗ
		|	РегистрСведений.Перемещения_Товаров КАК Перемещения_Товаров
		|ГДЕ
		|	Перемещения_Товаров.Фирма = &Фирма
		|	И Перемещения_Товаров.Наименование = &Наименование
		|   И Перемешения_Товаров.Период = &Период   
		|	И Перемещения_Товаров.Состояние = ЗНАЧЕНИЕ(Перечисление.Состояние.Поступление)";
	
	Запрос.УстановитьПараметр("Наименование",Наименование); //значение параметров берется из свойств
	Запрос.УстановитьПараметр("Фирма",Фирма);
	Запрос.УстановитьПараметр("Период",Период);
	
	Результат = Запрос.Выполнить();
	Выборка = Результат.Выбрать();
	
	Если Выборка.Следующий() Тогда
		
		  Возврат Истина;
	  КонецЕсли;
	  
	   Возврат Ложь;
КонецФункции

Процедура ОбработкаПроведения(Отказ, Режим)
	
	Если ТоварУжеПоступил(, Фирма_Поставщик, ТекСтрокаПеречень_товаров.Количество) Тогда  //Как выставить нужные параметры из документа Приход_Товара?
		
		    Сообщить("Документ не проведен! Данный товар уже был проведен сегодня другим документом");
			Отказ = Истина;
		    Возврат; 
		
	КонецЕсли;
		
		Движения.Перемещения_Товаров.Записывать = Истина;
	Для Каждого ТекСтрокаПеречень_товаров Из Перечень_товаров Цикл
		Движение = Движения.Перемещения_Товаров.Добавить();
		Движение.Период = Дата;
		Движение.Наименование = ТекСтрокаПеречень_товаров.Название;
		Движение.Количество = ТекСтрокаПеречень_товаров.Количество;
		Движение.Фирма = Фирма_Поставщик;
		Движение.Состояние = Перечисления.Состояние.Поступление;
	КонецЦикла;

КонецПроцедуры
Показать
По теме из базы знаний
Найденные решения
5. Snigse 01.04.21 13:20 Сейчас в теме
Обсуждение закрыто я разобрался, что пытался бить всех пистолетом и стрелять из дубины. Мне нужны были немного другие переменные и сделать выгрузку запроса сравнивая по ней с циклом для каждого.
Функция ТоварУжеПоступил(Наименование,Фирма,Период)
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Перемещения_Товаров.Период КАК Период,
		|	Перемещения_Товаров.Фирма КАК Фирма,
		|	Перемещения_Товаров.Наименование КАК Наименование
		|ИЗ
		|	РегистрСведений.Перемещения_Товаров КАК Перемещения_Товаров
		|ГДЕ
		|	Перемещения_Товаров.Фирма = &Фирма
		|	И Перемещения_Товаров.Наименование = &Наименование
		|	И Перемещения_Товаров.Состояние = ЗНАЧЕНИЕ(Перечисление.Состояние.Поступление)";
	
	Запрос.УстановитьПараметр("Наименование",Наименование);
	Запрос.УстановитьПараметр("Фирма",Фирма);
		
	Результат = Запрос.Выполнить();
	Выгрузка = Результат.Выгрузить();
	
	Для Каждого Строка из Выгрузка цикл
		Если Строка.Наименование = Наименование и Строка.Период = Период Тогда
			Возврат Истина;
			КонецЕсли;
		 КонецЦикла;
	  
	   Возврат Ложь;
КонецФункции

Процедура ОбработкаПроведения(Отказ, Режим)
	Движения.Перемещения_Товаров.Записывать = Истина;
    Движения.Перемещения_Товаров.Очистить();
	Для Каждого Строка из Перечень_Товаров Цикл
		Если ТоварУжеПоступил(Строка.Название,Фирма_Поставщик,Дата) Тогда  
		
		Сообщить("Документ не проведен! Товар "+Строка.Название+" в количестве "+Строка.Количество+" шт. Уже был проведен другим документом");
			Отказ = Истина;
		    Возврат; 
		
		КонецЕсли;
	
	
		Движение = Движения.Перемещения_Товаров.Добавить();
		Движение.Период = Дата;
		Движение.Наименование = Строка.Название;
		Движение.Количество = Строка.Количество;
		Движение.Фирма = Фирма_Поставщик;
		Движение.Состояние = Перечисления.Состояние.Поступление;
	КонецЦикла;
КонецПроцедуры
Показать

А задача стояла, в предотвращении провода одного и того же товара за 1 день, код делает проверку по наименованию фирме и дате, количество мне было не нужно.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Nubsdale 30.03.21 16:42 Сейчас в теме
Какой вопрос вообще?

(1)
находятся в табличной части которая относится к документу "Приход_Товара"

Для каждого строкаТабЧасти из Приход_Товара.НазваниеТабличнойЧасти
Цикл
КонецЦикла

но похожий кусок кода у вас уже есть
4. sssss_aaaaa_2011 30.03.21 17:49 Сейчас в теме
(1)
как достать "Название" и "Количество" Относящиеся к табличной части
И как это относится к теме "Как ввести в переменную"? То есть заголовок про запись в переменную, а в сообщении вы уже пишете про чтение из каких-то других источников. Вы ЧТЕНИЕ и ЗАПИСЬ не различаете?
В переменную всё всегда "вводится" одинаково - присвоением.
2. starik-2005 3037 30.03.21 16:34 Сейчас в теме
Типо в зопросе:
ВЫБРАТЬ * ПОМЕСТИТЬ ВТТЧ ИЗ &ТабЧасть;
ВЫБРАТЬ * ИЗ Регистр.Тратата КАК Т1
 ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТЧ КАК Т2
ПО Т1.Номенклатура = Т2.Номенклатура И Т1.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата, ДЕНЬ)

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

Процедура ОбработкаПроведения(Отказ, Режим)
	Движения.Перемещения_Товаров.Записывать = Истина;
    Движения.Перемещения_Товаров.Очистить();
	Для Каждого Строка из Перечень_Товаров Цикл
		Если ТоварУжеПоступил(Строка.Название,Фирма_Поставщик,Дата) Тогда  
		
		Сообщить("Документ не проведен! Товар "+Строка.Название+" в количестве "+Строка.Количество+" шт. Уже был проведен другим документом");
			Отказ = Истина;
		    Возврат; 
		
		КонецЕсли;
	
	
		Движение = Движения.Перемещения_Товаров.Добавить();
		Движение.Период = Дата;
		Движение.Наименование = Строка.Название;
		Движение.Количество = Строка.Количество;
		Движение.Фирма = Фирма_Поставщик;
		Движение.Состояние = Перечисления.Состояние.Поступление;
	КонецЦикла;
КонецПроцедуры
Показать

А задача стояла, в предотвращении провода одного и того же товара за 1 день, код делает проверку по наименованию фирме и дате, количество мне было не нужно.
Оставьте свое сообщение

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