До старта конференции

Изменение цены при выставлении галочки

1. Riko Naomi (user618496_Riko.Naomi) 21.12.16 14:39 Сейчас в теме
День добрый! Подскажите, пожалуйста, как правильно сделать?
У меня есть справочник "Процедуры" в нем реквизиты (Количество и Цена. Тип: Число)
Есть документ "Прием" с таб частью. "ПроцедурыПриема" (с реквизитами: цена, количество и т.д.). Также в самом документе есть реквизит "Детский прием" он с галочкой.
При заполнении тч у меня автоматически считается сумма, а мне нужно чтобы при установлении этой галочки сумма изменялась. Как вытащить данные из справочника?

Код вот такой, но естественно не рабочий. Я делаю вообще не так или что-то упустила?
&НаКлиенте
Процедура ДетскийПрПриИзменении(Элемент)
	
	Если Объект.ДетскийПр = Истина Тогда
		РассчитатьДетскийПр();
	ИначеЕсли Объект.ДетскийПр = Ложь Тогда
		РассчитатьДетскийПр1();
    КонецЕсли;
	  
КонецПроцедуры

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

	 Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
	
	Результат = Запрос.Выполнить();
	
	Выборка = Результат.Выбрать();
	 
	 Пока Выборка.Следующий() Цикл
		 
	ДетскийПр = Выборка.Ссылка;
    Количество = Выборка.К_воУЕТДетск;
    Цена = Выборка.ЦенаДетская;
		 
	ДетскийПр=Выборка.К_воУЕТДетск * Выборка.ЦенаДетская;  
		 
	КонецЦикла;
		 
 КонецФункции


&НаСервере
Функция РассчитатьДетскийПр1()
	//Сообщить("дописать");	
КонецФункции
...Показать Скрыть
Ответы
2. Le8niD K (le0nid) 21.12.16 15:04 Сейчас в теме
Как минимум неграмотно написан запрос.
3. Arkasha Zuev (ark.zv) 2 21.12.16 15:19 Сейчас в теме
Как минимум должно выглядеть примерно так:

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

	Если Объект.ДетскийПр Тогда 
		РассчитатьДетскийПр(); 
	Иначе 
		РассчитатьДетскийПр1(); 
	КонецЕсли; 

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

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

КонецФункции
...Показать Скрыть


А что там вам конкретно нужно, это надо разбираться подробнее
4. Riko Naomi (user618496_Riko.Naomi) 21.12.16 15:30 Сейчас в теме
(3)хорошо, поняла вас, буду разбирать, спасибо за подсказку!)
5. Andrey Kolesnikov (Boneman) 76 21.12.16 17:15 Сейчас в теме
(3) а если у них реквизит ДетскийПр , не чисто булево, а - например составного типа, или произвольного ?
6. Riko Naomi (user618496_Riko.Naomi) 21.12.16 17:47 Сейчас в теме
7. alex G (alexx2510) 25 21.12.16 18:03 Сейчас в теме
(1) Посоветую небольшой рефакторинг кода

1) Вместо
Процедура ДетскийПрПриИзменении(Элемент)
    
    Если Объект.ДетскийПр = Истина Тогда
        РассчитатьДетскийПр();
    ИначеЕсли Объект.ДетскийПр = Ложь Тогда
        РассчитатьДетскийПр1();
    КонецЕсли;
      
КонецПроцедуры
...Показать Скрыть


Можно написать так

Процедура ДетскийПрПриИзменении(Элемент)

   РассчитатьДетскийПрием(Объект.ДетскийПр);
    
КонецПроцедуры

Процедура РассчитатьДетскийПрием(ДетскийПрием)

Если ДетскийПрием Тогда
// тут вероятно разные тексты запроса будут в зависимости от флага
Иначе
КонецЕсли;

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

...Показать Скрыть


2) Функцию РассчитатьДетскийПр вызываете как процедуру (судя по всему это и есть процедура)
3) Если таб.часть будете обрабатывать в этом же документе, то от передачи параметра Объект.ДетскийПр можно избавиться, т.к. вызов все равно получится контекстный, а значит значение реквизита Объект.ДетскийПр будет доступно в процедуре на сервере РассчитатьДетскийПрием
8. Arkasha Zuev (ark.zv) 2 22.12.16 06:55 Сейчас в теме
(5) Я просто написал как "ПРИМЕРНО" должно выглядеть и подписал, что дальше нужно разбираться конкретней с задачей))
9. Riko Naomi (user618496_Riko.Naomi) 22.12.16 09:30 Сейчас в теме
Оставьте свое сообщение