Имя: Пароль:
1C
1С v8
Помогите с запросом (НЕ новичок)
,
0 jk3
 
23.07.12
14:15
Сабж на картинке: http://i40.fastpic.ru/big/2012/0723/3d/a2770a24f4a22807235850c388f1983d.png

Есть идеи как это получить запросом?
1 sapphire
 
23.07.12
14:17
(0) Если количество строк в табличной части ВСЕГДА равно количеству проводок, то запросто :)
2 jk3
 
23.07.12
14:19
(1) Нет, как раз таки всегда НЕ равно
3 iceman2112
 
23.07.12
14:20
чето не понятно Услуги разные или там просто одна и та же - Услуги
4 DSSS
 
23.07.12
14:21
(0) почему нельзя соединить таблицы по Субуонто и Счету?
5 iceman2112
 
23.07.12
14:21
если услуги разные, то соединение. В чем проблема?
6 jk3
 
23.07.12
14:22
(4) А попробуй. В результате получишь 4 строки, а не 2.
7 Сияющий Асинхраль
 
23.07.12
14:22
(0) Если услуги разные то можно, а если одинаковые то вообще непонятно что ты чему сопоставляешь
8 jk3
 
23.07.12
14:22
(3) Это для наглядности, субконто и счёт одинаковые, что в табличной части, что в проводках.
9 DSSS
 
23.07.12
14:23
(6) Предварительная упаковка во вложенных запросах или временных таблицах тоже не поможет?
10 qeos
 
23.07.12
14:23
нельзя
11 Cube
 
23.07.12
14:23
(6) Да ну? Ну тогда ты что-то темнишь. Давай реальные скриншоты из базы и конфу озвучь.
12 jk3
 
23.07.12
14:24
(7) Грубо говоря, количество пишется в таб.части, а сумма высчитывается при проведении и записывается в проводки.

Описание пользователя: ну это же просто, берешь из таб.части кол-во, а из проводок сумму.

Ага, просто, блин.
13 jk3
 
23.07.12
14:25
(11) Можно, но только это не быстро, ибо затереть надо кое-какую инфу на скринах.
(9) Всмысле упаковка?
14 gosn1ck
 
23.07.12
14:26
(12) я не понял почему соединить нельзя? откуда тут 4ем строкам браться?
зы в бухии не силен, но почему количество нельзя в проводки засунуть? это сложно?
15 Irek-kazan
 
23.07.12
14:26
ну вот такой вариант
Выбрать счет, субконто, сумма(кол-во), сумма(сумма)
из
(выбрать счет, субконто, кол-во, 0 как сумма
из таблицы1
объединить все
выбрать счет, субконто, 0 как кол-во, сумма
из таблицы1)
сгруппировать по счет, субконто
16 Сияющий Асинхраль
 
23.07.12
14:27
(3) Тогда исходя из какого принципа количеству в 100 соответствует сумма 150, а не 500...
Я бы сделал из всего этого запросом единственную строку, которая суммировала бы суммы и количества по Счету и Субконто, иными словам делай группировку после соединения и все
17 iceman2112
 
23.07.12
14:27
если разные услуги - то соединение. Напиши своё соединнение посмотрим откуда у тебя 4.
18 Irek-kazan
 
23.07.12
14:27
+(15) ошибся вторая часть объединить все вместо таблица1 надо таблица2
19 Сияющий Асинхраль
 
23.07.12
14:27
(15) +100
про это и сказал в (16)
20 DSSS
 
23.07.12
14:27
(12) В первом вложенным запросе получаем счет субконто, количество. Групировка субконто, счет, СУММА(Кол-во) во втором вложенном запросе получаем сч, субконо, Сумма(Сумма)
Соединяем.
что будет неправильно?
21 jk3
 
23.07.12
14:28
(14) Исходная база какая есть, такая есть, отчёт нужен.
(17) Повторяюсь, услуги - одинаковые.
22 gosn1ck
 
23.07.12
14:29
(21) клёво, но в чем сложность я так и не понял. тут должно работать как соединение так и объединение
23 Lacerta
 
23.07.12
14:29
Ввести по счету количественный учет и в проводках его дописывать к сумме
24 Ненавижу 1С
 
гуру
23.07.12
14:32
выбрать Счет, Субконто1, Сумма(Количество)
поместить ТЧСвернуто
из ТЧ
сгруппировать по Счет, Субконто1;

выбрать СчетДт, СубконтоДт1, Сумма(Сумма)
поместить ПроводкиСвернуто
из Проводки
сгруппировать по СчетДт, СубконтоДт1;

выбрать ТЧ.Счет, ТЧ.Субконто1, ТЧ.Количество, Сумма(ПроводкиСвернуто.Сумма)*ТЧ.Количество/Сумма(ТЧСвернуто.Количество)
из ТЧ
левое соединение ТЧСвернуто по ТЧ.Счет=ТЧСвернуто.Счет и ТЧ.Субконто1=ТЧСвернуто.Субконто1
левое соединение ПроводкиСвернуто по ТЧ.Счет=ПроводкиСвернуто.СчетДт и ТЧ.Субконто1=ПроводкиСвернуто.СубконтоДт1
25 gosn1ck
 
