Имя: Пароль:
1C
1C 7.7
v7: Прямой запрос.
0 Eeakie
 
17.12.13
13:18
Добрый день.
Встала задача переписать отчет.

***
|Функция ОстаткиРег1 = КонОст();
|Функция ОстаткиРег2 = КонОст();
|Функция ОстаткиРег3 = КонОст();
|Функция ОстаткиРег4 = КонОст();
***

Как прямым запросом хватануть остатки сразу по нескольким регистрам? Поможите, люди добрые.
1 Eeakie
 
17.12.13
13:23
Ну, или как "довыгружать" данные в уже существующую ТЗ?
2 dk
 
17.12.13
13:32
union
или join
скачай конструктор запросов если со скулем не особо дружишь
3 Eeakie
 
17.12.13
13:34
(2) Какой посоветуете?
4 dk
 
17.12.13
13:36
меня этот конструктор http://infostart.ru/public/14933/ устраивает
5 КонецЦикла
 
17.12.13
13:41
(4) +1
Масса времени экономится
6 Eeakie
 
17.12.13
13:45
(4) Им и пользуюсь. Похоже, не получается из-за моих непоняток с вкладкой "Связи" :\
7 Eeakie
 
17.12.13
13:51
Можно пример запроса?
2 регистра. Измерения одинаковые. Ресурсы тоже.
Надо вытащить измерение "Товар" и ресурс "Количество" из обоих регистров. Чтоб в тз выглядело как: Товар - Кол1 - Кол2. Как это будет выглядеть?
8 КонецЦикла
 
17.12.13
13:52
Сначала переведи "хватануть" в язык доступный для БД
Навреное надо union all?
Тогда сделай несколько кусочков и далее соединяй
9 КонецЦикла
 
17.12.13
13:53
(7) Там есть пример. Запрос динамически собирается
http://1c911.by/stati_1s/statya-kak-ispolzovat-urbd-v-otlichayushchihsya-konfiguraciyah.htm
10 КонецЦикла
 
17.12.13
13:55
Только у тебя убудет примерно так

селект запрос.товар
, сум(запрос.остаток1)
, сум(запрос.остаток2)
фром (

селект товар
0 остаток1
рег.ост остаток2

юнион алл

селект товар
рег1.ост остаток1
0 остаток2
) аз запрос
11 Eeakie
 
17.12.13
13:57
(8) Сейчас попробую. "Хватануть" - взять остатки на текущий момент.
12 dk
 
17.12.13
14:01

SELECT
    Товар
    , Склад
    , SUM(ОстатокТовара) ОстатокТовара
    , SUM(РезервТовара) РезервТовара
FROM
(SELECT
    $ОстаткиТоваровИтоги.Товар
    , $ОстаткиТоваровИтоги.Склад
    , $ОстаткиТоваровИтоги.ОстатокТовара ОстатокТовара
    , 0 РезервТовара
FROM $РегистрИтоги.ОстаткиТоваров AS ОстаткиТоваровИтоги With (NOLOCK)
WHERE ОстаткиТоваровИтоги.PERIOD = :ВыбДата

UNION ALL

SELECT
    , $РезервыТоваровИтоги.Товар
    , $РезервыТоваровИтоги.Склад
    , 0
    , $РезервыТоваровИтоги.РезервТовара РезервТовара
FROM $РегистрИтоги.РезервыТоваров AS РезервыТоваровИтоги With (NOLOCK)
WHERE РезервыТоваровИтоги.PERIOD = :ВыбДата
) Влож
GROUP BY
    Влож.Товар, Влож.Склад
13 Ёпрст
 
17.12.13
14:18
(12) ща погоди, выяснится к 100-му посту, что база дбф еще..
:)
14 Eeakie
 
17.12.13
14:26
(13) Несерьезно :)
15 Ёпрст
 
17.12.13
14:28
(14) Че не серьёзно ?
ужо 15 постов, а о формате хранения даный - ни слова.
Если че, разный синтаксис запросов будет, + в скуле можно виртуальными табличками баловаться, в дбф - писать всё ручонками.
16 Eeakie
 
17.12.13
14:31
(15) Через ВТ и пытаюсь сделать.
17 КонецЦикла
 
17.12.13
14:31
(15) Вместо ручонок можно использовать класс ПоставщикДанных, например
18 Ёпрст
 
17.12.13
14:33
(17) для дбф, лучше ручками и через фокс.. быстрее, чем через класси скульлайт (это ежели скорость важнее)
19 Eeakie
 
17.12.13
14:45
Не взлетает. "Недопустимое имя столбца Товар".

    |SELECT Выборка.Товар
    |    , sum(Выборка.Кол1) as НадоЗаказать
    |    , sum(Выборка.Кол2) as ВРаботе
    |FROM(
    |    SELECT ЗаявкиПоставщику.Товар [Товар $Справочник.Товары]
    |        , ЗаявкиПоставщику.РезервТовараОстаток Кол1
    |        , 0 Кол2
    |    FROM $РегистрОстатки.ЗаявкиПоставщику(,,(Фирма = :Фирма),Товар,) AS ЗаявкиПоставщику
    |    
    |    UNION ALL
    |    
    |    SELECT ПодготовкаЗаявок.Товар [Товар $Справочник.Товары]
    |        , 0 Кол1
    |        , ПодготовкаЗаявок.КоличествоОстаток Кол2
    |    FROM $РегистрОстатки.ПодготовкаЗаявок(,,(Фирма = :Фирма),Товар,) AS ПодготовкаЗаявок)
    |as Выборка";
20 Ёпрст
 
17.12.13
14:46
(19) выкини типизацию из Юниона
21 Ёпрст
 
17.12.13
14:48
+ в скобки надо набор измерений, если не изменяет память
22 Eeakie
 
17.12.13
14:48
(20) Взлетело. Надо было еще группировку воткнуть.
Всем спасибо.
23 Ёпрст
 
17.12.13
14:50
короче,

    |SELECT Выборка.Товар [товарец $Справочник.Вася]
    |    , sum(Выборка.Кол1) as НадоЗаказать
    |    , sum(Выборка.Кол2) as ВРаботе
    |FROM(
    |    SELECT ЗаявкиПоставщику.Товар Товар
    |        , ЗаявкиПоставщику.РезервТовараОстаток Кол1
    |        , 0 Кол2
    |    FROM $РегистрОстатки.ЗаявкиПоставщику(,,Фирма = :Фирма,(Товар),) AS ЗаявкиПоставщику
    |    
    |    UNION ALL
    |    
    |    SELECT ПодготовкаЗаявок.Товар
    |        , 0
    |        , ПодготовкаЗаявок.КоличествоОстаток
    |    FROM $РегистрОстатки.ПодготовкаЗаявок(,,Фирма = :Фирма,(Товар),) AS ПодготовкаЗаявок)
    |as Выборка
    |group by Выборка.Товар  ";
24 Eeakie
 
17.12.13
14:55
Жесть, 4 регистра с пачкой фильтров обрабатывает за секунду...
25 КонецЦикла
 
17.12.13
14:58
(24) Покажи бухгалтеру, насыплет конфет
26 Eeakie
 
17.12.13
15:39
Опять тупняк напал. Как можно прикрутить единицу измерения к товару?

|SELECT Товары.ID [Товар $Справочник.Товары]
    |    , Товары.БазоваяЕдиница [ЕИ $Перечисление.ЕдиницыИзмерения]
    |    , sum(Выборка.Кол1) as Заказано
    |    , sum(Выборка.Кол2) as ВРаботе
    |    , sum(Выборка.Кол3) as ОкЗаказ
    |    , sum(Выборка.Кол4) as Ожидание
***
***
***
)as Выборка
    |INNER JOIN
    |    $Справочник.Товары AS Товары ON Товары.ID = Выборка.Товар
    |GROUP BY Выборка.Товар";
27 Попытка1С
 
17.12.13
15:42
левым подрубить справочник товаров и вывести из него единицу
28 Попытка1С
 
17.12.13
15:43
SELECT СпрТовар.БазоваяЕдиница

....

LEFT JOIN $Справочник.Товары AS Товары ON Товары.ID = Выборка.Товар AS СпрТовар
29 Попытка1С
 
17.12.13
15:44
тьфу вот это не надо  AS СпрТовар

просто будет

select Товары.БазоваяЕдиница
30 Ёпрст
 
17.12.13
15:51
Select
$Товарчик.БазоваяЕдиница [...],
  Выборка.Товар []
...
from () as Выборка
left join $Справочник.Товары AS Товарчик ON Товарчик.ID = Выборка.Товар
31 Eeakie
 
17.12.13
15:56
Заработало. Спасибо еще раз.
32 Eeakie
 
17.12.13
16:52
Текст = "
|Фирма = Регистр.Развоз.Фирма;
|Товар = Регистр.Развоз.Товар.Товар;
|Собрано = Регистр.Развоз.ДокументДвижения.Собрано;
|Количество = Регистр.Развоз.Количество;
|Функция Остаток = КонОст(Количество);
|Условие(Фирма = ФирмаСоСкладскимДвижением);
|Условие(Собрано = 0);";

Как прямым можно получить "Собрано"? Делать ВТОстаткиОбороты и цеплять документ?
33 Eeakie
 
17.12.13
16:53
Ой, всё, разобрался.
34 Eeakie
 
17.12.13
17:26
SELECT ПЛ.Товар
    |        , 0 Кол1
    |        , 0 Кол2
    |        , 0 Кол3
    |        , 0 Кол4
    |        , 0 Кол5
    |        , 0 Кол6
    |        , РазвозНеСобрано.КоличествоОстаток
    |        , 0 Кол8
    |    FROM $РегистрОстатки.Развоз(:ДатаРасчета~,,(Фирма = :Фирма)" + УсловиеТовары + ",(Товар,ДокументДвижения),Количество) AS РазвозНеСобрано
    |    INNER JOIN $Документ.НакладнаяВнПерем AS НВП ON НВП.IDDoc = РазвозНеСобрано.ДокументДвижения AND $НВП.Собрано = 0
    |    LEFT JOIN $Справочник.Прайс_лист AS ПЛ ON ПЛ.ID = РазвозНеСобрано.Товар

Недопустимое имя столбца "Товар".

Есть 2 справочника. "Товары" и "ПрайсЛист". В прайсе есть реквизит "Товар" - нужен именно он.
35 Eeakie
 
17.12.13
17:30
Блин, вечно неровно код постится.
36 Eeakie
 
17.12.13
17:40
Товарищи, где ошибка?
Текст = "
|SELECT ПЛ.Товар
|    , РазвозНеСобрано.КоличествоОстаток
|FROM
|    $РегистрОстатки.Развоз(:ДатаРасчета~,,(Фирма = :Фирма),(Товар,ДокументДвижения),Количество) AS РазвозНеСобрано
|INNER JOIN
|    $Документ.НакладнаяВнПерем AS НВП ON НВП.IDDoc = РазвозНеСобрано.ДокументДвижения AND $НВП.Собрано = 0
|LEFT JOIN
|    $Справочник.Прайс_лист AS ПЛ ON ПЛ.ID = РазвозНеСобрано.Товар";
37 sapphire
 
17.12.13
17:45
(36)
Явно
LEFT JOIN
|    $Справочник.Прайс_лист AS ПЛ ON ПЛ.Товар = РазвозНеСобрано.Товар
38 sapphire
 
17.12.13
17:46
т.к. ПЛ.ID - это ссылка на элемент справочника "Прайс_лист", а не товар.
39 Eeakie
 
17.12.13
17:47
"Товар" в регистре "Развоз" имеет тип "Справочник.Прайс_Лист".
40 Eeakie
 
17.12.13
17:48
Меняю в селекте "ПЛ.Товар" на "РазвозНеСобрано.Товар [Товар $Справочник.Прайс_лист]" и всё работает.
Такое ощущение, что в прайсе нет реквизита "Товар". Но он есть...
41 Eeakie
 
17.12.13
17:51
(39) к (38)
42 sapphire
 
17.12.13
17:51
(40) Хе.. А он часом не периодический? :)
43 Eeakie
 
17.12.13
17:54
Блин. Надо были $ПЛ.Товар
44 Ёпрст
 
17.12.13
17:54
да ё..

|SELECT $ПЛ.Товар
45 Eeakie
 
17.12.13
17:55
(44) Надо было...
Независимо от того, куда вы едете — это в гору и против ветра!