Переключение на Главную Страницу Страницы: 1 ... 77 78 [79]  ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite (число прочтений - 459371 )
zelenprog
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 03. Июня 2022
Пол: Мужской
Re: 1sqlite
Ответ #1170 - 23. Августа 2023 :: 13:30
Печать  

Есть вот такой простой запрос - контрагенты выбираются из указанных групп:

Код (SQL)
Выбрать все
    "....
	|FROM [Справочник.Контрагенты] as СпрКонтрагенты
	|WHERE (СпрКонтрагенты.IsMark <> '*')
	|       AND (СпрКонтрагенты.IsFolder != '1')
	|       AND (СпрКонтрагенты.ParentID IN (SELECT val FROM врГруппыКонтрагентов))
	|";
 



Список групп сначала заполняется в ТаблицеЗначений. А перед выполнением запроса выполняется "УложитьОбъекты".

Нужно, чтобы в выборку попали контрагенты, которые лежат в указанных группах, а также контрагенты из "корня" справочника (которые не лежат в группах). Как это лучше сделать?
Добавить в ТЗ, которая укладывается во временную таблицу, какую-то пустую ссылку на группу? Как правильно указать эту пустую ссылку?

ТЗ.Группа = ???
  
Наверх
 
IP записан
 
Ветер в поле
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 06. Октября 2010
Пол: Мужской
Re: 1sqlite
Ответ #1171 - 25. Августа 2023 :: 09:54
Печать  
zelenprog писал(а) 23. Августа 2023 :: 13:30:
Есть вот такой простой запрос - контрагенты выбираются из указанных групп:

Код (SQL)
Выбрать все
    "....
	|FROM [Справочник.Контрагенты] as СпрКонтрагенты
	|WHERE (СпрКонтрагенты.IsMark <> '*')
	|       AND (СпрКонтрагенты.IsFolder != '1')
	|       AND (СпрКонтрагенты.ParentID IN (SELECT val FROM врГруппыКонтрагентов))
	|";
 



Список групп сначала заполняется в ТаблицеЗначений. А перед выполнением запроса выполняется "УложитьОбъекты".

Нужно, чтобы в выборку попали контрагенты, которые лежат в указанных группах, а также контрагенты из "корня" справочника (которые не лежат в группах). Как это лучше сделать?
Добавить в ТЗ, которая укладывается во временную таблицу, какую-то пустую ссылку на группу? Как правильно указать эту пустую ссылку?

ТЗ.Группа = ???


Это-то тривиально. Достаточно в список групп добавить пустой элемент через ПолучитьПустоеЗначение("Справочник.Контрагенты")
  
Наверх
 
IP записан
 
Arbuz
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 06. Февраля 2019
Re: 1sqlite
Ответ #1172 - 25. Августа 2023 :: 13:18
Печать  
Djelf писал(а) 22. Августа 2023 :: 11:29:
проще скриптик нарисовать...

Я примерно так и сделал - монтирую zip'ы через pismo file mount - костыльно, но меня устраивает.
  
Наверх
 
IP записан
 
zelenprog
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 03. Июня 2022
Пол: Мужской
Re: 1sqlite
Ответ #1173 - 28. Августа 2023 :: 13:29
Печать  
Ветер в поле писал(а) 25. Августа 2023 :: 09:54:
Достаточно в список групп добавить пустой элемент через ПолучитьПустоеЗначение("Справочник.Контрагенты")

Спасибо, получилось.
  
Наверх
 
IP записан
 
zelenprog
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 03. Июня 2022
Пол: Мужской
Re: 1sqlite
Ответ #1174 - 29. Августа 2023 :: 06:17
Печать  
Подскажите, как правильно выполнять запрос из нескольких действий?
Надо выполнить следующие команды:

Код (SQL)
Выбрать все
1) "create table if not exists ИдентификаторыОбмена (GUID83 varchar(50), ID77 varchar(50))"
2) "insert into ИдентификаторыОбмена (GUID83, ID77) values (@GUID83, @ID77)"
 



Это надо делать в одном запросе?
Например, вот так правильно будет?

Код (C++)
Выбрать все
лТекстЗапроса1 = "create table if not exists ИдентификаторыОбмена (GUID83 varchar(50), ID77 varchar(50))";
лТекстЗапроса2 = "insert into ИдентификаторыОбмена (GUID83, ID77) values (@GUID83, @ID77)";
лТекстЗапросаОбщий = лТекстЗапроса1 + Символы.ПС + лТекстЗапроса2;

лБаза = _УстановитьСоединение();
Запрос = лБаза.НовыйЗапрос();
Запрос.Подготовить(лТекстЗапросаОбщий);
Запрос.УстановитьПараметр("@GUID83", пGUID83);
Запрос.УстановитьПараметр("@ID77", пID77);
лТЗ_РезультатЗапроса = Запрос.Выполнить();
 



Или лучше это сделать разными запросами?
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #1175 - 29. Августа 2023 :: 09:18
Печать  
Да не работает оно так, не работает!
тз = ВыполнитьЗапрос("select 1; select 2");
и посмотри что в тз будет...
  
Наверх
www  
IP записан
 
zelenprog
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 03. Июня 2022
Пол: Мужской
Re: 1sqlite
Ответ #1176 - 27. Декабря 2023 :: 13:35
Печать  
Что-то не работает в запросе фильтр по дате документа.

Вот такой запрос без фильтра по датам - работает.
А при использовании условий и установке параметров - ничего не возвращает:

Код (SQL)
Выбрать все
	|SELECT
	|	idx_date_time_iddoc [Ключ],
	|	iddoc 		[Док :Документ],
	|	iddocdef	[Док_вид :ВидДокументаПредставление],
	|	date		[ДатаДок :Дата],
	|	docno		[НомерДок],
	|	closed		[Флаг]
	|FROM Журнал
	|WHERE (1 = 1)
	|      ::Условие_по_НачДата
	|      ::Условие_по_КонДата
	|";

	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "::Условие_по_НачДата", "AND (Журнал.Date >= @НачДата)");
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "::Условие_по_КонДата", "AND (Журнал.Date <= @КонДата)");

	лЗапрос.УстановитьПараметр("@НачДата", НачДата);
	лЗапрос.УстановитьПараметр("@КонДата", КонДата);
 



"НачДата" и "КонДата" - это стандартные реквизиты на форме обработки для выбора периода.

Что неправильно?
Как надо устанавливать параметр - дату документа?
  
Наверх
 
IP записан
 
nicesc
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Зарегистрирован: 13. Июня 2009
Пол: Мужской
Re: 1sqlite
Ответ #1177 - 27. Декабря 2023 :: 17:09
Печать  
|FROM
|      Журнал
|WHERE
|      DATE BETWEEN :ДатаС AND :ДатаПо";

Запрос.Подставлять("ДатаС", едДатаС);
     Запрос.Подставлять("ДатаПо", едДатаПо);
     Запрос.ВыполнитьЗапрос(ТекстЗапроса);
  
Наверх
 
IP записан
 
zelenprog
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 03. Июня 2022
Пол: Мужской
Re: 1sqlite
Ответ #1178 - 28. Декабря 2023 :: 05:37
Печать  
nicesc писал(а) 27. Декабря 2023 :: 17:09:
|FROM
|      Журнал
|WHERE
|      DATE BETWEEN :ДатаС AND :ДатаПо";

Запрос.Подставлять("ДатаС", едДатаС);
     Запрос.Подставлять("ДатаПо", едДатаПо);
     Запрос.ВыполнитьЗапрос(ТекстЗапроса);


Сделал так.
Выдается ошибка:
"лЗапрос.Подготовить(пТекстЗапроса);
: Ошибка подстановки текстового параметра НачДата - Неизвестный параметр".
  
Наверх
 
IP записан
 
zelenprog
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 03. Июня 2022
Пол: Мужской
Re: 1sqlite
Ответ #1179 - 28. Декабря 2023 :: 05:53
Печать  
Убрал у себя строку ""лЗапрос.Подготовить(пТекстЗапроса)" и все сработало!

