Topic: вопрос по отчетам.

Здравствуйте
Помогите с отчетами.
Есть таблица "персонал" где хранятся записи о сотрудниках. У каждого может быть несколько родственников, несколько образований, несколько мест работы и т.п., - эти данные хранятся в отдельных таблицах.

Допустим есть в "персонале" запись, у которой 3 родственника, 1 место работы и 1 место учебы.
При выводе этих данных на отчет получаю:
ФИО
родственник1
родственник2
родственник3

местоработы1
местоработы1
местоработы1

местоучебы1
местоучебы1
местоучебы1,

при добавлении еще одного родственника всех записей получается по 4. где и что я сделал не так?

SELECT 
personal.imya,
personal.familija,
personal.otchestvo,
personal.grajdanstvo,
personal.adrespropiski,
personal.adresprojivanija,
personal.teldom,
personal.telsot,
personal.pasportsrija,
personal.pasportvydan,
personal.kemvydan,
personal.datarojdenija,
personal.mestorojdenija,
personal.foto,
personal.organiz,
personal.doljnost,
personal.dop,
personal.id,
family.family,    
persFAM.FAMfamiliya,
persFAM.FAMimya,
persFAM.FAMotchestvo,
persFAM.FAMdatarojd,
persFAM.id_family,
persOBR.OBRnachala,
persOBR.OBRkonec,
persOBR.OBRnameuz,
persOBR.OBRspec,
persKVA.KVAvid,
persKVA.KVAprodolj,
persKVA.KVAnameuz,
persWOR.WORperiod,
persWOR.WORnameorg,
persWOR.WORadres,
persWOR.WORdoljnost,
persWOR.WORfunct

FROM personal

LEFT OUTER JOIN persOBR ON personal.id=persOBR.personal.id
LEFT OUTER JOIN persKVA ON personal.id=persKVA.personal.id
LEFT OUTER JOIN persWOR ON personal.id=persWOR.personal.id
LEFT OUTER JOIN persFAM ON personal.id=persFAM.personal.id
LEFT OUTER JOIN family ON family.id=persFAM.id_family

Re: вопрос по отчетам.

Приветствую,


Пришлите пожалуйста ваш проект на support@drive-software.com
постараюсь помочь.

Dmitry.

3 (edited by kunar80 2015-04-22 14:59:16)

Re: вопрос по отчетам.

Возможно ли в отчёт вывести записи из поля грида в таком виде, как на рисунке?

Post's attachments

Attachment icon Num.jpg 41.29 kb, 360 downloads since 2015-04-22 

Не боги горшки лепят!

Re: вопрос по отчетам.

kunar80
Можно с помощью вычисляемого поля, например имеем базу людей(person) и их телефонные номера(phone), тогда в таблице person необходимо создать выч. поле:
(SELECT group_concat(phone.number) FROM phone WHERE phone.id_person=person.id)



также в отчете блок MasterData не нужен.

Dmitry.

Re: вопрос по отчетам.

DriveSoft wrote:

kunar80
Можно с помощью вычисляемого поля, например имеем базу людей(person) и их телефонные номера(phone), тогда в таблице person необходимо создать выч. поле:
(SELECT group_concat(phone.number) FROM phone WHERE phone.id_person=person.id)

Увы, ничего не выходит. Прошу по возможности посмотреть проект.
Не решённых вопросов три:
1) Вычисляемое поле, о котором говорили раньше. Для него на frmAddAct предназначен Memo1;
2) На frm2 в ComboBox1 не отображается значение из ComboBox формы FormEdit;
3) Никак не получается записям в грид1 формы frmSpoiled при сохранении акта на уничтожение (отображается в грид2 формы frmSpoiled) присвоить соответствующий статус.

Post's attachments

Attachment icon Облік бланків.rar 37.3 kb, 492 downloads since 2015-04-23 

Не боги горшки лепят!

Re: вопрос по отчетам.

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

Dmitry.

