Переключение на Главную Страницу Страницы: 1 ... 16 17 [18] 19 20 ... 51 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" - обсуждения. Часть № 2. (число прочтений - 258693 )
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #255 - 12. Января 2012 :: 06:48
Печать  
vinogradoff, вот тут типизация одна, а выборка другая Улыбка, но это не суть, по идее внутри типизация будет игнорирована насколько я знаю.
Код
Выбрать все
	|		select distinct
	|			$нп.Продукт [Товар $Справочник.Номенклатура]
	|		from Справочник.НаборПродуктов as нп 



Приложи режим отладки + мне надо выборку (хоть несколько строк) из БИОстатки без типизации, чтобы понять в чем дело. Желательно все в архив.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #256 - 12. Января 2012 :: 07:58
Печать  
Цитата:
вот тут типизация одна, а выборка другая

В справочнике НаборПродуктов, подчиненный справочнику Номенклатура, реквизит Продукт имеет тип Справочник.Номенклатура.

  

111.zip ( 291 KB | Загрузки )
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #257 - 12. Января 2012 :: 12:13
Печать  
Нужна расскладка и с закомментированной строкой. И еще, для Субконто1 укажи таблицу Остатки.Субконто1.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #258 - 12. Января 2012 :: 12:24
Печать  
с join-ом (немного подправлен)
  

