Имя: Пароль:
1C
1С v8
v8: цены поступления по номенклатуре в запросе
0 kosmo
 
26.12.11
11:20
Нужно узнать цены поступления по номенклатуре. Из регистра накопления выдать по номенклатуре пять последних документов вида ПоступлениеТоваровУслуг с ценой. При этом у номенклатуры должна быть средневзвешенная цена в соответствии с этими последними документами.
1 andrewks
 
26.12.11
11:21
сколько?
2 kosmo
 
26.12.11
11:30
(1) что?
3 ice777
 
26.12.11
11:31
(2) скока бабла есть? )
4 Godofsin
 
26.12.11
11:32
и мобилу дай позвонить
5 kosmo
 
26.12.11
11:33
а во сколько эту работу оцениваете вы?
6 Ненавижу 1С
 
гуру
26.12.11
11:34
(5) 10 тыш рублей РФ
7 Godofsin
 
26.12.11
11:35
(5) 9900 руб.
8 a_alenkin
 
26.12.11
11:36
8999
9 kosmo
 
26.12.11
11:36
10 Ненавижу 1С
 
гуру
26.12.11
11:36
(7) демпинг не в почете
11 Ненавижу 1С
 
гуру
26.12.11
11:36
(9) у меня таких две, могу одну тебе продать
12 mzelensky
 
26.12.11
11:37
вот это расценкииии...надо повышать тарифы :)
13 kosmo
 
26.12.11
11:38
(11)
сразу виден уровень денежных притязаний если таких машинок набрал комплект
14 kosmo
 
26.12.11
11:39
я так понял форум наводнили внуки петросяна?
понятно, люди начинают празновать
15 Ненавижу 1С
 
гуру
26.12.11
11:40
(14) если серьезно, то ты хоть написал бы как пробовал и что не вышло
16 Godofsin
 
26.12.11
11:41
(14) Уважаемый, что ты хочешь то? Нанять разработчика или написать запрос самому? Попробывал бы хоть для начала, и показал, где не получилось. За тебя тут вряд ли кто-то писать запрос будет, а вот помочь в написании могут.
17 NcSteel
 
26.12.11
11:43
(0)

Предлагаю свою кандидатуру на предъявленный аукцион.
Сложно оценить весь проект целиком. Поэтому предлагаю такой вариант:
1.    Планирование и организация проекта  - 282 часа на сумму 695 000
2.    Проектирование – оценка по результату пункта 1.
3.    Разработка - оценка по результату пункта 1.
4.    Внедрение (старт Промышленной эксплуатации) - оценка по результату пункта 1.
5.    Работа в Системе. Поддержка пользователей - оценка по результату пункта 1.
Жду предложений!!!

С Уважением,
NcSteel
18 Nutsiiam
 
26.12.11
11:46
ну не знаю. Ну 9 тыщ рублей. Ну предположим - 1 час работы.

Скда/не скда определяешь сам. Ну это навскидку. :)
19 hhhh
 
26.12.11
12:03
(14) нет, ну 10000 - это по-божески. Тем более еще нужно расшифровать твой текст. Лучше бы по английски сформулировал, было бы понятнее.
20 AgainTwenty Five
 
26.12.11
12:11
Вот брал цену из последнего прихода. Может натолкнёт на мысль?

ВЫБРАТЬ
   ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
   ВЫБОР
       КОГДА ПоступлениеТоваровУслугТовары.Ссылка.СуммаВключаетНДС
           ТОГДА ВЫРАЗИТЬ(ПоступлениеТоваровУслугТовары.Сумма / ПоступлениеТоваровУслугТовары.Количество КАК ЧИСЛО(17, 2))
       ИНАЧЕ ВЫРАЗИТЬ((ПоступлениеТоваровУслугТовары.Сумма + ПоступлениеТоваровУслугТовары.СуммаНДС) / ПоступлениеТоваровУслугТовары.Количество КАК ЧИСЛО(17, 2))
   КОНЕЦ КАК Цена,
   ПоступлениеТоваровУслугТовары.Ссылка.Дата КАК ДатаПрихода
ПОМЕСТИТЬ ЦеныИзВсехПриходов
ИЗ
   Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
ГДЕ
   ПоступлениеТоваровУслугТовары.Ссылка.Проведен = ИСТИНА
   И ПоступлениеТоваровУслугТовары.Ссылка.Дата <= &Д2
   И ПоступлениеТоваровУслугТовары.Сумма > 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ЦеныИзВсехПриходов.Номенклатура,
   МАКСИМУМ(ЦеныИзВсехПриходов.ДатаПрихода) КАК ДатаПрихода
ПОМЕСТИТЬ МаксДатаПрихода
ИЗ
   ЦеныИзВсехПриходов КАК ЦеныИзВсехПриходов

СГРУППИРОВАТЬ ПО
   ЦеныИзВсехПриходов.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   МаксДатаПрихода.Номенклатура,
   МаксДатаПрихода.Номенклатура.Код,
   МАКСИМУМ(ЕСТЬNULL(ЦеныИзВсехПриходов.Цена, 0)) КАК ЦенаПоследнегоПрихода
ИЗ
   МаксДатаПрихода КАК МаксДатаПрихода
       ЛЕВОЕ СОЕДИНЕНИЕ ЦеныИзВсехПриходов КАК ЦеныИзВсехПриходов
       ПО МаксДатаПрихода.Номенклатура = ЦеныИзВсехПриходов.Номенклатура
           И МаксДатаПрихода.ДатаПрихода = ЦеныИзВсехПриходов.ДатаПрихода

СГРУППИРОВАТЬ ПО
   МаксДатаПрихода.Номенклатура,
   МаксДатаПрихода.Номенклатура.Код
21 afk
 
26.12.11
12:17
как я понял загвоздка в условии "пять последних документов" по каждой номенклатуре
22 kosmo
 
30.12.11
10:33
Действительно, загвоздка именно "5 последних документов", причем интересует возможность исключительно запросом. Для меня задача не по зубам, но может есть монстры запросов.

зы. повторюсь, интересно именно запросом.

и вторая загвоздка - при группировке по номенклатуре посчитать средневзвешенную цену (не среднюю). можно так в принципе сделать? (исключительно запросом)
23 Wobland
 
30.12.11
10:40
5 последних документов выбираются так: ВЫБРАТЬ ПЕРВЫЕ 5 УПОРЯДОЧИТЬ ПО Дата УБЫВ
я - монстр? ;)
24 ssh2006
 
30.12.11
10:58
ВЫБРАТЬ
   ПартииТоваровНаСкладахОбороты.Номенклатура,
   ПартииТоваровНаСкладахОбороты.ДокументОприходования,
   ПартииТоваровНаСкладахОбороты.СтоимостьПриход,
   ПартииТоваровНаСкладахОбороты.КоличествоПриход
ПОМЕСТИТЬ ТабПоступления
ИЗ
   РегистрНакопления.ПартииТоваровНаСкладах.Обороты(ДАТАВРЕМЯ(2011, 1, 1), , , ДокументОприходования ССЫЛКА Документ.ПоступлениеТоваровУслуг) КАК ПартииТоваровНаСкладахОбороты

СГРУППИРОВАТЬ ПО
   ПартииТоваровНаСкладахОбороты.Номенклатура,
   ПартииТоваровНаСкладахОбороты.ДокументОприходования,
   ПартииТоваровНаСкладахОбороты.СтоимостьПриход,
   ПартииТоваровНаСкладахОбороты.КоличествоПриход
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ТабПоступления.Номенклатура,
   СУММА(ТабПоступления.СтоимостьПриход) / СУММА(ТабПоступления.КоличествоПриход) КАК СредняяЦена
ИЗ
   ТабПоступления КАК ТабПоступления
ГДЕ
   ТабПоступления.ДокументОприходования В
           (ВЫБРАТЬ ПЕРВЫЕ 5
               ВТТабПоступления.ДокументОприходования
           ИЗ
               ТабПоступления КАК ВТТабПоступления
           ГДЕ
               ВТТабПоступления.Номенклатура = ТабПоступления.Номенклатура
           УПОРЯДОЧИТЬ ПО
               ВТТабПоступления.ДокументОприходования.МоментВремени УБЫВ)

СГРУППИРОВАТЬ ПО
   ТабПоступления.Номенклатура
25 kosmo
 
10.01.12
13:17
(24) результат будет:

Ном1 12,32
Ном2 1999

а предполагалось нечто

ном1 СреднеВзвешеннаяЦена
 документ1 ценаПоДокументу
 документ2 ценаПоДокументу
...
ном2 СреднеВзвешеннаяЦена
 документ20 ценаПоДокументу
 документ21 ценаПоДокументу

Возникают вопросы
1.Делал без временной таблицы с применением отбора сразу в секции ГДЕ первого запроса. Расчет очень долгий - это в принципе должно долго рассчитываться или это мое неумение писать запросы? (временная таблица по всей номенклатуре, имхо, тяжеловесно в плане используемой памяти).
2. Пытался сделать итоги по номенклатуре, засунуть в временную таблицу и потом обработать данные временной таблицы для расчета средневзвешенной цены по номенклатуре. Но "Предложения АВТОУПОРЯДОЧИВАНИЕ и ИТОГИ не могут быть использованы в запросе, формирующем временную таблицу" Это тупиковый путь?
3. Пока вижу один путь - объединение строк с рассчитанной ценой для номенклатуры и данными по документам. Есть еще варианты?

зы. для тех кто от собственных бесплатных советов имеет приступ неконтролируемой жадности. Вопрос решен на СКД. Через запрос изучаю возможности именно Запросов. По частям все понятно - слить в один запрос не получается.
26 hhhh
 
10.01.12
13:29
(25) ну сам понимаешь, только высокой души человек мог впендюрить отбор в секцию ГДЕ. Это будет сразу работать в 1500 раз медленнее, а на реальной (не тестовой) базе будешь ночами дежурить возле базы, ждать пока эта фигня выполнится.
27 kosmo
 
11.01.12
11:08
для тех кто будет делать нечто похожее
Книга знаний: Оптимизация работы запросов в 1С 8;
и А.П. Габец и Д.И. Гончаров 1С:Предприятие 8.1. Простые примеры разработки
Как написать запрос таким образом, чтобы на определенном уровне иерархии запроса считались одни итоговые функции, а на другом уровне – другие?
28 ssh2006
 
12.01.12
17:43
(25)
ВЫБРАТЬ
   ПартииТоваровНаСкладахОбороты.Номенклатура,
   ПартииТоваровНаСкладахОбороты.ДокументОприходования,
   ПартииТоваровНаСкладахОбороты.СтоимостьПриход,
   ПартииТоваровНаСкладахОбороты.КоличествоПриход
ПОМЕСТИТЬ ТабПоступления
ИЗ
   РегистрНакопления.ПартииТоваровНаСкладах.Обороты(ДАТАВРЕМЯ(2011, 6, 1), , , ДокументОприходования ССЫЛКА Документ.ПоступлениеТоваровУслуг) КАК ПартииТоваровНаСкладахОбороты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ТабПоступления.Номенклатура КАК Номенклатура,
   ТабПоступления.ДокументОприходования,
   ТабПоступления.СтоимостьПриход / ТабПоступления.КоличествоПриход КАК Цена,
   ТабПоступления.СтоимостьПриход,
   ТабПоступления.КоличествоПриход
ИЗ
   ТабПоступления КАК ТабПоступления
ГДЕ
   ТабПоступления.ДокументОприходования В
           (ВЫБРАТЬ ПЕРВЫЕ 5
               ВТТабПоступления.ДокументОприходования
           ИЗ
               ТабПоступления КАК ВТТабПоступления
           ГДЕ
               ВТТабПоступления.Номенклатура = ТабПоступления.Номенклатура
           УПОРЯДОЧИТЬ ПО
               ВТТабПоступления.ДокументОприходования.МоментВремени УБЫВ)
ИТОГИ
   СУММА(ТабПоступления.СтоимостьПриход) / СУММА(ТабПоступления.КоличествоПриход) КАК Цена
ПО
   Номенклатура
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn