Вход | Регистрация
 

СКД - как вывести две таблицы рядом, то есть параллельно

СКД - как вывести две таблицы рядом, то есть параллельно
Я
   RomaH
 
22.07.21 - 07:07
собственно постановка задачи:
Пациенту врачи назначают всякую фигню, много врачей, много пациентов, много документов назначений и внутри документов много назначений в виде строки
Пациенты эти назначения иногда выполняют и больница получает за них (выполненные мед. услуги) денежки - тут назначения уже в виде справочника "Номенклатура"

Надо показать что назначили, и что выполнили
Хочу слева "Назначено" - справа "Выполнено"
Полное соединение читабельно до 3 строчек - ибо умножение

без программной обработки как?

https://ibb.co/hM5KjDS - как-то так, но что бы не умножалось
   Мультук
 
1 - 22.07.21 - 07:50
(0) Т.е. не зная структуры твоей базы - нужно что-то посоветовать?

1) Нужно подумать, а связаны ли между собой назначения и исполнения. Хотя бы по видам и т.п.
2) Нужно подумать, а бывают ли исполнения без назначений
3) ???
4) profit !
   Dzenn
 
2 - 22.07.21 - 08:52
По умолчанию СКД не позволяет выводить несколько таблиц параллельно, а только друг за другом, но отчёт на СКД на выходе — это простой табличный документ, то есть до, в момент и после его формирования ты можешь делать с ним всё что хочешь. В твоём случае можно тебе посоветовать внести изменения в процедуру ПриКомпоновкеРезультата, добавив код, изменяющий ДокументРезультат
   dubolom
 
3 - 22.07.21 - 08:55
(2) Если там не нужно особо настраивать отборы, то проще СКД вообще не использовать, а делать дедовским способом.
   МимохожийОднако
 
4 - 22.07.21 - 08:57
(0) Если не выполненные назначения не оплачиваются, то их можно исключить из отчета. Полное соединение излишне.
   mikecool
 
5 - 22.07.21 - 10:02
а обычное левое соединение между назначено и выполнено, не?
или выполнить могут даже то, что не назначено? оО
   mikecool
 
6 - 22.07.21 - 10:03
+5 назначили окулиста, а попал на клизьму ))
   Малыш Джон
 
7 - 22.07.21 - 10:44
(0) если нужно вывести две таблицы параллельно строчку к строчке(безо всякой логической связи), то просто нумеруешь таблицы по любому принципу и соединяешь по номеру.
Но вообще согласен с (5) - как между назначением и выполнением нет связи?
   RomaH
 
8 - 22.07.21 - 13:09
(5) вроде в (0) написано, что "назначено" - это строка, а "выполнено" - "Номенклатура"
отчет как раз и предназначен для визуального анализа - что и почему

вопрос - как ЗАПРОСОМ соединить две таблицы не умножая

имеем две таблицы:
1,2,3,4
Один,два, три, четыре, пять

надо показать (получить запросом):
1, два
2, три
3, пять
4, один
NULL, четыре
   RomaH
 
9 - 22.07.21 - 13:10
пронумеровать не получится - нумерация нужна внутри группы (пациента)
   Kassern
 
10 - 22.07.21 - 13:20
(9) если я правильно понял, можешь добавить поле АВТОНОМЕРЗАПИСИ() и по нему сделать полное соединение.
   Малыш Джон
 
11 - 22.07.21 - 14:05
(9) значит нумеруешь внутри группы(пациента) и соединяешь по группе(пациенту) и номеру
   RomaH
 
12 - 22.07.21 - 14:14
(11) а как пронумеровать внутри группы?
   Малыш Джон
 
13 - 22.07.21 - 14:23
(12)

ВЫБРАТЬ
    "Пациент1" КАК Пациент,
    "Назначение24" КАК Назначение
ПОМЕСТИТЬ ВТ_Назначения

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

ВЫБРАТЬ
    "Пациент1",
    "Назначение42"

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

ВЫБРАТЬ
    "Пациент2",
    "Назначение65"

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

ВЫБРАТЬ
    "Пациент2",
    "Назначение87"

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

ВЫБРАТЬ
    "Пациент2",
    "Назначение91"
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ВТ_Назначения.Пациент,
    ВТ_Назначения.Назначение,
    АВТОНОМЕРЗАПИСИ() КАК ОбщийНомер
ПОМЕСТИТЬ ВТ_Назначения_ОбщаяНумерация
ИЗ
    ВТ_Назначения КАК ВТ_Назначения
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ВТ_Назначения_ОбщаяНумерация.Пациент,
    ВТ_Назначения_ОбщаяНумерация.Назначение,
    СУММА(1) КАК Номер