Хм...
А в каких случая надо делать "Запрос.Подготовить", а в каких не надо?
Почему в моем случае эта команда не нужна?

И есть ли разница как указывается параметр: через "@НачДата" или ":НачДата"?
Везде в примерах выше в этой теме параметры воде бы указываются через "@", то есть например "@НачДата".
  
Наверх
 
IP записан
 
nicesc
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Зарегистрирован: 13. Июня 2009
Пол: Мужской
Re: 1sqlite
Ответ #1180 - 29. Декабря 2023 :: 06:18
Печать  
Подготовить(ТекстЗапроса). Метод на основе переданного текста подготавливает запрос. Затем впоследствии можно неоднократно его выполнить методом SQLiteQuery::Выполнить, при необходимости указывая различные sql-параметры методом SQLiteQuery::УстановитьПараметр. При возникновении ошибки генерирует исключение.
Если же необходимо несколько раз выполнять однотипные запросы, но в которых нужно только менять некоторые входные данные, используют параметризированные запросы: подготовленные запросы, в которых часть запроса заменена sql-параметром. В тексте запроса они обозначаются следующими способами:
? - неименованный параметр, установка возможна только по индексу.
?Число - неименованный параметр, установка возможна по индексу Число.
$ИмяПараметра или @ИмяПараметра - именованный параметр, установка возможна по имени.

Синтаксис: Подставлять(ИмяПарметра, Значение)
Описание: Устанавливает значение для текстового параметра.
Текстовые параметры - фрагменты текста запроса вида:
:ИмяПараметра[*~]



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


1C++ rocks!

Сообщений: 42
Зарегистрирован: 03. Июня 2022
Пол: Мужской
Re: 1sqlite
Ответ #1181 - 29. Декабря 2023 :: 12:12
Печать  
Спасибо за разъяснение. Но... Я так и не понял.

nicesc писал(а) 29. Декабря 2023 :: 06:18:
Подготовить(ТекстЗапроса). Метод на основе переданного текста подготавливает запрос. Затем впоследствии можно неоднократно его выполнить методом SQLiteQuery::Выполнить, при необходимости указывая различные sql-параметры методом SQLiteQuery::УстановитьПараметр.

Если же необходимо несколько раз выполнять однотипные запросы, но в которых нужно только менять некоторые входные данные, используют параметризированные запросы: подготовленные запросы, в которых часть запроса заменена sql-параметром. В тексте запроса они обозначаются следующими способами:
? - неименованный параметр, установка возможна только по индексу.
?Число - неименованный параметр, установка возможна по индексу Число.
$ИмяПараметра или @ИмяПараметра - именованный параметр, установка возможна по имени.

В чем разница между указанными двумя "сценариями"?
Разве в первом случае выполняемые запросы не будут "однотипными"?

Во втором случае параметры задается через "@" или "$".
А как задаются параметры в первом случае?

nicesc писал(а) 29. Декабря 2023 :: 06:18:
Синтаксис: Подставлять(ИмяПарметра, Значение)
Описание: Устанавливает значение для текстового параметра.
Текстовые параметры - фрагменты текста запроса вида:
:ИмяПараметра[*~]

А это уже какой-то третий вариант?
Вроде бы к первым двум "сценариям" этот метод не подходит. Ко второму он не подходит, так как название параметра задается через ":", а во втором случае параметр задается через "@".
  
Наверх
 
IP записан
 
zelenprog
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 03. Июня 2022
Пол: Мужской
Re: 1sqlite
Ответ #1182 - 13. Марта 2024 :: 11:43
Печать  
Djelf писал(а) 04. Июня 2023 :: 11:58:
....
У мне так все интеграции и сделаны, внешняя база в sqlite, поле ID там есть, типизация данных из базы sqlite в 7.7 работает.
...


Здравствуйте!
Интересует выгрузка-загрузка документа через sqlite-файл между идентичными базами.
Покажите пожалуйста пример, как работает типизация по ID из внешней базы?
И как нужно записать этот ID во внешнюю базу, чтобы эта типизация сработала?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 77 78 [79] 
ОтправитьПечать