Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема 1sqlite. Пара вопросиков от начинающего по синтаксису (число прочтений - 2192 )
palpetrovich
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 31
Зарегистрирован: 23. Ноября 2010
1sqlite. Пара вопросиков от начинающего по синтаксису
30. Ноября 2010 :: 09:50
Печать  
1. Подскажите пожалуйста,  приведенный ниже код можно изобразить как-то симпатичней?
          Если РеквизитВид="" Тогда
                текст=текст+"
                |    Док.ТМЦ Товар";
          Иначе      
                текст=текст+"
                |    :ВидСправочника.ТМЦ||Док.ТМЦ Товар";
          КонецЕсли;

как-то так?
CASE WHEN РеквизитВид="" THEN Док.ТМЦ  ELSE :ВидСправочника.ТМЦ||Док.ТМЦ END Товар
если да, как в текст запроса внешнюю, меняющуюся в цикле, переменную РеквизитВид передать?

2.  конструкцию:
                Если ВыбрТМЦ.Выбран()=1 Тогда
                      текст=текст+"
                      |      WHERE Док.ТМЦ = @ВыбрТовар";
                КонецЕсли;      

можно заменить на нечто типа:
WHERE Док.ТМЦ В @ВыбрТовар   - в 1sqlite аналог  В есть?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: 1sqlite. Пара вопросиков от начинающего по синтаксису
Ответ #1 - 30. Ноября 2010 :: 10:27
Печать  
1. текст=текст+РеквизитВид+"Док.ТМЦ Товар";
2. WHERE Док.ТМЦ in (select val from ВыбТовар)

база.УложитьОбъекты(ВыбТовар,"ВыбТовар",0,"Номенклатура");
  
Наверх
 
IP записан
 
palpetrovich
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 31
Зарегистрирован: 23. Ноября 2010
Re: 1sqlite. Пара вопросиков от начинающего по синтаксису
Ответ #2 - 30. Ноября 2010 :: 11:14
Печать  
Eprst писал(а) 30. Ноября 2010 :: 10:27:
1. текст=текст+РеквизитВид+"Док.ТМЦ Товар";
2. WHERE Док.ТМЦ in (select val from ВыбТовар)

база.УложитьОбъекты(ВыбТовар,"ВыбТовар",0,"Номенклатура");


1. Наверное так не прокатит,  РеквизитВид у меня - строка (к примеру "ТМЦ")
2. Спасибо!
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: 1sqlite. Пара вопросиков от начинающего по синтаксису
Ответ #3 - 30. Ноября 2010 :: 11:28
Печать  
Ну и че ?
Сделай РеквизитВид = ":ВидСправочника.ТМЦ||", тупо в список значений( или откуда ты там его получаешь ?) значение такое клади, а в представление - обычную строку..
  
Наверх
 
IP записан
 
palpetrovich
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 31
Зарегистрирован: 23. Ноября 2010
Re: 1sqlite. Пара вопросиков от начинающего по синтаксису
Ответ #4 - 30. Ноября 2010 :: 11:40
Печать  
Eprst писал(а) 30. Ноября 2010 :: 11:28:
Ну и че ?
Сделай РеквизитВид = ":ВидСправочника.ТМЦ||", тупо в список значений( или откуда ты там его получаешь ?) значение такое клади, а в представление - обычную строку..


я там немного  "филоню" Подмигивание ... в одном Списке у меня значение - ВидДока, а представление ВидРеквизита
Код
Выбрать все
	Для Индекс=1 По Метаданные.Документ() Цикл
		ВидДокумента = Метаданные.Документ(Индекс).Идентификатор;  
		  
		Если Реквизит.Выбран()=1 Тогда    
			СписокДоков.ДобавитьЗначение(ВидДокумента, Реквизит.Вид);
		КонецЕсли;
	КонецЦикла;
 


сделал так, все ок!
Код
Выбрать все
			Если Реквизит.Вид="" Тогда						  
				СписокДоков.ДобавитьЗначение(ВидДокумента, "");  
			Иначе
				СписокДоков.ДобавитьЗначение(ВидДокумента, ":ВидСправочника."+Реквизит.Вид+"||");  
			КонецЕсли; 


спасибо

Eprst ты же поди этот список юзверю показываешь ?  -не, я этот список потом в запросе использую
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: 1sqlite. Пара вопросиков от начинающего по синтаксису
Ответ #5 - 30. Ноября 2010 :: 12:02
Печать  
Наеборот надо:
СписокДоков.ДобавитьЗначение( ":ВидСправочника.ТМЦ||",ВидДокумента);

ты же поди этот список юзверю показываешь ?
  
Наверх
 
IP записан
 
palpetrovich
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 31
Зарегистрирован: 23. Ноября 2010
Re: 1sqlite. Пара вопросиков от начинающего по синтаксису
Ответ #6 - 30. Ноября 2010 :: 12:13
Печать  
в общем - то что получилось, может пригодиться кому... новисы-ж не переведуться надеюсь Улыбка
запрос по разным видам документов с отбором по номенклатуре:
Код
Выбрать все
Функция ПолучитьСписокДоков(ИмяРеквизита)
	Перем Реквизит;
	СписокДоков.УдалитьВсе();
	Для Индекс=1 По Метаданные.Документ() Цикл
		ВидДокумента = Метаданные.Документ(Индекс).Идентификатор;

		Если Реквизит.Выбран()=1 Тогда
			Если Реквизит.Вид="" Тогда
				СписокДоков.ДобавитьЗначение(ВидДокумента, "");
			Иначе
				СписокДоков.ДобавитьЗначение(ВидДокумента, ":ВидСправочника."+Реквизит.Вид+"||");
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	Возврат СписокДоков;
КонецФункции

Процедура ОтборНоменклатурыСРазныхВидовДоков()
		ПолучитьСписокДоков("ТМЦ");
		базаДанных.Открыть(":memory:");
		базаДанных.УложитьОбъекты(ВыбрТМЦ,"ВыбрТовар",0,"ТМЦ");
		Запрос = базаДанных.НовыйЗапрос();
		запрос.ВыполнитьЗапрос("PRAGMA journal_mode = OFF");
		РеквизитВид = "";
		ТекВид = СписокДоков.ПолучитьЗначение(1, РеквизитВид);
		текст="
		|Select
		|    Таб.Документ [Док :Документ],
		|    Таб.Товар [Товар :Справочник]
		|From
		|(
		|    SELECT
		|    :ВидДокумента."+ТекВид+"||Док.iddoc Документ,
		|   " + РеквизитВид + "Док.ТМЦ Товар
		|    FROM [DocumentLines."+ТекВид+"] Док
		|	 WHERE Док.ТМЦ in (select val from ВыбрТовар)";
		Для инд=2 По СписокДоков.РазмерСписка() Цикл
			РеквизитВид = "";
			ТекВид = СписокДоков.ПолучитьЗначение(инд, РеквизитВид);
			текст=текст+"
			|UNION ALL
			|    SELECT
			|    :ВидДокумента."+ТекВид+"||Док.iddoc,
			|   " + РеквизитВид + "Док.ТМЦ
			|    FROM [DocumentLines."+ТекВид+"] Док
			|	 WHERE Док.ТМЦ in (select val from ВыбрТовар)";
		КонецЦикла;
		текст= текст + "
		|) Таб";
		Запрос.Подготовить(текст);
		Попытка
			тз=запрос.Выполнить();
		Исключение
			Сообщить(ОписаниеОшибки());
		КонецПопытки;
КонецПроцедуры
 

  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite. Пара вопросиков от начинающего по синтаксису
Ответ #7 - 01. Декабря 2010 :: 08:38
Печать  
Это все конечно хорошо, но блин будет ПОЛНОСТЬЮ шерститься каждая таблица строк заданных документов.
Для какой-либо разовой задачи сойдет, но для постоянного частого использования - я бы задумался о графе отбора.

Ну и на уложенную табличку товаров еще бы и индекс по val неплохо бы сделать. Хотя мож это и само сделается, надо код выполнения запроса смотреть.
  
Наверх
 
IP записан
 
palpetrovich
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 31
Зарегистрирован: 23. Ноября 2010
Re: 1sqlite. Пара вопросиков от начинающего по синтаксису
Ответ #8 - 02. Декабря 2010 :: 08:53
Печать  
orefkov писал(а) 01. Декабря 2010 :: 08:38:
Это все конечно хорошо, но блин будет ПОЛНОСТЬЮ шерститься каждая таблица строк заданных документов.
Для какой-либо разовой задачи сойдет, но для постоянного частого использования - я бы задумался о графе отбора.

Ну и на уложенную табличку товаров еще бы и индекс по val неплохо бы сделать. Хотя мож это и само сделается, надо код выполнения запроса смотреть.


я, собственно, делал это чисто для равития Подмигивание
а задачку подкинул кто-то с мисты и она формулировалась примероно так "найти выбранный товар во всех документах за период"

а про "графа отбора" ну конечно +1 Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать