|
Как передать ТекущиеДанные поля табличной части в качестве параметра запроса | ☑ | ||
---|---|---|---|---|
0
SnikRu
26.04.13
✎
08:54
|
Добрый день.
Данная функция отрабатывает при статическом параметре &Номенклатура: Функция ПолучитьЦену(СсылкаНаРегистрСведений) //СтрокаТабличнойЧасти = ЭлементыФормы["Спецификация"].ТекущиеДанные; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЦеныНоменклатурыСрезПоследних.ТипЦен, | ЦеныНоменклатурыСрезПоследних.Номенклатура, | ЦеныНоменклатурыСрезПоследних.Цена |ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних |ГДЕ | ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен | И ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура"; Запрос.УстановитьПараметр("ТипЦен",Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Розничная")); Запрос.УстановитьПараметр("Номенклатура",Справочники.Номенклатура.НайтиПоНаименованию("Резервуар144")); //Запрос.УстановитьПараметр("Номенклатура",ЭлементыФормы.Спецификация.ТекущаяСтрока.Номенклатура.Наименование); Цена = 0; Результат = Запрос.Выполнить(); Если НЕ Результат.Пустой() Тогда Выборка = Результат.Выбрать(); Выборка.Следующий(); Цена = Выборка.Цена; КонецЕсли; Возврат Выборка.Цена; КонецФункции А как передать в нее динамически изменяемое значение поля табличной части документа? |
|||
1
Wobland
26.04.13
✎
08:54
|
а нет ли номенклатуры где-то в текущих данных?
|
|||
2
Wobland
26.04.13
✎
08:55
|
и один фих на момент установки параметра он будет статическим
|
|||
3
shuhard
26.04.13
✎
08:58
|
(0)[динамически изменяемое значение поля табличной части документа]
кто на ком стоял ? |
|||
4
SnikRu
26.04.13
✎
09:06
|
А если по существу.
Как всеже организовать передачу параметра? |
|||
5
НЕА123
26.04.13
✎
09:08
|
(0)
ну так хотя-бы. Функция ПолучитьЦену(СсылкаНаРегистрСведений, Номенклатура) или что надо? |
|||
6
Любопытная
26.04.13
✎
09:12
|
Засунь туда всю ТЧ целиком. Ну или Запрос.УстановитьПараметр("Номенклатура",СтрокаТабЧасти.Спецификация);
|
|||
7
Godofsin
26.04.13
✎
09:12
|
(0) и дайте угадаю, номенклатуру будешь в цикле передавать?
|
|||
8
Любопытная
26.04.13
✎
09:12
|
В общем, ты туда ссылку ставь, а не строку, вот
|
|||
9
SnikRu
26.04.13
✎
09:15
|
(5)И что это даст?
В табличной части может быть большое количество строк. Нужно что-бы подставлялась цена в текущую при выборе или при изменении из регистра сведений. |
|||
10
НЕА123
26.04.13
✎
09:17
|
(9)
ну повесить на событие ПриПолученииДанных, ПриВыводеСтроки и т.д. |
|||
11
SnikRu
26.04.13
✎
09:30
|
(10) Поробовал так:
Функция ПолучитьЦену(СсылкаНаРегистрСведений, Номенклатура) //СтрокаТабличнойЧасти = ЭлементыФормы["Спецификация"].ТекущиеДанные; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЦеныНоменклатурыСрезПоследних.ТипЦен, | ЦеныНоменклатурыСрезПоследних.Номенклатура, | ЦеныНоменклатурыСрезПоследних.Цена |ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних |ГДЕ | ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен | И ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура"; Запрос.УстановитьПараметр("ТипЦен",Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Розничная")); //Запрос.УстановитьПараметр("Номенклатура",Справочники.Номенклатура.НайтиПоНаименованию("Резервуар144")); Запрос.УстановитьПараметр("Номенклатура",Номенклатура); Цена = 0; Результат = Запрос.Выполнить(); Если НЕ Результат.Пустой() Тогда Выборка = Результат.Выбрать(); Выборка.Следующий(); Цена = Выборка.Цена; КонецЕсли; Возврат Выборка.Цена; КонецФункции Процедура СпецификацияНоменклатураОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) //// Вставить содержимое обработчика. //СтрокаТабличнойЧасти = ЭлементыФормы["Спецификация"].ТекущиеДанные; //СтрокаТабличнойЧасти.Цена = ПолучитьЦену(СтрокаТабличнойЧасти.Номенклатура); СтрокаТабличнойЧасти = ЭлементыФормы["Спецификация"].ТекущиеДанные; Номенклатура = СтрокаТабличнойЧасти.Номенклатура; Цена= СтрокаТабличнойЧасти.Цена; СтрокаТабличнойЧасти.Цена = ПолучитьЦену(СтрокаТабличнойЧасти,Номенклатура); КонецПроцедуры Выдает ошибку: {Документ.КомерческоеПредложение.Форма.ФормаДокумента.Форма(40)}: Значение не является значением объектного типа (Цена) Возврат Выборка.Цена; |
|||
12
cw014
26.04.13
✎
09:35
|
А ты на кой вне выборки пытаешься вернуть значение объектного типа?
|
|||
13
НЕА123
26.04.13
✎
09:39
|
(11)
намудрил. Выборка = Результат.Выбрать(); Возврат ?(Выборка.Следующий(),Выборка.Цена,0); |
|||
14
SnikRu
26.04.13
✎
09:46
|
(13) Дело в том, что физически в регистре все значения заполнены и ноль взяться не может. Зачем тогда эта проверка?
|
|||
15
НЕА123
26.04.13
✎
09:53
|
(14)
тогда почему в (11) Если НЕ Результат.Пустой() Тогда |
|||
16
НЕА123
26.04.13
✎
09:53
|
(15)+
сегодня заполнены, завтра нет. |
|||
17
SnikRu
26.04.13
✎
09:58
|
(14) Согласен.
(15) Согласен. Однако не работает и не из-за пустого значения, а потому что &Номенклатура скорее всего некорректен. |
|||
18
НЕА123
26.04.13
✎
10:02
|
Процедура СпецификацияНоменклатураОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
//// Вставить содержимое обработчика. //СтрокаТабличнойЧасти = ЭлементыФормы["Спецификация"].ТекущиеДанные; //СтрокаТабличнойЧасти.Цена = ПолучитьЦену(СтрокаТабличнойЧасти.Номенклатура); СтрокаТабличнойЧасти = ЭлементыФормы["Спецификация"].ТекущаяСтрока; СтрокаТабличнойЧасти.Цена = ПолучитьЦену(СтрокаТабличнойЧасти,ВыбранноеЗначение); КонецПроцедуры |
|||
19
НЕА123
26.04.13
✎
10:03
|
кстати, для чего первый параметр у ПолучитьЦену() нужен?
|
|||
20
SnikRu
26.04.13
✎
10:12
|
Все заработало.
Огромное спасибо "HEA123". Хорошо, что есть среди нас умные люди. |
|||
21
НЕА123
26.04.13
✎
10:23
|
на будущее. вместо
> ЭлементыФормы["Спецификация"].ТекущаяСтрока; обычно пишут ЭлементыФормы.Спецификация.ТекущаяСтрока в данном случае можно и просто Элемент.ТекущаяСтрока но это ненагладно. |
|||
22
НЕА123
26.04.13
✎
10:24
|
*ненаглядно
|
|||
23
SnikRu
26.04.13
✎
10:30
|
Ок! Еще раз большое спасибо.
Думаю это и другим может пригодиться. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |