Имя: Пароль:
1C
 
Работа с параметрами СКД
0 ЭтожЯ
 
05.10.15
09:51
Добрый день, Есть отчет СКД с двумя наборами данных: Объект(ТаблицаЗначений) и Запрос.
Необходимо создать связи между наборами и вывести необходимые поля.
Поля таблицызначений: ДатаНач, ДатаКон, АвтомобильНаименование, Тоннаж.
Поля запроса(регистр сведений):Период, Автомобиль, ТоннажПоВесам. Необходимо по каждой строке Таблицы найти связь с запросом , т.е. Период должен быть в промежутке ДатаНач и ДатаКон.Автомобили должны быть связаны по наименованию или коду. Пытаюсь сформировать отчет по аналогии получения остатков номенклатуры на каждую дату документа из списка документов.
Создаю следующий запрос с параметрами
ВЫБРАТЬ
    ПеревозкаГрузов.Вес КАК ВесПоАвтовесам,
    1 КАК ВсегоРейсов,
    ПеревозкаГрузов.Регистратор,
    ПеревозкаГрузов.Автомобиль.Наименование КАК АвтомобильНаименование1
ИЗ
    РегистрСведений.ПеревозкаГрузов КАК ПеревозкаГрузов
ГДЕ
    ПеревозкаГрузов.Автомобиль.Наименование = &Наименование
    И ПеревозкаГрузов.Период МЕЖДУ &ДатаНачала И &ДатаОкончания

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

ВнешниеНаборыДанных.Вставить("ТаблицаЗначений",ТаблицаЗначений);

ОбъектОтчет=РеквизитФормыВЗначение("Отчет");
СхемаКомпоновкиДанных=ОбъектОтчет.ПолучитьМакет("Макет");


//Настройки=СхемаКомпоновкиДанных.НастройкиПоУмолчанию ;
КомпоновщикМакета=Новый КомпоновщикМакетаКомпоновкиДанных;

МакетКомпоновки=КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,ЭтотОбъект.Отчет.КомпоновщикНастроек.Настройки);

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

ДокументРезультат=ЭтотОбъект.Результат;    
            
ДокументРезультат.Очистить();

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

ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
1 ЭтожЯ
 
05.10.15
09:52
если сравнивать значения КомпоновщикМакета Значения параметров приходят пустые.
2 ЭтожЯ
 
05.10.15
09:53
Как правильно передавать параметры во второй набор, чтобы они заполняли из первого набора и осуществлялось левое соединение таблиц
3 aleks_default
 
05.10.15
09:53
опять двадцать пять
4 aleks_default
 
05.10.15
09:54
Переименуй набор данных "Запрос" как нибудь по-другому. Людей в заблуждение не вводи.
5 ЭтожЯ
 
05.10.15
10:26
..
6 ЭтожЯ
 
05.10.15
10:32
up
7 aleks_default
 
05.10.15
10:59
1. Если уж связывать автомобили, то уж точно не по наименованию а хотя бы по коду. Скорее всего в этом у тебя и проблема что в таблице и в запросе у тебя разные данные поля Автомобиль, поэтому и связь не работает
2.  В запросе нет выбранного поля "Период" по которому у тебя якобы должна быть связь. Связь должна быть такая:
Источник связи: Таблица, Приемник связи: Запрос,
1. Выражение источник:Автомобиль, ВыражениеПриемник:АвтомобильНаименование1
2. Выражение источник: ДатаНач, ВыражениеПриемник: Период, Условие связи ДатаНач<=Период
3. Выражение источник: ДатаКон, ВыражениеПриемник: Период, Условие связи ДатаКон>=Период
Может прокатит. Если нет тогда вообще концепцию менять.
8 ЭтожЯ
 
05.10.15
11:06
дело как раз в том что если устанавливаю связь только по автомобилю, связь устанавливается, как только добавляю периоды, вторая таблица остается пустой
9 ЭтожЯ
 
05.10.15
11:06
даже по наименованию
10 aleks_default
 
05.10.15
11:08
Где у тебя в "Запросе" поля "ДатаНач" и "ДатаКон"? Нету? Вот потому и не устанавливается связь.
11 aleks_default
 
05.10.15
11:11
Есть поля "ДатаНач" и "ДатаКон" а есть параметры "ДатаНачала" и "ДатаОкончания" - это разные данные.
12 ЭтожЯ
 
05.10.15
11:17
Это запрос, который используется у меня во втором наборе

ВЫБРАТЬ
    ПеревозкаГрузов.Вес КАК ВесПоАвтовесам,
    1 КАК ВсегоРейсов,
    ПеревозкаГрузов.Регистратор,
    ПеревозкаГрузов.Автомобиль.Наименование КАК АвтомобильНаименование1,
    ПеревозкаГрузов.Период
ИЗ
    РегистрСведений.ПеревозкаГрузов КАК ПеревозкаГрузов
ГДЕ
    ПеревозкаГрузов.Автомобиль.Наименование = &Наименование
    И ПеревозкаГрузов.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
13 aleks_default
 
05.10.15
11:18
Как в (7) пробовала?
14 ЭтожЯ
 
05.10.15
11:19
да,я так делала изначально, в данном случае не видится поля второго набора
15 ЭтожЯ
 
05.10.15
11:20
сейчас делаю через параметр во вкладке УстановкаСвязи
16 aleks_default
 
05.10.15
11:21
(15) Че?
17 ЭтожЯ
 
05.10.15
11:24
Создаю 3 связи между наборами: Источник связи: Таблица, Приемник связи: Запрос, Выражение источник:Автомобиль, ДатаНач, ДатаКон, ВыражениеПриемник:Автомобиль, ДатаНач, ДатаКон. В колонку параметр добавляю параметры даты и НаименованияАвтомобиля
18 ЭтожЯ
 
05.10.15
11:24
как в (0) описала
19 ЭтожЯ
 
05.10.15
11:25
блин точнее в Выражении Приемник поле Период указываю, у меня самой каша в голове с периодами,
20 ЭтожЯ
 
05.10.15
11:26
как сюда скриншот добавить?
21 aleks_default
 
05.10.15
11:26
Млять, да нет у тебя в таблице "Запрос" полей "ДатаНач" и "ДатаКон"! Или ты неправильно описываешь свои действия.
22 ЭтожЯ
 
05.10.15
11:27
(19)
23 aleks_default
 
05.10.15
12:05
Разберись с кашей в голове,  а то все желание помогать отпадает.