Имя: Пароль:
1C
 
запрос. определить существование поля
0 prtx
 
01.03.16
14:27
добрый день. вот у меня возникла такая мысль сделать некий универсальный запрос (для меня).

суть: в запрос я передаю таблицу значений и при помощи ЛЕВОЕ СОЕДИНЕНИЕ достаю еще разные дополнительные нужные мне данные. все нормально НО в передаваемой таблице значений есть одна колонка которой может и не быть.

т.е. есть в тз есть колонка "Количество" то мне ее нужно на выходе запроса получить, а если нет то не нужно. и проблема возникает когда в тз нет этой колонки тогда выдает ошибку: "Поле не найдено "ТоварыНаСкладах.КоличествоДробноеОбщееОстаток"...".

вопрос: как мне уже в самом запросе определить если КоличествоДробноеОбщееОстаток существует тога вытягиваем его и че хотим то и делаем а если его нет тогда не пытаемся его вытягивать.

как-то так.
1 prtx
 
01.03.16
14:28
(0) звезочка (*) не покатит
2 prtx
 
01.03.16
14:30
(0) можно ли в запросе определить существование поля и если его не существует тогда не пытаться с ним что-то делать
3 Лефмихалыч
 
01.03.16
14:30
Метаданные().Реквизиты
4 Dmitrii
 
гуру
01.03.16
14:32
(0) А что мешает удалить лишние поля из запроса ДО его выполнения? В чём необходимость делать это именно в самом запросе?
5 Лефмихалыч
 
01.03.16
14:34
а вообще, универсальный запрос - это СКД.
или на худой конец СхемаЗапроса
6 prtx
 
01.03.16
14:35
(3) это не то. это проверка в модуле, и взависимость от результата мне нужно модифицировать запрос. а я хочу все эти проверки делать уже в запросе.


ПРИМЕР:

"ВЫБРАТЬ
                   |    ТоварыНаСкладах.Номенклатура,
                   |    ТоварыНаСкладах.Партия,
                   |    ТоварыНаСкладах.Серия,
                   |    ТоварыНаСкладах.КоличествоДробноеОбщееОстаток,
                   |    ТоварыНаСкладах.КоличествоДробноеОбщее
                   |ПОМЕСТИТЬ ТоварыНаСкладах
                   |ИЗ
                   |    &ТоварыНаСкладах КАК ТоварыНаСкладах
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    ТоварыНаСкладах.Номенклатура,
                   |    ТоварыНаСкладах.Партия,
                   |    ТоварыНаСкладах.Серия,
                   |    ДелителиНоменклатуры.Делитель,
                   |    ОптовыеЦеныТоваров.ЦенаОптоваяБезНДС,
                   |    ОптовыеЦеныТоваров.ЦенаОптоваяСНДС,
                   |    ОптовыеЦеныТоваров.ЦенаОптоваяНДС,
                   |    РозничныеЦеныТоваровСрезПоследних.ЦенаРозничнаяБезНДС,
                   |    РозничныеЦеныТоваровСрезПоследних.ЦенаРозничнаяСНДС,
                   |    РозничныеЦеныТоваровСрезПоследних.ЦенаРозничнаяНДС,
                   |    СрокиГодностиТоваров.СрокГодности,
                   |    Штрихкоды.Штрихкод,
                   |    ТоварыНаСкладах.КоличествоДробноеОбщее,
                   |    ТоварыНаСкладах.КоличествоДробноеОбщееОстаток
                   |ИЗ
                   |    ТоварыНаСкладах КАК ТоварыНаСкладах
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДелителиНоменклатуры КАК ДелителиНоменклатуры
                   |        ПО ТоварыНаСкладах.Номенклатура = ДелителиНоменклатуры.Номенклатура
                   |            И ТоварыНаСкладах.Партия = ДелителиНоменклатуры.Партия
                   |            И ТоварыНаСкладах.Серия = ДелителиНоменклатуры.Серия
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОптовыеЦеныТоваров КАК ОптовыеЦеныТоваров
                   |        ПО ТоварыНаСкладах.Номенклатура = ОптовыеЦеныТоваров.Номенклатура
                   |            И ТоварыНаСкладах.Партия = ОптовыеЦеныТоваров.Партия
                   |            И ТоварыНаСкладах.Серия = ОптовыеЦеныТоваров.Серия
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РозничныеЦеныТоваров.СрезПоследних КАК РозничныеЦеныТоваровСрезПоследних
                   |        ПО ТоварыНаСкладах.Номенклатура = РозничныеЦеныТоваровСрезПоследних.Номенклатуры
                   |            И ТоварыНаСкладах.Партия = РозничныеЦеныТоваровСрезПоследних.Партия
                   |            И ТоварыНаСкладах.Серия = РозничныеЦеныТоваровСрезПоследних.Серия
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СрокиГодностиТоваров КАК СрокиГодностиТоваров
                   |        ПО ТоварыНаСкладах.Номенклатура = СрокиГодностиТоваров.Номенклатура
                   |            И ТоварыНаСкладах.Партия = СрокиГодностиТоваров.Партия
                   |            И ТоварыНаСкладах.Серия = СрокиГодностиТоваров.Серия
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
                   |        ПО ТоварыНаСкладах.Номенклатура = Штрихкоды.Номенклатура
                   |            И ТоварыНаСкладах.Партия = Штрихкоды.Партия
                   |            И ТоварыНаСкладах.Серия = Штрихкоды.Серия

Вот в начале запроса есть такие поля
                   |    ТоварыНаСкладах.КоличествоДробноеОбщееОстаток,
                   |    ТоварыНаСкладах.КоличествоДробноеОбщее
вот если их вообще нет в передаваемой тз тогда их и не пытатся достать что бы не напороться на ошибку.
7 prtx
 
01.03.16
14:38
(4) да ничего не мешает это как-то некрасиво(не фен-шуй))), и потом запросы в скд редактировать неудобно.
8 Качели
 
01.03.16
14:42
Передавай полную ТЗ.
9 Dmitrii
 
гуру
01.03.16
14:45
(7) А кто тебе сказал, что это обязательно надо делать, редактируя текст запроса?
Хочешь универсальность, используй, например, объект Запрос.
Из операторов ВЫБРАТЬ этого объекта удаляй ненужные поля.

Можно пойти от обратного, как (8) - добавлять пустые поля в ТЗ.