ПОМЕСТИТЬ ВТ_Назначения_НомерВнутриГруппы
ИЗ
    ВТ_Назначения_ОбщаяНумерация КАК ВТ_Назначения_ОбщаяНумерация
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Назначения_ОбщаяНумерация КАК ВТ_Назначения_ОбщаяНумерация1
        ПО ВТ_Назначения_ОбщаяНумерация.Пациент = ВТ_Назначения_ОбщаяНумерация1.Пациент
            И ВТ_Назначения_ОбщаяНумерация.ОбщийНомер >= ВТ_Назначения_ОбщаяНумерация1.ОбщийНомер

СГРУППИРОВАТЬ ПО
    ВТ_Назначения_ОбщаяНумерация.Пациент,
    ВТ_Назначения_ОбщаяНумерация.Назначение
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    "Пациент1" КАК Пациент,
    "Выполнение67" КАК Выполнение
ПОМЕСТИТЬ ВТ_Выполнения

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

ВЫБРАТЬ
    "Пациент2",
    "Выполнение52"

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

ВЫБРАТЬ
    "Пациент2",
    "Выполнение84"

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

ВЫБРАТЬ
    "Пациент3",
    "Выполнение35"

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

ВЫБРАТЬ
    "Пациент3",
    "Выполнение01"
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ВТ_Выполнения.Пациент,
    ВТ_Выполнения.Выполнение,
    АВТОНОМЕРЗАПИСИ() КАК ОбщийНомер
ПОМЕСТИТЬ ВТ_Выполнения_ОбщаяНумерация
ИЗ
    ВТ_Выполнения КАК ВТ_Выполнения
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ВТ_Выполнения_ОбщаяНумерация.Пациент,
    ВТ_Выполнения_ОбщаяНумерация.Выполнение,
    СУММА(1) КАК Номер
ПОМЕСТИТЬ ВТ_Выполнения_НомерВнутриГруппы
ИЗ
    ВТ_Выполнения_ОбщаяНумерация КАК ВТ_Выполнения_ОбщаяНумерация
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Выполнения_ОбщаяНумерация КАК ВТ_Выполнения_ОбщаяНумерация1
        ПО ВТ_Выполнения_ОбщаяНумерация.Пациент = ВТ_Выполнения_ОбщаяНумерация1.Пациент
            И ВТ_Выполнения_ОбщаяНумерация.ОбщийНомер >= ВТ_Выполнения_ОбщаяНумерация1.ОбщийНомер

СГРУППИРОВАТЬ ПО
    ВТ_Выполнения_ОбщаяНумерация.Пациент,
    ВТ_Выполнения_ОбщаяНумерация.Выполнение
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ЕСТЬNULL(ВТ_Назначения_НомерВнутриГруппы.Пациент, ВТ_Выполнения_НомерВнутриГруппы.Пациент) КАК Пациент,
    ЕСТЬNULL(ВТ_Назначения_НомерВнутриГруппы.Номер, ВТ_Выполнения_НомерВнутриГруппы.Номер) КАК Номер,
    ЕСТЬNULL(ВТ_Назначения_НомерВнутриГруппы.Назначение, "---") КАК Назначение,
    ЕСТЬNULL(ВТ_Выполнения_НомерВнутриГруппы.Выполнение, "---") КАК Выполнение
ИЗ
    ВТ_Назначения_НомерВнутриГруппы КАК ВТ_Назначения_НомерВнутриГруппы
        ПОЛНОЕ СОЕДИНЕНИЕ ВТ_Выполнения_НомерВнутриГруппы КАК ВТ_Выполнения_НомерВнутриГруппы
        ПО ВТ_Назначения_НомерВнутриГруппы.Пациент = ВТ_Выполнения_НомерВнутриГруппы.Пациент
            И ВТ_Назначения_НомерВнутриГруппы.Номер = ВТ_Выполнения_НомерВнутриГруппы.Номер

УПОРЯДОЧИТЬ ПО
    Пациент,
    Номер
   Малыш Джон
 
14 - 22.07.21 - 14:25
+(13) но производительность на больших массивах мягко говоря не очень хорошая
   mistеr
 
15 - 22.07.21 - 15:27
(0) А зачем их вообще соединять? Если они никак не свзываются, просто вывести два списка по алфавиту и все.
   Вафель
 
16 - 22.07.21 - 15:52
А разве выполнено - это не галочка напротив назначено?

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.