Средняя цена номенклатуре

1. Гость 15.10.18 12:34
Добрый день. В чем может быть ошибка? Помогите решить, пожалуйста


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

Выборка = Запрос.Выполнить().Выбрать();

СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * Выборка.СредняяЦена;	

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


&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
	
	СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
	СрЦнЗп(Элемент)
	
КонецПроцедуры
Показать
Прикрепленные файлы:
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dandykry 9 15.10.18 12:51 Сейчас в теме
(1)

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

Выборка = Запрос.Выполнить().Выбрать(); 
Пока Выборка.Следующий() Цикл
Сумма = Количество * Выборка.СредняяЦена;	
КонецЦикла;
КонецПроцедуры 


&НаКлиенте 
Процедура ТоварыКоличествоПриИзменении(Элемент) 

СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные; 
сумма = 0;
 СрЦнЗп(СтрокаТабличнойЧасти.Количество, сумма) ;
СтрокаТабличнойЧасти.Сумма = сумма;

КонецПроцедуры
Показать



передаете строку с клиента на сервер. Так нельзя.

Ошибка номер 2 - остатки и цены получаете по всей номенклатуре в базе
+
3. Гость 15.10.18 12:58
4. Гость 15.10.18 12:59
""""Ошибка номер 2 - остатки и цены получаете по всей номенклатуре в базе""""
А как по другому, мне нужно знать среднюю цену каждой номенклатуры в базе
+
5. Гость 15.10.18 13:04
Как это можно сделать по конкретной номенклатуре?
+
6. bmk74 234 15.10.18 13:26 Сейчас в теме
(5)Странный вопрос, условие в запрос добавить,
Во первых на сервер лучше передать идентификатор строки табличной части
Типа того Сумма = СрЦнЗп(Элементы.Товары.ТекущаяСтрока);
На Сервере
Функция СрЦнЗп(Идентификатор)
      ТекСтрока = Товары.НайтиПоИдентификатору(Идентификатор);

В запрос Условие по номенклатуре добавить

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

Выборка = Запрос.Выполнить().Выбрать();

Если Выборка.Следующий()
Возврат ТекСтрока.Количество * Выборка.СредняяЦена

КонецЕсли;
Возврат 0
КонецФункции;
Показать
triviumfan; +1
7. Гость 15.10.18 14:44
ТекСтрока = Товары.НайтиПоИдентификатору(Идентификатор);
Эта строчка у меня не срабатывает и не пойму почему
+
8. bmk74 234 15.10.18 14:57 Сейчас в теме
(7)
Объект.Товары.НайтиПоИдентификатору

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

Выборка = Запрос.Выполнить().Выбрать();

Если Выборка.Следующий() Тогда 
Возврат ТекСтрока.Количество * Выборка.СредняяЦена

КонецЕсли;
Возврат 0
КонецФункции

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

И СНОВА ТА ЖЕ ОШИБКА ЧТО НА СКРИНЕ, не судите строго только начинаю с 1С))
+
10. bmk74 234 15.10.18 16:02 Сейчас в теме
Зачем столько сообщений ? я аж три ветки насчитал
По сути И запрос не исправляйте специально вам написал что бы не через где а в параметрах виртуальной таблицы номенклатуру указывать !!!!
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)

//СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
Если НЕ СредняяЦенаЗапасов(Элементы.Товары.ТекущаяСтрока) Тогда
      Сообщить("Не найдена средняя цена);
КонецЕсли;
//СтрокаТабличнойЧасти.Сумма = Сумма;

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


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

Выборка = Запрос.Выполнить().Выбрать();

Если Выборка.Следующий() Тогда
ТекСтрока.Количество =  ТекСтрока.Количество * Выборка.СредняяЦена
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции 

Показать
+
11. Гость 15.10.18 16:16
Запрос.УстановитьПараметр("Номенклатура", ТекСтрока.Номенклатура);
Ругается на отсутствие поле объекта Номенклатура, хотя оно есть
+
Внимание! Не забывайте отмечать решение на ваш вопрос, если оно найдено. Это повысит ваш рейтинг на форуме.
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот