Имя: Пароль:
1C
 
замена значения в запросе
0 falselight
 
22.09.16
10:31
имеется некий запрос
в котором имеется некое поле
к каждой строки выборки привязан документ
в документе есть табличная часть, имеющая
среди своих строк, одну или несколько с нужными значениями
которые нужно извлечь и проставить в нужное поле выборки
как это можно сделать в этом же запросе???
или лучше обрабатывать саму выборку, добывая эти значения
из строки где содержится документ, извлекать их из его тч
и проставлять в нужное поле выборки?
1 falselight
 
22.09.16
10:34
в одном запросе задвоения строк возможно будут
видимо лучше обработать обойдя после основную выборку?
2 jsmith
 
22.09.16
10:35
Да. Агрегирующей функции нет, число полей левого соединения неизвестно
3 falselight
 
22.09.16
10:43
(2) там может быть как одно поле, так и 2 так и 6
то есть последующей обработкой выборки сделать?
4 jsmith
 
22.09.16
10:45
(3) Да
Пиши запрос с левым соединением, выгружай в дерево значений и обрабатывай строки верхнего уровня
5 falselight
 
22.09.16
10:46
(4) да это тоесть делать в цикле перебирая выборку?
или все же советуете делать в запросе?
6 falselight
 
22.09.16
10:46
я планирую перебирать существующую выборку, обрабатывая документ в ней
7 ovrfox
 
22.09.16
10:48
Лучше предоставить некий запрос, чтобы теоретическое обсуждение было более конкретным.
А вообще в теории это возможно.
8 falselight
 
22.09.16
10:48
(6) не сильно это повлияет на быстродействие общее?
так как все это выполняться будет при открытии обработки
9 falselight
 
22.09.16
10:51
(7) запрос

||

ВЫБРАТЬ
    МАКСИМУМ(А_ЗанятостьРабочихЦентров.Период) КАК Период,
    А_ЗанятостьРабочихЦентров.Заказ
ПОМЕСТИТЬ Занятость
ИЗ
    РегистрСведений.А_ЗанятостьРабочихЦентров КАК А_ЗанятостьРабочихЦентров

СГРУППИРОВАТЬ ПО
    А_ЗанятостьРабочихЦентров.Заказ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Занятость.Заказ,
    Атл_ИнтерфейсПроизводства.КП_Снят
ПОМЕСТИТЬ Снятые
ИЗ
    Занятость КАК Занятость
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.Атл_ИнтерфейсПроизводства КАК Атл_ИнтерфейсПроизводства
        ПО Занятость.Период = Атл_ИнтерфейсПроизводства.Дата
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЗначенияСвойствОбъектов.Объект,
    ЗначенияСвойствОбъектов.Значение
ПОМЕСТИТЬ _ВремяЗаказов
ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
    ЗначенияСвойствОбъектов.Свойство = &Свойство
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЗаказНаПроизводствоВсе.Заказ КАК Заказ,
    ЗаказНаПроизводствоВсе.ГотовКПечати КАК ГотовКПечати,
    ЗаказНаПроизводствоВсе.Закрыт КАК Закрыт,
    ЗаказНаПроизводствоВсе.Номенклатура,
    ВЫБОР
        КОГДА ЗаказНаПроизводствоВсе.Номенклатура.Владелец.Наименование = "Полуфабрикат"
            ТОГДА ЗаказНаПроизводствоВсе.Номенклатура.Владелец
        ИНАЧЕ ЗаказНаПроизводствоВсе.Номенклатура.Владелец
    КОНЕЦ КАК Заказчик,
    ЗаказНаПроизводствоВсе.Нож КАК Нож,
    СУММА(ЗаказНаПроизводствоВсе.Тираж) КАК Тираж,
    _ВремяЗаказов.Значение КАК Время,
    ЗаказНаПроизводствоВсе.Порядок,
    ЗаказНаПроизводствоВсе.Цветность,
    ЗаказНаПроизводствоВсе.Материал,
    ЗаказНаПроизводствоВсе.Приоритет,
    ЗаказНаПроизводствоВсе.ДМ,
    ЗаказНаПроизводствоВсе.ПорядокВПриоритете,
    ЗаказНаПроизводствоВсе.ДатаОтгрузки,
    ЗаказНаПроизводствоВсе.Сумма,
    ЗаказНаПроизводствоВсе.МП,
    ВложенныйЗапрос.Препресс
ИЗ
    РегистрСведений.А_РеестрЗаказов КАК ЗаказНаПроизводствоВсе
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.А_ЗанятостьРабочихЦентров.СрезПоследних(&Период, ) КАК А_ЗанятостьРабочихЦентровСрезПоследних
        ПО (А_ЗанятостьРабочихЦентровСрезПоследних.Заказ = ЗаказНаПроизводствоВсе.Заказ)
        ЛЕВОЕ СОЕДИНЕНИЕ _ВремяЗаказов КАК _ВремяЗаказов
        ПО ЗаказНаПроизводствоВсе.Заказ = _ВремяЗаказов.Объект
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ОтчетПроизводстваЗаСменуПродукция.ЗаказВыпуска КАК ЗаказВыпуска,
            ОтчетПроизводстваЗаСменуПродукция.Ссылка КАК Ссылка
        ИЗ
            Документ.ОтчетПроизводстваЗаСмену.Продукция КАК ОтчетПроизводстваЗаСменуПродукция
        ГДЕ
            ОтчетПроизводстваЗаСменуПродукция.Ссылка.Проведен = ИСТИНА) КАК ОтчетПроизводстваЗаСменуПродукция
        ПО ЗаказНаПроизводствоВсе.Заказ = ОтчетПроизводстваЗаСменуПродукция.ЗаказВыпуска
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ЗакрытиеЗаказовНаПроизводствоЗаказы.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
            ЗакрытиеЗаказовНаПроизводствоЗаказы.Ссылка КАК Ссылка
        ИЗ
            Документ.ЗакрытиеЗаказовНаПроизводство.Заказы КАК ЗакрытиеЗаказовНаПроизводствоЗаказы
        ГДЕ
            ЗакрытиеЗаказовНаПроизводствоЗаказы.Ссылка.Проведен = ИСТИНА) КАК ЗакрытиеЗаказовНаПроизводствоЗаказы
        ПО ЗаказНаПроизводствоВсе.Заказ = ЗакрытиеЗаказовНаПроизводствоЗаказы.ЗаказНаПроизводство
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ЗаказПокупателя1.Номер КАК Номер,
            ВЫБОР
                КОГДА ЗаказПокупателя1.Пленки = ИСТИНА
                        И ЗаказПокупателя1.НожГотов = ИСТИНА
                        И ЗаказПокупателя1.Трафарет = ИСТИНА
                        И ЗаказПокупателя1.Вал = ИСТИНА
                        И ЗаказПокупателя1.Макет = ИСТИНА
                    ТОГДА ИСТИНА
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ КАК Препресс
        ИЗ
            Документ.ЗаказПокупателя КАК ЗаказПокупателя1) КАК ВложенныйЗапрос
        ПО ЗаказНаПроизводствоВсе.Заказ.Номер = ВложенныйЗапрос.Номер
        ЛЕВОЕ СОЕДИНЕНИЕ Снятые КАК Снятые
        ПО ЗаказНаПроизводствоВсе.Заказ = Снятые.Заказ
ГДЕ
    ЗаказНаПроизводствоВсе.Заказ.Проведен = ИСТИНА
    И ВЫБОР
            КОГДА ЕСТЬNULL(Снятые.КП_Снят, 0) = ИСТИНА
                ТОГДА ИСТИНА
            ИНАЧЕ ВЫБОР
                    КОГДА ЕСТЬNULL(Снятые.Заказ, 0) = 0
                        ТОГДА ВЫБОР
                                КОГДА ЕСТЬNULL(ОтчетПроизводстваЗаСменуПродукция.Ссылка, 0) = 0
                                        ИЛИ ОтчетПроизводстваЗаСменуПродукция.Ссылка.Проведен = ЛОЖЬ
                                    ТОГДА ИСТИНА
                                ИНАЧЕ ЛОЖЬ
                            КОНЕЦ
                    ИНАЧЕ ЛОЖЬ
                КОНЕЦ
        КОНЕЦ
    И ВЫБОР
            КОГДА ЕСТЬNULL(ЗакрытиеЗаказовНаПроизводствоЗаказы.Ссылка, 0) = 0
                    ИЛИ ЗакрытиеЗаказовНаПроизводствоЗаказы.Ссылка.Проведен = ЛОЖЬ
                ТОГДА ИСТИНА
            ИНАЧЕ ЛОЖЬ
        КОНЕЦ
    И ЗаказНаПроизводствоВсе.Закрыт = ЛОЖЬ

