Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 окт 2021, 00:48

Установка цены в табличную часть

Автор deks500, 12 авг 2016, 14:53

0 Пользователей и 1 гость просматривают эту тему.

deks500

Здравствуйте, подскажите пожалуйста как обратиться к элементу табличной части(ну я думаю что в этом косяк)
функция установкаЦеныУслуги(Наименование) Экспорт

  Запрос = Новый Запрос;
 
  Запрос.Текст  = "ВЫБРАТЬ
                  | УслугиСрезПоследних.Наименование,
                  | УслугиСрезПоследних.Цена
                  |ИЗ
                  | РегистрСведений.Услуги.СрезПоследних КАК УслугиСрезПоследних
                  |ГДЕ
                  | УслугиСрезПоследних.Наименование = &Наименование" ;
 
Запрос.УстановитьПараметр("Наименование", Элементы.Услуги.ТекущиеДанные.ПолучитьЭлементы(Наименование));  
//ТекДанные = Элементы.Услуги.ТекущиеДанные;
 

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

//Стр = Элементы.Товары.ТекущиеДанные;
//Стр.Сумма = Стр.Цена * Стр.Количество;

КонецФункции

&НаКлиенте
Процедура УслугиНаименованиеПриИзменении(Элемент)
Стр = Элементы.Услуги.ТекущиеДанные;
Стр.Цена = установкаЦеныУслуги(Стр.Наименование);
//установкаЦеныУслуги();
КонецПроцедуры



В результате пишет, что "Текущие данные таблицы не доступны на сервере"
Вроде функция выполняется на сервере, потом передается в процедуру на клиенте, что не так?

vitasw

Цитата: deks500 от 12 авг 2016, 14:53Запрос.УстановитьПараметр("Наименование", Элементы.Услуги.ТекущиеДанные.ПолучитьЭлементы(Наименование));


deks500

Цитата: vitasw от 12 авг 2016, 15:10
Цитата: deks500 от 12 авг 2016, 14:53Запрос.УстановитьПараметр("Наименование", Элементы.Услуги.ТекущиеДанные.ПолучитьЭлементы(Наименование));


Ну я знаю что в этом))) я забыл как к табличной части обратиться, был бы это реквизит, то там без проблем(он как объект идет)
А к этому я че только не писал)))
Добавлено: 12 авг 2016, 15:26


как там правильно переписать?)

vitasw

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

&НаКлиенте
Процедура УслугиНаименованиеПриИзменении(Элемент)
    Стр = Элементы.Услуги.ТекущиеДанные;
    Стр.Цена = установкаЦеныУслуги(Новый Структура("Дата,Услуга",Объект.Дата,Стр.Услуга));
    //установкаЦеныУслуги();
КонецПроцедуры

deks500

Я под себя переделал там ругается на
В запросе :
|   РегистрСведений.Услуги.СрезПоследних(Наименование=&Наименование) КАК УслугиСрезПоследних" ;

Опишу поподробнее систему.(Гостиница)
Есть документ(Квитанция) - там есть табличная часть(услуги) с полями :
Наимеование
Цена
Кол.часов
Сумма
Тоесть к примеру - Пупкин Илья со 2 номера
в табличной части
Наименование - доставка обеда с ресторана
цена - 2000
кол. часов 0
Сумма 2000

Информация о всех услугах хранится в регистре сведений услуги
измерение - наименование
ресурс - цена
К примеру :
Наименование - Уход за детьми
Цена - 500р

Тобишь кода создаю документ квитанцию, выбираю человечка
в табличной части выбираю наименование(Услуга - Уход за детьми) и автоматом должна подставиться его цена.

Код щас такой
функция установкаЦеныУслуги(ПараметрыЗапроса) Экспорт

  Запрос = Новый Запрос;
 
  Запрос.Текст  = "ВЫБРАТЬ
                  | УслугиСрезПоследних.Наименование,
                  | УслугиСрезПоследних.Цена
                  |ИЗ
                  | РегистрСведений.Услуги.СрезПоследних(Наименование=&Наименование) КАК УслугиСрезПоследних" ;
 
Запрос.УстановитьПараметр("Наименование", ПараметрыЗапроса.Наименование);  
//ТекДанные = Элементы.Услуги.ТекущиеДанные;
 

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

//Стр = Элементы.Товары.ТекущиеДанные;
//Стр.Сумма = Стр.Цена * Стр.Количество;

КонецФункции

&НаКлиенте
Процедура УслугиНаименованиеПриИзменении(Элемент)
Стр = Элементы.Услуги.ТекущиеДанные;
Стр.Цена = установкаЦеныУслуги(Новый Структура("Наименование", Стр.Наименование));
//установкаЦеныУслуги();
КонецПроцедуры


Добавлено: 12 авг 2016, 16:10


Цитата: deks500 от 12 авг 2016, 16:08
Я под себя переделал там ругается на
В запросе :
|   РегистрСведений.Услуги.СрезПоследних(Наименование=&Наименование) КАК УслугиСрезПоследних" ;

