Имя: Пароль:
1C
1С v8
Левое соединение Первые 1
,
0 grasshoper
 
20.07.21
09:26
День добрый. Кто знает, как сделать чтобы при левом соединении хватало только первое значение совпадающее по условию?
Пример:

Таблица 1:
Товар1 5
Товар2 12

Таблица 2:
Товар1 10%
Товар1 15%
Товар2 20%
Товар2 35%
Товар2 40%

Результат:
Товар1 5 10%
Товар2 12 20
1 mikecool
 
20.07.21
09:27
левое соединение ...
по ... и Поле справа в (выбрать первые 1 ... повторить условия)
2 Малыш Джон
 
20.07.21
09:45
(1) ну зачем учить такие условия соединения делать?

(0) Вторую таблицу приводишь к виду

Товар1 10%
Товар2 20%

потом соединяешь с первой таблицей
3 grasshoper
 
20.07.21
09:50
(2) Как её привести? ВЫБРАТЬ РАЗЛИЧНЫЕ не подойдёт
4 grasshoper
 
20.07.21
09:54
Пример таблицы 2:
ВЫБРАТЬ РАЗЛИЧНЫЕ
        ДокументРеализацияТовары.Ссылка КАК Документ,
        ДокументРеализацияТовары.Номенклатура КАК Номенклатура,
        ДокументРеализацияТовары.ПроцентГодности КАК ПроцентГодности
    ИЗ
        Документ.РеализацияТоваровУслуг.Товары КАК ДокументРеализацияТовары
    ГДЕ
        ДокументРеализацияТовары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
        И ДокументРеализацияТовары.Ссылка.Проведен
5 grasshoper
 
20.07.21
09:55
Первую таблицу соединяю со второй по полям: Документ, Номенклатура.
6 mikecool
 
20.07.21
09:55
(2) "ну зачем учить такие условия соединения делать?" для общего развития
7 PuhUfa
 
20.07.21
10:10
(0) Если в твоей задаче заменить "хватало только первое значение", на "хватало только МИНИМАЛЬНОЕ значение" (а судя по примеру это так) то становится все проще -)
8 grasshoper
 
20.07.21
10:16
(6) Есть большой отчет, в котором можно смотреть движения продукции. Так вот, необходимо сравнить процент годности продукции которая пошла в итоге в отгрузку по документу, с процентом годности из Таблицы 2, который был запрошен изначально.
9 Малыш Джон
 
20.07.21
10:17
(3) Не подойдет, все верно. Это стандартная задача на поиск среза данных, гуглится.
10 grasshoper
 
20.07.21
10:30
(9) Так временная таблица уже готова и соединение работает, я только не могу понять как исключить дублирование, когда в таблице 2 на один и тот же товар может быть разный процент.
11 Малыш Джон
 
20.07.21
10:33
(10) как ты понимаешь, какой процент по каждому товару оставлять?
12 grasshoper
 
20.07.21
10:44
(11) Максимальный
13 grasshoper
 
20.07.21
10:46
(11) {ЛЕВОЕ СОЕДИНЕНИЕ Документ_Товары КАК Документ_Товары
        ПО (ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
                ИЛИ ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)
            И ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Регистратор = Документ_Товары.Документ
            И ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура = Документ_Товары.Номенклатура
            И (Документ_Товары.ПроцентГодности В
                (ВЫБРАТЬ ПЕРВЫЕ 1
                    МИНИМУМ(Документ_Товары.ПроцентГодности) КАК ПроцентГодности
                ИЗ
                    Документ_Товары КАК Документ_Товары
                ГДЕ
                    Документ_Товары.Документ = ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Регистратор
                    И Документ_Товары.Номенклатура = ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура))}
14 patapum
 
20.07.21
10:47
(12) Тогда держи
ВЫБРАТЬ Табл1.Товар, Табл1.Количество, Максимум(Табл2.Процент)
ИЗ Табл1 ЛЕВОЕ СОЕДИНЕНИЕ Табл2 По Табл1.Товар = Табл2.Товар
СГРУППИРОВАТЬ ПО Табл1.Товар, Табл1.Количество
15 grasshoper
 
20.07.21
10:54
(14) хороший вариант, но в таблице 1 около 40 полей, из разных временных таблиц. Суммы не поплывут из-за Максимум(Табл2.Процент)?
16 grasshoper
 
20.07.21
10:55
(14) может имеет смысл выбирать максимальное прямо во временной таблице?
17 hhhh
 
20.07.21
10:55
(15) нет не поплывут
18 grasshoper
 
20.07.21
10:56
Наверное лучше тут брать максимум

// Таблица 2
ВЫБРАТЬ
    Документ_Товары.Документ КАК Документ,
    Документ_Товары.Номенклатура КАК Номенклатура,
    Документ_Товары.ПроцентГодности КАК ПроцентГодности
ПОМЕСТИТЬ Документ_Товары
ИЗ
    (ВЫБРАТЬ РАЗЛИЧНЫЕ
        Документ_РеализацияТоваровУслуг_Товары.Ссылка КАК Документ,
        Документ_РеализацияТоваровУслуг_Товары.Номенклатура КАК Номенклатура,
        Документ_РеализацияТоваровУслуг_Товары.ПроцентГодности КАК ПроцентГодности
    ИЗ
        Документ.РеализацияТоваровУслуг.Товары КАК Документ_РеализацияТоваровУслуг_Товары
    ГДЕ
        Документ_РеализацияТоваровУслуг_Товары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
        И Документ_РеализацияТоваровУслуг_Товары.Ссылка.Проведен
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ РАЗЛИЧНЫЕ
        Документ_ПеремещениеТоваров_Товары.Ссылка,
        Документ_ПеремещениеТоваров_Товары.Номенклатура,
        Документ_ПеремещениеТоваров_Товары.ПроцентГодности
    ИЗ
        Документ.ПеремещениеТоваров.Товары КАК Документ_ПеремещениеТоваров_Товары
    ГДЕ
        Документ_ПеремещениеТоваров_Товары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
        И Документ_ПеремещениеТоваров_Товары.Ссылка.Проведен

ИНДЕКСИРОВАТЬ ПО
    Документ,
    Номенклатура
;
19 grasshoper
 
20.07.21
10:59
(17) очень много полей придется группировать
20 Anton1307
 
20.07.21
11:01
>>> только первое значение совпадающее по условию

> Вторую таблицу приводишь к виду
>>> Как её привести? ВЫБРАТЬ РАЗЛИЧНЫЕ не подойдёт

Сформулируй для начала, что означает твоё "первое значение".
Строка с минимальным значением во второй колонке?
Ну вот и сформируй временную таблицу, где были бы строки из "Таблица 2" с минимальным значением второй колонки для каждого товара
21 grasshoper
 
20.07.21
11:03
(20) Так и сделал при объединении. Всем спасибо за мозговой штурм.
22 Serginio1
 
20.07.21
13:09
Программист всегда исправляет последнюю ошибку.