Имя: Пароль:
1C
1С v8
Отчет СКД из 2 наборов данных
,
0 ogion83
 
07.04.21
11:28
День добрый.
Делаю отчет в СКД. 2 набора данных по остаткам и оборотам, связываю по номенклатуре, группировка по номенклатуре и документам. Все норм, но не удается сделать так чтобы выводились корректно документы из этих двух запросов. Выводятся документы из 1 запроса, а из другого нет. Думал сгруппировать документы в настройках структуры отчета, но выдает ошибку, что нельзя.
1 fisher
 
07.04.21
11:32
Связи наборов данных в СКД работают по принципу левого соединения. Но если ухитриться наложить отбор только на данные "правого" набора, то соединение превращается во внутреннее.
Если у тебя проблема за пределами этих особенностей - скорее всего неправильно настроены условия соединения.
ЗЫ. Мой стандартный совет - использовать наборы данных только в исключительных случаях, а не для банальной декомпозиции запроса. Просто потому, что это менее универсально.
2 ogion83
 
07.04.21
11:35
Мне надо сравнить движения по документам из двух регистров (по одинаковым наименованиям номенклатуры) Как тогда лучше это сделать?
3 ogion83
 
07.04.21
11:37
Думал сначала сделать в СКД: запрос по 1 регистру и вложенный запрос по 2, но не знаю как получить ресурсы из 2 запроса
4 fisher
 
07.04.21
11:39
По одним и тем же регистраторам?
ОБЪЕДИНИТЬ ВСЕ
с последующим
СГРУППИРОВАТЬ ПО
   Регистратор, Номенклатура
5 toypaul
 
гуру
07.04.21
11:39
здесь рассматривали подобный отчет https://learn.programstore.ru/video_kurs_skd

но если данные в одной базе 2 набора ни к чему. делать надо через объединение (в запросе)
6 ogion83
 
07.04.21
11:41
(4) Могут быть и разные регистраторы
7 ogion83
 
07.04.21
11:42
(5) Создавать вложенный запрос?
8 fisher
 
07.04.21
11:43
(6) То есть, нужна группировка до номенклатуры но с возможностью детализации до регистраторов из обоих регистров? Тогда объединение без группировки. Группировка по номенклатуре будет уже в настройках СКД.
9 ogion83
 
07.04.21
11:45
Да к примеру у Номенклатура1 по 1 регистру приход 5, по второму приход 6 и надо вывести список документов по обоим регистрам чтобы найти где не совпало.
10 fisher
 
07.04.21
11:48
ВЫБРАТЬ Номенклатура, Регистратор, Приход КАК Приход1, 0 КАК Приход2
ИЗ
  Регистр1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ Номенклатура, Регистратор, 0, Приход
ИЗ
  Регистр2
11 fisher
 
07.04.21
11:51
В вычисляемых полях СКД можешь добавить поле разницы между Приход1 и Приход2, в условном оформлении включить красный цвет фона для ненулевой разницы по номенклатуре и наслаждаться.
12 ogion83
 
07.04.21
11:51
Мне надо видеть, что этот приход был по 1 регистру, а этот приход по 2.
13 fisher
 
07.04.21
11:52
(12) А у тебя для этого разные колонки для приходов по разным регистрам. Не тупи :)
14 ogion83
 
07.04.21
11:54
ВЫБРАТЬ Номенклатура, Регистратор, Приход КАК Приход1, Расход КАК Расход1
ИЗ
  Регистр1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ Номенклатура, Регистратор, Приход Как Приход2, Расход Как Расход2
ИЗ
  Регистр2
15 ogion83
 
07.04.21
11:54
Так?
16 fisher
 
07.04.21
11:56
(15) Нет. Колонки для объединяемых наборов общие, определяются только порядком, а названия берутся по первому набору. Смотри (10)
17 ogion83
 
07.04.21
11:56
(14) Не так. Понял
18 fisher
 
