Переключение на Главную Страницу Страницы: 1 ... 37 38 [39] 40 41 ... 51 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" - обсуждения. Часть № 2. (число прочтений - 245598 )
OrkuShaman
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Местоположение: Воронеж
Зарегистрирован: 23. Мая 2013
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #570 - 24. Мая 2013 :: 14:27
Печать  
Перерыл кучу прог по переводу doc в chm. Нашел сайтец занятный http://www.aitishnik.ru/windows/prog02.html. По советам данного сайта у меня получилось вот что. По мне так намного лучше doc варианта, буду еще наверно дорабатывать.
  

Pryamie_Zaprosi_Help.zip ( 116 KB | Загрузки )
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #571 - 25. Мая 2013 :: 04:40
Печать  
classic писал(а) 18. Января 2010 :: 08:51:
Убил час на отладку запроса из пяти строк. Оказалось, что функция "УложитьТаблицуЗначений" строковые колонки укладывает или в колонки с типом "Текст", или Char(100). При этом убирает лидирующие пробелы. Ппц, а у меня в строковой колонке иды объектов были.
Предлагаю переписать функцию в таком виде:


vandalsvq писал(а) 18. Января 2010 :: 09:12:
classic писал(а) 18. Января 2010 :: 08:51:
Предлагаю переписать функцию

Перепишемс Подмигивание


Так и не переписал Улыбка. Я тоже полчаса убил на отладку 5 строк, где в УложитьТаблицуЗначений укладывал ИД-ы, и потерялись лидирующие пробелы
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #572 - 25. Мая 2013 :: 04:52
Печать  
OrkuShaman писал(а) 24. Мая 2013 :: 14:27:
Перерыл кучу прог по переводу doc в chm. Нашел сайтец занятный http://www.aitishnik.ru/windows/prog02.html. По советам данного сайта у меня получилось вот что. По мне так намного лучше doc варианта, буду еще наверно дорабатывать.


Не, не гуд. Поиска нет
  
Наверх
ICQ  
IP записан
 
Igor Nikolaenko
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 47
Зарегистрирован: 01. Апреля 2010
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #573 - 12. Июня 2013 :: 09:29
Печать  
Исправлении ошибки в Классе "ПрямойЗапрос" и "ПоставщикДанных.ПрямойЗапрос"
Функция ПарсингВТПоследнееЗначение(ТекстДляОбработки):

//*Николаенко И.Н., 2013-04-25, добавил скобки в условия
//Если (ЭтоSQL = 0) и (ГраницаЗначенияЭтоПараметр = 2) Тогда
//      СтрУсловия = "(const_vt.DATE < substr(" + ГраницаЗначения + ",1,8)
//      |      OR const_vt.DATE = substr(" + ГраницаЗначения + ",1,8) AND const_vt.TIME < substr(" + ГраницаЗначения + ",9,6)
//      |      OR const_vt.DATE = substr(" + ГраницаЗначения + ",1,8) AND const_vt.TIME = substr(" + ГраницаЗначения + ",9,6) AND const_vt.DOCID <= substr(" + ГраницаЗначения + ",14,9))";
//Иначе
//      СтрУсловия = "(const_vt.DATE < " + ГраницаОкончРасчетов + "
//      |      OR const_vt.DATE = " + ГраницаОкончРасчетов + " AND const_vt.TIME < " + ВремяОкончРасчетов + "
//      |      OR const_vt.DATE = " + ГраницаОкончРасчетов + " AND const_vt.TIME = " + ВремяОкончРасчетов + " AND const_vt.DOCID <= " + ИДДокОкончРасчетов + ")";
//КонецЕсли;
// -------------
Если (ЭтоSQL = 0) и (ГраницаЗначенияЭтоПараметр = 2) Тогда
     СтрУсловия = "(const_vt.DATE < substr(" + ГраницаЗначения + ",1,8)
     |      OR (const_vt.DATE = substr(" + ГраницаЗначения + ",1,8) AND const_vt.TIME < substr(" + ГраницаЗначения + ",9,6))
     |      OR (const_vt.DATE = substr(" + ГраницаЗначения + ",1,8) AND const_vt.TIME = substr(" + ГраницаЗначения + ",9,6) AND const_vt.DOCID <= substr(" + ГраницаЗначения + ",14,9)))";
Иначе
     СтрУсловия = "(const_vt.DATE < " + ГраницаОкончРасчетов + "
     |      OR (const_vt.DATE = " + ГраницаОкончРасчетов + " AND const_vt.TIME < " + ВремяОкончРасчетов + ")
     |      OR (const_vt.DATE = " + ГраницаОкончРасчетов + " AND const_vt.TIME = " + ВремяОкончРасчетов + " AND const_vt.DOCID <= " + ИДДокОкончРасчетов + "))";
КонецЕсли;
//*_

Если, это возможно, прошу внести изменение в классы.
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #574 - 19. Июня 2013 :: 12:14
Печать  
Помогите придумать фильтрацию запроса по Полю "ТекущийДокумент" таблицы "ЖурналДокументов".

У меня есть список значений, содержащий Строка(СокрЛП(ID)) документов, которые мне нужно исключить из результата запроса.

  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #575 - 19. Июня 2013 :: 12:32
Печать  
Так покажи текст запроса?
  
Наверх
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #576 - 19. Июня 2013 :: 12:43
Печать  
Код
Выбрать все
	  спИск = СоздатьОбъект("СписокЗначений");
	спИск.ДобавитьЗначение(Строка("CNWI"));

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

	оПЗ.Текст = сТЗ;
	оПЗ.УложитьСписокЗначений(спИск,"#сп");
	оПЗ.УстановитьТекстовыйПараметр("ДатаНач", НачДата);
	оПЗ.УстановитьТекстовыйПараметр("ДатаКон", КонДата);
	оПЗ.РежимОтладки = 1;
	итз = оПЗ.Выполнить();
	итз.Показать();
 



Это один из вариантов с которыми я экспериментировал.
В результат запроса попадают все документы заданного вида за период Печаль

Вопрос в том, чтоб правильно работало условие:
Код
Выбрать все
СРЕД($дДП.ТекущийДокумент,3,4) НЕ В (ВЫБРАТЬ СОКРЛ(СОКРП(#сп.val)) ИЗ #сп)
 

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


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #577 - 20. Июня 2013 :: 02:44
Печать  
Что-то мне говорит что:
СРЕД($дДП.ТекущийДокумент,3,4) НЕ В (ВЫБРАТЬ СОКРЛ(СОКРП(#сп.val)) ИЗ #сп)

надо написать вот так:

НЕ (СРЕД($дДП.ТекущийДокумент,3,4) В (ВЫБРАТЬ СОКРЛ(СОКРП(#сп.val)) ИЗ #сп))
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #578 - 21. Июня 2013 :: 09:52
Печать  
к сожалению тоже не хочет работать Печаль
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #579 - 23. Июня 2013 :: 04:32
Печать  
Ну во-первых. Зачем укладывать строковые списки - они не уложатся.
Если бы ты добавил агрегатный объект "документ" в список то УложитьСписокЗначений уложил бы их идентификаторы. Если у тебя нет агрегатного объекта а есть только идентификатор - то он у тебя не верный. Идентификатор должен быть длиной 9 знаков у тебя же 4 знака (нет пробелов).
Соответственно если идентификатор все таки строковый то надо
просто в тексте запроса написать:
Код
Выбрать все
ГДЕ $дДП.ТекущийДокумент= '"+ТвойСтроковыИдентификатор+"' 


Обрати внимание на апострофы.
Если же найдешь все таки агрегатный объект и его уложишь в список то вот так:
Код
Выбрать все
ГДЕ $дДП.ТекущийДокумент В (ВЫБРАТЬ val ИЗ #сп) 

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


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #580 - 26. Июня 2013 :: 06:00
Печать  
Подскажите по условию по видам документов. Если условие по видам стоит, выборка пустая, если убрать то работает, но в выборку попадают лишние документы:
"ВЫБРАТЬ
|      Партии.Партия КАК [Партия :Справочник.Партии]
|ИЗ
|      Журнал КАК ЖурналДокументов
|
|      ЛЕВОЕ СОЕДИНЕНИЕ
|            Регистр.ПаритииНаличие КАК Партии
|      ПО
|            ЖурналДокументов.IDDoc = Партии.IDDoc
|ГДЕ
|      ЖурналДокументов.DATE <= :КонПериода
|       И ЛЕВО(ЖурналДокументов.IDDoc, 4) = :ВидДокумента.Реализация";

Отладка говорит, что :ВидДокумента.Реализация = ' 18R', а ЛЕВО(ЖурналДокументов.IDDoc, 4) = '  97' (у реализации). как правильно сделать?
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #581 - 26. Июня 2013 :: 06:22
Печать  
все дошло... такут надо было: "И ЖурналДокументов.IDDOCDEF = :ВидДокумента.Реализация"
  
Наверх
 
IP записан
 
OrkuShaman
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Местоположение: Воронеж
Зарегистрирован: 23. Мая 2013
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #582 - 12. Июля 2013 :: 06:38
Печать  
Добрый день господа. Подскажите что не так делаю. Есть такой текст запроса :
ТекстПрямогоЗапроса="
     |ВЫБРАТЬ
     |      $СПрАвто.Модель КАК [Модель $Справочник.МоделиАвт]
     |      ,$СпРАвто.Код КАК [Вин $Строка]
     |      ,$Справто.ГодВыпуска КАК [ГодВып $Число]
//      |      ,$СпрАвто.Пробег КАК [Пробег $Число]
     |      ,$ДокЗаказНаряд3.ВидРемонта КАК [ВидРем $Справочник.ВидРемонта]
     |      ,$ДокЗаказНаряд3.СуммаРабот КАК [СумРаб $Число]
     |      ,$ДокЗаказНаряд3.СумМат КАК [СумЗЧ $Число]
     |      ,$Жур.ТекущийДокумент КАК [ТекущийЗН $Документ.ЗаказНаряд3]
     |      ,$Жур.ВидДокумента КАК [ТекущийЗН_вид $ВидДокумента]
     |      ,$Жур.ДатаДокумента КАК [ДокДата $Дата]
//      |      ,$СпрАВто.VIN2 КАК [Вин2 $Строка]
     |      ,$Жур.Фирма КАК [Фирма $Справочник.Фирмы]
     |      ,$ДокЗаказНаряд3.УчитыватьНДС КАК [УчНДС $Число]
     |      ,$СпрАвТо.Марка КАК [Марка $Справочник.Марка]
//      |      ,$ДокЗаказНаряд3.Количество КАК [Количество $Число]
//      |      ,$ДокЗаказНаряд3.Коэффициент КАК [Коэффициент $Число]
     |      ,$ДокЗаказНаряд3.СостояниеЗН КАК [Закрыт $Перечисление.СостояниеЗаказНаряда]
     |ИЗ
     |      ЖурналДокументов КАК Жур
     |      ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказНаряд3 КАК ДокЗаказНаряд3
     |            ПО $ДокЗаказНаряд3.ТекущийДокумент = $Жур.ТекущийДокумент
     |      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Автомобили КАК СпрАвтО
     |            ПО $СПРАвто.ТекущийЭлемент = $ДокЗаказНаряд3.Автомобиль
     |ГДЕ 
     |      $Жур.ДатаДокумента МЕЖДУ :НачДата И :КонДата
//      |      И  $Жур.Фирма=:ВыбРазделитель1
     |      И  $Жур.Проведен = 1
     |      И  $ДокЗаказНаряд3.СостояниеЗН=:Закрыт
     |      И  ($СпРАвто.Код в (ВЫБРАТЬ val ИЗ #ВыбСЗВин))
//      |      И  $СпРАвто.Код=:ВыбВин
     |";

Не работает условие "И  ($СпРАвто.Код в (ВЫБРАТЬ val ИЗ #ВыбСЗВин))". Список значений это конкретные строки с винами типа "RJHYMJTYSJ16541651". $СпРАвто.Код это код в справочнике строкового типа. Если брать текстовый параметр по условию "$СпРАвто.Код=:ВыбВин", то работает. Но мне нужно их много проверять.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #583 - 12. Июля 2013 :: 09:22
Печать  
OrkuShaman писал(а) 12. Июля 2013 :: 06:38:
Добрый день господа. Подскажите что не так делаю.
...Список значений это конкретные строки с винами типа "RJHYMJTYSJ16541651".


Уверен на счет этого предложения? Попробуй, для начала:
тестТЗ = СоздатьОбъект("ТаблицаЗначений");
РС(или чего там у тебя).ВыполнитьИнструкцию("SELECT val FROM #ВыбСЗВин",тестТЗ,1);
тестТЗ.ВыбратьСтроку();
и посмотри, что же реально у тебя во времянке лежит
  
Наверх
ICQ  
IP записан
 
OrkuShaman
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Местоположение: Воронеж
Зарегистрирован: 23. Мая 2013
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #584 - 12. Июля 2013 :: 09:24
Печать  
Дык я сам эту времянку вручную создавал.

СЗВины=СоздатьОбъект("СписокЗначений");
СЗВины.ДобавитьЗначение("XW8CJ41Z4CK273888");
СЗВины.ДобавитьЗначение("XWB4B11CDAA033412");
СЗВины.ДобавитьЗначение("Y6DTF698P90226411");
СЗВины.ДобавитьЗначение("XTA21213021620778");
СЗВины.ДобавитьЗначение("XWFPE6DJ9C3037712");
СЗВины.ДобавитьЗначение("XW8BD61Z98K151131");
СЗВины.ДобавитьЗначение("XWB3K32CDBA274228");
СЗВины.ДобавитьЗначение("XWF0AHL69C0018981");
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 37 38 [39] 40 41 ... 51
ОтправитьПечать