Имя: Пароль:
1C
 
3 набора в СКД - реально?
0 НетуаНадо
 
18.02.11
12:29
есть 3 набора (регистра)
первый основной в нем есть поле дата
остальные рассчитываются 2 набора - история определенных полей (например история курсы валют) в них берется срез последних на дату каждой записи

наборы соединены левым соединением, при попытке отобразить по одному полю с каждого набора выдает ошибку
Использование полей из несвязанных наборов недопустимо!!!

2 подчиненных набора связаны с основным по дате и по ключевому полю (валюте)

даты разные, обеъединить подчиненные наборы в один не предлагать
1 Лефмихалыч
 
18.02.11
12:35
Связать два подчиненных набора между собой тоже не предлагать?
2 НетуаНадо
 
18.02.11
12:37
нет они независимые
3 Лефмихалыч
 
18.02.11
12:40
(2) ну, тогда живи с тем, что в одной таблице ты их оба не выведешь, просто потому, что "Использование полей из несвязанных наборов недопустимо"
4 НетуаНадо
 
18.02.11
12:42
а связь по параметру в объединении допустима?
5 НетуаНадо
 
18.02.11
12:43
там почему то указать поля связи подчиненных наборов вообще нет возможности
6 НетуаНадо
 
18.02.11
12:46
или может надо использовать вложенные схемы ??
7 НетуаНадо
 
18.02.11
12:46
почему 3 набора по левому соединению в СКД не прокатывает *?(
8 Лефмихалыч
 
18.02.11
12:53
(7) потому, что в одну таблицу выводить можно только поля наборов, связанных НЕПОСРЕДСТВЕННО
9 НетуаНадо
 
18.02.11
12:58
вообще то они связаны непосредственно с первым набором но не связаны между собой

обычное левое соединение
например таб документа с 2-мя валютами и 2-мя датами  дата отгрузки и дата оплаты и нужно получить курс по первой и второй валюте и первой и второй дате оплаты
10 НетуаНадо
 
18.02.11
13:00
СКД чего то ругается на отсутствие связи между первым и вторым наборами курсов валют. полный бред - или я неправильно понимаю СКД
11 Лефмихалыч
 
18.02.11
13:04
(9) между собой два подчиненных набора не связаны, они связаны только с главным набором. Добавь еще одну связь и нииби моск
12 НетуаНадо
 
18.02.11
13:07
и так две связи каждого подчиненного с основным
13 НетуаНадо
 
18.02.11
13:21
в документации 1с написано все должно работать

Работа с несколькими наборами данных

Система компоновки данных позволяет использовать в одной компоновке несколько наборов данных.

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

Рассмотрим следующий пример:

Запишем три набора данных: «ПрайсЛист», «Остатки» и «Продажи»:

Набор данных «ПрайсЛист» имеет следующий вид:

<dataSet>

<name>ПрайсЛист</name>

<dataSource>ИсточникДанных1</dataSource>

<query>ВЫБРАТЬ

      Номенклатура.Ссылка КАК Номенклатура,

      Номенклатура.Код,

      Номенклатура.Наименование,

      Номенклатура.ЗакупочнаяЦена,

      Номенклатура.Представление

   {ВЫБРАТЬ

      Номенклатура.*,

      Код,

      Наименование,

      ЗакупочнаяЦена}

   ИЗ

      Справочник.Номенклатура КАК Номенклатура

   ГДЕ

      Номенклатура.ЭтоГруппа = ЛОЖЬ

   {ГДЕ

      Номенклатура.Ссылка.* КАК Номенклатура,

      Номенклатура.Код,

      Номенклатура.Наименование,

      Номенклатура.ЗакупочнаяЦена}

   {УПОРЯДОЧИТЬ ПО

      Номенклатура.*,

      Код,

      Наименование,

      ЗакупочнаяЦена}

   {ИТОГИ ПО

      Номенклатура.*}</query>

</dataSet>

Набор данных «Остатки» имеет следующий вид:

<dataSet>

<name>Остатки</name>

<dataSource>ИсточникДанных1</dataSource>

<query>ВЫБРАТЬ

      УчетНоменклатурыОстатки.Номенклатура,

      УчетНоменклатурыОстатки.Склад,

      ПРЕДСТАВЛЕНИЕ(УчетНоменклатурыОстатки.Склад),

      УчетНоменклатурыОстатки.КоличествоОстаток

   {ВЫБРАТЬ

      Номенклатура.*,

      Склад.*,

      КоличествоОстаток}

   ИЗ

      РегистрНакопления.УчетНоменклатуры.Остатки(, Номенклатура В (&amp;Номенклатура) {Склад}) КАК УчетНоменклатурыОстатки

   {ГДЕ

      УчетНоменклатурыОстатки.Склад.*,

      УчетНоменклатурыОстатки.КоличествоОстаток}

   {УПОРЯДОЧИТЬ ПО

      Склад.*,

      КоличествоОстаток}

   {ИТОГИ ПО

      Склад.*}</query>

<field>

   <dataPath>КоличествоОстаток</dataPath>

   <field>КоличествоОстаток</field>

   <title>Количество остаток</title>

</field>

<field>

   <dataPath>Номенклатура</dataPath>

   <field>Номенклатура</field>

   <title>Номенклатура</title>

   <useRestriction>

      <field>true</field>

      <condition>true</condition>

      <group>true</group>

      <order>true</order>

   </useRestriction>

   <attributeUseRestriction>

      <field>true</field>

      <condition>true</condition>

      <group>true</group>

      <order>true</order>

   </attributeUseRestriction>

</field>

</dataSet>

Набор данных «Продажи» имеет следующий вид:

<dataSet>

<name>Продажи</name>

<dataSource>ИсточникДанных1</dataSource>

<query>ВЫБРАТЬ

      ПродажиОбороты.Контрагент,

      ПРЕДСТАВЛЕНИЕ(ПродажиОбороты.Контрагент),

      ПродажиОбороты.Номенклатура,

      ПродажиОбороты.КоличествоОборот,

      ПродажиОбороты.СуммаОборот

   {ВЫБРАТЬ

      Контрагент.*,

      Номенклатура.*,

      КоличествоОборот,

      СуммаОборот}

   ИЗ

      РегистрНакопления.Продажи.Обороты(, , , Номенклатура В (&amp;Номенклатура) {Контрагент}) КАК ПродажиОбороты

   {ГДЕ

      ПродажиОбороты.Контрагент.*,

      ПродажиОбороты.КоличествоОборот,

      ПродажиОбороты.СуммаОборот}

   {УПОРЯДОЧИТЬ ПО

      Контрагент.*,

      КоличествоОборот,

      СуммаОборот}

   {ИТОГИ ПО

      Контрагент.*}</query>

<field>

   <dataPath>Номенклатура</dataPath>

   <field>Номенклатура</field>

   <title>Номенклатура</title>

   <useRestriction>

      <field>true</field>

      <condition>true</condition>

      <group>true</group>

      <order>true</order>

   </useRestriction>

   <attributeUseRestriction>

      <field>true</field>

      <condition>true</condition>

      <group>true</group>

      <order>true</order>

   </attributeUseRestriction>

</field>

</dataSet>

Опишем связи между наборами данных. Связь от набора данных «Прайс-лист» к набору данных «Остатки» будет выглядеть следующим образом:

<dataSetLink>

<sourceDataSet>ПрайсЛист</sourceDataSet>

<destinationDataSet>Остатки</destinationDataSet>

<sourceExpression>Номенклатура</sourceExpression>

<destinationExpression>Номенклатура</destinationExpression>

<parameter>Номенклатура</parameter>

<parameterListAllowed>true</parameterListAllowed>

</dataSetLink>

Связь от набора данных «Прайс-лист» к набору данных «Продажи» будет выглядеть следующим образом:

<dataSetLink>

<sourceDataSet>ПрайсЛист</sourceDataSet>

<destinationDataSet>Продажи</destinationDataSet>

<sourceExpression>Номенклатура</sourceExpression>

<destinationExpression>Номенклатура</destinationExpression>

<parameter>Номенклатура</parameter>

<parameterListAllowed>true</parameterListAllowed>

</dataSetLink>

Дополнительно опишем поля–итоги:

<fieldTotal>

<dataPath>КоличествоОстаток</dataPath>

<expression>Сумма(КоличествоОстаток)</expression>

</fieldTotal>

<fieldTotal>

<dataPath>КоличествоОборот</dataPath>

<expression>Сумма(КоличествоОборот)</expression>

</fieldTotal>

<fieldTotal>

<dataPath>СуммаОборот</dataPath>

<expression>Сумма(СуммаОборот)</expression>

</fieldTotal>

Если в системе компоновки данных описывается связь между двумя наборами данных, то набор данных, к которому идет связь, будет считаться зависимым набором данных. Набор данных, от которого идет связь, будет считаться родительским по отношению к зависимому от него набору данных.

В приведенных примерах зависимыми наборами данных будут наборы данных «Остатки» и «Продажи». А родительским, по отношению к обоим этим наборам, – «ПрайсЛист».

В схеме компоновки данных нет указания типа связи. Все связи считаются левыми внешними соединениями. Т.е. запись родительского набора данных будет использоваться в компоновке даже в случае, если для нее не найдены записи в зависимом наборе.

В макете компоновки данных возможно указание типа связи. Тип связи генерируется компоновщиком макета в зависимости от накладываемых глобальных отборов. В случае если на поле набора данных, являющегося зависимым, накладывается глобальный отбор, генерируемые связи в макете компоновки данных от этого набора данных до всех его родительских наборов (вплоть до начала иерархии наборов данных) будут иметь тип «Внутренняя». Это означает, что записи родительского набора данных будут участвовать в компоновке только в случае, если будут найдены записи в зависимых наборах данных.

Например, если пользователь наложит глобальный отбор на поле «Склад», наборы данных «ПрайсЛист» и «Остатки» будут связаны внутренней связью.

В случае если набор данных зависит от некоторого набора, и в связи указана возможность использования списка параметров, данные из зависимого набора данных будут получаться порциями по 1000 записей. В случае если использование списка параметров в связи не разрешено, записи будут получаться по одной.

В случае если и зависимый и родительский набор данных содержат поле с одинаковым именем, данное поле будет получаться из родительского набора данных. В приведенных примерах поле «Номенклатура» всегда будет получаться из набора данных «ПрайсЛист».

Не связанные наборы данных не могут содержать поля с одинаковыми именами, в случае если у них нет общего родителя, в котором данное поле также присутствует. Так, наборы данных «Остатки» и «Обороты» могут содержать поле «Номенклатура», но не могли бы оба содержать поле «Контрагент».

В описании связи, в выражении источника используются поля из набора данных источника (родительского набора), в выражении связи приемника используются поля набора данных приемника (зависимого набора данных). Так, при описании связи между наборами данных «ПрайсЛист» и «Остатки», выражение «Номенклатура» в свойстве ВыражениеИсточник использует поле набора данных «ПрайсЛист», а выражение «Номенклатура» в свойстве ВыражениеПриемник использует поле набора данных «Остатки».

В одной группировке не могут быть использованы поля из не связанных друг с другом наборов данных, при этом наборы данных, имеющие общие родительские наборы данных, связанными не считаются. Исключение сделано для полей–итогов, которые могут быть использованы в любой группировке. В приведенном примере мы не сможем в одной группировке задействовать поля «Склад» и «Контрагент». Однако поля «КоличествоОстаток» и «СуммаОборот» – сможем, т.к. эти поля являются ресурсами.

Данные зависимого набора данных не могут быть получены без получения данных родительского набора. Т.е. при получении данных из зависимого набора, автоматически будут получаться и данные из родительского набора (и всех родителей родителя). Т.е. при получении набора данных «Остатки» будут получаться данные и из набора «ПрайсЛист».

В случае если в группировке используются наборы данных из нескольких наборов данных, при исполнении компоновки будет осуществляться обход по последнему зависимому набору данных. Так, если в группировке будут использоваться поля наборов «ПрайсЛист» и «Остатки», обход будет происходить по набору «Остатки».

В случае если ни одного поля из связанного набора данных в настройках не задействовано, набор данных не будет включен в макет компоновки данных.
14 НетуаНадо
 
18.02.11
13:21
хочется увидеть пример такого соединения
15 НетуаНадо
 
18.02.11
13:33
получилось ;)) но как вам не скажу ибо нефиг ....
16 6tuf
 
18.02.11
13:44
жадина)
17 Ксюха
 
18.02.11
13:45
(15) так нечестно, стою тут, слушаю, а он "ибо нефиг":))
Программист всегда исправляет последнюю ошибку.