Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Цена последней продажи

Цена последней продажи
Я
   Александр43
 
06.08.19 - 12:52
Необходимо получить цену последней продажи номенклатуры по контрагенту. Подскажите как можно сделать
 
 
   catena
 
1 - 06.08.19 - 12:56
Открыть список реализаций, отфильтровать по контрагенту, заглянуть в последний документ
   Александр43
 
2 - 06.08.19 - 13:01
(1) Нужно из регистра ПродажиОбороты, запросом как-то это достать
   МихаилМ
 
3 - 06.08.19 - 13:02
это вопрос на проф пригодность. кто не знает , тому не место в профессии.
   K1RSAN
 
4 - 06.08.19 - 13:02
(2) Выбрать 1 и отсортировать по дате регистратора от самых последних?
   catena
 
5 - 06.08.19 - 13:02
(2)Сколько новых вводных и все не в первом сообщении.
Что делали, что не получилось?
   K1RSAN
 
6 - 06.08.19 - 13:03
(4)+ это если одной конкретной для обработки. Но а так чем "срез последних" не нравится?
   Александр43
 
7 - 06.08.19 - 13:04
(6) Там цена номенклатуры будет последняя. А надо именно цену продажи
   catena
 
8 - 06.08.19 - 13:06
(6)продажиОБОРОТЫ - и срез последних?
   Maniac
 
9 - 06.08.19 - 13:07
100 рублей заплатишь?
   piter3
 
10 - 06.08.19 - 13:08
(6) Нет.цены там не причем скорее всего,вообще от балды могут поставить в этом зупе
   Александр43
 
11 - 06.08.19 - 13:11
[CODE]ВЫБРАТЬ
    ПродажиОбороты.Номенклатура КАК Номенклатура,
    ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот КАК Цена,
    ПродажиОбороты.Регистратор.Дата КАК РегистраторДата
ИЗ
    РегистрНакопления.Продажи.Обороты(, , Регистратор, Контрагент = &Контрагент) КАК ПродажиОбороты

УПОРЯДОЧИТЬ ПО
    РегистраторДата УБЫВ
ИТОГИ ПО
    РегистраторДата[/CODE]
Я могу так примерно получить последние значения, а как их дальше взять отсюда именно последние
   Maniac
 
12 - 06.08.19 - 13:11
Если по реализациям то

"ВЫБРАТЬ ПЕРВЫЕ 1
|    РеализацияТоваровУслугТовары.Ссылка.Дата КАК Дата,
|    РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
|    РеализацияТоваровУслугТовары.Характеристика КАК Характеристика,
|    МАКСИМУМ(РеализацияТоваровУслугТовары.Цена) КАК Цена
|ИЗ
|    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
|    РеализацияТоваровУслугТовары.Ссылка.Партнер = &Партнер
|    И РеализацияТоваровУслугТовары.Ссылка.Проведен = ИСТИНА
|
|СГРУППИРОВАТЬ ПО
|    РеализацияТоваровУслугТовары.Номенклатура,
|    РеализацияТоваровУслугТовары.Характеристика,
|    РеализацияТоваровУслугТовары.Ссылка.Дата
|
|УПОРЯДОЧИТЬ ПО
|    Дата УБЫВ"
   Maniac
 
13 - 06.08.19 - 13:12
(11)

ВЫБРАТЬ ПЕРВЫЕ 1
   Maniac
 
14 - 06.08.19 - 13:12
а стоп. по всем товарам?
   Александр43
 
15 - 06.08.19 - 13:13
(13) даааа, для каждого товара своя цена. А так я тоже делал и он получается будет брать 1 последнюю цену с любого товара
   Maniac
 
16 - 06.08.19 - 13:13
понятно. если по всем товарам тогда ВЫБРАТЬ ПЕРВЫЕ 1 не подходит.

тогда МАКСИМУМ(Дата)
   Maniac
 
17 - 06.08.19 - 13:14
по регистру максимум период
   Александр43
 
18 - 06.08.19 - 13:20
(17) У меня просто есть запрос, хотелось бы туда добавить, максимум получалось что выводилась одна цена для всей номенклатуры
   K1RSAN
 
19 - 06.08.19 - 13:32
(18)
Ну мне в голову сразу приходит отобрать для каждой номенклатуры последнюю дату использования, например

"Выбрать
|Регистр.Номенклатура,
|Максимум(Регистр.Дата)
|ПОМЕСТИТЬ ВТ_1
|Из
|РегистрНакопления.ПродажиОбороты КАК Регистр
|Сгруппировать ПО
|Регистр.Номенклатура
////////////////////////////////////////


