Имя: Пароль:
1C
 
Запрос: номенклатура с уникальной ценой. Задача, которую не могу решить.
🠗 (Волшебник 22.06.2022 09:09)
0 Trouble
 
22.06.22
09:03
Добрый день! Занимаюсь 1С 3 месяца, сильно не судите, появилась задача которую не могу решить.

Дата таблица "Номенклатура"

Код Наименование  Цена
0001 Товар1      10000
0002 Товар2      15000
0003 Товар3      10000
0004 Товар4      10000

Необходимо написать запрос, который вернет все номенклатуру, для которой цена уникальна во всем справочнике (результатом выполнения этого запроса на приведенных данных должна стать одна строка с двумя колонками - "Товар 2", "15000"
Таблицу создал в консоли запросов, а найти что-то примерное для решение самой задачи не могу.
Спасибо!
1 Гений 1С
 
гуру
22.06.22
09:05
посчитываешь не уникальные цены (где количество больше одного)
и потом выбираешь те позиции, где такой цены нет.

ну или соедини таблицу с саомй собой, где соединяется по отличному коду - там не уникальная, так еще проще.
2 Fish
 
22.06.22
09:05
Добавляешь колонку "количесво" равную 1, Группируешь по цене, количество суммируешь и потом выбираешь ту, где количество = 1.
3 luter-89
 
22.06.22
09:06
https://helpme1s.ru/yazyk-zaprosov-1s-8-3-dlya-nachinayushhix-programmistov-gruppirovka
Посмотри часть, где описана функция КОЛИЧЕСТВО РАЗЛИЧНЫЕ
4 Гений 1С
 
гуру
22.06.22
09:06
типа
Выбрать код, наименование, цена из Т КАК т1 ЛЕВОЕ СОЕДИНЕНИЕ Т как Т2
По Т1.Код <> Т2.Код И Т1.Цена = Т2.Цена ГДЕ Т2 ЕСТЬ NULL
5 VS-1976
 
22.06.22
09:07
Выбрать
Максимум( Наименование ),
Максимум( Цена )
Из
Номенклатура
Сгруппировать по
Цена
Имеющие
Количество( Цена ) = 1
6 luter-89
 
22.06.22
09:08
(4) Неоптимальный пример. За такое по рукам бить нужно
7 Гений 1С
 
гуру
22.06.22
09:09
(6) и чем же он неоптимален, мон шер? Наоборот, элегантный как роял
8 Trouble
 
22.06.22
09:09
Вот как выглядит моя таблица:

ВЫБРАТЬ
    "0001" КАК Код,
    "Товар1" КАК Наименование
    ПОМЕСТИТЬ МестоРаботы

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "0002",
    "Товар2"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "0003",
    "Товар3"
    
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "0004",
    "Товар4"

;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    "Товар1" КАК Наименование,
    "10000" КАК Цена    
ПОМЕСТИТЬ УИД

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Товар2",
    "15000"
    

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Товар3",
    "10000"
    

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Товар4",
    "10000"
    

;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    МестоРаботы.Код КАК Код,
    МестоРаботы.Наименование КАК Наименование,
    УИД.Цена КАК Цена
ИЗ
    МестоРаботы КАК МестоРаботы
        ПОЛНОЕ СОЕДИНЕНИЕ УИД КАК УИД
        ПО (МестоРаботы.Наименование = УИД.Наименование)
9 vde69
 
22.06.22
09:11
(4) садись - два... вернет много лишнего....


(0) типа этого

Выбрать код, наименование, цена из Т
где код в (выбрать т2.код из т как т2 где количество разных (т2.сумма) > 1)
10 luter-89
 
22.06.22
09:14
(7) Зачем делать соединение? И еще <> в соединении.
Не проще сгруппировать по Цене, получить КОЛИЧЕСТВО РАЗЛИЧНЫЕ по ссылке или наименованию и наложить условие, где КОЛИЧЕСТВО РАЗЛИЧНЫЕ = 1 ?
Зачем новичкам давать заведомо плохие примеры, еще научиться не правильно
11 Serg_1960
 
22.06.22
09:15
Сгруппировать товар по цене, просуммировать, запомнив цену и сумму. Если цена = сумме - цена уникальна.
12 Гений 1С
 
гуру
22.06.22
09:17
(9) и что же лишнее оно вернет, мон шер ами? гггг
(10) нормально, пусть привыкают мыслить в SQL
13 Trouble
 
22.06.22
09:19
Вот постарался убрать максимум лишнего
Осталось написать только сам запрос)

ВЫБРАТЬ
    "0001" КАК Код,
    "Товар1" КАК Наименование,
    "10000" КАК Цена
    ПОМЕСТИТЬ Номенклатура

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "0002",
    "Товар2",
    "15000"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "0003",
    "Товар3",
    "10000"
    
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "0004",
    "Товар4",
    "10000"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Номенклатура.Код КАК Код,
    Номенклатура.Наименование КАК Наименование,
    Номенклатура.Цена КАК Цена
ИЗ
    Номенклатура КАК Номенклатура
14 VS-1976
 
22.06.22
09:19
(12) ошибку только поправь
15 vde69
 
22.06.22
09:22
(12) чего вернет твой запрос при таких данных:

0001 Товар1      10000
0001 Товар1      15000
0002 Товар2      15000
0003 Товар3      10000
0004 Товар4      10000
0004 Товар4      10000
16 Trouble
 
22.06.22
09:25
Подскажите пожалуйста в ошибке, я уже начал путаться
Спасибо!
17 Гений 1С
 
гуру
22.06.22
09:28
(15) пустой результат вернет
18 VS-1976
 
22.06.22
09:28
(16) бери пример мой, не слушай гения у него синтаксическая ошибка после слова "где" ), но гениям простительно
19 Гений 1С
 
гуру
22.06.22
09:28
(15) потому что для каждой строки Т1 будет найдена строка Т2. А условие Т2 не есть NULL обрежет
20 Гений 1С
 
гуру
22.06.22
09:29
(18) нашел до чего докопаться. Посредственности всегда пытаются обесценивать гениальные решения.
21 Trouble
 
22.06.22
09:32
Спасибо большое! Разобрался со своей проблемой, всем очень признателен!
22 VS-1976
 
22.06.22
09:32
(20) а в чём гениальность?
23 Trouble
 
22.06.22
09:33
VS-1976 Спасибо вам особенное!!!


ВЫБРАТЬ
    "0001" КАК Код,
    "Товар1" КАК Наименование,
    "10000" КАК Цена
    ПОМЕСТИТЬ Номенклатура

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "0002",
    "Товар2",
    "15000"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "0003",
    "Товар3",
    "10000"
    
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "0004",
    "Товар4",
    "10000"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Номенклатура.Код КАК Код,
    Номенклатура.Наименование КАК Наименование,
    Номенклатура.Цена КАК Цена
ИЗ
    Номенклатура КАК Номенклатура

;

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

Выбрать
Максимум( Наименование ),
Максимум( Цена )

Из
Номенклатура
Сгруппировать по Цена

Имеющие
Количество( Цена ) = 1