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

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

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

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

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

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

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

надо показать (получить запросом):
1, два
2, три
3, пять
4, один
NULL, четыре
9 RomaH
 
naïve
22.07.21
13:10
пронумеровать не получится - нумерация нужна внутри группы (пациента)
10 Kassern
 
22.07.21
13:20
(9) если я правильно понял, можешь добавить поле АВТОНОМЕРЗАПИСИ() и по нему сделать полное соединение.
11 Малыш Джон
 
22.07.21
14:05
(9) значит нумеруешь внутри группы(пациента) и соединяешь по группе(пациенту) и номеру
12 RomaH
 
naïve
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) но производительность на больших массивах мягко говоря не очень хорошая
15 mistеr
 
22.07.21
15:27
(0) А зачем их вообще соединять? Если они никак не свзываются, просто вывести два списка по алфавиту и все.
16 Вафель
 
22.07.21
15:52
А разве выполнено - это не галочка напротив назначено?