Имя: Пароль:
1C
 
СКД Запрос к периодическому регистру передать список периодов
,
0 Coldboy
 
08.12.14
14:44
Здравствуйте. Передаю список периодов, как их отразить в периодическом регистре, такой запрос я так понял не пройдет:
ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Период,
    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    ЦеныНоменклатурыСрезПоследних.Валюта,
    ЦеныНоменклатурыСрезПоследних.Регистратор
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних


Хочу получить срез цен, по нужным мне датам.
1 pessok
 
08.12.14
14:45
соединить таблицу среза и таблицу периодов
2 butterbean
 
08.12.14
14:45
проще сделать n запросов
3 Coldboy
 
08.12.14
14:46
как это все сделать через скд, набор данных запрос
4 pessok
 
08.12.14
14:50
5 Coldboy
 
08.12.14
16:08
(4) там не совсем так, там документ или еще че то, а мне нужно тупо передать массив дат, как можно проще это сделать?
6 ВРедная
 
08.12.14
16:10
Передай в запрос таблицу и сделай из нее временную, после чего (4)
7 Coldboy
 
08.12.14
16:16
(6) а проще нет варианта? Ведь же задача вроде простая, есть список дат, их нужно передать в срезпоследних регистр, я же не беру документы и не соединяю их даты.
8 pessok
 
08.12.14
16:19
(7) а чем этот вариант сложный то?
тздат = новый таблицазначений();
тздат.колонки.добавить("период", Новый описаниетипов("дата"));
новстр = тздат.добавить();
новстр.период = текущаядата();
запрос = новый запрос(
"выбрать * поместить даты из &тздат как тздат;
выбрать ценыноменклатуры.цена из регистрсведений.ценыноменклатуры.срезпоследних() как ценыноменклатуры по ценыноменклатуры.период = даты.период");
запрос.установитьпараметр("тздат", тздат);
9 Coldboy
 
08.12.14
16:20
(8) все делаю в скд только одним запросом...  через параметры подам параметр.
10 pessok
 
08.12.14
16:20
внутреннее соединение по, есессно
11 pessok
 
08.12.14
16:21
(9) в скд сделай так - первый источник данных - объект с твоей таблицей дат
второй источник - запрос

и соединяй
12 Coldboy
 
08.12.14
16:26
(11) а без набора данных объект нельзя?
13 pessok
 
08.12.14
16:28
тебе к чему-то надо в любом случае прицепиться соединением
14 Coldboy
 
08.12.14
16:39
(13) я не против, но я бы лучше в скд через 2 набора сделал. Как бы во 2 набор список значеий передать, который через параметры получаю.
15 Coldboy
 
08.12.14
16:56
up. жду варианты, хотя бы как правильно передать список значений в запрос, чтобы потом уже связывать даты.
16 Coldboy
 
08.12.14
17:27
up?
17 antoneus
 
08.12.14
17:34
так чем (11) не устраивает-то?
18 DmitriyDI
 
08.12.14
17:35
(15) в скд можно передать как внешний источник данных, ток список значений хз, а вот таблицу значений точно можно
19 Bolik1979
 
08.12.14
17:35
20 Coldboy
 
08.12.14
17:37
(19) у меня нет списка документов и тд, у меня есть список значений как параметр, я его в скд передаю, как мне этот список значений передать в запрос правильно... почему вы одну и ту же тему кидаете, я читал это и пользовался. как мне список значений в запрос запихнуть... я бы тогда жуе мог связями наборов сделать.
21 pessok
 
08.12.14
17:38
(20) пилять. никак нахрен, через таблицу значений
22 pessok
 
08.12.14
17:39
а потом нам говорят, что одноэсники сидят и пилят бабло на пустом месте. 3 часа назад дали решение, человек ломается
23 Бубка Гоп
 
08.12.14
17:39
Создай уже ТЗ с одной колонкой из своего СЗ и используй его как источник данных в СКД
24 Coldboy
 
08.12.14
17:42
(22,23) скажите как мне тогда отловить, момент  нажатия кнопки сформировать, если у тебя через СКД весь отчет делается ? Какое событие выбрать ?
25 DmitriyDI
 
08.12.14
17:42
(24) при компоновке результата?
26 pessok
 
08.12.14
17:47
стрзаменить((25)), "?", "!");
27 Coldboy
 
08.12.14
17:54
(26) а пример как такое в форме забахатаь модуле, что написать .
28 pessok
 
08.12.14
17:56
(27) сделай просто на кнопке свое событие и сфорируй скд программно

Процедура ВывестиОтчет()

            ЭлементыФормы.Результат.Очистить();

            Если ВнешниеДанные.Количество()=0 Тогда

                        Предупреждение("Внешние данные не загружены. Нажмите кнопку <Загрузить внешние данные>");

                        Возврат;

            КонецЕсли;

            ВнешниеНаборыДанных=Новый Структура;

            ВнешниеНаборыДанных.Вставить("ВнешниеДанные",ВнешниеДанные);

            КомпоновщикМакета=Новый КомпоновщикМакетаКомпоновкиДанных;

            Настройки=КомпоновщикНастроек.ПолучитьНастройки();

            МакетКомпоновки=КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки);

          
            ПроцессорКомпоновки=Новый ПроцессорКомпоновкиДанных;

            ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных,ДанныеРасшифровки);

          
            ДокументРезультат=ЭлементыФормы.Результат;

            ПроцессорВывода=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

            ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

          
            ПроцессорВывода.НачатьВывод();

          
            Пока Истина Цикл

                        ЭлементРезультата=ПроцессорКомпоновки.Следующий();

                        Если ЭлементРезультата=Неопределено Тогда

                                   Прервать;

                        Иначе

                                   ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);

                        КонецЕсли;

            КонецЦикла;

          
            ПроцессорВывода.ЗакончитьВывод();

          
            ДокументРезультат.ОтображатьСетку=Ложь;

            ДокументРезультат.ОтображатьЗаголовки=Ложь;

            ДокументРезультат.Показать();      

КонецПроцедуры
29 pessok
 
08.12.14
17:57
где:
ВнешниеНаборыДанных=Новый Структура; //это передается в СКД

            ВнешниеНаборыДанных.Вставить("ВнешниеДанные",ВнешниеДанные); // ВнешниеДанные - это твоя таблица

ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных,ДанныеРасшифровки); //это ты грузишь данные уже в скд
30 antoneus
 
08.12.14
18:05
или в модуле объекта

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    // Вставить содержимое обработчика.
    
    СтандартнаяОбработка = Ложь;

//формируешь свою тз с датами

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

КонецПроцедуры    

соответственно, создаешь набор данных объект с именем объекта тзДаты.
31 Coldboy
 
08.12.14
18:39
сделал пока через объект, кодом, но выложу результат, когда в СКД чисто накидаю все. ( попробую метод 29,30.