Re: вопрос по отчетам.

Входите как пользователь.

Не боги горшки лепят!

Re: вопрос по отчетам.

kunar80
1. В вашем случае вам не  нужно вычисляемое поле. Добавил новое текстовое поле nums и добавил его в отчет.

2. Поправил.

3. К сожалению не понял как и что должно работать.


Исправленный проект приложил к сообщению.

Post's attachments

Attachment icon Облік бланків2.zip 51.46 kb, 494 downloads since 2015-04-23 

Dmitry.

9 (edited by kunar80 2015-04-23 17:49:13)

Re: вопрос по отчетам.

За второе спасибо.
А по первому вопрос не решён. Интересует не ручной (это и сам мог сделать) ввод, а автоматический перенос из грид1.  За год номеров испорченных бланков наберётся очень много, а акт делается в конце года!
По третьему. Если в гриде1 отобраны записи в интервале дат и по ним создан акт на уничтожение - в поле status таблицы для каждой записи этого интервала должно записаться "Уничтожен".

Не боги горшки лепят!

Re: вопрос по отчетам.

kunar80
К сожалению с данными вопросами не смогу помочь.
Я могу помочь вам только с конкретными вопросами.

Dmitry.

11 (edited by kunar80 2015-04-26 12:59:28)

Re: вопрос по отчетам.

Добрый день, Дмитрий! А можете показать пример с таким вычисляемым полем?

DriveSoft wrote:

kunar80
Можно с помощью вычисляемого поля, например имеем базу людей(person) и их телефонные номера(phone), тогда в таблице person необходимо создать выч. поле:
(SELECT group_concat(phone.number) FROM phone WHERE phone.id_person=person.id)

Создал в прилагаемом примере такое поле, но это ничего не даёт.

Post's attachments

Attachment icon Calculate footer3.zip 6.57 kb, 524 downloads since 2015-04-26 

Не боги горшки лепят!

Re: вопрос по отчетам.

kunar80
Вычисляемые поля используются для вывода в компонент TableGrid
Добавил в вашем примере вывод списка номеров в TextBox, после запуска проекта, нажмите кнопку "Search"

Post's attachments

Attachment icon Calculate footer4.zip 6.54 kb, 515 downloads since 2015-04-28 

Dmitry.

13 (edited by kunar80 2015-04-28 19:28:26)

Re: вопрос по отчетам.

Спасибо, Дмитрий. А возможно ли к этому добавить условие: в Edit2 показывать не все номера, а только по тем записям, которые открыты в гриде. Например, через поиск отобран Petrov, тогда в Edit2 только его номера.
Или в прикрепленном примере при отборе записей в интервале дат...

Post's attachments

Attachment icon Calculate footer5.zip 6.4 kb, 477 downloads since 2015-04-28 

Не боги горшки лепят!

Re: вопрос по отчетам.

kunar80 wrote:

Спасибо, Дмитрий. А возможно ли к этому добавить условие: в Edit2 показывать не все номера, а только по тем записям, которые открыты в гриде. Например, через поиск отобран Petrov, тогда в Edit2 только его номера.
Или в прикрепленном примере при отборе записей в интервале дат...

Готово.

Post's attachments

Attachment icon Calculate footer5.zip 7.09 kb, 483 downloads since 2015-04-28 

Dmitry.

15 (edited by kunar80 2015-04-29 08:05:52)

Re: вопрос по отчетам.

DriveSoft wrote:

Готово.

Спасибо! Это то, что нужно. Однако при переносе в проект даёт ошибку синтаксиса

procedure Form1_TableGrid1_OnChange (Sender: string);
var
    i,c: integer;
    sWHERE: string;
begin
     sWHERE := '';
     c := Form1.TableGrid1.RowCount - 1;
     for i := 0 to c do
         begin
         sWHERE := sWHERE + 'main.id='+IntToStr(Form1.TableGrid1.dbIndexToID(i)) + ' OR ';
         end;
            Form1.Edit2.Text := IntToStr(Form1.TableGrid1.RowCount); // result
     if sWHERE <> '' then
         begin
         sWHERE := ' WHERE ' + sWHERE;
         SetLength(sWHERE, Length(sWHERE)-9);
         end;
            Form1.Edit1.Text := SQLExecute('SELECT group_concat(spoiled.num) FROM main LEFT OUTER JOIN spoiled ON spoiled.id_main=main.id'+sWHERE);
end;

Что не так, никак не пойму. Что это за "."?

Post's attachments

Attachment icon Ошибка.jpg 20.12 kb, 301 downloads since 2015-04-29 

Не боги горшки лепят!

Re: вопрос по отчетам.

Это расшифровка ошибки. В конце записи выпадает последний ID = 11

Post's attachments

Attachment icon Ошибка1.jpg 24.66 kb, 318 downloads since 2015-04-29 

Не боги горшки лепят!

Re: вопрос по отчетам.

kunar80
Вы зачем то изменили строку

SetLength(sWHERE, Length(sWHERE)-4);

на

SetLength(sWHERE, Length(sWHERE)-9);
Dmitry.

Re: вопрос по отчетам.

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

Не боги горшки лепят!

Re: вопрос по отчетам.

И ещё вопросик в продолжение.
Итоговая запись выглядит так: 100501,100502,100503
А как можно добавить пробелы, чтобы было так: 100501, 100502, 100503?
Пробовал и так и эдак, но ничего не добился. Можно, конечно, и так оставить, но при длинном списке получаются некорректные переносы на новую строку в Report  - разрывает в любом месте.

Не боги горшки лепят!

Re: вопрос по отчетам.

замените эту строку

Form1.Edit2.Text := SQLExecute('SELECT group_concat(phone.number) FROM person LEFT OUTER JOIN phone ON phone.id_person=person.id' +sWHERE);

на

Form1.Edit2.Text := SQLExecute('SELECT group_concat(phone.number, '', '') FROM person LEFT OUTER JOIN phone ON phone.id_person=person.id' +sWHERE);
Dmitry.

21 (edited by kunar80 2015-04-30 18:05:42)

Re: вопрос по отчетам.

DriveSoft wrote:

замените эту строку

Спасибо, работает

Post's attachments

Attachment icon Calculate footer5.zip 6.98 kb, 487 downloads since 2015-04-30 

Не боги горшки лепят!

Re: вопрос по отчетам.

Добрый День!

Столкнулся с точно такой же проблемой как у zc13569

Решения так и не нашел. Было какое-то решение данной проблемы?

Re: вопрос по отчетам.

porked wrote:

Добрый День!

Столкнулся с точно такой же проблемой как у zc13569

Решения так и не нашел. Было какое-то решение данной проблемы?

Приветствую,


Здесь вы сможете найти пример подобного отчета
http://myvisualdatabase.com/forum/viewtopic.php?id=1664

Dmitry.

24 (edited by porked 2016-10-03 14:10:56)

Re: вопрос по отчетам.

Благодарю за ответ, но это не совсем то:

этот вариант я видел, но он абсолютно неработоспособен.

Во-первых в 1,44 не открывается вообще, даже если и пошаманить над этим.
Во-вторых, в новой версии хоть и открывается, но с постоянными ошибками, особенно в дизайнере отчетов (скрин прилагается).
В-третьих, как подгонять скрипт под собственный проект, вообще непонятно.
и в-четвертых, этот скрипт выводит в отчет все записи таблицы, а нужно только выделенной записи.


Тут скорее нужно либо SQL-запросом создать два массива данных на вырузку в отчет;
Либо в самом отчете сделать удаление дубликатов в MasterData.

И то и другое я не понимаю как делать, в гугле тоже ничего.

Post's attachments

Attachment icon 111.jpg 171.62 kb, 353 downloads since 2016-10-03 

Re: вопрос по отчетам.

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

Dmitry.