СГРУППИРОВАТЬ ПО
    ЗаказНаПроизводствоВсе.Заказ,
    ЗаказНаПроизводствоВсе.ГотовКПечати,
    ЗаказНаПроизводствоВсе.Закрыт,
    ЗаказНаПроизводствоВсе.Номенклатура,
    ЗаказНаПроизводствоВсе.Нож,
    _ВремяЗаказов.Значение,
    ВЫБОР
        КОГДА ЗаказНаПроизводствоВсе.Номенклатура.Владелец.Наименование = "Полуфабрикат"
            ТОГДА ЗаказНаПроизводствоВсе.Номенклатура.Владелец
        ИНАЧЕ ЗаказНаПроизводствоВсе.Номенклатура.Владелец
    КОНЕЦ,
    ЗаказНаПроизводствоВсе.Порядок,
    ЗаказНаПроизводствоВсе.Цветность,
    ЗаказНаПроизводствоВсе.Материал,
    ЗаказНаПроизводствоВсе.Приоритет,
    ЗаказНаПроизводствоВсе.ДМ,
    ЗаказНаПроизводствоВсе.ПорядокВПриоритете,
    ЗаказНаПроизводствоВсе.ДатаОтгрузки,
    ЗаказНаПроизводствоВсе.Сумма,
    ЗаказНаПроизводствоВсе.МП,
    ВложенныйЗапрос.Препресс
10 falselight
 
22.09.16
10:52
В запросе (9) в итоговом
есть поле Заказ, типа документ заказ на производство
у которого и есть некая тч с этими значениями
которых может быть разное количество
11 falselight
 
22.09.16
10:56
к примеру если сделать так
там выбирается только одно значение патон из имеющихся
в табличной части

ВЫБРАТЬ
    МАКСИМУМ(А_ЗанятостьРабочихЦентров.Период) КАК Период,
    А_ЗанятостьРабочихЦентров.Заказ
ПОМЕСТИТЬ Занятость
ИЗ
    РегистрСведений.А_ЗанятостьРабочихЦентров КАК А_ЗанятостьРабочихЦентров

СГРУППИРОВАТЬ ПО
    А_ЗанятостьРабочихЦентров.Заказ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Занятость.Заказ,
    Атл_ИнтерфейсПроизводства.КП_Снят
ПОМЕСТИТЬ Снятые
ИЗ
    Занятость КАК Занятость
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.Атл_ИнтерфейсПроизводства КАК Атл_ИнтерфейсПроизводства
        ПО Занятость.Период = Атл_ИнтерфейсПроизводства.Дата
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЗначенияСвойствОбъектов.Объект,
    ЗначенияСвойствОбъектов.Значение
ПОМЕСТИТЬ _ВремяЗаказов
ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
    ЗначенияСвойствОбъектов.Свойство = &Свойство
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЗаказНаПроизводствоВсе.Заказ КАК Заказ,
    ЗаказНаПроизводствоВсе.ГотовКПечати КАК ГотовКПечати,
    ЗаказНаПроизводствоВсе.Закрыт КАК Закрыт,
    ЗаказНаПроизводствоВсе.Номенклатура,
    ВЫБОР
        КОГДА ЗаказНаПроизводствоВсе.Номенклатура.Владелец.Наименование = "Полуфабрикат"
            ТОГДА ЗаказНаПроизводствоВсе.Номенклатура.Владелец
        ИНАЧЕ ЗаказНаПроизводствоВсе.Номенклатура.Владелец
    КОНЕЦ КАК Заказчик,
    ЗаказНаПроизводствоВсе.Нож КАК Нож,
    СУММА(ЗаказНаПроизводствоВсе.Тираж) КАК Тираж,
    _ВремяЗаказов.Значение КАК Время,
    ЗаказНаПроизводствоВсе.Порядок,
    ЗаказНаПроизводствоВсе.Цветность,
    ЗаказНаПроизводствоВсе.Материал,
    ЗаказНаПроизводствоВсе.Приоритет,
    ЗаказНаПроизводствоВсе.ДМ,
    ЗаказНаПроизводствоВсе.ПорядокВПриоритете,
    ЗаказНаПроизводствоВсе.ДатаОтгрузки,
    ЗаказНаПроизводствоВсе.Сумма,
    ЗаказНаПроизводствоВсе.МП,
    ВложенныйЗапрос.Препресс,
    ЗаказНаПроизводствоСекции.Пантон
