Имя: Пароль:
1C
1С v8
Сортировка и группировка данных из разных таблиц
0 LenOk_86
 
29.02.12
13:00
Подскажите, пожалуйста. Есть документ, в нём 2 табличные части "товары" и "услуги". В макет сейчас выводиться всё в одну кучу, с последовательностью сначала товары, потом услуги. Как сделать так что б в макет выводилась группировка по контрагентам (данная колонка есть в обеих таблицах) и итог по ним?
P.S. Я новичок.
1 mikecool
 
29.02.12
13:02
добавить итоги по контрагентам, вывести
2 LenOk_86
 
29.02.12
13:03
А если в таблицах внесены данные в хаотичном порядке? сначало нудно сгруппировать, а потом вывести итог
3 mikecool
 
29.02.12
13:04
(2) итогу пофик - сгруппировано или нет
4 Wobland
 
29.02.12
13:04
объединить два запроса, прикрутить итоги и нужное упорядочивание:
5 Ant1773
 
29.02.12
13:05
(0) СКД?
6 palpetrovich
 
29.02.12
13:06
а что за это документ, в котором  колонка контрагент есть в обеих таблицах?  ...или конфа - самописка?
7 LenOk_86
 
29.02.12
13:06
в документе запросов нет, пользователь вбивает вручную данные.
8 Ant1773
 
29.02.12
13:06
(0) (5) Данные ты для макета как получаешь? Как передаешь?
9 Ненавижу 1С
 
гуру
29.02.12
13:06
(7) ндя... а выводятся данные как?
10 LenOk_86
 
29.02.12
13:07
конфа - самописка.
11 Ant1773
 
29.02.12
13:07
(10) Отчет на СКД?
12 mikecool
 
29.02.12
13:07
(10) главное - фотка зачетная
13 LenOk_86
 
29.02.12
13:08
выводятся в той последовательности, в которой вносит пользователь, только в порядке товар-услуги
14 LenOk_86
 
29.02.12
13:08
отчет не на СКД
15 Ненавижу 1С
 
гуру
29.02.12
13:09
(14) а как?
16 Ant1773
 
29.02.12
13:09
(14) ну раз не на СКД, тогда добавляй в код:

ИтогПоКонтрагентам = 0

Цикл вывод данных

ИтогПоКонтрагентам = ИтогПоКонтрагентам + Сумма;

КонецЦикла

Вывод ИтогПоКонтрагентам
17 mikecool
 
29.02.12
13:10
(16) про ИТОГИ не слышал?
18 Ненавижу 1С
 
гуру
29.02.12
13:11
(17) это ты перестань обижать маленьких!
19 Ant1773
 
29.02.12
13:11
(17) Слышал. Но откуда данные берутся - еще не понятно. И одна это ТЗ или 2 - непонятно пока.
20 LenOk_86
 
29.02.12
13:11
это не отчет, это печатная форма документа. а больше сложность не так с итогами, как с группировкой, что б выводилось не так как пользователь внёс, а по контрагентам
21 mikecool
 
29.02.12
13:11
выбрать ...
Контрагент
Из
...
объединить
...

ИТОГИ По Контрагент

Выборка = Запрос.Выполнить.Выбрать(По группировкам)
имеем итоги по контрагентам
ВыборкаДетали = Выборка.Выбрать()
имеем детальные записи
22 Ненавижу 1С
 
гуру
29.02.12
13:12
(20) пистец, лютый
мы чего-то должны угадать в твоей самопиьски?
23 Ant1773
 
29.02.12
13:12
(20) Дай код :)
24 Ненавижу 1С
 
гуру
29.02.12
13:13
(19) две, и не ТЗ, а ТЧ, но это неважно
25 LenOk_86
 
29.02.12
13:14
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
   ОбластьИтог = Макет.ПолучитьОбласть("Итог");
   //Ном = 0;
   
   //ТЗ = Новый ТаблицаЗначений;
   //ТЗ.Колонки.Добавить("Магазин");
   
   Для Каждого Стр из Товары Цикл
       ОбластьСтрока.Параметры.Заполнить(Стр);
   Если стр.Магазин.НомерОбъекта <> 0 Тогда
       ОбластьСтрока.Параметры.Объект = "Продукти-" +Стр.Магазин.НомерОбъекта;
   Иначе ОбластьСтрока.Параметры.Объект = Стр.Магазин.Наименование;
       КонецЕсли;
       ОбластьСтрока.Параметры.ТМЦ = Стр.Номенклатура;
       ОбластьСтрока.Параметры.ОС = Стр.НаимОС;
       ОбластьСтрока.Параметры.ИнвНомер = Стр.ИнвентарныйНомер;
       ОбластьСтрока.Параметры.Количество = Стр.Количество;
       ОбластьСтрока.Параметры.Цена = Стр.Цена;
       ОбластьСтрока.Параметры.Сумма = Стр.Сумма;
       ОбластьСтрока.Параметры.НДС = Стр.СуммаНДС;
       ОбластьСтрока.Параметры.СуммаСНДС = Стр.Сумма + Стр.СуммаНДС;
       ТабДок.Вывести(ОбластьСтрока);
       КонецЦикла;

   Для Каждого Стр из Услуги Цикл
       ОбластьСтрока.Параметры.Заполнить(Стр);
   Если стр.Магазин.НомерОбъекта <> 0 Тогда
       ОбластьСтрока.Параметры.Объект = "Продукти-" +Стр.Магазин.НомерОбъекта;
   Иначе ОбластьСтрока.Параметры.Объект = Стр.Магазин.Наименование;
   КонецЕсли;
       ОбластьСтрока.Параметры.ТМЦ = Стр.Номенклатура;
       ОбластьСтрока.Параметры.ОС = Стр.НаимОС;
       ОбластьСтрока.Параметры.ИнвНомер = Стр.ИнвентарныйНомер;
       ОбластьСтрока.Параметры.Количество = Стр.Количество;
       ОбластьСтрока.Параметры.Цена = Стр.Цена;
       ОбластьСтрока.Параметры.Сумма = Стр.Сумма;
       ОбластьСтрока.Параметры.НДС = Стр.СуммаНДС;
       ОбластьСтрока.Параметры.СуммаСНДС = Стр.Сумма + Стр.СуммаНДС;
       ТабДок.Вывести(ОбластьСтрока);
   КонецЦикла;

    //ОбластьСтрока.Параметры.Объект.Порядок.Установить("Номенклатура, Возр");

   //ТабДок.Вывести(ОбластьИтог);
