Имя: Пароль:
1C
1С v8
СКД неправильно сворачивает суммы, увеличивает
0 Coldboy
 
19.11.13
17:02
Здравствуйте. Работаю в скд через набор данных, туда подаю таблицу, сама таблица верная, ее вывод идет не корректно, а именно некоторые суммы он затраивает, хотя я ставил поля группировки, вроде бы правильные, суммы не корректно у тех, у кого реквизиты еще ниже располагаются.
1 mikecool
 
19.11.13
17:03
проверяй, косяк твой
2 Coldboy
 
19.11.13
17:07
не спорю. но куда смотреть, таблица значений верные держит поля, думаю косяк в составление уже СКД самого отчета, но не пойму. как убрать затраивание или задваивание.
3 acsent
 
19.11.13
17:07
обычно задваивает в результате неверных (неоднозначных) соединений
4 Пеппи
 
19.11.13
17:07
а в группировках суммы верные?
5 Artful Den
 
19.11.13
17:14
(0) Выведи детальные записи и посмотри, что у тебя получается в результате запроса
6 FidelBoom
 
19.11.13
17:15
(5)+1 Начинай с малого, просто вытащи все записи с таблицы и выведи список в отчете. посмотри что там
7 France
 
19.11.13
17:15
есть группировки в запросе, потом по тем же полям делаются группировки в СКД - и вуаля, задвоенные и затроенные.
8 Coldboy
 
20.11.13
10:49
обрабатываю данные программно.
ТЗ получается такого вида
Колонка1 Колонка2 Колонка3 Сумма  Сумма2
Даныые1   Данные2  Данные3 Число  Число2


Вывожу в СКД колонки в следующем порядка
Отчет
   Колонка1
    Колонка2 Число*(КоличествоДанные в Колонке3)
     Колонка3 Число2

Корчое в группировках неправильно сворачивает или задваивает, ресурс Сумма();
9 Coldboy
 
20.11.13
10:53
(7) пихаю уже тз готовую.
10 Coldboy
 
20.11.13
11:16
up
11 CHerypga
 
20.11.13
11:23
Если подаешь таблицу, то СКД сама не может определить роль каждого из поданных реквизитов. То есть Измерение ли это, или же это Период и т.д. Роли в таком случае нужно настроить самому
12 Coldboy
 
20.11.13
11:26
ну я же сам указываю, что это ресурс или нет. а что значит роли?
13 Coldboy
 
20.11.13
11:30
у меня ресурс затраивается или задваивается.
14 CHerypga
 
20.11.13
11:32
(12) Это на вкладке Наборы данных когда выбираешь свой набор. В случае если скармливаешь таблицу то это набор данных объект. Внизу Имя объекта данных, а вверху таблица. И там у каждого поля есть Роль
15 CHerypga
 
20.11.13
11:33
Если же например делать набор данных запрос, то после написания запроса СКД сама сможет определить роли для всех полей. Попробуй сделать что-нибудь через запрос, посмотри какие роли там будут стоять. По аналогии сделаешь со своим набором
16 Coldboy
 
20.11.13
11:33
(14) я понял. тока что ставить я хз, если ресурс затраивается и задвивается, а нужно показать, что он принадлежит поступлению и не измерение это.
17 CHerypga
 
20.11.13
11:33
(16) Свою таблицу ты как-нибудь запросом можешь получить?
18 Coldboy
 
20.11.13
11:36
я ее програмно с помощью запрос и доп действий
  ВнешниеНаборыДанных = Новый Структура;
    ВнешниеНаборыДанных.Вставить("ТЗОплат",ТЗОплаченных);
    СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки);
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных);
    ДокументРезультат = Новый ТабличныйДокумент;
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДАнныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
    ДокументРезультат.ОтображатьСетку = Ложь;
    ДокументРезультат.ПоказатьУровеньГруппировокСтрок(0);
    ДокументРезультат.Показать();
19 CHerypga
 
20.11.13
11:40
(18) Программно быстро помочь не смогу, т.к редко пользуюсь этим. Вот как в мышкотыкательном интерфейсе сделать подсказать наверное смогу.
Попробуй просто создать внешний отчет, забить свой запрос в набор данных там и посмотреть что получится.
20 Coldboy
 
20.11.13
12:02
короче у меня вот такая вещь:
    Запрос.Текст = "ВЫБРАТЬ
                   |    ХозрасчетныйОборотыДтКт.Регистратор,
                   |    ХозрасчетныйОборотыДтКт.СуммаОборот
                   |ИЗ
                   |    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&НачПериода, &КонПериода, Регистратор, , , СчетКт = &Счет6001, , Организация = &Организация) КАК ХозрасчетныйОборотыДтКт
                   |ГДЕ
                   |    ХозрасчетныйОборотыДтКт.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг";
    Запрос.УстановитьПараметр("НачПериода",НачПериода);
    Запрос.УстановитьПараметр("КонПериода",КонецДня(КонПериода));
    Запрос.УстановитьПараметр("Счет6001",ПланыСчетов.Хозрасчетный.НайтиПоКоду("60.01"));
    Запрос.УстановитьПараметр("Организация",Организация);
    ТЗ = Запрос.Выполнить().Выгрузить();
    ТЗОплаченных = Новый ТаблицаЗначений;
    ТЗОплаченных.Колонки.Добавить("Контрагент");
    ТЗОплаченных.Колонки.Добавить("ДоговорКонтрагента");
    ТЗОплаченных.Колонки.Добавить("Поступление");
    ТЗОплаченных.Колонки.Добавить("Оплата");
    ТЗОплаченных.Колонки.Добавить("СуммаПоступления");
    ТЗОплаченных.Колонки.Добавить("СуммаОплаты");
    ТЗОплаченных.Колонки.Добавить("Просрочка");
    ТЗОплаченных.Колонки.Добавить("МаксПросрочка");
    ТЗОплаченных.Колонки.Добавить("Просрочка1"); //от 1 до 7
    ТЗОплаченных.Колонки.Добавить("Просрочка2"); // от 8 до 14
    ТЗОплаченных.Колонки.Добавить("Просрочка3"); // от 15 до 30
    ТЗОплаченных.Колонки.Добавить("Просрочка4"); // уже платить
    Для каждого СтрокаТЗ из ТЗ Цикл
        Запрос.Текст = "ВЫБРАТЬ
                       |    ХозрасчетныйОборотыДтКт.Регистратор,
                       |    ХозрасчетныйОборотыДтКт.СуммаОборот,
                       |    ХозрасчетныйОборотыДтКт.СубконтоКт3,
                       |    ХозрасчетныйОборотыДтКт.Период КАК Период
                       |ИЗ
                       |    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(
                       |            ,
                       |            ,
                       |            Регистратор,
                       |            СчетДт = &Счет6001,
                       |            ,
                       |            ,
                       |            ,
                       |            Организация = &Организация
                       |                И СубконтоДт1 = &Контрагент
                       |                И СубконтоДт2 = &ДоговорКонтрагента
                       |                И СубконтоДт3 = &ДокументПоступления) КАК ХозрасчетныйОборотыДтКт
                       |ГДЕ
                       |    ХозрасчетныйОборотыДтКт.Регистратор ССЫЛКА Документ.СписаниеСРасчетногоСчета
                       |
                       |УПОРЯДОЧИТЬ ПО
                       |    Период";
        Запрос.УстановитьПараметр("Организация",Организация);
        Запрос.УстановитьПараметр("Контрагент",СтрокаТЗ.Регистратор.Контрагент);
        Запрос.УстановитьПараметр("ДоговорКонтрагента",СтрокаТЗ.Регистратор.ДоговорКонтрагента);
        Запрос.УстановитьПараметр("ДокументПоступления",СтрокаТЗ.Регистратор);
        Выборка = ЗАпрос.Выполнить().Выгрузить();
        Если Выборка.Количество()>0 Тогда
            СуммаОплат = Выборка.Итог("СуммаОборот");
            ПоследняяОплата = Выборка[Выборка.Количество()-1].Период;
            РазницаДат = Окр((КонецДня(ТекущаяДата())-КонецДня(СтрокаТЗ.Регистратор.Дата))/86400,0);
            Для каждого пСтрокаТЗ из Выборка Цикл
                мСтрокаТЗ = ТЗОплаченных.Добавить();
                мСтрокаТЗ.Контрагент = СтрокаТЗ.Регистратор.Контрагент;
                мСтрокаТЗ.ДоговорКОнтрагента = СТрокаТЗ.Регистратор.ДоговорКонтрагента;
                мСтрокаТЗ.Поступление = СтрокаТЗ.Регистратор;
                мСТрокаТЗ.Оплата = пСтрокаТЗ.Регистратор;
                мСтрокаТЗ.СуммаПоступления = СтрокаТЗ.СуммаОборот;
                мСтрокаТЗ.СуммаОплаты = пСтрокаТЗ.СуммаОборот;
                мСтрокаТЗ.Просрочка = Окр((КонецДня(пСтрокаТЗ.Регистратор.Дата)-КонецДня(СтрокаТЗ.Регистратор.Дата))/86400,0);
                мСтрокаТЗ.МаксПросрочка = СТрокаТЗ.Регистратор.ДоговорКонтрагента.СрокОплаты;
                Если (СтрокаТЗ.суммаОборот - СуммаОплат) >0 Тогда
                Если СТрокаТЗ.Регистратор.ДоговорКонтрагента.СрокОплаты = 0 Тогда
                         мСтрокаТЗ.Просрочка4 = СтрокаТЗ.суммаОборот - СуммаОплат;
                         Продолжить;
                     КонецЕсли;    
                 РезультатПросрочки = (СТрокаТЗ.Регистратор.ДоговорКонтрагента.СрокОплаты-РазницаДат);
                 Если РезультатПросрочки <= 0 Тогда
                           мСтрокаТЗ.Просрочка4 = СтрокаТЗ.суммаОборот - СуммаОплат;
                     ИначеЕсли РезультатПросрочки>14 Тогда
                        мСтрокаТЗ.Просрочка3 = СтрокаТЗ.суммаОборот - СуммаОплат;
                    ИначеЕсли РезультатПросрочки>7 Тогда
                        мСтрокаТЗ.Просрочка2 = СтрокаТЗ.суммаОборот - СуммаОплат;
                    ИначеЕсли РезультатПросрочки>0 Тогда
                    мСтрокаТЗ.Просрочка1 = СтрокаТЗ.суммаОборот - СуммаОплат;
                 КонецЕсли;
    
                КонецЕсли;
            КОнецЦикла;
        КонецЕсли;
    КонецЦикла;

на выходе получаю ТЗ и загружаю ее в СКД, СуммаОплаты мне нужно выводить на уровне контрагент,договорконтрагента и поступление, тык вот при выводе поступления он ее умножает на то количество, скоко строчек с этим поступлением, а не группирует.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн