Имя: Пароль:
1C
1С v8
Возвратить данные из регистра накопления в табличнцю часть документа
,
0 PrimIgor
 
13.04.13
16:40
Помогите начинающему!
Платформа 8,2
Необходимо чтобы в табличную часть документа при выборе поля "наименование" в поле "Остаток" выводился остаток из регистра накопления по конкретному наименованию.
Имеется код

Функция ОстатокВыпуск(ТекущееНаименование) Экспорт
   Запрос = Новый Запрос;
   Запрос.Текст =
"ВЫБРАТЬ
|    ВыпускОстаткиИОбороты.Наименование,
|    ВыпускОстаткиИОбороты.ВыпускКонечныйОстаток
|ИЗ
|    РегистрНакопления.Выпуск.ОстаткиИОбороты КАК ВыпускОстаткиИОбороты";
   Запрос.УстановитьПараметр("Наименование",ТекущееНаименование);
ЗначенияРесурсов = Запрос.Выполнить().Выбрать();
   
   Если ЗначенияРесурсов.Следующий()Тогда
       Возврат ЗначенияРесурсов.ВыпускКонечныйОстаток;
   Иначе
       Возврат 0;
   КонецЕсли;
   КонецФункции
1 PrimIgor
 
13.04.13
16:42
программа выдает конечный остаток только по первому записанному наименованию
2 shuhard
 
13.04.13
16:42
(0)[ВыпускОстаткиИОбороты.Наименование] очень плохо
[Запрос.УстановитьПараметр("Наименование",ТекущееНаименование);] бессмысленно
[ЗначенияРесурсов = Запрос.Выполнить().Выбрать();]
есть выгрузить()
и у ТЧ есть Загрузить()
3 unkairosed
 
13.04.13
16:45
(0) Хочешь сказать регистр "Выпуск" не оборотный?
4 PrimIgor
 
13.04.13
16:45
Вот в ТЧ что
&НаКлиенте
Процедура ПеремещениеНаименованиеПриИзменении(Элемент)
   СтрокаТабличнойЧасти = Элементы.Перемещение.ТекущиеДанные;
   СтрокаТабличнойЧасти.Остаток = ОбщийМодульВыпуск.ОстатокВыпуск(СтрокаТабличнойЧасти.Наименование);
   
КонецПроцедуры
5 unkairosed
 
13.04.13
16:49
Для начала, "Наименование" имеет ссылочный тип или строковый? На наименование как на строку, мягко говоря, ориентироваться не стоит, это уже сказали в (2).
6 PrimIgor
 
13.04.13
16:50
Наименование ссылочный тип
7 unkairosed
 
13.04.13
16:53
Во вторых, если нужно получить только остаток, обращайся к виртуальной таблице "Остатки", а не "ОстаткиИОбороты". Далее, параметр ты установил, но в тексте запроса нет фильтра по этому параметру.
8 PrimIgor
 
13.04.13
17:01
Напишите  примерно как отфильтровать
9 shuhard
 
13.04.13
17:03
(8) &
10 unkairosed
 
13.04.13
17:07
Текст функции можно представить в виде двух строк:

Остаток = РегистрыНакопления.Выпуск.Остатки(,Новый Структура("Наименование", ТекущееНаименование), "Наименование", "Количество");

Возврат ?(Остаток.Количество(), Остаток[0].Количество, 0);
11 PrimIgor
 
13.04.13
17:10
Огромное спасибо всем! Я вроде разобрался на данном этапе.


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