26 LenOk_86
 
29.02.12
13:15
ну чайник я пока
27 Ненавижу 1С
 
гуру
29.02.12
13:17
(25) во первых тут нет никаких контрагентов, во вторых получай данные не из объекта, а запросом, сразу сгруппированные (или ИТОГИ)
28 palpetrovich
 
29.02.12
13:17
(25) отрой для себя конструктор запроса с обработкой результата
29 Ant1773
 
29.02.12
13:18
(17)(25) Я же говорил :)

Раз две отдельных ТЧ - то единственный вариант - левая переменная.
Либо выгружаем их в ТЗ и сворачиваем, либо запросом, но запрос только когда документ записан. (Вроде не сильно обманул?)
30 Ненавижу 1С
 
гуру
29.02.12
13:20
(29) умею запросом, когда документ не записан ))
31 Ant1773
 
29.02.12
13:21
(30) Как?
32 Ant1773
 
29.02.12
13:22
(30) выгрузив ТЧ в ТЗ и ее как временную таблицу?
33 LenOk_86
 
29.02.12
13:23
магазины - это справочник контрагентов.
конструктором запросов пользоваться умею, это сейчас немного не тот вариант
34 LenOk_86
 
29.02.12
13:24
то как лучше, создать переменную, или всё-таки через ТЗ
35 palpetrovich
 
29.02.12
13:26
(33) почему это не тот? если умешь  - именно тот! он тебе и код нарисует и табличку создаст
зы: запрос примерно такой получиться должен:
       "ВЫБРАТЬ
       |    ТвойДокТовары.Контрагент КАК Контрагент,
       |    СУММА(ТвойДокТовары.Сумма) КАК СуммаТовары,
       |    СУММА(ТвойДокУслуги.Сумма) КАК СуммаУслуги
       |ИЗ
       |    Документ.ТвойДок.Товары КАК ТвойДокТовары
       |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ТвойДок.Услуги КАК ТвойДокУслуги
       |        ПО ТвойДокТовары.Ссылка = ТвойДокУслуги.Ссылка
       |            И ТвойДокТовары.Контрагент = ТвойДокУслуги.Контрагент
       |ГДЕ
       |    ТвойДокТовары.Ссылка = &ТекДокумент
       |
       |СГРУППИРОВАТЬ ПО
       |    ТвойДокТовары.Контрагент
       |ИТОГИ
       |    СУММА(СуммаТовары),
       |    СУММА(СуммаУслуги)
       |ПО
       |    Контрагент";
36 Ненавижу 1С
 
гуру
29.02.12
13:29
(32) ага ))
37 Ненавижу 1С
 
гуру
29.02.12
13:29
(35) писец, там нужно ОБЪЕДИНИТЬ ВСЕ
38 LenOk_86
 
29.02.12
13:30
табличка строгая, измененения в макете не допускаються
39 Ant1773
 
29.02.12
13:31
Есть еще вариант - сделать одну ТЧ, в нее добавить реквизит товар/услуга :)

(38) Строгая таблица... и пальцем погрозит если что...
40 Ненавижу 1С
 
гуру
29.02.12
13:33
(38) ну сам то алгоритм формирования строгой таблички можно изменять?
41 palpetrovich
 
29.02.12
13:37
(37) я на истину в последней инстанции не претендую :) ...автор вон вообще запросы не любит
42 Ненавижу 1С
 
гуру
29.02.12
13:38
(41) да просто запрос твой неправильный как бы
43 LenOk_86
 
29.02.12
13:40
алгоритм да
44 palpetrovich
 
29.02.12
13:42
(42) в смысле что не все данные вернет, только те где контрагенты совпадут?  так см. (41), я только направление дал  :)
45 Ant1773
 
29.02.12
13:43
(43) У тебя есть три варианта - добавить временную переменную с минимальной переработкой алгоритма (но в целом это неправильно), выгрузить обе ТЧ в одну ТЗ и свернуть ее (ИМХО лучше всего) или сделать запрос по обеим ТЧ.

ЗЫ Четвертый вариант - СКД. Еще лучше.
46 LenOk_86
 
29.02.12
13:52
ладно, спасибо всем за идеи. буду пробовать вариант №2. Как-то больше по душе :)