Имя: Пароль:
1C
 
Вывод остатков на определенную дату
0 bayron1
 
27.05.24
13:25
День добрый, уважаемые знатоки. Прошу подсказать, в задании нужно вывести остатки по всем товарам в ТЧ. В ТЧ я эти товары добавляю сам, т.е. список получается произвольный. Когда я задавал параметр просто &Номенклатура у меня выводился остаток только по одному конкретному товару. Пытаюсь путем создания массива, и передать массив в качестве параметра на сервер. Подскажите, пожалуйста
P.s. я еще только начал обучение 1с

&НаКлиенте
Процедура ПолучитьОстатки(Элемент, ВыбраннаяДата)
	
	Остаток = Выбор(Элементы.Остатки.ТекущиеДанные.Номенклатура, ВыбраннаяДата);  
	Элементы.Остатки.ТекущиеДанные.Остатки = Остаток;
	
	МассивНоменклатуры = Новый Массив;
	Таблица = Элементы.Остатки.ТекущиеДанные; 
	Для  Каждого Строка из Таблица Цикл   
		МассивНоменклатуры.Добавить(Строка.Номенклатура);
	КонецЦикла;

 
		
КонецПроцедуры

&НаСервере
Функция Выбор(Товар, ВыбраннаяДата)
	
	 
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК Остаток,
	|	ОстаткиНоменклатурыОстатки.Номенклатура.Код КАК Код,
	|	ОстаткиНоменклатурыОстатки.Номенклатура.Ссылка КАК Номенклатура
	|ИЗ
	|	РегистрНакопления.ОстаткиНоменклатуры.Остатки(&Дата, Номенклатура В (&МассивНоменклатуры)) КАК ОстаткиНоменклатурыОстатки";
	
			  
		
		
	Граница = Новый Граница(ВыбраннаяДата, ВидГраницы.Включая);
	
	Запрос.УстановитьПараметр("Дата", ВыбраннаяДата);
	Запрос.УстановитьПараметр("МассивНоменклатуры",Товар);

	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	Выборка.Следующий();
	Возврат Выборка.Остаток;			
	
КонецФункции
1 steep1
 
27.05.24
13:21
(0) наверно в этом проблема - Таблица = Элементы.Остатки.ТекущиеДанные ты получаешь данные выделенной строки
2 Волшебник
 
27.05.24
13:25
Выбор() — плохое имя функции
3 bayron1
 
27.05.24
13:28
(1) В этом я и застрял, как обратиться не только к выделенной строке?
4 Смотрящий
 
27.05.24
13:30
(3) Остатки у тебя как таблица или как Объект.Остатки ?
5 bayron1
 
27.05.24
13:37
(4) Как таблица
6 Смотрящий
 
27.05.24
13:44
(5) Тогда убери передачу в Выбор первого параметра
В Выбор беги по всей таблице Остатки и пихай номенклатуру в МассивНоменклатуры
Повторно беги по таблице, предварительно выгрузив результат запроса в таблицу, и устанавливай Остаток
7 bayron1
 
27.05.24
13:45
(6) Спасибо!
8 Волшебник
 
27.05.24
13:50
и Выбор() переименуйте
9 bayron1
 
27.05.24
15:52
Немного разобрался, там все таки Остатки были Обьект.Остатки. Теперь ошибки нет, но остаток выводится у одного товара. Предполагаю что ошибка в последней строке , где возврат, возвращает одно число
&НаКлиенте
Процедура ПолучитьОстатки(Элемент, ВыбраннаяДата)
    
    МассивНоменклатуры = Новый Массив;
    
    
    Для каждого СтрТЗ из ЭтотОбъект.Остатки Цикл
        
        
        МассивНоменклатуры.Добавить(СтрТЗ.Номенклатура);
        
    КонецЦикла;
    
    Остаток = Выбор(Элементы.Остатки.ТекущиеДанные.Номенклатура, ВыбраннаяДата);
    
    Элементы.Остатки.ТекущиеДанные.Остатки = Остаток;
    
    
КонецПроцедуры

&НаСервере
Функция Выбор(Товар, ВыбраннаяДата)
    
    
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК Остаток,
    |    ОстаткиНоменклатурыОстатки.Номенклатура.Код КАК Код,
    |    ОстаткиНоменклатурыОстатки.Номенклатура.Ссылка КАК Номенклатура
    |ИЗ
    |    РегистрНакопления.ОстаткиНоменклатуры.Остатки(&Дата, Номенклатура В (&МассивНоменклатуры)) КАК ОстаткиНоменклатурыОстатки";
    
              
        
        
    Граница = Новый Граница(ВыбраннаяДата, ВидГраницы.Включая);
    
    Запрос.УстановитьПараметр("Дата", ВыбраннаяДата);
    Запрос.УстановитьПараметр("МассивНоменклатуры",Товар);

    
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    
    Выборка.Следующий();
    
    Возврат Выборка.Остаток;        

КонецФункции
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.