23.07.12
14:38
в топике переменная "новичок" какое имеет значение?
26 jk3
 
23.07.12
14:40
(17) Сорри за размер скрина по ширине, меньше не получается

Вот исходный док:
http://i43.fastpic.ru/big/2012/0723/d6/967b4d1e56655fc4e537e1e1b13e22d6.png

Вот изначальный запрос:

ВЫБРАТЬ
   ПутевыеУчетныеЛистыВыработкаВТКМ.Ссылка,
   ПутевыеУчетныеЛистыВыработкаВТКМ.НомерСтроки,
   ПутевыеУчетныеЛистыВыработкаВТКМ.Счет,
   ПутевыеУчетныеЛистыВыработкаВТКМ.Субконто1
ПОМЕСТИТЬ ПутевойЛист
ИЗ
   Документ.ПутевыеУчетныеЛисты.ВыработкаВТКМ КАК ПутевыеУчетныеЛистыВыработкаВТКМ
ГДЕ
   ПутевыеУчетныеЛистыВыработкаВТКМ.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ХозрасчетныйДвиженияССубконто.Регистратор,
   ХозрасчетныйДвиженияССубконто.НомерСтроки,
   ХозрасчетныйДвиженияССубконто.СчетДт,
   ХозрасчетныйДвиженияССубконто.СубконтоДт1,
   ХозрасчетныйДвиженияССубконто.Сумма,
   ХозрасчетныйДвиженияССубконто.Содержание
ПОМЕСТИТЬ СписаниеГСМ
ИЗ
   РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
           &Дата1,
           &Дата2,
           Организация = &Организация
               И СчетКт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ВспомогательныеПроизводства)
               И Активность = ИСТИНА
               И Регистратор ССЫЛКА Документ.ПутевыеУчетныеЛисты
               И ВЫРАЗИТЬ(Регистратор КАК Документ.ПутевыеУчетныеЛисты).ВидОперации <> ЗНАЧЕНИЕ(Перечисление.ВидыОперацийУчетныхПутевыхЛистов.УчетныйЛистТрактористаМашиниста),
           ,
           ) КАК ХозрасчетныйДвиженияССубконто
ГДЕ
   ХозрасчетныйДвиженияССубконто.Содержание = "Списание ГСМ"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ПутевойЛист.Ссылка,
   ПутевойЛист.НомерСтроки,
   ПутевойЛист.Счет,
   ПутевойЛист.Субконто1,
   СписаниеГСМ.Сумма
ИЗ
   ПутевойЛист КАК ПутевойЛист
       ЛЕВОЕ СОЕДИНЕНИЕ СписаниеГСМ КАК СписаниеГСМ
       ПО ПутевойЛист.Ссылка = СписаниеГСМ.Регистратор
           И ПутевойЛист.Счет = СписаниеГСМ.СчетДт
           И ПутевойЛист.Субконто1 = СписаниеГСМ.СубконтоДт1


Вот результат:
http://i41.fastpic.ru/big/2012/0723/58/612b7f2e152f8accc87d025fdf44cf58.png
27 Irek-kazan
 
23.07.12
14:41
чем вариант (15) не устаривает?
28 Ненавижу 1С
 
гуру
23.07.12
14:43
(27) ему немного не так надо, ИМХО, конечно
29 jk3
 
23.07.12
14:44
(27) В том варианте 1 строка получается, так я и сам могу.

Нужен результат, как на скрине в (0)
30 Ненавижу 1С
 
гуру
23.07.12
14:44
(29) пробовал (24)?
31 jk3
 
23.07.12
14:47
(30) Пробую, в процессе...

А не опираясь на числовую колонку в ТЧ, эта задача вообще как-нибудь решается?
32 Ненавижу 1С
 
гуру
23.07.12
14:48
(31) ну может чисто теоретически порядок номеров (не сами номера) строк в ТЧ и движениях будет одинаков
33 jk3
 
23.07.12
14:51
(32) Так и есть, в общем случае задача такая, что нужно сопоставить строкам табличной части строки проводок, при том, что номера строк и номера проводок не совпадают, но находятся в одной и той же последовательности.
34 Ненавижу 1С
 
гуру
23.07.12
14:52
(33) ну вот с этим можно "поиграться", но я бы (24) выбрал
35 jk3
 
23.07.12
14:52
Т.е. 1-ой строке ТЧ будет соответствовать 1-я проводка (но она не обязательно первая среди всех проводок документа, в примере третья),
2-ой строке ТЧ 2-я проводка (в примере пятая),
и т.д.
36 qeos
 
23.07.12
14:53
а спрашивали "на куа"?
37 jk3
 
23.07.12
14:53
Скатился до частностей, т.к. общий случай мне показался вообще не решаемый с помощью запроса...
38 xenos
 
23.07.12
14:53
(0) В 8.3 есть функция МестоВПорядке
39 jk3
 
23.07.12
15:01
(34) Проверил, способ работает, но деление, дроби, округление...

В идеале пронумеровать 1,2,3... отобранные проводки документа, тогда просто соединение по номеру строки и всё.

Статью Книга знаний: v8: Нумерация строк в запросе читал, но сюда приспособить не получилось (по крайней мере с 1-го раза)
40 Абыр
 
23.07.12
15:01
в проводке номер строки документа есть?
41 jk3
 
23.07.12
15:04
(40) Нет, конечно, иначе это было бы слишком просто.
42 Жан Пердежон
 
23.07.12
15:04
(37) чтобы он был решаемый - его надо сначала сформулировать.
(39) нумерация, внезапно есть в: Книга знаний: v8: Нумерация строк в запросе
43 jk3
 
23.07.12
15:07
(42) Дык, вот в том же ж и проблема.
Правильно поставленный вопрос уже содержит в себе 50% ответа.

(42) В книге знаний опираются на наименовании, на что здесь опираться, хз.
44 Ненавижу 1С
 
гуру
23.07.12
15:07
(43) на номера строк
45 jk3
 
23.07.12
17:12
(44) Спасибо!

Решил задачу в общем виде путём перенумерации таблицы проводок, начиная с единицы, и простому соединению по номерам строк:


ВЫБРАТЬ
   ПутевыеУчетныеЛистыВыработкаВТКМ.Ссылка,
   ПутевыеУчетныеЛистыВыработкаВТКМ.НомерСтроки,
   ПутевыеУчетныеЛистыВыработкаВТКМ.Счет,
   ПутевыеУчетныеЛистыВыработкаВТКМ.Субконто1
ПОМЕСТИТЬ ПутевойЛист
ИЗ
   Документ.ПутевыеУчетныеЛисты.ВыработкаВТКМ КАК ПутевыеУчетныеЛистыВыработкаВТКМ
ГДЕ
   ПутевыеУчетныеЛистыВыработкаВТКМ.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2
   И ПутевыеУчетныеЛистыВыработкаВТКМ.Ссылка.Организация = &Организация
   И ПутевыеУчетныеЛистыВыработкаВТКМ.Ссылка.ВидОперации <> ЗНАЧЕНИЕ(Перечисление.ВидыОперацийУчетныхПутевыхЛистов.УчетныйЛистТрактористаМашиниста)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ХозрасчетныйДвиженияССубконто.Регистратор,
   ХозрасчетныйДвиженияССубконто.НомерСтроки,
   ХозрасчетныйДвиженияССубконто.Сумма
ПОМЕСТИТЬ СписаниеГСМ
ИЗ
   РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
           &Дата1,
           &Дата2граница,
           Организация = &Организация
               И СчетКт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ВспомогательныеПроизводства)
               И Активность = ИСТИНА
               И Регистратор ССЫЛКА Документ.ПутевыеУчетныеЛисты
               И ВЫРАЗИТЬ(Регистратор КАК Документ.ПутевыеУчетныеЛисты).ВидОперации <> ЗНАЧЕНИЕ(Перечисление.ВидыОперацийУчетныхПутевыхЛистов.УчетныйЛистТрактористаМашиниста),
           ,
           ) КАК ХозрасчетныйДвиженияССубконто
ГДЕ
   ХозрасчетныйДвиженияССубконто.Содержание = "Списание ГСМ"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   СписаниеГСМ.Регистратор,
   СписаниеГСМ.НомерСтроки,
   КОЛИЧЕСТВО(СписаниеГСМ2.НомерСтроки) КАК НомерСтрокиСЕдиницы,
   СписаниеГСМ.Сумма
ПОМЕСТИТЬ Проводки
ИЗ
   СписаниеГСМ КАК СписаниеГСМ
       ЛЕВОЕ СОЕДИНЕНИЕ СписаниеГСМ КАК СписаниеГСМ2
       ПО СписаниеГСМ.НомерСтроки >= СписаниеГСМ2.НомерСтроки
           И СписаниеГСМ.Регистратор = СписаниеГСМ2.Регистратор

СГРУППИРОВАТЬ ПО
   СписаниеГСМ.Регистратор,
   СписаниеГСМ.НомерСтроки,
   СписаниеГСМ.Сумма
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ПутевойЛист.Ссылка,
   ПутевойЛист.НомерСтроки,
   ПутевойЛист.Счет,
   ПутевойЛист.Субконто1,
   Проводки.Сумма
ИЗ
   ПутевойЛист КАК ПутевойЛист
       ЛЕВОЕ СОЕДИНЕНИЕ Проводки КАК Проводки
       ПО ПутевойЛист.Ссылка = Проводки.Регистратор
           И ПутевойЛист.НомерСтроки = Проводки.НомерСтрокиСЕдиницы
46 Ненавижу 1С
 
гуру
23.07.12
17:13
(45) главное не удивляться когда порядок проводок внезапно может быть изменен
47 qeos
 
23.07.12
17:17
а где ты работаешь и как твоя фамилия?
48 qeos
 
23.07.12
17:18
чтоб я стобой не связывался
49 jk3
 
23.07.12
17:27
(46) Всё равно они пишутся в цикле "Для каждого", поэтому всегда будет нормально работать.
2 + 2 = 3.9999999999999999999999999999999...