07.04.21
12:05
Без хорошего владения языком запросов в 1С никуда.
Мой путь был через https://www.sql-ex.ru (Правда тогда он назывался иначе и не знаю, насколько он жив сейчас).
Отличный ресурс для практического овладения. Это не 1С, но язык запросов 1С является диалектом классического sql, так что вполне.
19 ogion83
 
07.04.21
12:05
Сделал как в (10) Стало лучше, только почему то при включении группировки по документам не показывает остатки начальные и конечные по 2 регистру
20 ogion83
 
07.04.21
12:07
Может не хватает где нибудь ЕстьNull ?
21 ogion83
 
07.04.21
12:08
ВЫБРАТЬ
    СырьеОстаткиИОбороты.Регистратор,
    СырьеОстаткиИОбороты.ПериодСекунда,
    СырьеОстаткиИОбороты.МПЗ,
    СырьеОстаткиИОбороты.КоличествоНачальныйОстаток КАК НОС,
    0 КАК НОШ,
    СырьеОстаткиИОбороты.КоличествоПриход КАК ПС,
    0 КАК ПШ,
    СырьеОстаткиИОбороты.КоличествоРасход КАК РС,
    0 КАК РШ,
    СырьеОстаткиИОбороты.КоличествоКонечныйОстаток КАК КОС,
    0 КАК КОШ
ИЗ
    РегистрНакопления.Сырье.ОстаткиИОбороты(, , Авто, , ) КАК СырьеОстаткиИОбороты

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ШихтаМастеровОстаткиИОбороты.Регистратор,
    ШихтаМастеровОстаткиИОбороты.ПериодСекунда,
    ШихтаМастеровОстаткиИОбороты.Шихта,
    0,
    ШихтаМастеровОстаткиИОбороты.КоличествоНачальныйОстаток,
    0,
    ШихтаМастеровОстаткиИОбороты.КоличествоПриход,
    0,
    ШихтаМастеровОстаткиИОбороты.КоличествоРасход,
    0,
    ШихтаМастеровОстаткиИОбороты.КоличествоКонечныйОстаток
ИЗ
    РегистрНакопления.ШихтаМастеров.ОстаткиИОбороты(, , Авто, , ) КАК ШихтаМастеровОстаткиИОбороты
22 ogion83
 
07.04.21
12:11
Как то выборочно делает при группировке по докам: Нач остатки по 2 регистру не показывает никакие, а конечные остатки по нему только итоговые выдает
23 fisher
 
07.04.21
12:14
(19) Честно говоря, не приходилось в одном отчете одновременно детализировать остатки по двум разным регистрам. Поэтому я ни в чем не уверен :)
Первым делом я бы проверил настройку ролей полей в СКД (на ИТС есть пара статей про это, самая полезная - как корректно настраивать "собственные" остатки, а не из регистра остатков).
24 fisher
 
07.04.21
12:16
Во всем, о чем писалось выше, я уверен на уровне оборотов. А вот расчет остатков СКД - это отдельная магия со своими особенностями.
25 ogion83
 
07.04.21
12:50
Вот у остатков 1 регистра в Ролях указано имя "Группа", а у 2 регистра "Группа2" Может в этом дело, хотя пробовал везде указать "Группа" но выдает ошибку
26 ogion83
 
07.04.21
12:56
Обнаружил: в Начальных остатках, если есть вес у 1 регистра, то показывает 0 у второго и наоборот.
27 Cthulhu
 
07.04.21
13:08
связь нескольких наборов данных - это простейший случай !для убогих" и для экономии времени.
пиши дин набор - серьезный запрос.
28 ogion83
 
07.04.21
13:29
29 ogion83
 
07.04.21
13:29
Сделал как там и все пашет как часы.
30 fisher
 
07.04.21
13:40
(28) Интересно. То есть все полечилось добавлением неявного обязательного измерения-разделителя?
31 ogion83
 
07.04.21
13:42
(30) Ага. Вот как до такого догадаться?
32 fisher
 
07.04.21
13:46
(31) Видимо "Опыт - сын ошибок трудных, и гений - парадоксов друг". Чтобы поймать СКД - нужно думать как СКД!