Имя: Пароль:
1C
1С v8
Маленький вопрос по СКД
0 ДенисЧ
 
03.03.16
14:12
Есть две таблички:
первая: документ, номенклатура, количество1
вторая: документ, номенклатура, документДвижения, количество2

В СКД я их соединяю, имея соединение один ко многим от первой ко второй.

Делаю вычисляемое поле дельта = Количество1 - количество2
в Детальных записях (разумеется) эта дельта не ноль, но в итоге по номенклатура и документу - 0.
В ресурсе ставлю вычислять по документ, номенклатура.
в детальных всё равно оно вычисляется.
А потом в отбор добавляю дельта <> 0, но всё равно выводятся записи, где в деталях не ноль...


Надеюсь, понятно объяснил? ))
Как сделать так, чтобы отбор работал только по группировкам, а детальные не трогал?
1 mikecool
 
03.03.16
14:13
может добавить еще один ресурс только по группировкам и по нему отбирать?
2 ObjectRelation Model
 
03.03.16
14:13
сделай всё это в запросе
3 Defender aka LINN
 
03.03.16
14:13
Делай отбор в группировке. ВНЕЗАПНО, да?
4 mikecool
 
03.03.16
14:14
(3) это в какой момент? в запросе?
5 Defender aka LINN
 
03.03.16
14:14
(4) В СКД
6 ДенисЧ
 
03.03.16
14:15
(3) Внезапно. Не умею.
(2) Таблички собираются вручную. Например, юзвери сами вводят. Запроса тут нет.
И условие должно быть или не быть. От желания зависит.
7 ДенисЧ
 
03.03.16
14:18
(3) а, я понял, что ты имеешь в виду...
но группировок больше одной... Пользаку что, на всех задавать?
8 Defender aka LINN
 
03.03.16
14:20
(6) Я поражен (с)
http://screencast.com/t/3xKxvAlaN
9 Defender aka LINN
 
03.03.16
14:21
(7) Ну, я бы может и посоветовал чего, но сломался на фразе "в отбор добавляю дельта <> 0, но всё равно выводятся записи, где в деталях не ноль..."
10 aleks_default
 
03.03.16
14:24
(9) я тоже на ней завис
11 ДенисЧ
 
03.03.16
14:24
вот примерик картинки...
http://pics.rsh.ru/img/rep_pf994bv2.png
12 ДенисЧ
 
03.03.16
14:25
Видим, что по одному из документов получается дубление...
В итоге по номенклатуре должно быть 0. А имеем 24...
13 ObjectRelation Model
 
03.03.16
14:26
(11) картинки нет
14 Defender aka LINN
 
03.03.16
14:27
(12) Не видим %)
15 ДенисЧ
 
03.03.16
14:29
Хм... Дурит Гоблин...

http://savepic.ru/8903019.png
16 Defender aka LINN
 
03.03.16
14:31
Дык у тебя ж небось формула ресурса "Сумма(Разница)".
А надо "Сумма(Количество1)-Сумма(Количество2)"
17 ДенисЧ
 
03.03.16
14:37
(16) Хм...
Цифры стали правильные, а вот отбор всё равно не срабатывает...
Хотя.. Сейчас попробую в самом отчёте...
18 ObjectRelation Model
 
03.03.16
14:37
ты же все равно документ-движения не выводишь?
19 also
 
03.03.16
14:38
(17) отбор на уровне всего отчета ставишь?
20 Defender aka LINN
 
03.03.16
14:39
(17) А что именно за отбор? "Количество <> 0"? Посмотри на мой скрин и найди 10 отличий
21 ДенисЧ
 
03.03.16
14:53
(18) Вывожу. Он нужен
(19) и так и так. В пользовательском - не срабатывает, в схеме компоновки срабатывает...
(20) отбор Дельта <> 0, где Дельта = Сумма(количество1) - сумма(количество2)
22 Defender aka LINN
 
03.03.16
14:54
(21) Так вот "Дельта <> 0" и "Дельта Заполнено" - это 2 большие разницы, если что.
23 ДенисЧ
 
03.03.16
14:59
(22) Если что, у меня оба количества гарантированно числа. Поэтому не нуль и заполнено - это одна разница, причём маленькая.
24 Defender aka LINN
 
03.03.16
15:04
(23) У тебя 2 набора, т.е. левое соединение. Так что никаких гарантий.
25 ДенисЧ
 
03.03.16
15:10
(24) и как быть?
26 Живой Ископаемый
 
03.03.16
15:12
Объеднить таким образом чтобы ресурсы второй таблички были отдельными, и потом сгруппировать по тем поляем, по которым ты бы соединял.
27 ДенисЧ
 
03.03.16
15:16
(26) Они и так отдельные - количество1 из первой, количество2 из другой.
28 aleks_default
 
03.03.16
15:28
может завязаться на уровеньВГруппировке в отборе?
29 Живой Ископаемый
 
03.03.16
15:34
2(27)хы... ща.
Таблица1  имеет такую запись:
Номенклатура1, Документ1, КоличествоТаблицы1.
Таблица2 имеет такую запись:
Номенклатура1. Документ2, КоличествоТаблицы2.

Что можно сделать. Соединение. в результате которого родится таблица с одной записью:
Номенклатура1, Документ1, Документ2, КоличествоТаблицы1, Количествотаблицы2, (очевидно. что тут можно добавить высиляемое поле разницы.)


А можно сделать ОБЪЕДИНЕНИЕ, в результате котоого родится таблица с двумя записями:

Номенклатура1, Документ1, КоличествоТаблицы1, 0(Как КоличествоТаблицы2)
Номенклатура1, Документ2, 0(Как КоличествоТаблицы1), Как КоличествоТаблицы2

Во втором случае Ты еще сгруппируешь по Номенклатуре1 (по тому полю, по которому бы ты соединил в первом случае)
30 Defender aka LINN
 
03.03.16
15:34
(27) Ты внятно объясни - что надо-то.
31 ДенисЧ
 
03.03.16
15:37
(30) мне надо:
по документу и номенклатуре слева составить а) список документов справа и б) вывести только те номенклатуры, где есть расхождение на уровне группировки номенклатуры (в моём случае - справок А и Б).
32 Defender aka LINN
 
03.03.16
15:39
(31) Ну так и ставь отбор на уровне группировки номенклатуры
33 ДенисЧ
 
03.03.16
16:38
Мда...
С отборами вроде разобрался, но возникла новая вопроса...

Отчёт у меня компонуется программно. Ибо нужно сначала данные получить, потом их через источники данных подсунуть...

Установил отчёту схему компоновки, кнопки стандартные в форме подставилсьь...
Но если я делаю настройку в пользовательском режиме, то отчёт на них не реагирует.
примерный код:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    
    тзРеализация = "";
    тзТТН = "";
    РасчетДанных(тзРеализация, тзТТН);
    
    СхемаКомпоновкиДанных = ПолучитьМакет("СхемаКомпоновки");
    
    Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    
данные расшифровки
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
    
компоновки
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    внДанные = Новый Структура("Реализация, ЕГАИС", тзРеализация, тзТТН);
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, внДанные, ДанныеРасшифровки);
    
    Результат = ДокументРезультат;
    Результат.Очистить();
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(Результат);
    
        ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);  
КонецПроцедуры


Понятно, что берутся НастройкиПоУмолчанию... А вот как и откуда взять те настройки, что я сделал через форму?
В отладчике смотрел ЭтотОбъект - там даже следов моего вмешательства не наблюдается...
34 LordCMEPTb
 
03.03.16
16:43
(33) Настройки = СхемаКомпоновкиДанных.ПолучитьНастройки()
35 LordCMEPTb
 
03.03.16
16:44
(34) Тьфу, то есть КомпоновщикНастроек.ПолучитьНастройки()
36 ДенисЧ
 
03.03.16
16:47
О! Точно... Склеротик старый...
Помогло, спасибо!
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой