Подскажите пожалуйста, как с помощью 1sqlite правильно организовать выборку всех документов или документов нескольких видов с наложением условий на реквизиты и упорядочиванием по позиции документа (как в штатных журналах), и вывести результат в ТП.
Попробовал следующий код :
Процедура ПослеОткрытия()
БазаДанных = СоздатьОбъект("SQLiteBase");
// Откроем пустую базу данных в памяти
БазаДанных.Открыть(":memory:");
// Создадим выполнитель запросов.
Запрос = БазаДанных.НовыйЗапрос();
// Так как база в памяти, то журналирование нам ни к чему, только зря будет отнимать время
Запрос.ВыполнитьЗапрос("PRAGMA journal_mode = OFF");
// Подключим таблицы документов заданных в конфигурации к SQLite
// и составим запрос
Запрос.ВыполнитьЗапрос("create virtual table Накл_ТД using dbeng(Документ.ТранзитнаяДистрибьютерская)");
Запрос.ВыполнитьЗапрос("create virtual table Накл_ТДС using dbeng(Документ.ТранзитнаяДистрибьютерскаяСуммовая)");
Запрос.ВыполнитьЗапрос("create virtual table Накл_ЗМ using dbeng(Документ.ЗакупкаМатериалов)");
ТекстЗапроса="
|select IDDOC [Ключ],
|IDDOC [Документ $Документ.ТранзитнаяДистрибьютерская],
|Поставщик [Поставщик $Справочник.Клиенты]
|from Накл_ТД
|
|UNION ALL
|
|select IDDOC [Ключ],
|IDDOC [Документ $Документ.ЗакупкаМатериалов],
|Поставщик [Поставщик $Справочник.Клиенты]
|from Накл_ЗМ
|
|UNION ALL
|
|select IDDOC [Ключ],
|IDDOC [Документ $Документ.ТранзитнаяДистрибьютерскаяСуммовая],
|Поставщик [Поставщик $Справочник.Клиенты]
|from Накл_ТДС
|
|where 1=1
|";
АтрФормы=СоздатьОбъект("Форма");
АтрФормы.УстановитьФорму(Форма);
ТабличноеПоле=АтрФормы.СоздатьЭлементУправления("ТабличноеПоле","РеквизитТП");
Колонки=ТабличноеПоле.Колонки;
//Добавление Колонки "Ключ"
Колонка=Колонки.Добавить("Ключ");
Колонка.Данные="Ключ";
Колонка.Заголовок="Ключ";
Колонка.Ширина=12;
Колонка.ГоризонтальноеВыравнивание=1;
//Добавление прочих Колонок
Колонка=Колонки.Добавить("Документ");
Колонка.Данные="Документ";
Колонка.Заголовок="Документ";
Колонка.Ширина=120;
Колонка.ГоризонтальноеВыравнивание=1;
Колонка=Колонки.Добавить("Поставщик");
Колонка.Данные="Поставщик";
Колонка.Заголовок="Поставщик";
Колонка.Ширина=30;
Колонка.ГоризонтальноеВыравнивание=2;
//Опции отображения
ТабличноеПоле.ТаймаутБыстрогоПоиска=1;
ТабличноеПоле.РежимВыделенияСтроки=1;
ТабличноеПоле.ИзменятьПозициюКолонок=0;
ТабличноеПоле.ТаймаутОбновления=0;
//ТабличноеПоле.НачальноеПредставление=1;
Поставщик=СоздатьОбъект("SQLiteDataProvider");
Поставщик.УстановитьБД(БазаДанных);
Поставщик.УстановитьТекстЗапроса(ТекстЗапроса,"[Ключ]");
Поставщик.Отладка(32,1);
ТабличноеПоле.ПоставщикДанных=Поставщик;
КонецПроцедуры
Попытка привела к странному результату : один и тот же документ в ТП стал повторяться по несколко раз в разных строках (изображение прилагаю).
Если из запроса убрать UNION ALL и оставить один select то вроде
выдается нормальный результат, но только по определенному виду документов, а необходимо по всем.
Работаю на ДБФ-версии 1С, 1sqlite Версия 1.0.1.9, 1CPP 3.0.1.22