В Отчете По Продажам Тмц Цены Из Справочника!

  • Автор темы Daha
  • Дата начала
D

Daha

#1
Доброе утро! Третий день бьюсь над отчетом((( Помогите, пжст, разобраться!!!!
Отчет по продажам ТМЦ в 1С 7.7 "Торговля и склад". Необходимо заменить цены товаров: брать не из регистра, а из справочника цен. Проблема в том, что итоги надо считать до, а не после вывода номенклатуры по каждой группе товаров.
Пыталась выгрузить запрос в таблицу, заносила цены элементов, расчитывала сумму, родителя, и потом по родителям расчитывала суммы по группам. Это сработало если группировка только по номенклатуре, если же ставим еще что-нибудь по партии, фирме, складу и тд., то все...не работает:D надо как-то доработать, а как???
Пыталась еще брать цены сразу в запросе :
Функция СебестЦ = Сумма(глПолучитьЦену(Номенклатура,ЦенаСебестоимость, ДатаКонца))
но тут надо же ее умножить на количество :
* (Расход(Количество)-Приход(Количество)Когда(КодОперации в КодыВозвратов))
а в самом запросе это сделать не дает:( в итоге какие-то бешенные суммы, непонятно откуда взявшиеся.....
Помогите, пжст, каким путем идти? и как?
 

puh14

Well-known member
11.07.2008
1 412
0
#2
Так вам что - праджаную себестоимость узнать надо?
Если так - посмотрите отчет Торг 29 - там все суммы аккурат себестоимость. Посмотрите из какого регистра берет, и если там есть нужные вам измерения - берите оттуда. Если не выхродит стадартными запросами - воспользуйтесь прямыми.
 
D

Daha

#3
мне нужно по себестоимости расчитать итоги, т.е сумму брать = колво из регистра * цена из справочника

Добавлено: мне нужно по себестоимости расчитать итоги, т.е сумму брать = колво из регистра * цена из справочника
Можно ли в запросе так писать?
Функция СебестЦ = Сумма(глПолучитьЦену(Номенклатура,ЦенаСебестоимость, ДатаКонца)*(Расход(Количество)-Приход(Количество)Когда(КодОперации в КодыВозвратов)));
ругается, пишет ошибку:(
 

Дайнеко

Well-known member
19.11.2009
951
0
#4
Попробуйте

Функция МояСтоимость(Номенклатура,Количество)
Возврат Номенклатура.Цена * Количество;
КонецФункции

ТекстЗапроса = "
Номенклатура = Регистр....
Количество = Регистр.
Функция СебестЦ = Сумма(МояСтоимость(Номенклатура,Количество))
"
 

puh14

Well-known member
11.07.2008
1 412
0
#5
Не рекомендую брать цену из справочника - так как не всегда цена * количество = сумма. Очень часто цена в приходной накладной получается делением суммы на количество с округлением до второго знака. Представим что в третьем знаке цены было 0.003 копейки, при округлении цены они исчезли. Сравниваем исходную сумму и сумму полученную через количество*Цена (округленная). При количестве товара 10 у вас будет расхождение сумм на 3 копейки, для 100 - 30 копеек, для 1000 - 3 рубля. Правильнее оперировать регистром партии товаров на складах - там хранятся остатки по суммам, при этом при списании последней единицы товара остаток суммы списыватся в ноль. Кстати - себестоимость вам нужна с НДС или без?
 
D

Daha

#6
Попробуйте

Функция МояСтоимость(Номенклатура,Количество)
Возврат Номенклатура.Цена * Количество;
КонецФункции

ТекстЗапроса = "
Номенклатура = Регистр....
Количество = Регистр.
Функция СебестЦ = Сумма(МояСтоимость(Номенклатура,Количество))
"
но у меня :
Количество = РасходК-ВозвратК, где
|Функция РасходК = Расход(Количество);
|Функция ВозвратК = Приход(Количество)Когда(КодОперации в КодыВозвратов);
и они не передаются, пишет ошибку "Переменная не определена"
Функция СебестЦ = Сумма(ПолучитьСебестоимость(Номенклатура,РасходК, ВозвратК));";


Добавлено:
Не рекомендую брать цену из справочника - так как не всегда цена * количество = сумма. Очень часто цена в приходной накладной получается делением суммы на количество с округлением до второго знака. Представим что в третьем знаке цены было 0.003 копейки, при округлении цены они исчезли. Сравниваем исходную сумму и сумму полученную через количество*Цена (округленная). При количестве товара 10 у вас будет расхождение сумм на 3 копейки, для 100 - 30 копеек, для 1000 - 3 рубля. Правильнее оперировать регистром партии товаров на складах - там хранятся остатки по суммам, при этом при списании последней единицы товара остаток суммы списыватся в ноль. Кстати - себестоимость вам нужна с НДС или без?
Это все обсуждали, надо именно так брать цену, просто Себестоимость без НДС
 
D

Daha

#7
Все разобралась :(
Функция СебестЦ = Сумма(ПолучитьСебестоимость(Номенклатура,Запрос.РасходК, Запрос.ВозвратК));
только почему-то суммы округляет(
 
D

Daha

#8
Люди добрые помогите, пжст!
Все хорошо, только суммы округляются....
вот функция моя, откуда берется округление?(((
Функция ПолучитьСебестоимость(Номенклатура, РасходК, ВозвратК)

Если ТипЦены = 1 Тогда
СпрПользователи = СоздатьОбъект("Справочник.Пользователи");
СпрПользователи.НайтиПоНаименованию(СокрЛП(ИмяПользователя()));
ТекПользователь = СпрПользователи.ТекущийЭлемент();
ЦенаСебестоимость = ТекПользователь.ОсновнойТипЦенПокупки;
КонецЕсли;

ОбЦена = 0;
ЦенаЦены = 0;
ВалЦены = 0;
глВернутьЦену(Номенклатура, ЦенаСебестоимость, ДатаКонца, ЦенаЦены,,ВалЦены,, ОбЦена);
Если ПустоеЗначение(ОбЦена) = 0 Тогда
// есть цена
НайденнаяЕдиница= ОбЦена.Единица.Получить(ДатаКонца);
Цена = ЦенаЦены/?(НайденнаяЕдиница.Коэффициент = 0, 1, НайденнаяЕдиница.Коэффициент);
Иначе
Цена = 0;
ВалютаЦены = глРубли;
КонецЕсли;


СуммаСебестоимость = Цена * РасходК;

Возврат СуммаСебестоимость;

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

Daha

#9
;) подскажите, пжст.... почему суммы могут обнуляться?? ну никак не пойму, откуда берется.....
 

vbs

Well-known member
18.02.2007
1 708
1
#11
подскажите, пжст.... почему суммы могут обнуляться?? ну никак не пойму, откуда берется.....

1. Проверить ТекПользователь.ОсновнойТипЦенПокупки на пустое значение
2. Проверить, задан ли у номенклатуры нужный тип цены
 

Дайнеко

Well-known member
19.11.2009
951
0
#12
;) подскажите, пжст.... почему суммы могут обнуляться?? ну никак не пойму, откуда берется.....
Есть такой глючокс в запросах. Видали.
Пусть у нас есть писанная функция и мы ее используем в запросе. При определенных параметрах ф-ия должна вернуть число не целое, а в реале получается целое.

Столкнувшись с явлением я сделал вывод, что запрос округляет результат до точности первого аргумента. Поэтому в параметры ф-ии добавляю еще один фиктивный аргумент.

Функция СебестЦ = Сумма(ПолучитьСебестоимость(0.00, Номенклатура,Запрос.РасходК, Запрос.ВозвратК));
 
D
#13
Спасибо большое за ответы! я разобралась, это действительно глюк 1С, решила проблему умножением суммы на 100 в функции и делением на 100 необходимых параметров.
Дайнеко, ваш способ, конечно, лучше, переделаю обязательно))