Имя: Пароль:
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
Кстати, скорее всего вариант
ВЫБОР
        КОГДА ЗаказНаПроизводствоВсе.Номенклатура.Владелец.Наименование = "Полуфабрикат"
            ТОГДА ЗаказНаПроизводствоВсе.Номенклатура.Владелец
        ИНАЧЕ ЗаказНаПроизводствоВсе.Номенклатура.Владелец
    КОНЕЦ
Работать не будет. Нужно использовать явное разименование, хотя бы ссылочных полей
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший