|
Вопрос по запросу | ☑ | ||
---|---|---|---|---|
0
pablo_escobar
03.10.23
✎
13:32
|
Добрый день. Копаясь в типовой Рознице 3 заметил стиль написания запросов.
"ВЫБРАТЬ | ТаблицаДокумента.НомерСтроки КАК НомерСтроки, | ТаблицаДокумента.Номенклатура КАК Номенклатура, | ТаблицаДокумента.Характеристика КАК Характеристика, | ТаблицаДокумента.Партия КАК Партия, | ТаблицаДокумента.Количество КАК Количество, | ТаблицаДокумента.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | ТаблицаДокумента.Цена КАК Цена, | ТаблицаДокумента.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки, | ТаблицаДокумента.Сумма КАК Сумма, | ТаблицаДокумента.СтавкаНДС КАК СтавкаНДС, | ТаблицаДокумента.СуммаНДС КАК СуммаНДС, | ТаблицаДокумента.Всего КАК Всего, | ТаблицаДокумента.ПроцентАвтоматическойСкидки КАК ПроцентАвтоматическойСкидки, | ТаблицаДокумента.СуммаАвтоматическойСкидки КАК СуммаАвтоматическойСкидки, | ТаблицаДокумента.КлючСвязи КАК КлючСвязи, | ТаблицаДокумента.НеобходимостьВводаАкцизнойМарки КАК НеобходимостьВводаАкцизнойМарки, | ТаблицаДокумента.Штрихкод КАК Штрихкод, | ТаблицаДокумента.КодМаркировки КАК КодМаркировки, | ТаблицаДокумента.ДоговорПлатежногоАгента КАК ДоговорПлатежногоАгента |ПОМЕСТИТЬ ТаблицаДокумента |ИЗ | &ТаблицаТовары КАК ТаблицаДокумента |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТаблицаТовары.НомерСтроки КАК НомерСтроки, | ТаблицаТовары.Номенклатура КАК Номенклатура, | ТаблицаТовары.Характеристика КАК Характеристика, | ТаблицаТовары.Партия КАК Партия, | ТаблицаТовары.Количество КАК Количество, | ТаблицаТовары.Цена КАК Цена, | ТаблицаТовары.Сумма КАК Сумма, | ТаблицаТовары.СтавкаНДС КАК СтавкаНДС, | ТаблицаТовары.СуммаНДС КАК СуммаНДС, | ТаблицаТовары.Всего КАК Всего, | ТаблицаТовары.ПроцентАвтоматическойСкидки КАК ПроцентАвтоматическойСкидки, | ТаблицаТовары.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | ТаблицаТовары.КлючСвязи КАК КлючСвязи, | ТаблицаТовары.СуммаАвтоматическойСкидки КАК СуммаАвтоматическойСкидки, | СправочникНоменклатура.АлкогольнаяПродукция КАК АлкогольнаяПродукция, | СправочникНоменклатура.КодТРУ КАК КодТРУ, | СправочникНоменклатура.ВидПродукцииИС КАК ВидПродукцииИС, | НЕ СправочникНоменклатура.ВидПродукцииИС = ЗНАЧЕНИЕ(Перечисление.ВидыПродукцииИС.ПустаяСсылка) КАК ПродукцияИС, | ТаблицаТовары.НеобходимостьВводаАкцизнойМарки КАК НеобходимостьВводаАкцизнойМарки, | ТаблицаТовары.Штрихкод КАК Штрихкод, | ТаблицаТовары.КодМаркировки КАК КодМаркировки, | ТаблицаТовары.ДоговорПлатежногоАгента КАК ДоговорПлатежногоАгента |ПОМЕСТИТЬ ТаблицаТовары |ИЗ | ТаблицаДокумента КАК ТаблицаТовары | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура | ПО ТаблицаТовары.Номенклатура = СправочникНоменклатура.Ссылка Воспроизвел подобное в профайлере MS SQL Если через точку: exec sp_executesql N'SELECT T1._Fld2897RRef, T1._Fld2900, T2._Code, T2._Fld67717, T2._Fld67727RRef FROM dbo._Document873_VT2895 T1 LEFT OUTER JOIN dbo._Reference383 T2 ON (T1._Fld2897RRef = T2._IDRRef) AND (T2._Fld2744 = P1) WHERE ((T1._Fld2744 = @P2)) AND ((T1._Document873_IDRRef = @P3))',N'P1 numeric(10),@P2 numeric(10),@P3 varbinary(16)',0,0,0x9454AC1F6B1C087A11EE5872D3E2EDC5 Если через внутреннее соединение: exec sp_executesql N'SELECT T1._Fld2897RRef, T1._Fld2900, T2._Code, T2._Fld67717, T2._Fld67727RRef FROM dbo._Document873_VT2895 T1 INNER JOIN dbo._Reference383 T2 ON (T1._Fld2897RRef = T2._IDRRef) WHERE (((T1._Fld2744 = P1)) AND (T2._Fld2744 = @P2)) AND ((T1._Document873_IDRRef = @P3))',N'P1 numeric(10),@P2 numeric(10),@P3 varbinary(16)',0,0,0x9454AC1F6B1C087A11EE5872D3E2EDC5 Для чего внутреннее соединение со справочником номенклатуры, почему не через точку выбор реквизитов номенклатуры? |
|||
1
Прапорщик
03.10.23
✎
14:40
|
(0) Смотря что в исходной таблице &ТаблицаТовары.
А точнее в поле Номенклатура. Если поле Номенклатура в этой таблице может быть пустым или иметь какой-то тип значения отличный от СправочникСсылка.Номенклатура, то результаты левого и внутреннего соединения будут совершенно разными. Левое - оставит такие строки в результате. А внутреннее - выкинет, оставив только те, где Номенклатура заполнено и имеет тип ссылка на справочник Номенклатура. |
|||
2
pablo_escobar
03.10.23
✎
15:25
|
(1) эту мысль проверил сразу.
В таблице &ТаблицаТовары ТаблицаТовары = ДокументОбъект.Запасы.Выгрузить(); ДокументОбъект это ЧекККМ, поле Номенклатура ТЧ Запасы имеет Тип СправочникСсылка.Номенклатура и проверка заполнения выдавать ошибку Это обработка пробития чека. То есть Номенклатура должна там быть всегда. Запрос находится в функции ПодготовкаДанныхДляПробитияЧекаККМ, и у нее в описании параметров что "Ссылка - ДокументСсылка.ЧекКККМ" на основании ссылки получают ДокументОбъект = Ссылка.ПолучитьОбъект(); Далее &ТаблицаТовары Это не единственный такой запрос, встретил таких несколько только пока смотрел пробитие чека, применяют к разным реквизитам. Подумал, может в каком нибудь Posgres так быстрее выполнится. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |