Имя: Пароль:
1C
1С v8
И снова СКД
0 kupreeff
 
22.03.17
22:08
Добрый вечер! Может кто есть из знатоков на форуме и подскажет... Имеется справочник статей, в нем есть статьи: Реализация, Себестоимость,Процент наценки,Маржа. Добавлен регистр, где измерение=Статья,Ресурс=Сумма; данный регистр заполняется по статьям Реализация и Себестоимость первичными документами. Нужно вывести отчет, где по строкам будут статьи, в колонках суммы помесячно. Но, наряду со статьями Реализации и Себестоимости нужно выводить статьи Процент и Маржа, которые являются расчетными. Можно ли такое реализовать? (уверен, что можно!) Хотя бы намекните как, решения не прошу) Заранее спасибо!
1 Flip
 
22.03.17
23:05
(0) Если регистр  - регистр накопления, то в запросе берешь таблицу оборотов, вытаскиваешь нужные поля; Статья, Сумма, расчетные показатели соответственно расчитываешь там же в запросе, в настройке компоновки, создаешь таблицу, в группировку строк вытаскиваешь "Статью", в колонки выводишь период, ну и ресурсы "Сумму", при этом в качестве  дополнения к "Периоду" задаешь "месяц". Соответственно период, за который надо получить данные, будет "разбиваться" по месяцам.  
https://its.1c.ru/db/metod8dev/content/1587/hdoc

Это конечно, если правильно понял задачу...
2 vicof
 
23.03.17
00:38
в чем затык-то?
3 kupreeff
 
23.03.17
07:47
Спасибо откликнувшимся, вчера уже поздно было, не прочитал ответы. (2) Я на самом деле утрировал задачу. Есть Реализация1,Себестоимость1...РеализацияN,СебестоимостьN (по разным номенклатурным группам считаются статьи) и процент с маржой для них свои. Как я понимаю, в тексте запроса нужно прописать как - то расчет этих всех статей. Так вот и затык - как!?
4 kupreeff
 
23.03.17
07:59
(0) предположу. Может через ВЫБОР КОГДА и Параметры. А в параметрах прописать все статьи , которые участвуют в этой истории?
5 kupreeff
 
23.03.17
10:10
Не понятны такие моменты: а как программно задать значение параметра и что делать, если у меня расчетная статья=конкретной статье - значение по группе статей?
6 Flip
 
23.03.17
10:17
(5)
1.
Процедура УстановитьПараметрСКД(Настройка, Имя, Значение) Экспорт
    ЗначениеПараметра =    Настройка.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(Имя));
    
    Если НЕ ЗначениеПараметра = Неопределено Тогда
        
        ЗначениеПараметра.Использование    = Истина;
        ЗначениеПараметра.Значение        = Значение;
        
    КонецЕсли;
    
КонецПроцедуры

2. Без текста запроса - наверно сложновато будет понять как лучше сделать...
7 kupreeff
 
23.03.17
11:02
(6) у меня 8.3, взлетит?
8 Flip
 
23.03.17
11:20
(7) Ну а почему не должно взлететь? Тут вроде бы ничего такого, что могло бы сломаться нету.Во всяком случае - есть смысл попробовать, в крайнем случае подкорректировать.
9 kupreeff
 
23.03.17
11:28
(8) Я извиняюсь тогда за неграммотость свою...а куда вставить эту процедуру?
10 kupreeff
 
23.03.17
11:32
Попробую еще попроще сформулировать. Выводим отчет по статьям с иерархией. Есть статья, которая определяется как сумма значений некоторых групп этих статей. Как вычислить в запросе СКД это значение.
Пример
Группа1    200
статья11   150
статья12    50
Группа2    300
статья21   100
статья22   200
СуммаГрупп 500
11 Flip
 
23.03.17
13:41
(9) У нас 8.1  УТ 10.3 и эта процедура расположена в модуле "Управление отчетами", посмотри у себя в конфигурации, если есть такой модуль, то положи туда.
А вызывать ее можно в процедуре формирования отчета.
Если ее нет, и по кнопке сформировать - происходить автоматическая компоновка отчета, то тогда придется добавлять формирование вручную, имеется ввиду придется процедуру написать, и в ней уже устанавливать нужный тебе параметр с помощью процедуры установки параметра.
Вот пример программного формирования отчета с установкой параметра:

Процедура СформироватьОтчет() Экспорт
    
    Настройки = ЭтотОбъект.КомпоновщикНастроек.Настройки;
    
        УправлениеОтчетами.УстановитьПараметрСКД(Настройки, "ВидОперации", Перечисления.ВидыОперацийПретензийКонтрагентов.КорректировкаПервичныхДокументов);
        УправлениеОтчетами.УстановитьПараметрСКД(Настройки, "ПоВсем", Ложь);
    Иначе
        
    
    // очищаем табличное поле
    ЭлементыФормы.Результат.Очистить();
    
    СхемаКомпоновкиДанных = ПолучитьМакет("Макет");
    
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    ДанныеРасшифровки.Настройки = Настройки;
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
    
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
    ПроцессорВывода.НачатьВывод();
    
    ТаблицаЗафиксирована = Ложь;
    Пока Истина Цикл
        Элемент = ПроцессорКомпоновкиДанных.Следующий();
        
        Если Элемент = НЕопределено Тогда
            Прервать;
        КонецЕсли;
        
        Если Не ТаблицаЗафиксирована
            И Элемент.ЗначенияПараметров.Количество() > 0
            И ТипЗнч(ОтчетОбъект.КомпоновщикНастроек.Настройки.Структура[0]) <> Тип("ДиаграммаКомпоновкиДанных") Тогда
            ТаблицаЗафиксирована = Истина;
            ЭлементыФормы.Результат.ФиксацияСверху = ЭлементыФормы.Результат.ВысотаТаблицы;
        КонецЕсли;        
        
        
        ПроцессорВывода.ВывестиЭлемент(Элемент);                                                                
        
    КонецЦикла;
    
    ПроцессорВывода.ЗакончитьВывод();    
    
КонецПроцедуры

Эту процедуру надо повесить на кнопку сформировать, вернее стандартную кнопку удалить, и сделать свою.

Но опять же - это все для 8.1, как поведет себя код в 8.3 затрудняюсь сказать, но можно попробовать.
12 kupreeff
 
24.03.17
09:00
(11) переаметр научились задавать, а вот, как (10) сделать совсем затыка.
13 Flip
 
26.03.17
01:10
(10) Все таблицы - линейны, поэтому считать итоги по условию - невозможно.
14 Flip
 
26.03.17
01:13
Ты можешь, реализовать ТЗ, с теми условиями, и потом передать ее в СКД, там уже сгруппировать необходимые показатели..
15 Flip
 
26.03.17
01:55
(10) Если структура иерхическая  - то СКД сама все сделает.
16 Web00001
 
26.03.17
04:17
(10)Как смысл во всей этой простыне? Почему нельзя просто установить параметр при открытии формы отчета? Или при изменении поля с параметром на форме? В 8.3 в модуле отчета есть событие ПриКомпоновкеРезультата, можно и туда засунуть установку параметра.
17 Flip
 
26.03.17
05:28
(16) Там сложность в том, чтобы по группам собрать итоги, а потом их еще и посчитать их по формуле... Что-то не приходит как - это реализоватьв запросе.
18 Flip
 
26.03.17
05:34
(16)  Установка параметров в СКД  при открытии - моветон)))
Ибо у пользователя всегда есть возможность, залезть и чо-нить поменять, а нафига ему - это надо.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший