|
УПП.Заполнение реквизита ТЧ результатом запроса. | ☑ | ||
---|---|---|---|---|
0
d_monah
15.05.13
✎
11:01
|
Здравствуйте! Помогите плиз.Есть документ "Передача товаров" с табличной частью "Товары",нужно заполнить реквизит "Цена" результатом запроса регистра "Цены номенклатуры".
Сделал внешнюю обработку заполнения ТЧ,прицепил к ней процедуру(код ниже),проверил запрос в консоли,все ок, только цена все равно не заполняется, что не так?Спасиб! Процедура Инициализировать(Объект, ИмяТабличнойЧасти = Неопределено, ТабличноеПоле = Неопределено) Экспорт Для каждого СтрокаТЧ Из Объект.Товары Цикл Запрос = Новый Запрос; Запрос.УстановитьПараметр("Номенклатура", СтрокаТЧ.Номенклатура); Запрос.Текст = "ВЫБРАТЬ | ЦеныНоменклатурыСрезПоследних.Номенклатура, | ЦеныНоменклатурыСрезПоследних.Цена КАК Цена |ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних |ГДЕ | ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура" ; Выборка = Запрос.Выполнить().Выбрать(); СтрокаТЧ.Цена = Выборка.Цена; СтрокаТЧ.Сумма=СтрокаТЧ.Количество*СтрокаТЧ.Цена; КонецЦикла; КонецПроцедуры |
|||
1
BlueSky
15.05.13
✎
11:05
|
(0) ЗапросВЦикле = Расстрел;
|
|||
2
NcSteel
15.05.13
✎
11:06
|
Судя по тексту - нормально.
Но алгоритм надо переписать, так как (1) |
|||
3
Maxus43
15.05.13
✎
11:08
|
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда СтрокаТЧ.Цена = Выборка.Цена; КонецЕсли; |
|||
4
palpetrovich
15.05.13
✎
11:14
|
если возможна читуация, что док не записан, делай так примерно
ТЗТовары = Объект[ИмяТабличнойЧасти].Выгрузить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТЗТовары.Номенклатура КАК Номенклатура, //| Остальные нужные поля | ПОМЕСТИТЬ ВТТовары |ИЗ | &ТЗТовары КАК ТЗТовары |; |ВЫБРАТЬ | ВТ.Номенклатура, //| Остальные нужные поля | ЦеныНоменклатурыСрезПоследних.Цена КАК Цена |ИЗ ВТТовары КАК ВТТовары |ЛЕВОЕ СОЕДИНЕНИЕ |РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних |ПО | ВТТовары.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура |"; Запрос.УстановитьПараметр("ТЗТовары", ТЗТовары); Результат = Запрос.Выполнить(); ТЗТовары = Результат.Выгрузить(); Объект[ИмяТабличнойЧасти].Очистить(); Объект[ИмяТабличнойЧасти].Загрузить(ТЗТовары); зы: ну и параметры для СрезаПоследних наверное неплохо-бы дать |
|||
5
palpetrovich
15.05.13
✎
11:16
|
*
ВТ.Номенклатура = ВТТовары.Номенклатура, РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ОбъектДата, ) КАК ЦеныНоменклатурыСрезПоследних |
|||
6
d_monah
15.05.13
✎
11:21
|
Всем спасиб,особенно Maxsus43!
Совсем забыл про: Если Выборка.Следующий() Тогда .. Остальное доточим. |
|||
7
palpetrovich
15.05.13
✎
11:33
|
(6) пипец, как раз Maxsus43 оказывает тебе медвежью услугу, ибо - читай (1)
|
|||
8
d_monah
15.05.13
✎
11:42
|
(7) Я все понял,тупил по поводу того, почему простейшая процедура не дает результат.Сказывается длительное отсутствие программирования.
|
|||
9
palpetrovich
15.05.13
✎
11:45
|
(8) "Я все понял..." везет :)
|
|||
10
d_monah
15.05.13
✎
11:50
|
(9) А что непонятного? Конечно не оптимально делать отдельный запрос для каждой строки ,в приличном обществе за это канделябром бьют.Правильно?
|
|||
11
palpetrovich
15.05.13
✎
11:52
|
(10) правильно
ты хоть для прикола (4) попробуй. с учетом (5) |
|||
12
d_monah
15.05.13
✎
12:00
|
(11) Попробую,без прикола.
|
|||
13
palpetrovich
15.05.13
✎
12:46
|
(12) не выдержал, попробовал сам, работает
Процедура Инициализировать(Объект, ИмяТабличнойЧасти, ТабличноеПоле) Экспорт; ТЗТовары = Объект[ИмяТабличнойЧасти].Выгрузить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТЗТовары.Номенклатура КАК Номенклатура, | ТЗТовары.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | ТЗТовары.Количество КАК Количество, | ТЗТовары.Коэффициент КАК Коэффициент |ПОМЕСТИТЬ ВТТовары |ИЗ | &ТЗТовары КАК ТЗТовары |; |ВЫБРАТЬ | ВТТовары.Номенклатура, | ВТТовары.ЕдиницаИзмерения, | ВТТовары.Количество, | ВТТовары.Коэффициент, | ЦеныНоменклатурыСрезПоследних.Цена КАК Цена |ИЗ | ВТТовары КАК ВТТовары | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних | ПО ВТТовары.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура"; Запрос.УстановитьПараметр("ТЗТовары", ТЗТовары); Запрос.УстановитьПараметр("ТипЦен", Объект.ТипЦен); Запрос.УстановитьПараметр("Дата", Объект.Дата); Результат = Запрос.Выполнить(); ТЗТовары = Результат.Выгрузить(); ТЗТовары.ВыбратьСтроку(); Объект[ИмяТабличнойЧасти].Очистить(); Объект[ИмяТабличнойЧасти].Загрузить(ТЗТовары); КонецПроцедуры Правда еще неплохо-бы посчитать суммы :) И еще - непонятно зачем все это, ведь в типовых конфигурациях заполнение реквизита цена и так реализовано. Если цены установлены конечно и тип цены выбран |
|||
14
palpetrovich
15.05.13
✎
12:47
|
* ТЗТовары.ВыбратьСтроку(); - убрать :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |