|
v7: 1с++. Код от Fez-а, возвращет пустую таблицу | ☑ | ||
---|---|---|---|---|
0
palpetrovich
13.02.14
✎
11:25
|
Код от Fez-а, возвращет пустую таблицу. 1CPP.dll - в БИН-е и в КаталогеИБ. Ошибок не выдает
Перем RecordSet; Процедура ПриОткрытии() ЗагрузитьВнешнююКомпоненту("1CPP.dll"); DataBase = СоздатьОбъект("ODBCDatabase"); DataBase.Attach1C(); RecordSet = СоздатьОбъект("ODBCRecordSet"); RecordSet.SetDatabase(DataBase); КонецПроцедуры // ПриОткрытии Функция глПолучитьВыборку(ODBCRecordset = "",Текст, Отладка=0, Очищать = 1, ТЗ2 = "") Если ПустоеЗначение(ODBCRecordset) = 1 Тогда ODBCRecordset = Recordset; КонецЕсли; ODBCRecordset.Отладка(Отладка); Если ODBCRecordset.Открыть(Текст) = 0 Тогда Ошибка = ODBCRecordset.ПолучитьОписаниеОшибки(); Если ПустоеЗначение(Ошибка) = 0 Тогда Сообщить(Ошибка); КонецЕсли; КонецЕсли; Если ПустоеЗначение(ТЗ2) = 1 Тогда ТЗ2 = СоздатьОбъект("ТаблицаЗначений"); КонецЕсли; ODBCRecordset.ПолучитьРезультатыВ_ТЗ(ТЗ2, Очищать); ODBCRecordset.Закрыть(); Возврат ТЗ2; КонецФункции //====================================================================== Процедура Сформировать() Текст = " |SELECT * FROM $Справочник.Номенклатура"; ТЗ = глПолучитьВыборку(, Текст); ТЗ.ВыбратьСтроку(); КонецПроцедуры |
|||
1
Avganec
13.02.14
✎
11:27
|
(0) это точно v8?
|
|||
2
Ёпрст
13.02.14
✎
11:27
|
(0)
выкинуть ПолучитьРезультатыВ_ТЗ, пользовать ВыполнитьИнструкцию, наслаждаться. |
|||
3
palpetrovich
13.02.14
✎
11:31
|
прошу прощения, конечно это в7
(2) пробую |
|||
4
Ёпрст
13.02.14
✎
11:33
|
на вот, развлекайся
Процедура Сформировать() Попытка Запрос= СоздатьОбъект("ODBCRecordSet"); Исключение Если ЗагрузитьВнешнююКомпоненту("1CPP.dll")=0 Тогда Предупреждение("1cpp арбайтен"); Возврат; КонецЕсли; Запрос= СоздатьОбъект("ODBCRecordSet"); КонецПопытки ТекстЗапроса = " |SELECT * FROM $Справочник.Номенклатура"; ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); ТЗ.ВыбратьСтроку(); КонецПроцедуры |
|||
5
palpetrovich
13.02.14
✎
11:36
|
(2) не получается наслаждаться - Значение не представляет агрегатный объект (ВыбратьСтроку)
(4) База данных не установлена |
|||
6
Ёпрст
13.02.14
✎
11:38
|
(5) 1cpp какой версии хоть ?
У тя хоть скуль ? |
|||
7
palpetrovich
13.02.14
✎
11:39
|
(6) не, файловая :(
.наплевать и забыть? |
|||
8
palpetrovich
13.02.14
✎
11:40
|
+(7) смотреть в сторону 1sqlite ?
|
|||
9
palpetrovich
13.02.14
✎
11:42
|
версия 1cPP - 3.2.2.0
|
|||
10
Ёпрст
13.02.14
✎
11:43
|
(7) :))
а че ты хочешь тогда ? ODBCRecordSet предназначен для скуля.. Тебе, либо смотреть в сторону оледб либо в сторону 1sqlite |
|||
11
Ёпрст
13.02.14
✎
11:45
|
+10
первое работает шустрее при правильном тексте запроса с включением индексов + позволяет делать инсерт/апдейт/делете + запрос к сторонней базе второе, позволяет писать более простой текст запроса (не надо писать огромные выражения для попадания в индекс) + имеет удобные методы для укладки ТЗ + свои специфические функции + есть поставщик данных для табличного поля. |
|||
12
Ёпрст
13.02.14
✎
11:47
|
+ запрос к оледб в монопольном режиме будет работать, только с заплаткой от hogik, либо с правленным провайдером от ужаста,
второе работает и так + позволяет хранить данные в своей базе sqlite.. |
|||
13
palpetrovich
13.02.14
✎
11:50
|
(12) спасибо!
|
|||
14
Ёпрст
13.02.14
✎
12:07
|
пример нннннннада ?
|
|||
15
palpetrovich
13.02.14
✎
16:18
|
(14) таки нннннннада! :)
...че-т Номенклатура не отбирается, видть УложитьОбъекты я не так пользую Перем базаДанных, запрос; Процедура ПриОткрытии() Попытка базаДанных = СоздатьОбъект("SQLiteBase"); Исключение ЗагрузитьВнешнююКомпоненту("1sqlite.dll"); базаДанных = СоздатьОбъект("SQLiteBase"); КонецПопытки; КонецПроцедуры Процедура Сформировать() СписокТоваров = СоздатьОбъект("СписокЗначений"); СпрТовары = СоздатьОбъект("Справочник.Номенклатура"); СпрТовары.ИспользоватьРодителя(ВыбТовар); СпрТовары.ВыбратьЭлементы(); Пока СпрТовары.ПолучитьЭлемент() = 1 Цикл Если СпрТовары.ПометкаУдаления()=1 Тогда Продолжить; КонецЕсли; Если СпрТовары.ЭтоГруппа()=1 Тогда Продолжить; КонецЕсли; СписокТоваров.ДобавитьЗначение(СпрТовары.ТекущийЭлемент()); КонецЦикла; базаДанных.Открыть(":memory:"); //базаДанных.УложитьОбъекты(ВыбТовар,"ТаблицаТоваров",0,"Номенклатура"); базаДанных.УложитьОбъекты(СписокТоваров,"ТаблицаТоваров"); Запрос = базаДанных.НовыйЗапрос(); запрос.ВыполнитьЗапрос("PRAGMA journal_mode = OFF"); ТекстЗапроса=" |Select | Рег.Товар [Товар :Справочник.Номенклатура] | ,SUM(Рег.НачОст) [НачОст :Число] | ,SUM(Рег.Приход) [Приход :Число] | ,SUM(Рег.Расход) [Расход :Число] | ,SUM(Рег.НачОст+Рег.Приход-Рег.Расход) [КонОст :Число] |From | ( | SELECT | Итоги.Товар Товар | ,Итоги.ОстатокТовара НачОст | ,0 Приход | ,0 Расход | FROM | [РегистрИтоги.ПартииТоваров] Итоги | | WHERE | Итоги.period = @ПредПериод | AND Итоги.Товар in (select val from ТаблицаТоваров) | | UNION ALL | SELECT | Движения.Товар | ,Движения.ОстатокТовара * (1 - Движения.debkred * 2) | ,0 | ,0 | FROM | [Регистр.ПартииТоваров] Движения | INNER Join [Журнал] Жур ON Жур.iddoc = Движения.iddoc and Жур.date BETWEEN @НачПериод And @КонПериод | UNION ALL | SELECT | Движения2.Товар | ,0 | ,Движения2.ОстатокТовара * (1 - Движения2.Debkred) | ,Движения2.ОстатокТовара * Движения2.Debkred | FROM | [Регистр.ПартииТоваров] Движения2 | INNER Join [Журнал] Жур2 ON Жур2.iddoc = Движения2.iddoc and Жур2.date BETWEEN @Дата1 And @Дата2 |) Рег |Inner join [Справочник.Номенклатура] Номенклатура on Рег.Товар = Номенклатура.id |Group by | Рег.Товар |"; НачПериод = НачМесяца(ВыбНачПериода); ПредПериод = НачМесяца(НачПериод-1); Запрос.Подготовить(ТекстЗапроса); Запрос.УстановитьПараметр("@ПредПериод",ПредПериод); Запрос.УстановитьПараметр("@НачПериод", НачПериод); Запрос.УстановитьПараметр("@КонПериод", ВыбНачПериода-1); //для вычисления НачОст Запрос.УстановитьПараметр("@Дата1", ВыбНачПериода); Запрос.УстановитьПараметр("@Дата2", ВыбКонПериода); тз = Запрос.Выполнить(); тз.ВыбратьСтроку(); КонецПроцедуры |
|||
16
Ёпрст
13.02.14
✎
16:22
|
(15) конечно не отбираются.. ты же фильтр только на итоги поставил, а на движения болт забил..
|
|||
17
Ёпрст
13.02.14
✎
16:23
|
+ нафига делаешь параметизированный запрос ?
Ты этот код многократно шо ле выполнять собираешься, с разными параметрами ? |
|||
18
Ёпрст
13.02.14
✎
16:25
|
+ писать НачПериод = НачМесяца(ВыбНачПериода); не совсем верно.. лучше привязываться к ПолучитьНачПериода объекта метадаворк, чтоб не зависеть от периодичности хранения останков
|
|||
19
palpetrovich
13.02.14
✎
16:30
|
(16) эт не болт, эт отсутсвие знаний
(17) ну как, как ользователь тыцнет на кнопку - так и долежн выполниться (18) спасиб |
|||
20
Ёпрст
13.02.14
✎
16:32
|
(19)
2. для этого используй обычный запрос, не надо там Подготовить, собаки-амперсанды и УстановитьПараметр, просто имя параметра через двоеточие и Запрос.Подставлять |
|||
21
Ёпрст
13.02.14
✎
16:33
|
+20 на регистр воткни галку быстрая обработка движений и выкини соедиение с журналом - будет быстрее.
|
|||
22
palpetrovich
13.02.14
✎
16:34
|
(20) а УстановитьПараметр -тогда как? или вообще не нужен?
|
|||
23
Salimbek
13.02.14
✎
16:42
|
(22) Не нужен
|
|||
24
Ёпрст
13.02.14
✎
16:57
|
(22) заместо него - подставлять ()
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |