Имя: Пароль:
1C
1C 7.7
v7: Запрос 1sqlite? что-то не так...
0 Pro100
 
26.06.14
14:57
Здравствуйте.
Подскажи что не так в запросе? выдает пустую таблицу...


Попытка
  базаДанных = СоздатьОбъект("SQLiteBase");
Исключение
  ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
  базаДанных = СоздатьОбъект("SQLiteBase");
КонецПопытки;
базаДанных.Открыть(":memory:");
лЗапрос = базаДанных.НовыйЗапрос();
СпГруппы = СоздатьОбъект("СписокЗначений");
СпГруппы.ДобавитьЗначение(рд_ГруппаНоменклатуры.ТекущийЭлемент());
    базаДанных.УложитьОбъекты(СпГруппы,"ВыбрТовар",0,"Номенклатура");
    лЗапрос.ВыполнитьЗапрос("PRAGMA journal_mode = OFF");
    текст="
    |SELECT
    |     РегТовар.Склад        [Склад :Справочник.Склады]
    |    ,РегТовар.Номенклатура [Товар :Справочник.Номенклатура]
    |    ,РегТовар.period
    |    ,РегТовар.Количество
    |FROM   [РегистрИтоги.ОстаткиТМЦ] РегТовар
    |WHERE    РегТовар.period = :ВыбДата
    |    AND РегТовар.Склад = :ВыбСклад
    |   AND РегТовар.Номенклатура in (select val from ВыбрТовар)
    |";
лЗапрос.Подставлять("ВыбСклад", рд_Склад);
лЗапрос.Подставлять("ВыбДата", рд_Дата);
лЗапрос.ВыполнитьЗапрос(текст).ВыбратьСтроку(,"тзОстатков");
1 Ёпрст
 
26.06.14
15:02
не совпадают типы
2 КонецЦикла
 
26.06.14
15:02
Добавляй условия по одному, косяк где-то *тут*
3 Ёпрст
 
26.06.14
15:02
что есть рд_Склад,рд_Дата и какого они типа ?
что есть рд_ГруппаНоменклатуры ?
4 Pro100
 
26.06.14
15:05
(3)
рд_Склад = Справочник.Склады
рд_Дата = Дата
рд_ГруппаНоменклатуры = Справочник.Номенклатура
на форме выбираю элемент справочника склады,
дата - выбираю дату например сегодняшнее число
группа номенклатуры - выбираю из справочника номенклатура группу.
и в запросе чтобы показал остатки по всем элементам из этой группы
5 Ёпрст
 
26.06.14
15:07
тогда см (2)
Ну или, тупо остатков нема
6 Ёпрст
 
26.06.14
15:07
а блин..
7 Ёпрст
 
26.06.14
15:08
дата - выбираю дату например сегодняшнее число
8 Ёпрст
 
26.06.14
15:08
вот это и есть, п...ц!
9 Ёпрст
 
26.06.14
15:08
:)))
10 КонецЦикла
 
26.06.14
15:08
Епать... какое-же сегодняшнее?
Посмотри какие даты в RG
11 Pro100
 
26.06.14
15:12
(10)
в RG тут даты разные... есть даже 2012 года какие-то записи.
12 Ёпрст
 
26.06.14
15:12
Если нужны итоги на ТА - то втыкай дату как
мд = СоздатьОбъект("MetaDataWork");    Запрос.Подставлять("ВыбДата",мд.ПолучитьНачПериода(ПолучитьДатуТА()));

ежели на выбранную, то тут нужно еще запрос к табличке движений лепить
13 Ёпрст
 
26.06.14
15:14
на вот, занимайся
Процедура Сформировать()
    
    
    ТекстЗапроса="
    |Select
    |   Рег.Номенклатура [Номенклатура :Справочник.Номенклатура]
    |   ,Рег.Док [Док :Документ]
    |   ,SUM(Рег.НачОст) [НачОст $Число]
    |   ,SUM(Рег.Приход) [Приход $Число]
    |   ,SUM(Рег.Расход) [Расход $Число]
    |   ,SUM(Рег.НачОст+Рег.Приход-Рег.Расход) [КонОст $Число]
    |From
    |    (
    |    SELECT
    |      Итоги.Номенклатура Номенклатура
    |     ,null Док
    |        ,Итоги.Количество НачОст
    |        ,0 Приход
    |        ,0 Расход
    |    FROM
    |        [РегистрИтоги.ОстаткиТМЦ] as Итоги
    |
    |    WHERE
    |        Итоги.period = :ПредПериод
    |   UNION ALL
    |    SELECT
    |         Движения.Номенклатура
    |       ,null
    |        ,Движения.Количество * (1 - Движения.debkred * 2)
    |        ,0
    |        ,0
    |    FROM
    |        [Регистр.ОстаткиТМЦ] AS Движения
    |   -- это расскоментить, если нет галки
    |   --INNER Join [Журнал] Жур ON Жур.iddoc = Движения.iddoc and Жур.date BETWEEN :НачПериод And :КонПериод
    |    WHERE --это если есть галка быстрая обработка движений
    |         Движения.date BETWEEN :НачПериод And :КонПериод
    |    UNION ALL
    |    SELECT
    |         Движения2.Номенклатура
    |       ,Движения2.iddocDef||Движения2.iddoc
    |        ,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
    |
    |    WHERE --это если есть галка быстрая обработка движений
    |        Движения2.date BETWEEN :Дата1 And :Дата2
    |) Рег
    |
    |Group by Рег.Номенклатура,Рег.Док
    |";
    Попытка
        база = СоздатьОбъект("SQLiteBase");
    Исключение
        ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
        база = СоздатьОбъект("SQLiteBase");
    КонецПопытки;
    
    // Откроем пустую базу данных в памяти
    база.Открыть(":memory:");
    запрос = база.НовыйЗапрос();    
    
    мд = СоздатьОбъект("MetaDataWork");
    НачПериод = мд.ПолучитьНачПериода(НачДата);//начало периода
    ПредПериод = мд.ПолучитьНачПериода(НачПериод-1);//предыдущее начало периода останков
    Запрос.Подставлять("ПредПериод",ПредПериод);
    Запрос.Подставлять("НачПериод",НачПериод);
    Запрос.Подставлять("КонПериод",НачДата-1);//для вычисления НачОст
    Запрос.Подставлять("Дата1",НачДата);
    Запрос.Подставлять("Дата2",КонДата);
    ТЗ = запрос.ВыполнитьЗапрос(ТекстЗапроса);
    ТЗ.ВыбратьСтроку();
    
КонецПроцедуры // Сформировать
14 Ёпрст
 
26.06.14
15:14
Это останки и обороты.. нужны останки - переделаешь сам
15 Pro100
 
26.06.14
15:15
уууухххх,
щас буду смотреть,  спасиб!
16 КонецЦикла
 
26.06.14
15:33
(14) Давно хотел спросить...
Почему ты всегда пишешь "останки", а не "остатки"?
17 Ёпрст
 
26.06.14
15:38
(16) привычка, это как пофигуратор
18 Ёпрст
 
26.06.14
15:39
Останки - еще году в 2000.. так выражалась сотрудница у нас на работе
19 Ёпрст
 
26.06.14
15:39
вот прилипло
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший