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

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

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

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

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

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

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

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

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

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

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

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

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

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

тралялялял

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

Убыв
дата.


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



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

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

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

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

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

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

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

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

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

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

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

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