ИЗ
    РегистрСведений.А_РеестрЗаказов КАК ЗаказНаПроизводствоВсе
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.А_ЗанятостьРабочихЦентров.СрезПоследних(&Период, ) КАК А_ЗанятостьРабочихЦентровСрезПоследних
        ПО (А_ЗанятостьРабочихЦентровСрезПоследних.Заказ = ЗаказНаПроизводствоВсе.Заказ)
        ЛЕВОЕ СОЕДИНЕНИЕ _ВремяЗаказов КАК _ВремяЗаказов
        ПО ЗаказНаПроизводствоВсе.Заказ = _ВремяЗаказов.Объект
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ОтчетПроизводстваЗаСменуПродукция.ЗаказВыпуска КАК ЗаказВыпуска,
            ОтчетПроизводстваЗаСменуПродукция.Ссылка КАК Ссылка
        ИЗ
            Документ.ОтчетПроизводстваЗаСмену.Продукция КАК ОтчетПроизводстваЗаСменуПродукция
        ГДЕ
            ОтчетПроизводстваЗаСменуПродукция.Ссылка.Проведен = ИСТИНА) КАК ОтчетПроизводстваЗаСменуПродукция
        ПО ЗаказНаПроизводствоВсе.Заказ = ОтчетПроизводстваЗаСменуПродукция.ЗаказВыпуска
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ЗакрытиеЗаказовНаПроизводствоЗаказы.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
            ЗакрытиеЗаказовНаПроизводствоЗаказы.Ссылка КАК Ссылка
        ИЗ
            Документ.ЗакрытиеЗаказовНаПроизводство.Заказы КАК ЗакрытиеЗаказовНаПроизводствоЗаказы
        ГДЕ
            ЗакрытиеЗаказовНаПроизводствоЗаказы.Ссылка.Проведен = ИСТИНА) КАК ЗакрытиеЗаказовНаПроизводствоЗаказы
        ПО ЗаказНаПроизводствоВсе.Заказ = ЗакрытиеЗаказовНаПроизводствоЗаказы.ЗаказНаПроизводство
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ЗаказПокупателя1.Номер КАК Номер,
            ВЫБОР
                КОГДА ЗаказПокупателя1.Пленки = ИСТИНА
                        И ЗаказПокупателя1.НожГотов = ИСТИНА
                        И ЗаказПокупателя1.Трафарет = ИСТИНА
                        И ЗаказПокупателя1.Вал = ИСТИНА
                        И ЗаказПокупателя1.Макет = ИСТИНА
                    ТОГДА ИСТИНА
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ КАК Препресс
        ИЗ
            Документ.ЗаказПокупателя КАК ЗаказПокупателя1) КАК ВложенныйЗапрос
        ПО ЗаказНаПроизводствоВсе.Заказ.Номер = ВложенныйЗапрос.Номер
        ЛЕВОЕ СОЕДИНЕНИЕ Снятые КАК Снятые
        ПО ЗаказНаПроизводствоВсе.Заказ = Снятые.Заказ
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказНаПроизводство.Секции КАК ЗаказНаПроизводствоСекции
        ПО ЗаказНаПроизводствоВсе.Заказ = ЗаказНаПроизводствоСекции.Ссылка
ГДЕ
    ЗаказНаПроизводствоВсе.Заказ.Проведен = ИСТИНА
    И ВЫБОР
            КОГДА ЕСТЬNULL(Снятые.КП_Снят, 0) = ИСТИНА
                ТОГДА ИСТИНА
            ИНАЧЕ ВЫБОР
                    КОГДА ЕСТЬNULL(Снятые.Заказ, 0) = 0
                        ТОГДА ВЫБОР
                                КОГДА ЕСТЬNULL(ОтчетПроизводстваЗаСменуПродукция.Ссылка, 0) = 0
                                        ИЛИ ОтчетПроизводстваЗаСменуПродукция.Ссылка.Проведен = ЛОЖЬ
                                    ТОГДА ИСТИНА
                                ИНАЧЕ ЛОЖЬ
                            КОНЕЦ
                    ИНАЧЕ ЛОЖЬ
                КОНЕЦ
        КОНЕЦ
    И ВЫБОР
            КОГДА ЕСТЬNULL(ЗакрытиеЗаказовНаПроизводствоЗаказы.Ссылка, 0) = 0
                    ИЛИ ЗакрытиеЗаказовНаПроизводствоЗаказы.Ссылка.Проведен = ЛОЖЬ
                ТОГДА ИСТИНА
            ИНАЧЕ ЛОЖЬ
        КОНЕЦ
    И ЗаказНаПроизводствоВсе.Закрыт = ЛОЖЬ

СГРУППИРОВАТЬ ПО
    ЗаказНаПроизводствоВсе.Заказ,
    ЗаказНаПроизводствоВсе.ГотовКПечати,
    ЗаказНаПроизводствоВсе.Закрыт,
    ЗаказНаПроизводствоВсе.Номенклатура,
    ЗаказНаПроизводствоВсе.Нож,
    _ВремяЗаказов.Значение,
    ВЫБОР
        КОГДА ЗаказНаПроизводствоВсе.Номенклатура.Владелец.Наименование = "Полуфабрикат"
            ТОГДА ЗаказНаПроизводствоВсе.Номенклатура.Владелец
        ИНАЧЕ ЗаказНаПроизводствоВсе.Номенклатура.Владелец
    КОНЕЦ,
    ЗаказНаПроизводствоВсе.Порядок,
    ЗаказНаПроизводствоВсе.Цветность,
    ЗаказНаПроизводствоВсе.Материал,
    ЗаказНаПроизводствоВсе.Приоритет,
    ЗаказНаПроизводствоВсе.ДМ,
    ЗаказНаПроизводствоВсе.ПорядокВПриоритете,
    ЗаказНаПроизводствоВсе.ДатаОтгрузки,
    ЗаказНаПроизводствоВсе.Сумма,
    ЗаказНаПроизводствоВсе.МП,
    ВложенныйЗапрос.Препресс,
    ЗаказНаПроизводствоСекции.Пантон
12 В тылу врага
 
22.09.16
10:57
слово РАЗЛИЧНЫЕ отменили в запросах?
13 В тылу врага
 
22.09.16
10:58
ВЫБОР
        КОГДА ЗаказНаПроизводствоВсе.Номенклатура.Владелец.Наименование = "Полуфабрикат"
            ТОГДА ЗаказНаПроизводствоВсе.Номенклатура.Владелец
        ИНАЧЕ ЗаказНаПроизводствоВсе.Номенклатура.Владелец
    КОНЕЦ КАК Заказчик

внушает
14 falselight
 
22.09.16
11:00
(12) в (10) пока и выбирается всего одно значение из существующих
15 falselight
 
22.09.16
11:12
почему не работает такой запрос?

||

ВЫБРАТЬ
    ЗаказНаПроизводствоСекции.Ссылка,
    ЗаказНаПроизводствоСекции.Пантон,
    ЗаказНаПроизводствоСекции.ТипСекции.Наименование
ИЗ
    Документ.ЗаказНаПроизводство.Секции КАК ЗаказНаПроизводствоСекции
ГДЕ
    ЗаказНаПроизводствоСекции.Ссылка = &ЗаказНаПроизводство
    И ЗаказНаПроизводствоСекции.ТипСекции.Наименование = "Фллллл"
16 ovrfox
 
22.09.16
11:21
(15) Потому  что кавычки не двойные
17 ovrfox
 
22.09.16
11:22
(15) а вообще лучше в явном виде разыменовывать поля, т.е. так
ВЫБРАТЬ
    ЗаказНаПроизводствоСекции.Ссылка,
    ЗаказНаПроизводствоСекции.Пантон,
    спрТипСекции.Наименование
ИЗ
    Документ.ЗаказНаПроизводство.Секции КАК ЗаказНаПроизводствоСекции
Соединение Справочник.ТипыСекций как спрТипСекции
по спрТипСекции.Ссылка = ЗаказНаПроизводствоСекции.ТипСекции
ГДЕ
    ЗаказНаПроизводствоСекции.Ссылка = &ЗаказНаПроизводство
    И спрТипСекции.Наименование = "Фллллл"
18 falselight
 
22.09.16
11:25
(16) получилось, похоже от того было что там одна буква латинская
19 ovrfox
 
22.09.16
11:25
Кстати, скорее всего вариант
ВЫБОР
        КОГДА ЗаказНаПроизводствоВсе.Номенклатура.Владелец.Наименование = "Полуфабрикат"
            ТОГДА ЗаказНаПроизводствоВсе.Номенклатура.Владелец
        ИНАЧЕ ЗаказНаПроизводствоВсе.Номенклатура.Владелец
    КОНЕЦ
Работать не будет. Нужно использовать явное разименование, хотя бы ссылочных полей
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан