Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Отчет "СтоимостнаяОценкаСкладаВЦенахНоменклатуры"          
EritikWoW Подменю пользователя
сообщение 23.04.16, 5:25
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 53
Спасибо сказали: 1 раз
Рейтинг: 0

суть вопроса заключается в следующем:
1. Есть отчет "СтоимостнаяОценкаСкладаВЦенахНоменклатуры" в нем есть соответственно есть цены... (но товар покупался за ин.валюту), хотелось бы либо переделать этот отчет что бы он пересчитывал стоимость вещей на складах по тек.курсу
и вывести либо в тек. цену либо в новый столбец.... (отчет сделан на основе "Уневерсального отчета" и я не могу понять как получить шаблон текста запроса что бы передать ему доп текст с нужной) или же как дополнить таблицу т.к. при попытке обхода не могу подобрать "итератор" к ней
2. Есть второй вариант сделать свой отчет но что то пока не знаю как получить усредненную цену на тек. момент вот мой так сказать отчет (средняя нужна для получения текущей цены):

Процедура СформироватьНажатие(Элемент)
    ВыборкаДанных();    
КонецПроцедуры

Функция ВыборкаДанных()    
Условие = "    
               |ГДЕ";  

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

Если НЕ Склад = Справочники.Склады.ПустаяСсылка() и НЕ Номенклатура = Справочники.Номенклатура.ПустаяСсылка() Тогда
Запрос.Текст = Запрос.Текст + УсловиеСоединения;
КонецЕсли;

Если НЕ Номенклатура = Справочники.Номенклатура.ПустаяСсылка() Тогда              
Запрос.Текст = Запрос.Текст + УсловиеНоменклатура + Группировка;
Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
Запрос.УстановитьПараметр("Склад",Склад);
ИначеЕсли НЕ Склад = Справочники.Склады.ПустаяСсылка() Тогда              
Запрос.Текст = Запрос.Текст + УсловиеСклад + Группировка;
Запрос.УстановитьПараметр("Склад",Склад);
Иначе
Запрос.Текст = Запрос.Текст + Группировка;
КонецЕсли;

ТабНомен = Запрос.Выполнить().Выбрать();              

ВалютаUSD = Справочники.Валюты.НайтиПоНаименованию("USD");
    
ОтборВалют = Новый Структура;
ОтборВалют.Вставить("Валюта",ВалютаUSD);

Пока ТабНомен.Следующий() Цикл
НовСтрока                     = Результат.Добавить();
НовСтрока.Количество         = ТабНомен.Количество;
НовСтрока.Склад                = ТабНомен.Склад;
НовСтрока.Номенклатура         = ТабНомен.Номенклатура;
НовСтрока.Цена                 = ТабНомен.Цена;
НовСтрока.ЕдИзмерения         = ТабНомен.ЕдиницаИзмерения;
НовСтрока.Валюта             = ТабНомен.Валюта;
Если ТабНомен.Валюта        = Справочники.Валюты.НайтиПоНаименованию("USD") Тогда
НовСтрока.ЦенаВГрнТекущий          = ТабНомен.Цена*КурсДолКГрн;
Иначе НовСтрока.ЦенаВГрнТекущий    = ТабНомен.Цена;
КонецЕсли;
РСКурсДолКГрн = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ТабНомен.Период,ОтборВалют);
НовСтрока.Курс = РСКурсДолКГрн.Курс / РСКурсДолКГрн.Кратность;
Если ТабНомен.Валюта        = Справочники.Валюты.НайтиПоНаименованию("USD") Тогда
НовСтрока.ЦенаВГрн          = ТабНомен.Цена*НовСтрока.Курс;
Иначе НовСтрока.ЦенаВГрн    = ТабНомен.Цена;
КонецЕсли;

КонецЦикла;
//ПолучитьСреднюю()
КонецФункции

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

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

Процедура ПриОткрытии()
    
    ВалютаUSD = Справочники.Валюты.НайтиПоНаименованию("USD");
    
    ОтборВалют = Новый Структура;
    ОтборВалют.Вставить("Валюта",ВалютаUSD);
    Дата1С = ТекущаяДата();
    ДатаВалюты = ДатаВСтроку(Дата1С);
    ДатаВалюты = Дата(ДатаВалюты);
    
    РСКурсДолКГрн = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ДатаВалюты,ОтборВалют);
    КурсДолКГрн = РСКурсДолКГрн.Курс / РСКурсДолКГрн.Кратность;

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

Функция ДатаВСтроку(Дата1С)
                РезультатДата = Формат(Год(Дата1С),"ЧГ=0") + ?(СтрДлина(Строка(Месяц(Дата1С))) < 2,"0" + Строка(Месяц(Дата1С)) , Строка(Месяц(Дата1С)))
                + ?(СтрДлина(Строка(День(Дата1С))) < 2, "0" + Строка(День(Дата1С)), Строка(День(Дата1С)));
                
                
                Возврат РезультатДата;
КонецФункции


+ не пойму почему но не сворачивает данные либо нужно разносить запросы и сворачивать отдельно ?

Я так подумал что скорее всего нужно делать отдельно выборку остатков делать свертку по "Номенклатуре" потом отдельно по ценам... вот только как получить усредненную цену... количество в какой то временный реквезит помещать вместе с ценой а потом делить между собой ?

ладно кому не сложно направьте на правильную мысль ! =)

sava1 Подменю пользователя
сообщение 23.04.16, 8:55
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

Полный бред.
1. В запросе используйте виртуальные таблицы Остатки и СрезПоследних.
2. Основная таблица Остатки (вернет сгруппированные данные) и левым соединением Цены.
3. Параметры (условия) - просто В иерархии
4. Дату желательно - вдруг надо будет посмотреть на прошлые периоды
5. Что за Средняя цена ? Ми смотрим оценку склада на какой-то момент, на который известна конкретная цена.

"Шаблон" запроса находится в модуле отчета , Процедура УстановитьНачальныеНастройки(...

Сообщение отредактировал sava1 - 23.04.16, 9:02

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 19.04.24, 17:33
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!