Имя: Пароль:
1C
1С v8
Как передать ТекущиеДанные поля табличной части в качестве параметра запроса
,
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
Ок! Еще раз большое спасибо.
Думаю это и другим может пригодиться.