1. user618496_Riko.Naomi 21.12.16 14:39 Сейчас в теме

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

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

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

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

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


&НаСервере
Функция РассчитатьДетскийПр1()
	//Сообщить("дописать");	
КонецФункции
Показать
Ответы
Избранное Подписка Сортировка: Древо
7. alexx2510 28 21.12.16 18:03 Сейчас в теме
(1) Посоветую небольшой рефакторинг кода

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


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

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

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

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

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

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

Показать


2) Функцию РассчитатьДетскийПр вызываете как процедуру (судя по всему это и есть процедура)
3) Если таб.часть будете обрабатывать в этом же документе, то от передачи параметра Объект.ДетскийПр можно избавиться, т.к. вызов все равно получится контекстный, а значит значение реквизита Объект.ДетскийПр будет доступно в процедуре на сервере РассчитатьДетскийПрием
2. le0nid 21.12.16 15:04 Сейчас в теме
Как минимум неграмотно написан запрос.
3. ark.zv 9 21.12.16 15:19 Сейчас в теме
Как минимум должно выглядеть примерно так:

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

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

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

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

КонецФункции
Показать


А что там вам конкретно нужно, это надо разбираться подробнее
4. user618496_Riko.Naomi 21.12.16 15:30 Сейчас в теме
(3)хорошо, поняла вас, буду разбирать, спасибо за подсказку!)
5. Boneman 214 21.12.16 17:15 Сейчас в теме
(3) а если у них реквизит ДетскийПр , не чисто булево, а - например составного типа, или произвольного ?
6. user618496_Riko.Naomi 21.12.16 17:47 Сейчас в теме
8. ark.zv 9 22.12.16 06:55 Сейчас в теме
(5) Я просто написал как "ПРИМЕРНО" должно выглядеть и подписал, что дальше нужно разбираться конкретней с задачей))
9. user618496_Riko.Naomi 22.12.16 09:30 Сейчас в теме
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Волгоград
зарплата от 45 000 руб. до 90 000 руб.
Полный день

Программист 1С
Нижний Новгород
зарплата до 120 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Консультант-аналитик 1С
Москва
зарплата от 70 000 руб. до 100 000 руб.
Полный день

Программист 1С
Москва
зарплата от 80 000 руб. до 120 000 руб.
Временный (на проект)