Имя: Пароль:
1C
1C 7.7
v7: Помогите с прямым запросом
0 Андрей_Андреич
 
naïve
13.04.15
12:35
Имеется табличка с полями Товар, Состав, МожноСобрать.
Хочется для каждого из Товар определить минимум МожноСобрать.
Как? Чую что одной фразой. Заранее благодарен.
1 trad
 
13.04.15
12:51
select Товар, min(МожноСобрать) from Таблица group by Товар
2 Андрей_Андреич
 
naïve
13.04.15
12:57
(1) В том и дело что не срабатывает - сам диву даюсь
3 Ёпрст
 
гуру
13.04.15
12:57
ну или так еще, если и состав нужен

select
   Таблица.Товар,
   Таблица.Состав,
   (select min(Таб.МожноСобрать) from Таблица as Таб where Таб where Таб.Товар = Таблица.Товар) as МожноСобрать
from Таблица as таблица
4 Ёпрст
 
гуру
13.04.15
12:58
ну там еще гроупбай воткнешь в подзапрос
5 Андрей_Андреич
 
naïve
13.04.15
13:00
(3) Состав не нужен - просто исходя из норм определяю наличие/норму для каждого из комплектующих. Потом задача выбрать минимум.
Я уже несколько лет назад мудрил - не получилось. Сейчас вернулся к этому блоку и опять не работает.
Чудеса короче.
6 trad
 
13.04.15
13:04
что значит не срабатывает? ошибка, неверный результат? что конкретно?
7 фобка
 
13.04.15
13:06
Select т.товар, min(т.можнособрать) from таб т group by т.товар
8 Андрей_Андреич
 
naïve
13.04.15
13:06
(6) неверный результат. в наборе из двух записей с МожноСобрать = 0 и МожноСобрать = 3 что Min, что Max возвращает 3
9 фобка
 
13.04.15
13:06
(1) о это уже было
10 фобка
 
13.04.15
13:08
(8) null может?
11 trad
 
13.04.15
13:08
(8) значит там не 0, а null
12 Ёпрст
 
гуру
13.04.15
13:08
(8) ты видишь разный товар с одинаковым представлением. Выведи, хотя бы код его или любой другой признак.
13 фобка
 
13.04.15
13:09
(11) тут я уже первый)
14 trad
 
13.04.15
13:13
(13) 1:1
15 trad
 
13.04.15
13:14
select Товар, min(isnull(МожноСобрать,0)) from Таблица group by Товар
16 Андрей_Андреич
 
naïve
13.04.15
13:16
(15) Ура - спасибо!
17 Андрей_Андреич
 
naïve
13.04.15
13:17
(15) Вдогонку - что такое isnull?
Совсем совесть потерял :(
18 trad
 
13.04.15
13:18
(17)
isnull(МожноСобрать,0)
<==>
case when МожноСобрать is null then 0 then МожноСобрать end
19 trad
 
13.04.15
13:19
опечатка
case when МожноСобрать is null then 0 else МожноСобрать end
20 Андрей_Андреич
 
naïve
13.04.15
13:20
(18) То есть то что я считал нулем было null. печально - извилины все хуже скрипят
21 Ёпрст
 
гуру
13.04.15
13:32
(20) null он и есть null... Смотришь чем ? 1с-иной ?
22 Андрей_Андреич
 
naïve
13.04.15
13:32
(21) угу
23 Эльниньо
 
13.04.15
15:55
ТекстЗапроса = "
    |SELECT
    |right(Рег.ПозицияДокумента,9) as [Док $Документ],
    |Рег.ВидДокумента  as Док_вид,
    |Рег.Товар as [Товар $Справочник.Номенклатура],
//...    
    |FROM $РегистрОбороты.Продажи(:НачДата,:КонДата, Документ) as Рег
//...
Нуно вытянуть из Товар реквизит "Матрица". Подозреваю что, где то так:
//    |INNER JOIN
    //|LEFT JOIN
но туплю
Памажите кто может. Сам я не местный...
24 trad
 
13.04.15
16:14
select
...
$Номенклатура.Матрица
FROM $РегистрОбороты.Продажи(:НачДата,:КонДата, Документ)  LEFT JOIN $Справочник.Номенклатура Номенклатура (nolock) on Номенклатура.id = Рег.Товар
25 trad
 
13.04.15
16:15
с переносом

select
...
$Номенклатура.Матрица
FROM $РегистрОбороты.Продажи(:НачДата,:КонДата, Документ)
LEFT JOIN $Справочник.Номенклатура Номенклатура (nolock) on Номенклатура.id = Рег.Товар
26 Эльниньо
 
13.04.15
16:35
|Рег.КолвоБазОборот Количество,
    |$Номенклатура.Матрица
    |FROM $РегистрОбороты.Продажи(:НачДата,:КонДата, Документ)
    |LEFT JOIN $Справочник.Номенклатура Номенклатура (nolock) on Номенклатура.id = Рег.Товар    
    |WHERE 1=1 and 2=2 and 3=3 and 4=4";

Incorrect syntax near the keyword 'LEFT'.
27 leshikkam
 
13.04.15
16:43
|FROM $РегистрОбороты.Продажи(:НачДата,:КонДата, Документ) as Рег
28 Эльниньо
 
13.04.15
16:57
Тьху ты! Потерял где-то по дороге.
Спасибо
29 Эльниньо
 
13.04.15
16:58
Ещё пичалька.
Реквизит Матрица - периодический
30 Ёпрст
 
гуру
13.04.15
17:04
Гы..
31 Ёпрст
 
гуру
13.04.15
17:05
Если скуль, смотреть ПоследнееЗначение.
Если дбф - писать ручонками соединение к 1sconst
32 Эльниньо
 
13.04.15
17:07
Скуль.
Как получить и присобачить значение на КонДата присобаченного джойном реквизита?
33 Ёпрст
 
гуру
13.04.15
17:08
и будет у тебя


|Рег.КолвоБазОборот Количество,
|$ПоследнееЗначение.Номенклатура.матрица(Рег.Товар,:ВыбДата)
|FROM $РегистрОбороты.Продажи(:НачДата,:КонДата, Документ)
|WHERE 1=1 and 2=2 and 3=3 and 4=4";

$ПоследнееЗначение.{<ИмяСправочника> | Константа}.{<ИмяРеквизита | ИмяКонстанты>}(
        <ИдОбъекта>, <Дата>[, <Время>[, <ИДДокумента>]]
34 Ёпрст
 
гуру
13.04.15
17:09
И джойнить номенклатуру не надо будет..
ЗЫ: внизу - справка по синтаксису..
35 trad
 
13.04.15
17:10
as Рег
36 Эльниньо
 
13.04.15
17:11
Йййееессс!!!
Спасибо!!!
37 trad
 
13.04.15
17:12
и в параметрах регистра :КонДата~
иначе обороты за КонДата не попадут
38 trad
 
13.04.15
17:13
если конечно при установке параметра она не +1
39 Эльниньо
 
13.04.15
17:14
Спс
40 Эльниньо
 
15.04.15
11:20
Аппетит приходит во время еды.

Слышал краем уха, что РСом можно подцепится к другой базе и сделать запрос.
Можно ли вымученный с вашей помощью запрос сделать к чужой базе?
41 Ёпрст
 
гуру
15.04.15
11:25
Как нефик делать.. даже , типизацию, при желании
42 Андрей_Андреич
 
naïve
15.04.15
11:36
(41) А вот еще вопросик - похоже, вложенные Group By невозможны? Который раз на это натыкаюсь.
43 Эльниньо
 
15.04.15
11:38
(41) Намекни
44 Ёпрст
 
гуру
15.04.15
11:40
(42) всё можно
45 Ёпрст
 
гуру
15.04.15
11:42
(43) если на том же скуле - то просто в тексте запроса указывай имя схемы имя базы имя таблицы через точку, если база на другом скуль сервере - то просто прилинкуй его и всё тоже самое.
46 Ёпрст
 
гуру
15.04.15
11:42
(42) и.. что ты понимаешь под вложенными гроупбай ?
В подзапросе ? можно
47 Андрей_Андреич
 
naïve
15.04.15
11:43
Ни разу не получалось - все удивлялся. Может что не так делаю. Из-за этого у меня кучу мест через ж написано с записью в промежуточные таблицы. Попробую простенький сварганить еще разок.
48 Эльниньо
 
15.04.15
11:47
(45) Что-то типа:

|Base1.Рег.КолвоБазОборот Количество,
|Base1.$ПоследнееЗначение.Номенклатура.матрица(Рег.Товар,:ВыбДата)
|FROM Base1.$РегистрОбороты.Продажи(:НачДата,:КонДата, Документ)
?
49 Ёпрст
 
гуру
15.04.15
12:20
да
50 Ёпрст
 
гуру
15.04.15
12:20
только вот, не совсем так :)
Чтоб работали виртуальные таблицы, нужно мд присоединять и саму базу
51 Эльниньо
 
15.04.15
12:39
Да. Чёта ругается.
Как мд и базу присобачить?
52 trad
 
15.04.15
13:49
(50) имхо ты с присоединенной типизацией погорячился
53 trad
 
15.04.15
13:51
(51) бд.ПрисоединитьИБ(ПутьСоСлешем)
рс.УстБД(бд)
54 Эльниньо
 
15.04.15
13:53
Кароче сделал.
Ёпрсту спс за пинок в верном направлении

Уроды сделали обрезание по самое некуда. Типа тормозит потому как слишком большая. Ага - 5Гб - охренеть как огромная база.
55 Ёпрст
 
гуру
15.04.15
15:00
(52) да не, работать будет, если есть по чему синхронизировать.
56 Ёпрст
 
гуру
15.04.15
15:01
и самое главное, что метапарсер будет работать как для той базы, так и для этой
57 Ёпрст
 
гуру
15.04.15
15:05
вот, примерчик , для скуля
Процедура Сформировать()
    
    
    рс=создатьОбъект("ODBCRecordSet");
    
     ТекстЗапроса = "
    |SELECT
    |    СпрНаш.DESCR as КлиентосВЭтойбазе  -- наименование клиентоса в  этой базе, можно и не присоединять справочник, а просто типизировать
    |    ,Спр.DESCR as КлиентосВУдаленнойБазе --наименование клиентоса в удаленной базе
    |FROM $Справочник.Контрагенты СпрНаш
    |left join dataBase2.dbo.@Справочник.Контрагенты Спр on СпрНаш.Code = Спр.Code
    |";    
    глМД = СоздатьОбъект("MetaDataWork");
    ТекстЗапроса=глМД.ОбрМетаСКЛ(ТекстЗапроса);
    глМД2 = СоздатьОбъект("MetaDataWork");
    ПутьКБазе2 = "D:\полный путьк базе данных\";
    глМД2.ПрисоединитьМД(ПутьКБазе2+"1Cv7.md");
    ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"@","$");
    ТекстЗапроса=глМД2.ОбрМетаСКЛ(ТекстЗапроса);
    
    Т = рс.ВыполнитьИнструкцию(ТекстЗапроса);
    Т.ВыбратьСтроку();

КонецПроцедуры
58 Ёпрст
 
гуру
15.04.15
15:06
+ 57 тут "синхронизация" по коду справочника + работа метапарсера для обеих баз (не надо вспоминать, как там имена таблиц в не родной базе называются)
59 trad
 
15.04.15
16:15
(55) будет если только одна база потомок другой
60 Ёпрст
 
гуру
15.04.15
16:17
(59) не, можно "привести" по коду/реквизиту к объектам этой базы и типизировать
61 trad
 
15.04.15
17:13
моя твоя не понел
ну да ладно
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.