Переключение на Главную Страницу Страницы: 1 ... 42 43 [44] 45 46 ... 51 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" - обсуждения. Часть № 2. (число прочтений - 244665 )
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #645 - 19. Июня 2014 :: 13:32
Печать  
Код
Выбрать все
кумента,8) as date))

или

.... as datetime))

 



явно приводим к типу "дата"
  
Наверх
 
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #646 - 22. Июля 2014 :: 18:48
Печать  
интересный момент, решил набросать через этот класс простой запрос, что бы не юзать типовой, скорость желательна, и тут нарвался на проблему. Остатки выдает пустые, не смотря на то, что товар в сз есть и он реально ввиде ссылок. Почему про нее говорю, если убрать условие на товар, то товар ловит весь и там есть этот товар из списка с остатками.
Избился уже не могу понять, вроде все просто, кто нить сталкивался?

Код
Выбрать все
		сзТовар = СоздатьОбъект("СписокЗначений");
		ВыгрузитьТабличнуюЧасть(сзТовар, "Товар");

ТекстЗапроса = "-- Получим остатки
		|ВЫБРАТЬ
		|	БИ.Субконто1 КАК [Товар $Субконто],
		|	БИ.Субконто1_вид КАК Товар_вид,
		|	БИ.КоличествоОстаток КАК Количество
		|ИЗ $БИОстатки.Основной(:Док, #Счета, Номенклатура, Количество, (Субконто1 В (ВЫБРАТЬ val ИЗ #ВыбТовар))) КАК БИ
		|
		|";
		БухИт.УстановитьТекстовыйПараметр("Док", ТекущийДокумент());
		сзСчета = СоздатьОбъект("СписокЗначений");
		сзСчета.ДобавитьЗначение(СчетПоКоду("41"));
		сзСчета.ДобавитьЗначение(СчетПоКоду("43"));
		БухИт.УложитьСписокОбъектов(сзСчета, "#Счета", "Основной");
		БухИт.УложитьСписокОбъектов(сзТовар, "#ВыбТовар", "Номенклатура");
		тзОстатки = БухИт.Выполнить("ТаблицаЗначений",ТекстЗапроса);
 

  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #647 - 23. Июля 2014 :: 07:42
Печать  
Больше похоже, что длина реквизита не совпадает, т.е. в #ВыбТовар ИД-шники длиной 9, а в Бух. итогах -, вероятно, с учетом ИД-шника.
Попробуй:
Код
Выбрать все
Right(Субконто1,9) В (ВЫБРАТЬ val ИЗ #ВыбТовар) 


Хотя при этом - может вывести данные по объектам из другого справочника с таким же ID, но для начала пойдет,  а там дальше уже разбираться можно, достраивать ли вид справочника к временной таблице, или условие по виду на БИ задавать...
  
Наверх
ICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #648 - 23. Июля 2014 :: 14:34
Печать  
Так как у субконто есть еще вид, я четко знаю что субконто это ИД9, но сделал как ты предложил, эффект предсказуем, тот же Подмигивание

Вот отладку выложил.
  

______________001.txt ( 6 KB | Загрузки )

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #649 - 25. Июля 2014 :: 04:50
Печать  
Выполни запрос без типизации, данные выложи в строку вида 'значение'.  Тогда точно сможешь посчитать длину значения.
У тебя наверняка не все субконто указаны с типом и видом, а значит длина самого поля SQL (DBF) 13 или 23 символа. А значение хранится скорее всего с 1-го по 9-й. Или с 5 по 13 если вдруг все таки с видом зачесалось.
Просто ради интереса выполни, посмотришь - поймешь.

Кстати сразу в лоб модифицируй запрос на
Код
Выбрать все
СРЕД(Субконто1, 1, 9) В (ВЫБРАТЬ val ИЗ #СписокЗначений) 

« Последняя редакция: 28. Июля 2014 :: 13:15 - vandalsvq »  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #650 - 26. Июля 2014 :: 17:23
Печать  
То конкретное субконто которое я выбираю, оно с типом и видом Справочник.Номенклатура
Так же Сред не понял, ведь даже если там было бы 13 (что странно), то было бы 4+9, а причем здесь 14 и почему Сред выбирает первые 9 символов?
Кстати еще раз пересмотрел возвращает 13 таки символов.
Тоесть видимо я не совсем осведомлен о формате бух. учета в базе, ведь с регистрами и остальными объектами такого вроде нет, а тут 13 символов причем основной объект это не 9 справа, а 9 слева Улыбка
Тогда остальные 4 видимо ид самого объекта ВидСубконто. Не понятно почему наоборот Улыбка мозг вынесло Улыбка
Если сделать в sql запрос без классов к таблице _1sentry то ид в скажем sc0 будет 9, почему так тут, я чего то не в курю. Просто понять хочется Улыбка
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #651 - 28. Июля 2014 :: 13:21
Печать  
Про 14 длину, я косячнул, 13 конечно же. Исправил в посте

pavlo писал(а) 26. Июля 2014 :: 17:23:
Кстати еще раз пересмотрел возвращает 13 таки символов.
То есть видимо я не совсем осведомлен о формате бух. учета в базе, ведь с регистрами и остальными объектами такого вроде нет, а тут 13 символов причем основной объект это не 9 справа, а 9 слева Улыбка
Тогда остальные 4 видимо ид самого объекта ВидСубконто. Не понятно почему наоборот Улыбка мозг вынесло Улыбка
Если сделать в sql запрос без классов к таблице _1sentry то ид в скажем sc0 будет 9, почему так тут, я чего то не в курю. Просто понять хочется Улыбка


У тебя все субконто с указанием вида справочника (перечисления)? Если хотя бы одно без вида, то поля субконто длиной будут 13 символов, а если вдруг хотя бы одно не типизировано то получишь 24 или сколько там он будет хранить я точно не помню.
А почему хранится только 9 и слева, а не справа, то тут все понятно. Поле типизировано с указанием вида, необходимости хранить вид нет, значит храним 9 символов, а чтобы не париться сколько там длина поля в физической таблице пишем в левые 9, а следующие просто пустые оставляем. Так что нет там никакого вида.
В общем бух. подсистема просто чуток позамороченнее

  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #652 - 28. Июля 2014 :: 14:10
Печать  
у меня 3 субконто и 3 всегда пустое на 41 и 43 счетах.
Вообще раньше много раз прямые писал для скуля и проблем не возникало и если честно только узнал что  ID9 (объекта) идет первым, это точно так или просто для удобства класс переворачивает? Улыбка
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #653 - 29. Июля 2014 :: 11:23
Печать  
pavlo писал(а) 28. Июля 2014 :: 14:10:
у меня 3 субконто и 3 всегда пустое на 41 и 43 счетах.
Вообще раньше много раз прямые писал для скуля и проблем не возникало и если честно только узнал что  ID9 (объекта) идет первым, это точно так или просто для удобства класс переворачивает? Улыбка


Ты не понял. Не важно что у тебя на конкретном счете с субконто происходит, намного важнее что в целом происходит с видами субконто на всю конфигурацию.
И про Идентификатор ты не прав. Только у бухгалтерского учета такая петрушка. А с регистрами, документами, справочниками все в порядке.
Объясняю на пальцах.

Допустим у тебя всего 3 вида субконто
Контрагенты - Справочник.Контрагенты
Договоры - Справочник.Договоры
Документы - Справочник (без указания вида)

Для Контрагентов и договоров надо хранить только 9 символов, поскольку все прекрасно понятно, где его искать, а вот для документов надо хранить 13 символов.

Далее. Например, у тебя всего 2 счета:
60 - Контрагенты, Договоры, Документы
76 - Контрагенты, Документы, Договоры

Обрати внимание что для Субконто1 (sc0) длины поля хватит и 9 символов, поскольку во всех счетах это справочник с указанием вида, а вот для Субконто2 и 3 надо хранить или 9 или 13, естественно что длина поля будет 13 символов. Но для счета 60 хранится будут заполняться только первые 9, а для счета 76 все 13. Вот и все.
*** Вот только я точно не могу сказать не будет ли длина поля Субконто1 13 символов для унификации.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #654 - 30. Июля 2014 :: 17:16
Печать  
Видимо у меня в субконто1 во всех счетах в той базе где скуль везде есть вид Улыбка
спасибо, понял.
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #655 - 21. Августа 2014 :: 06:36
Печать  
Код
Выбрать все
ТекстЗапросаИННКонтр = "
				|ВЫБРАТЬ
				|	$СпрКонтр.ТекущийЭлемент КАК [ТекЭл $Справочник.Контрагенты]
				|	,$СпрКонтр.ИНН КАК ИНН
				|	,$СпрКонтр.Наименование КАК Наименование
				|ИЗ
				|	Справочник.Контрагенты КАК СпрКонтр $nolock
				|ГДЕ
				|	$СпрКонтр.ПометкаУдаления=0 И $СпрКонтр.ИНН ПОДОБНО '@ИННКраткий%'";
ПЗКонтры=СоздатьОбъект("ПрямойЗапрос");
ПЗКонтры.РежимОтладки = 0;ПЗКонтры.БухгалтерскийУчет = 0;ПЗКонтры.ПериодическиеЗначения = 0;ПЗКонтры.Текст = ТекстЗапросаИННКонтр;
ПЗКонтры.ОписаниеПараметра("ИННКраткий","Строка");
ПЗКонтры.ПодготовитьПараметризованныйЗапрос();
 



Далее
Код
Выбрать все
		ПЗКонтры.ПодставлятьПараметры("ИННКраткий",СокрП(ИННКраткий));
		тзРез = ПЗКонтры.ВыполнитьПараметризованныйЗапрос();
 


На СКЛь - все ОК, на ДБФ - ошибка:
ПрямойЗапрос::ВыполнитьПараметризованныйЗапрос(Строка ТипОбъекта=ИндексированнаяТаблица) : Неверный номер параметра
метра.Модификатор);
{D:\BASES\ELIS\TOTALCNT\CLASSES\ПрямыеЗапросы\ПрямойЗапрос.ert(13736) }

ЧЯДНТ?
П.С.
Остановил отладчиком на "ЗапросSQLite.УстановитьПараметр"
в ВекторПараметра.  и в ЗначениеПараметра -  - все Ок, все то, что должно быть.
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #656 - 21. Августа 2014 :: 09:52
Печать  
имха, неправильно ты это делаешь. У тебя в запросе '@ИННКраткий%' - это не параметр а готовая строка. Укажи ее без апострофов, а процент добавляй при установке параметра.
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #657 - 21. Августа 2014 :: 10:07
Печать  
Salimbek писал(а) 21. Августа 2014 :: 09:52:
имха, неправильно ты это делаешь. У тебя в запросе '@ИННКраткий%' - это не параметр а готовая строка. Укажи ее без апострофов, а процент добавляй при установке параметра.

Код
Выбрать все
|ГДЕ
	|	$СпрКонтр.ПометкаУдаления=0 И $СпрКонтр.ИНН ПОДОБНО СОКРП(@ИННКраткий)";

ПЗКонтры.ПодставлятьПараметры("ИННКраткий",СокрП(ИННКраткий)+"%");
 


Ессс! Взлетело! Спасибо! Очень довольный
« Последняя редакция: 22. Августа 2014 :: 01:28 - Dolly_EV »  
Наверх
ICQ  
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #658 - 01. Сентября 2014 :: 08:03
Печать  
очепятка в документации

для ВТ-запроса $РегистрОстаткиОбороты

неверный идентификатор <ИдентификаторРесурса>ОборотЫ

должно быть <ИдентификаторРесурса>Оборот (в самом классе именно так - без завершающего "Ы")
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #659 - 23. Октября 2014 :: 13:42
Печать  
В БИОстаткиОбороты пропали остатки и обороты за 3-й квартал.

Делаю запрос за 2-й квартал - остатки  и обороты есть и за 4-й тоже есть остатки и обороты. А в 3-м нет. Печаль

Смотрю ОСВ по счету - все нормально. Есть и остатки и обороты.

Текст запроса:
Код
Выбрать все
"
	|ВЫБРАТЬ
	|	ОстаткиОборотыОсновной.Субконто1		КАК [Агент			$Субконто	]
	|,	ОстаткиОборотыОсновной.Субконто1_вид	КАК [Агент_вид		$ВидСубконто]
	|,	ОстаткиОборотыОсновной.Субконто2		КАК [ТаксаХХ		$Субконто	]
	|,	ОстаткиОборотыОсновной.Субконто2_вид	КАК [ТаксаХХ_вид	$ВидСубконто]
	|,	ОстаткиОборотыОсновной.НачалоПериода	КАК [НачалоПериода	$Дата		]

	|,	ОстаткиОборотыОсновной.СуммаНачальныйОстаток	КАК [СН_Сумма		$Число	]
	|,	ОстаткиОборотыОсновной.ВалютаНачальныйОстаток	КАК [СН_СумКорп		$Число	]
	|,	ОстаткиОборотыОсновной.СуммаОборот				КАК [Оборот_Сумма	$Число	]
	|,	ОстаткиОборотыОсновной.ВалютаОборот				КАК [Оборот_СумКорп	$Число	]
	|,	ОстаткиОборотыОсновной.СуммаКонечныйОстаток		КАК [СК_Сумма		$Число	]
	|,	ОстаткиОборотыОсновной.ВалютаКонечныйОстаток	КАК [СК_СумКорп		$Число	]
	|
	|
	|ИЗ
	|	$БИОстаткиОбороты.Основной(		:ДатаНач~
									|,	:ДатаКон~
									|,	МЕСЯЦ ДОПОЛНЕНИЕ
									|,
									|,	#СчетаТКС
									|,	(Сотрудники, ТаксыХХ)
									|,	(Сумма, Валюта)
									|,
									|) КАК ОстаткиОборотыОсновной"
 



  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 42 43 [44] 45 46 ... 51
ОтправитьПечать