_______1_001.txt ( 10 KB | Загрузки )
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #259 - 12. Января 2012 :: 12:32
Печать  
И подскажите пожалуйста, какой тип и вид на выходе имеет поле ост.Субконто3 [Партия $Субконто]. Третье субконто имеет тип Документ (как его связать с журналом)?
  
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #260 - 12. Января 2012 :: 13:03
Печать  
заработало  Озадачен
Код
Выбрать все
	|select    
	|	ост.КоличествоОстаток Количество,
	|	ост.Субконто1 [Товар $Субконто],
	|	ост.Субконто1_вид Товар_вид,
	|	ост.Субконто3 [Партия $Субконто],
	|	ост.Субконто3_вид Партия_вид,
	|	ост.Субконто3 Пар
	|from $БИОстатки.Основной(
	|	:КонДата~,
	|	#Счет,
	|	(Субконто1, Субконто2, Субконто3),
	|	Количество,
	|	(Субконто1 в (
	|		select distinct
	|			$нп.Продукт
	|		from Справочник.НаборПродуктов as нп
	|		where нп.parentext in (select val from #СписокИзделий)))
	|	and
	|	(Субконто2 = :Склад)
	|	,
	|) as ост
	|join Справочник.Номенклатура as ном on сред(ост.Субконто1, 1, 9) = ном.id
	|where ост.КоличествоОстаток > 0
	|	and ост.Субконто3 != :ПустойИД13 

  
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #261 - 12. Января 2012 :: 13:57
Печать  
Совсем всё плохо. Не понимаю почему заработал join, а теперь не понимаю почему перстаёт работать с добавлением order by
Код
Выбрать все
	|select
	|	ном.CODE,
	|	ост.КоличествоОстаток Количество,
	|	ост.Субконто1 [Товар $Субконто],
	|	ост.Субконто1_вид Товар_вид,
	|	ост.Субконто3 [Партия $Субконто],
	|	ост.Субконто3_вид Партия_вид,
	|	ост.Субконто3 Пар
	|from $БИОстатки.Основной(
	|	:КонДата~,
	|	#Счет,
	|	(Субконто1, Субконто2, Субконто3),
	|	Количество,
	|	(Субконто1 в (
	|		select distinct
	|			$нп.Продукт
	|		from Справочник.НаборПродуктов as нп
	|		where нп.parentext in (select val from #СписокИзделий)))
	|	and
	|	(Субконто2 = :Склад)
	|	,
	|) as ост
	|join Справочник.Номенклатура as ном on ЛЕВО(ост.Субконто1, 9) = ном.id
	//|join ЖурналДокументов as ж on ж.iddoc = право(ост.Субконто3, 9)
	|where ост.КоличествоОстаток > 0
	|	and ост.Субконто3 != :ПустойИД13
	|group by
	|	ном.DESCR 


в результат получаю не все позиции (в частном случае получаю ~50 строк без order by и 3 строки с ним).
Всего лишь добавив упорядочивание.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #262 - 12. Января 2012 :: 16:47
Печать  
Пиши все таки "правильно".
Если "таб1" соединяется с "таб2" тогда условие соединения "таб1.реквизит = таб2.реквизит". Более того пиши всегда представления таблиц, пиши правила соединения правильно (см. документацию какие виды соединения поддерживает прямой запрос).
Писал я ее не просто так, когда писал анализировал что "умеет" SQLite и SQL одновременно, и старался сделать.
У меня вот честно говорю никаких проблем с ним нет. Вообще. Причем писал как БУ, так и регистры и более сложные конструкции.
Да и добавил ты не упорядочивание, а группировку. Как бы group by не похоже на order by Улыбка

Я кстати сначала и подумал что проблема в условии соединения, но просто не подумал что SQLite может на это как то не так отреагировать.

И я еще думаю что писать синтаксисом языка прямого запроса не так сложно. Зато переход на 8 будет проще потом. Улыбка))))
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #263 - 13. Января 2012 :: 05:21
Печать  
Цитата:
Да и добавил ты не упорядочивание, а группировку.

FFFFFFFFFFFFUUUUUUUUU
Прошу прощения.
  
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #264 - 13. Января 2012 :: 06:23
Печать  
И все же, если раскомментировать упорядочивание, то получаю другой набор данных.
Ткните, пожалуйста, что не так делаю.
Код
Выбрать все
	СписокИзделий = СоздатьОбъект("СписокЗначений");
	Блюда.Выгрузить(СписокИзделий,,,"Блюдо");
	ТекстЗапроса = "
	|ВЫБРАТЬ
	|	$СпрНом.Код КАК Код,
	|	$СпрНом.Наименование КАК Наименование,
	|	Ост.КоличествоОстаток КАК Количество,
	|	Ост.Субконто1 [Товар $Субконто],
	|	Ост.Субконто1_вид Товар_вид,
	|	Ост.Субконто3 [Партия $Субконто],
	|	Ост.Субконто3_вид Партия_вид
	|ИЗ $БИОстатки.Основной(
	|	:КонДата~,
	|	#Счет,
	|	(Субконто1, Субконто2, Субконто3),
	|	Количество,
	|	(Субконто1 В (
	|		ВЫБРАТЬ РАЗЛИЧНЫЕ
	|			$нп.Продукт
	|		ИЗ Справочник.НаборПродуктов КАК нп
	|		ГДЕ нп.parentext В (ВЫБРАТЬ val ИЗ #СписокИзделий)))
	|	И
	|	(Субконто2 = :Склад)
	|	,
	|) КАК Ост
	|СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНом $nolock ПО ЛЕВО(Ост.Субконто1, 9) = $СпрНом.ТекущийЭлемент
	|ГДЕ Ост.КоличествоОстаток > 0
	|	И Ост.Субконто3 != :ПустойИД13
	//|УПОРЯДОЧИТЬ
	//|	$СпрНом.Наименование
	|";
	рс = СоздатьОбъект("ПрямойЗапрос");
	рс.РежимОтладки = 1;
	рс.БухгалтерскийУчет = 1;
	рс.УстановитьТекстовыйПараметр("КонДата", ДатаДок);  
	рс.УстановитьТекстовыйПараметр("Склад", Склад);
	рс.УложитьСписокОбъектов(СчетПоКоду("41.2"), "#Счет");
	рс.УложитьСписокОбъектов(СписокИзделий, "#СписокИзделий", "Номенклатура");
	тз = рс.Выполнить("ТаблицаЗначений", ТекстЗапроса);
	тз.Выгрузить(тт);
	тт.ВидимостьКолонки("Товар_вид, Партия_вид", 0); 

  

debug.zip ( 4 KB | Загрузки )
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #265 - 13. Января 2012 :: 09:02
Печать  
Напиши ЛЕВОЕ СОЕДИНЕНИЕ. Понимаю что влиять не должно, но вдруг как в случае с условием соединения. Кто знает.
Но крайне удивительно если упорядочивание влияет на выборку... на результат вывода да, но на результат выборки не должно никак вообще.

Вытащи наконец вложенную выборку в отдельную временную таблицу. А то больно смотреть текст запроса в режиме отладки Печаль
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #266 - 13. Января 2012 :: 09:39
Печать  
Соединил с Журналом - упорядочивание по дате работает. В общем, решил пока сортировать средствами 1С. Потом буду решать, что не так было. Спасибо за помощь.
  
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #267 - 13. Января 2012 :: 10:54
Печать  
При выгрузке в ТЗ так должно быть, что реквизит с типом Число10.5, например 1.16000, выгружается как 1.15999999999999? функция ОКРУГЛИТЬ не помогает.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #268 - 13. Января 2012 :: 13:37
Печать  
Сделай так
Код
Выбрать все
Ост.Количество КАК [Количество $Число.10.2] 



Особенности SQLite
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #269 - 13. Января 2012 :: 13:49
Печать  
Если использовать $ПоследнееЗначение, то эффект тот же, как от УПОРЯДОЧИТЬ из постов выше, причем, абсолютно одинаковый результат (на выходе другой набор данных). Я подозреваю, что у меня что-то не так, но что именно не могу понять.
Код
Выбрать все
	рс = СоздатьОбъект("ПрямойЗапрос");

	СписокИзделий = СоздатьОбъект("СписокЗначений");
	Блюда.Выгрузить(СписокИзделий,,,"Блюдо");
	рс.ВыполнитьЗапрос("СОЗДАТЬ ТАБЛИЦА #ТаблицаПродукты(Продукт VARCHAR(9))");

	ТекстЗапроса = "
	|ВСТАВИТЬ ВНУТРЬ #ТаблицаПродукты
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	$СпрНП.Продукт КАК Продукт
	|ИЗ Справочник.НаборПродуктов КАК СпрНП $nolock
	|ГДЕ $СпрНП.Владелец В (ВЫБРАТЬ val ИЗ #СписокИзделий)
	|	И $СпрНП.ПометкаУдаления = 0
	|";
	рс.УложитьСписокОбъектов(СписокИзделий, "#СписокИзделий", "Номенклатура");
	рс.ВыполнитьЗапрос(ТекстЗапроса);


	ТекстЗапроса = "
	|ВЫБРАТЬ  
	|	Ост.Субконто1 [Товар $Субконто],
	|	Ост.Субконто1_вид Товар_вид,
	|	Ост.КоличествоОстаток КАК Количество,
	|	$Журнал.ДатаДокумента КАК [ДатаДок $Дата],
	|	$ПоследнееЗначение.Номенклатура.Масса($СпрНом.ТекущийЭлемент, :ДатаДок) КАК Фасовка
	|ИЗ $БИОстатки.Основной(
	|	:ДатаДок~,
	|	#Счет,
	|	,
	|	Количество,
	|	(Субконто1 В #ТаблицаПродукты) И (Субконто2 = :Склад),
	|) КАК Ост
	|СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНом $nolock ПО ЛЕВО(Ост.Субконто1, 9) = $СпрНом.ТекущийЭлемент
	|СОЕДИНЕНИЕ ЖурналДокументов as Журнал $nolock on ПРАВО(Ост.Субконто3, 9) = Журнал.iddoc
	|ГДЕ ОКРУГЛИТЬ(Ост.КоличествоОстаток, 5) > 0
	|	И Ост.Субконто3 != :ПустойИД13
	|";
	рс.БухгалтерскийУчет = 1;
	рс.УстановитьТекстовыйПараметр("ДатаДок", ДатаДок);  
	рс.УстановитьТекстовыйПараметр("Склад", Склад);
	рс.УложитьСписокОбъектов(СчетПоКоду("41.2"), "#Счет");
	тз = рс.Выполнить("ТаблицаЗначений", ТекстЗапроса);
	тз.Сортировать("Товар, ДатаДок");

	тз.Выгрузить(тОст);  
	тОст.ВидимостьКолонки("Товар_вид", 0);  

	ТекстЗапроса = "
	|ВЫБРАТЬ  
	|	$СпрНП.Владелец [Изделие $Справочник.Номенклатура],
	|	$СпрНП.Продукт [Товар $Справочник.Номенклатура],
	|	$СпрНП.Количество КАК Количество,
	|	$СпрНП.ФКоробка КАК Коробка,
	|	ВЫБОР КОГДА $СпрНом.Весовой = 0 ТОГДА 100 ИНАЧЕ 10 КОНЕЦ КАК Весовой
	//|	$ПоследнееЗначение.НаборПродкутов.ФНеИсп($СпрНП.ТекущийЭлемент, :ДатаДок) КАК НеИсп
	|ИЗ	Справочник.НаборПродуктов КАК СпрНП	$nolock
	|СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНом $nolock ПО $СпрНП.Владелец = $СпрНом.ТекущийЭлемент
	|ГДЕ $СпрНП.Владелец В (ВЫБРАТЬ val ИЗ #СписокИзделий)
	|	И $СпрНП.ПометкаУдаления = 0
	|";
	рс.БухгалтерскийУчет = 0;
	тз = рс.Выполнить("ТаблицаЗначений", ТекстЗапроса);
	тз.Выгрузить(тТов);
	тТов.Сортировать("Изделие, Товар"); 


п.с. Нашел еще несколько непонятных вещей, но пока грузить не буду. C левым соединением пробовал, не влияет.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 16 17 [18] 19 20 ... 51
ОтправитьПечать