Опишу поподробнее систему.(Гостиница)
Есть документ(Квитанция) - там есть табличная часть(услуги) с полями :
Наимеование
Цена
Кол.часов
Сумма
Тоесть к примеру - Пупкин Илья со 2 номера
в табличной части

Чет еще больше запутали Вы меня))
Наименование - доставка обеда с ресторана
цена - 2000
кол. часов 0
Сумма 2000

Информация о всех услугах хранится в регистре сведений услуги
измерение - наименование
ресурс - цена
К примеру :
Наименование - Уход за детьми
Цена - 500р

Тобишь кода создаю документ квитанцию, выбираю человечка
в табличной части выбираю наименование(Услуга - Уход за детьми) и автоматом должна подставиться его цена.

Код щас такой
функция установкаЦеныУслуги(ПараметрыЗапроса) Экспорт

  Запрос = Новый Запрос;
 
  Запрос.Текст  = "ВЫБРАТЬ
                  | УслугиСрезПоследних.Наименование,
                  | УслугиСрезПоследних.Цена
                  |ИЗ
                  | РегистрСведений.Услуги.СрезПоследних(Наименование=&Наименование) КАК УслугиСрезПоследних" ;
 
Запрос.УстановитьПараметр("Наименование", ПараметрыЗапроса.Наименование);  
//ТекДанные = Элементы.Услуги.ТекущиеДанные;
 

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

//Стр = Элементы.Товары.ТекущиеДанные;
//Стр.Сумма = Стр.Цена * Стр.Количество;

КонецФункции

&НаКлиенте
Процедура УслугиНаименованиеПриИзменении(Элемент)
Стр = Элементы.Услуги.ТекущиеДанные;
Стр.Цена = установкаЦеныУслуги(Новый Структура("Наименование", Стр.Наименование));
//установкаЦеныУслуги();
КонецПроцедуры


Добавлено: 12 авг 2016, 16:11


Запутали меня)
Добавлено: 12 авг 2016, 16:35


Ну вроде как дописал чутка, посмотрел через отладчик, он не видит цену, в чем косяк?)

SGIRG

Нажимайте "Спасибо", так приятнее))

deks500


ilnur75

это пример как получить актуальную цену номенклатуры и поставить её в колонку табчасти по строке с номенклатурой

в общем модуле РаботаСоСправочниками

Функция РозничнаяЦена(АктуальнаяДата, ЭлементНоменклатуры) Экспорт 
// Создать вспомогательный объект "Отбор".
Отбор = Новый Структура("Номенклатура", ЭлементНоменклатуры);
// Получить актуальные значения ресурсов регистра.
ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);
Возврат ЗначенияРесурсов.Цена;
КонецФункции

в модуле формы документа

&НаКлиенте
Процедура ПереченьНоменклатурыНоменклатураПриИзменении(Элемент)
// Получить текущую строку табличной части.
СтрокаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные;
// Установить цену.
СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.РозничнаяЦена(
                        Объект.Дата, СтрокаТабличнойЧасти.Номенклатура);

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

vitasw

Цитата: deks500 от 12 авг 2016, 16:08Я под себя переделал там ругается на
...
1. Называть реквизиты как "Наименование", "Код", "Номер" - дурной тон.
2. Посмотрите внимательно на мой пример, где указано как задаются параметры виртуальной таблицы
я:
Цитата: vitasw от 12 авг 2016, 15:51|    РегистрСведений.Услуги.СрезПоследних(&Дата,Услуга=&Услуга) КАК УслугиСрезПоследних";
и вы
Цитата: deks500 от 12 авг 2016, 16:08|   РегистрСведений.Услуги.СрезПоследних(Наименование=&Наименование) КАК УслугиСрезПоследних" ;


deks500

Выдет
{Документ.Квитанция.Форма.ФормаДокумента.Форма(134)}: Недостаточно фактических параметров
   СтрокаТабличнойЧасти.Цена = ЦенаУслуг.ЦенаУслуги(СтрокаТабличнойЧасти.Наименование);

код такой
&НаКлиенте
Процедура УслугиНаименованиеПриИзменении(Элемент)

СтрокаТабличнойЧасти = Элементы.Услуги.ТекущиеДанные;
СтрокаТабличнойЧасти.Цена = ЦенаУслуг.ЦенаУслуги(СтрокаТабличнойЧасти.Наименование);

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

и
функция ЦенаУслуги(АктуальнаяДата, ЭлементНаименование) Экспорт

// Создать вспомогательный объект "Отбор".

Отбор = Новый Структура("Наименование", ЭлементНаименование);

// Получить актуальные значения ресурсов регистра.

ЗначенияРесурсов = РегистрыСведений.Услуги.ПолучитьПоследнее(АктуальнаяДата, Отбор);

Возврат ЗначенияРесурсов.Цена;


КонецФункции

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск