Имя: Пароль:
1C
1С v8
определение колонки для выборки в запросе
0 Игорь_МММ
 
28.01.16
16:06
может ошибаюсь, но мне кажется где-то видел подобное (найти не могу( )

суть такова: можно ли определить название реквизита для выборки из результатов самого запроса. что-то вроде
Выбрать
Справочник.Поле
поместить Таблица
ИЗ справочник КАК Справочник
выбрать
Справ2.[Поле]

понимаю что чушь написал, но надеюсь смысл удалось донести
1 butterbean
 
28.01.16
16:07
можно программно менять текст запроса
2 Игорь_МММ
 
28.01.16
16:27
(1) а как это делается?
3 salvator
 
28.01.16
16:33
(2) СтрЗаменить(ТекстЗапроса,"ЧтоМенять","НаЧтоМенять")
4 Игорь_МММ
 
28.01.16
16:37
(3) не, надо же походу запроса..
то есть пока нет первой выборки - еще не понятно что выбирать во второй
5 salvator
 
28.01.16
16:38
(4) Ну так перед выполнением запроса поменяй имя поля на нужное, в чем проблема?
6 Nuobu
 
28.01.16
16:39
(4) Может, тебе это нужно: ЕстьNull(Справочники.Поле1, Справочники.Поле2)
7 Игорь_МММ
 
28.01.16
16:46
да нет, мутно объяснил ..
может так:
Выбрать
Справочник.Поле
поместить Таблица
ИЗ справочник КАК Справочник
выбрать
Справ2.[Таблица.Поле]
из справ2 КАК Справ2
левое соединение Таблица ПО ....

то есть Справочник.Поле в виде строки - это как раз наименование реквизита справ2, откуда надо выбирать
8 Одинесю
 
28.01.16
16:48
(7) Так, а что сразу левым соединением не сделать?
9 nesmen
 
28.01.16
16:49
(7) СтрЗаменить написали же и менять текст по ходу самому.
ты формируешь текст зароса у него тип строка, как из него можно что то вытянуть до выполенния?
10 Игорь_МММ
 
28.01.16
17:01
собственно вот текст:
Запрос.Текст =
        "ВЫБРАТЬ
        |    Полуфабрикаты.Ссылка,
        |    Полуфабрикаты.ГП,
        |    ПолуфабрикатыПозиции.Позиция,
        |    ПолуфабрикатыСделОпер.ИмяСделОпер,
        |    СдельныеОперации.ВидОперации,
        |    СдельныеОперации.ПараметрОбъема,
        |    СдельныеОперацииПараметрыРазличия.Параметр
        |ПОМЕСТИТЬ Полуфабрикат
        |ИЗ
        |    Справочник.Полуфабрикаты КАК Полуфабрикаты
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Полуфабрикаты.Позиции КАК ПолуфабрикатыПозиции
        |        ПО Полуфабрикаты.Ссылка = ПолуфабрикатыПозиции.Ссылка
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Полуфабрикаты.СделОпер КАК ПолуфабрикатыСделОпер
        |            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СдельныеОперации КАК СдельныеОперации
        |            ПО ПолуфабрикатыСделОпер.ИмяСделОпер = СдельныеОперации.Ссылка
        |        ПО ПолуфабрикатыСделОпер.Ссылка = Полуфабрикаты.Ссылка,
        |    Справочник.СдельныеОперации.ПараметрыРазличия КАК СдельныеОперацииПараметрыРазличия
        |ГДЕ
        |    Полуфабрикаты.Ссылка = &Полуфабрикат
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    Спецификации.Ссылка,
        |    СпецификацииОперацииСПанелью.Позиция,
        |    СпецификацииОперацииСПанелью.Наименование,
        |    СпецификацииОперацииСПанелью.Длина,
        |    СпецификацииОперацииСПанелью.Ширина,
        |    СпецификацииОперацииСПанелью.Толщина,
        |    СпецификацииОперацииСПанелью.ТолщинаКромки,
        |    СпецификацииОперацииСПанелью.ДлинаКромки,
        |    СпецификацииОперацииСПанелью.ДиаметрОтверстия,
        |    СпецификацииОперацииСПанелью.ГлубинаОтверстия,
        |    СпецификацииОперацииСПанелью.Количество,
        |    СпецификацииОперацииСПанелью.ПериметрПанели,
        |    СпецификацииОперацииСПанелью.ПлощадьПанели,
        |    СпецификацииОперацииСПанелью.КоличествоОпераций
        |ИЗ
        |    Справочник.Спецификации КАК Спецификации
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Спецификации.ОперацииСПанелью КАК СпецификацииОперацииСПанелью
        |        ПО (СпецификацииОперацииСПанелью.Ссылка = Спецификации.Ссылка)
        |ГДЕ
        |    Спецификации.Ссылка = &Спецификация";

Далее Полуфабрикат и Спецификации будут соединяться по Спец.Ссылка = Полуфабрикат.ГП
Полуфабрикат.Параметр - это название параметра (тип Перечисление), значение этого параметра содержится в спецификации в соответствующей колонке. Связь между ними только такая : строка(Параметр) = название этой колонки. Вот как выудить значение Параметра?
11 nesmen
 
28.01.16
17:27
зачем? (10)
12 Игорь_МММ
 
28.01.16
17:31
(11) что найти значение параметра - оно содержится именно там
13 nesmen
 
28.01.16
17:46
и что дальше с  ним делать будешь?
14 Игорь_МММ
 
28.01.16
17:51
(13) дальше буду сравнивать с допустимыми значениями - это опять же будет браться из другого справочника и соединяться по Параметру.
15 nesmen
 
28.01.16
17:58
(14)
ГДЕ Таблица.Реквизит = Значение(Перечсление.тип.Тип1)
так в запросе нельзя сделать
16 nesmen
 
28.01.16
18:01
ГДЕ Таблица.Реквизит В(ВЫБРАТЬ
    ABCКлассификация.Ссылка,
    ABCКлассификация.Порядок
ИЗ
    Перечисление.ABCКлассификация КАК ABCКлассификация)
17 nesmen
 
28.01.16
18:01
или так
18 Игорь_МММ
 
28.01.16
19:23
ничего лучше не придумал:
ВЫБРАТЬ
    Полуфабрикат.Ссылка,
    Полуфабрикат.ГП,
    Полуфабрикат.Позиция,
    Полуфабрикат.ИмяСделОпер,
    Полуфабрикат.ВидОперации,
    Полуфабрикат.ПараметрОбъема,
    Полуфабрикат.Параметр,
    ВЫБОР
        КОГДА Полуфабрикат.Параметр = &ДлинаКромки
            ТОГДА Спецификации.ДлинаКромки
        ИНАЧЕ ВЫБОР
                КОГДА Полуфабрикат.Параметр = &ТолщинаКромки
                    ТОГДА Спецификации.ТолщинаКромки
                ИНАЧЕ ВЫБОР
                        КОГДА Полуфабрикат.Параметр = &ДиаметрОтверстия
                            ТОГДА Спецификации.ДиаметрОтверстия
                        ИНАЧЕ 0
                    КОНЕЦ
            КОНЕЦ
    КОНЕЦ КАК ЗначениеПареметра

если есть идеи - подскажите