А во второй части уже отобрать цену по этим записям. Номенклатура и дата уже есть - осталось цену подкинуть. Вроде несложно, хотя уверен есть и покрасивее решения.
   K1RSAN
 
20 - 06.08.19 - 13:33
(19)+ Да отбор по контрагенту не учел
   Александр43
 
21 - 06.08.19 - 13:35
(20) Щас попробую
   K1RSAN
 
22 - 06.08.19 - 14:09
(21) Я там не заморачивался орфографии, так что голову не забудь включить)
   Александр43
 
23 - 07.08.19 - 10:22
(22) Пытаюсь выудить цену последнюю, почему-то одну цену берет правильно, а другие нет
[CODE]ВЫБРАТЬ
    ПродажиОбороты.Номенклатура,
    МАКСИМУМ(ПродажиОбороты.Регистратор) КАК Регистратор,
    МАКСИМУМ(ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот) КАК ЦенаПродажи
ИЗ
    РегистрНакопления.Продажи.Обороты(, , Регистратор, Контрагент = &Контрагент) КАК ПродажиОбороты

СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Номенклатура][/CODE]
   hhhh
 
24 - 07.08.19 - 10:30
(23) так ты берешь максимум от цены. А тебе наоборот нужно последнюю цену. Действительно, голову не включил.
   xxTANATORxx
 
25 - 07.08.19 - 10:44
(12)бгг, не угадал
я такие вопросы на собеседовании задавал, сразу видно может чел с запросами работать или нет
   piter3
 
26 - 07.08.19 - 10:46
(23) максимум период
   catena
 
27 - 07.08.19 - 11:11
(23)Перечитай (22) еще раз по буквам.
   sqr4
 
28 - 07.08.19 - 11:13
(0) в одну секунду может быть сколько угодно продаж)
   Maniac
 
29 - 07.08.19 - 11:30
1) Сделай запрос по номенклатуре
2) ПОтом перебором - по каждой запрос с ВЫБРАТЬ ПЕРВЫЕ 1 с даной убывания.
3) Отсеваешь номенклатуру по которой не было продаж.

Получаешь то что нужно уверенно.
   sqr4
 
30 - 07.08.19 - 11:42
(29) Можно круче
1. Определяешь максимальную длину наименования твоей номенклатуры
2. Получаешь все наборы сочитаний букв и цифр и знаков этой длины
3. Связываешь данный набор со справочником номенклатуры 
дальше все как Маня описал)
 
 Рекламное место пустует
   gSha
 
31 - 07.08.19 - 11:44
а что это за читерство такое с последней продажей ? Это ларьки третьего уровня ?  Знаю когда вот цену на год утвердили и по нему торгуют.
   sqr4
 
32 - 07.08.19 - 11:46
(31) учебная задача же
   gSha
 
33 - 07.08.19 - 11:49
Ну раз учебная, то мне больше нравится ответ - найти глазаами и не терзать программиста ... все равно в ларьке денег на него нет.
   Александр43
 
34 - 07.08.19 - 12:00
(32) Да, задача учебная) Нельзя сделать получается, чтобы он сразу выводил только с последней датой? Если делаю так, то он выводит цены к каждому документу. Было бы не плохо, если он так сразу выводил) Советую еще сделать вторую таблицу и там получать цену, а потом связать уже в итоге, но чего-то не получается.

ВЫБРАТЬ
    ПродажиОбороты.Номенклатура КАК Номенклатура,
    МАКСИМУМ(ПродажиОбороты.Регистратор) КАК Регистратор,
    ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот КАК Цена
ИЗ
    РегистрНакопления.Продажи.Обороты(, , Регистратор, Контрагент = &Контрагент) КАК ПродажиОбороты

СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Номенклатура,
    ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот
   catena
 
35 - 07.08.19 - 12:08
(34)Ты на форум поболтать пришел? Или совета попросить?
Сначала отбираешь максимальную ДАТУ(максимальный регистратор не факт, что будет последний по дате) для каждой номенклатуры. Только Номенклатура и дата, у них традиционная любовь.
А потом по дате и номенклатуре ищешь цену. Проблема будет, если в одну секунду было несколько цен - тут уж тебе придется решать, какая из них "последняя".
   Maniac
 
36 - 07.08.19 - 12:12
(29) рабочее решение. для отчета - подойдет на 146 процентов. без каких либо проблем.
Даже можно будет еще какие то данные добавлять к отчету. остатки и прочую фигню.
Можно сделать любой отчет.

Я такие делаю постоянно. У меня есть помощник установки цен где берутся последние цены (правда закупки). Но цены продаж тоже без проблем.

Полноценный отчет. с остатками, продажами, ценами, сравнение цен. и прочее.

Просто садишся и делаешь.
   Maniac
 
37 - 07.08.19 - 12:13
Пусть автор для начала озвучит задачу для которой это выгребается. Явно это не прсто примитивный отчет. А преследуется какая то задача и наверняка выводимых данных больше.
   sqr4
 
38 - 07.08.19 - 12:15
(36) Маня ты же был моим героем, зачем запрос в цикле с выбрать 1? Надеюсь ты стебешься
   Александр43
 
39 - 07.08.19 - 12:16
(37) Макет печатной формы, туда еще выводится Номенклатура, количество, цена(НДС), сумма и т.д Все выводится и работает, кроме последнего столбика Цена последней продажи
   Maniac
 
40 - 07.08.19 - 12:16
(38) и что? если это разовый отчет для какой то редко используемой задачи то и циклом не грех сделать.
   sqr4
 
41 - 07.08.19 - 12:17
(40) один раз не пидор.с?
   Maniac
 
42 - 07.08.19 - 12:18
(39) тю......емае. тем более (29)!!! уже даже список номенклатуры известен. Там явно в доке у тебя не тысячи товаров.
Цикл сработает просто за долю секунды.
   Maniac
 
43 - 07.08.19 - 12:19
Функция ПолучитьПоследнююЦенуПродажи(Контрагент,Номенклатура)

тралялялял

ВЫБРАТЬ ПЕРВЫЕ 1

Убыв
дата.


Возврат Цена;
КонецФункции



все
   Kashey
 
44 - 07.08.19 - 12:19
ВЫБРАТЬ
    ПродажиОбороты.Номенклатура,
    МАКСИМУМ(ПродажиОбороты.Период) КАК Период
ПОМЕСТИТЬ ВТ_Периоды
ИЗ
    РегистрНакопления.Продажи.Обороты(, , Регистратор, Контрагент = &Контрагент) КАК ПродажиОбороты

СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ВТ_Периоды.Номенклатура,
    ВЫБОР
        КОГДА Продажи.Количество <> 0
            ТОГДА Продажи.Сумма / Продажи.Количество
        ИНАЧЕ 0
    КОНЕЦ КАК Цена
ИЗ
    ВТ_Периоды КАК ВТ_Периоды
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи КАК Продажи
        ПО ВТ_Периоды.Период = Продажи.Период
            И ВТ_Периоды.Номенклатура = Продажи.Номенклатура
   Maniac
 
45 - 07.08.19 - 12:20
Я бы даже сказал что цикл нормально сработает и для 100 000 товаров.
За секунд 15 все вымахает.
   Maniac
 
46 - 07.08.19 - 12:20
Кидай печатную форму. за 300 рублей сделаю и мозг больше не ипи
   sqr4
 
47 - 07.08.19 - 12:21
(46) Сделай мне, даже 300 рублей не жалко на запрос в цикле от Мани)
   Maniac
 
48 - 07.08.19 - 12:22
Говорите конфигурации. Напишу каждому отчет Последние цены продаж.
   sqr4
 
49 - 07.08.19 - 12:23
(44) мне кажется этот запрос в некоторых модификациях делается с периодичностью раз в месяц
   Maniac
 
50 - 07.08.19 - 12:26
(49) у него печатная форма. заказа или реализации. те по табличной части где есть товары вывести колонку последняя цена продажи 9видимо покупателю нужна).
Вообще плевая задача.
   sqr4
 
51 - 07.08.19 - 12:31
(50) Нет он пришел на стажировку и ему сказали написать такой запрос
   Maniac
 
52 - 07.08.19 - 12:31
по всей УТ (кроме прайс листа) везде где только цены берутся - везде получение цены и т.п. не групповым запросом а по конкретной номенклатуре. Могу просто тысячи примеров привести где в любой типовой есть циклы в которых идут функции с запросами.

Короче утал уговаривать. хоч ипи мозг. а хоч просто сделай - тут работы на 5минут. задача была бы быстрее решена чем написание этой темы.
   Maniac
 
53 - 07.08.19 - 12:33
ВЫБРАТЬ ПЕРВЫЕ 1 - сработает быстрее чем МАКСИМУМ.
потому что во втором случае выгрубутся вес записи и будут сравниваться.
Так как в первом случае сразу будет получена конкретно 1 запись.

Запрос в цикле окажется в сотню раз быстрее.
   Maniac
 
54 - 07.08.19 - 12:34
(51) да такие задачи и на уровне сдачи экзамена на специалиста есть. фигня.
   sqr4
 
55 - 07.08.19 - 12:37
(52) ага и в заполнение по виду цен в реализации да?)
   Maniac
 
56 - 07.08.19 - 12:40
(55) у него УТ10 - там везде ПолучитьЦенуНоменклатуры
   Maniac
 
57 - 07.08.19 - 12:40
по всей конфигурации. все через одну функцию.
   sqr4
 
58 - 07.08.19 - 12:56
Кроме как ленью разработчиков, ничем не могу это объяснить
   Александр43
 
59 - 08.08.19 - 09:33
Внесу точность, делал макет внешней печатной формы для документа РеализацияТоваров. Вывод цены последней продажи наконец-то сделал с помощью 2 запросов, но получается он берет самые последние цены из самых последних регистраторов. Но тут мне сказали, что нужно чтобы он брал последние цены из тех документов, которые находятся перед тем документом, в котором я работаю. И это снова меня загнало в тупик.

Сейчас цена выводится так

ВЫБРАТЬ
    ПродажиОбороты.Номенклатура,
    МАКСИМУМ(ПродажиОбороты.Регистратор) КАК Регистратор
ПОМЕСТИТЬ ПоследнийДокумент
ИЗ
    РегистрНакопления.Продажи.Обороты(, , Регистратор, Контрагент = &Контрагент) КАК ПродажиОбороты

СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ПродажиОбороты.Номенклатура,
    ПродажиОбороты.Регистратор,
    ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот КАК ЦенаПоследнейПродажи
ПОМЕСТИТЬ ПоследняяЦена
ИЗ
    ПоследнийДокумент КАК ПоследнийДокумент
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(, , Регистратор, Контрагент = &Контрагент) КАК ПродажиОбороты
        ПО ПоследнийДокумент.Номенклатура = ПродажиОбороты.Номенклатура
            И ПоследнийДокумент.Регистратор = ПродажиОбороты.Регистратор
;
   НадюшаЯ
 
60 - 08.08.19 - 09:37
(59) 1. Ваш постановщик вам всего не рассказывает, а многие тонкости лучше бы знать. А т.к множество доков можно провести в одну секунду, то задайте ему вопрос, а как определить те, которые до а какие после в рамках одной секунды)
2. Поставьте параметр КонецПериода, для регистра накопления
   Натуральный Йог
 
61 - 08.08.19 - 10:04
(7) В чём разница?
   Александр43
 
62 - 08.08.19 - 14:14
(60) Можно показать, как это сделать? С периодами еще не приходилось сталкиваться т.к. еще учусь всему. А то у меня что-то не особо получается
   НадюшаЯ
 
63 - 08.08.19 - 14:19
ВЫБРАТЬ
    ПродажиОбороты.Номенклатура,
    МАКСИМУМ(ПродажиОбороты.Регистратор) КАК Регистратор
ПОМЕСТИТЬ ПоследнийДокумент
ИЗ
    РегистрНакопления.Продажи.Обороты(,  &ЭтоОтЛениАНеОтНезнания, Регистратор, Контрагент = &Контрагент) КАК ПродажиОбороты

СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////


ВЫБРАТЬ
    ПродажиОбороты.Номенклатура,
    ПродажиОбороты.Регистратор,
    ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот КАК ЦенаПоследнейПродажи
ПОМЕСТИТЬ ПоследняяЦена
ИЗ
    ПоследнийДокумент КАК ПоследнийДокумент
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(, &ЭтоОтЛениАНеОтНезнания, Регистратор, Контрагент = &Контрагент) КАК ПродажиОбороты
        ПО ПоследнийДокумент.Номенклатура = ПродажиОбороты.Номенклатура
            И ПоследнийДокумент.Регистратор = ПродажиОбороты.Регистратор
;
   Александр43
 
64 - 08.08.19 - 14:21
(63) Я так и делал, но он выводит по прежнему те документы последние
   НадюшаЯ
 
65 - 08.08.19 - 15:13
(64) не люблю врунов.
   Александр43
 
66 - 08.08.19 - 17:05
(65) Если в этом месяце продажи будут первый раз по этому товару, то он не будет брать из прошлого месяца цену. Хотя бы охват в полгода нужно сделать.
Делаю так
(&КонецПериода, ДОБАВИТЬКДАТЕ(&НачалоПериода, МЕСЯЦ, -6), , Контрагент = &Контрагент)
Но тогда он не выводит.
 
 Рекламное место пустует
   НадюшаЯ
 
67 - 08.08.19 - 17:14
(66) т.е у меня также сделано да как у тебя. А самому додуматься, что в конец периода не надо включать секунду которой создан документ не получилось да?


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.