Нужен Left Join, а получаю Inner Join (связь)
- compositum
- Сообщения: 252
- Зарегистрирован: 15 янв 2008, 15:12
- Откуда: Санкт-Петербург
Нужен Left Join, а получаю Inner Join (связь)
Для датабэндов-родителей, установите, пожалуйста, свойство PrintIfDetailEmpty(Печатать, если нет детальных) в true.
Спасибо.
Спасибо.
- compositum
- Сообщения: 252
- Зарегистрирован: 15 янв 2008, 15:12
- Откуда: Санкт-Петербург
Нужен Left Join, а получаю Inner Join (связь)
Спасибо.Edward писал(а):Для датабэндов-родителей, установите, пожалуйста, свойство PrintIfDetailEmpty(Печатать, если нет детальных) в true.
Спасибо.
- compositum
- Сообщения: 252
- Зарегистрирован: 15 янв 2008, 15:12
- Откуда: Санкт-Петербург
Нужен Left Join, а получаю Inner Join (связь)
в дизайнере установлено свойство:
Но тем не менее разделы, в которых нет записей все равно печатаются. Почему?
Но тем не менее разделы, в которых нет записей все равно печатаются. Почему?
Нужен Left Join, а получаю Inner Join (связь)
В случае Вашего отчета имеем структутру Master-Detail - SubDetail1, SubDetail2.
Принять решение о необходимости печати Master бэнда возможно лишь проанализировав наличие подчиненных записей в SubDetail1, SubDetail2. Полное отсутсвие записей в SubDetail1 и SubDetail2 означает отсутствие необходимости печатать Master.
Вот код для BeforePrintEvent для датабэнда ДанныеtblPartsSmet, который и выступает Master ом.
P.S. Если для отображения Master достаточно наличия одной из деталей и после этого нет нужды проверять присутствие записей в SubDetail1 и SubDetail2, то код выглядит следующим образом:
Спасибо.
Принять решение о необходимости печати Master бэнда возможно лишь проанализировав наличие подчиненных записей в SubDetail1, SubDetail2. Полное отсутсвие записей в SubDetail1 и SubDetail2 означает отсутствие необходимости печатать Master.
Вот код для BeforePrintEvent для датабэнда ДанныеtblPartsSmet, который и выступает Master ом.
Код: Выделить всё
bool subDetailPresent = false;
foreach (DataRow masterRow in tblPartsSmet.DataTable.Select("PartID=" + tblPartsSmet.PartID.ToString()))
{
foreach (DataRow curDetailRow in masterRow.GetChildRows(masterRow.Table.ChildRelations[0]))
{
if (curDetailRow != null)
{
foreach (DataRow curSubDetailRow1 in curDetailRow.GetChildRows(curDetailRow.Table.ChildRelations[0]))
{
if (curSubDetailRow1 != null)
{
subDetailPresent = true;
break;
}
}
if (!subDetailPresent)
{
foreach (DataRow curSubDetailRow2 in curDetailRow.GetChildRows(curDetailRow.Table.ChildRelations[1]))
{
if (curSubDetailRow2 != null)
{
subDetailPresent = true;
break;
}
}
}
}
}
ДанныеtblPartsSmet.Enabled = subDetailPresent;
}
P.S. Если для отображения Master достаточно наличия одной из деталей и после этого нет нужды проверять присутствие записей в SubDetail1 и SubDetail2, то код выглядит следующим образом:
Код: Выделить всё
bool subDetailPresent = false;
foreach (DataRow masterRow in tblPartsSmet.DataTable.Select("PartID=" + tblPartsSmet.PartID.ToString()))
{
foreach (DataRow curDetailRow in masterRow.GetChildRows(masterRow.Table.ChildRelations[0]))
{
if (curDetailRow != null)
{
subDetailPresent = true;
break;
}
}
ДанныеtblPartsSmet.Enabled = subDetailPresent;
}
Спасибо.
- compositum
- Сообщения: 252
- Зарегистрирован: 15 янв 2008, 15:12
- Откуда: Санкт-Петербург
Нужен Left Join, а получаю Inner Join (связь)
Возникли трудности с формулой...
Мне нужно получить усредненную единичную расценку материалов по работе, в состав которой они входят.
Создал переменную, присваиваю ей значение так:
Формула выглядит так:
Однако результат получаю не верный.
Данный фрагмент работает правильно:
Данный фрагмент кода дает не верные результаты (причем единое число для всех работ):
Не могу понять, что я не верно делаю? почему формула, написанная мною, не верно считает количество записей материалов в составе работы?
Файлы отчета выложил тут
Так же не смог пока что реализовать такой момент: Раздел содержит работы, работы содержат материалы и механизмы, но...
в Конце каждого раздела должны отображаться записи начислений на этот раздел, т.е. в датабенд хвоста
группировки нужно закинуть необходимые поля. Если я это делаю - получаю только первую запись начислений. Остальные
не отображаются. Скорее всего это нужно делать как-то иначе. Но пока не смого разобраться как.
Если не сложно, могли бы пояснить как работать с вашими вложенными отчетами? я могу создать еще одну страницу, в ней оформить лист,
но как связать его с первым листом так и не разобрался. ?
Мне нужно получить усредненную единичную расценку материалов по работе, в состав которой они входят.
Создал переменную, присваиваю ей значение так:
Код: Выделить всё
public void ДанныеtblWorksSm_BeforePrint(object sender, System.EventArgs e)
{
{WorkID = tblWorksSm.WorkSmID;};
}
Код: Выделить всё
{CountIf(Данныеtbl_sm_Mat,tbl_sm_Mat.MatID,WorkID == tbl_sm_Mat.smWorkID)>0 ?
SumIf(Данныеtbl_sm_Mat,(tbl_sm_Mat.MatCost * tbl_sm_Mat.MatValue),
WorkID == tbl_sm_Mat.smWorkID)/CountIf(Данныеtbl_sm_Mat,tbl_sm_Mat.MatID,
WorkID == tbl_sm_Mat.smWorkID) : 0}
Данный фрагмент работает правильно:
Код: Выделить всё
SumIf(Данныеtbl_sm_Mat,(tbl_sm_Mat.MatCost * tbl_sm_Mat.MatValue),
WorkID == tbl_sm_Mat.smWorkID)
Код: Выделить всё
CountIf(Данныеtbl_sm_Mat,tbl_sm_Mat.MatID,WorkID == tbl_sm_Mat.smWorkID)
Не могу понять, что я не верно делаю? почему формула, написанная мною, не верно считает количество записей материалов в составе работы?
Файлы отчета выложил тут
Так же не смог пока что реализовать такой момент: Раздел содержит работы, работы содержат материалы и механизмы, но...
в Конце каждого раздела должны отображаться записи начислений на этот раздел, т.е. в датабенд хвоста
группировки нужно закинуть необходимые поля. Если я это делаю - получаю только первую запись начислений. Остальные
не отображаются. Скорее всего это нужно делать как-то иначе. Но пока не смого разобраться как.
Если не сложно, могли бы пояснить как работать с вашими вложенными отчетами? я могу создать еще одну страницу, в ней оформить лист,
но как связать его с первым листом так и не разобрался. ?
Нужен Left Join, а получаю Inner Join (связь)
Посмотрите, пожалуйста, Ваш модифицированный отчет:
http://forumru.stimulsoft.com/Upload/st ... dified.zip
По Вашему предыдущему вопросу для скрытия Master бэндов код, о котором я писал выше, был добавлен в BeforePrintEvent GroupHeader-a "Заголовок1". Чтобы заголовок группы скрывался по условию, вместо
ДанныеtblPartsSmet.Enabled = subDetailPresent;
указано
ЗаголовокГруппы1.Enabled = subDetailPresent;
остальной код - без изменений.
По последнему вопросу я изменил во всех формулах вычисление функции CountIf:
CountIf(Данныеtbl_sm_Mat,WorkID == tbl_sm_Mat.smWorkID)
Остальное осталось без изменений.
Спасибо.
http://forumru.stimulsoft.com/Upload/st ... dified.zip
По Вашему предыдущему вопросу для скрытия Master бэндов код, о котором я писал выше, был добавлен в BeforePrintEvent GroupHeader-a "Заголовок1". Чтобы заголовок группы скрывался по условию, вместо
ДанныеtblPartsSmet.Enabled = subDetailPresent;
указано
ЗаголовокГруппы1.Enabled = subDetailPresent;
остальной код - без изменений.
По последнему вопросу я изменил во всех формулах вычисление функции CountIf:
CountIf(Данныеtbl_sm_Mat,WorkID == tbl_sm_Mat.smWorkID)
Остальное осталось без изменений.
Спасибо.
- compositum
- Сообщения: 252
- Зарегистрирован: 15 янв 2008, 15:12
- Откуда: Санкт-Петербург
Нужен Left Join, а получаю Inner Join (связь)
ОГРОМНОЕ ВАМ СПАСИБО!!!!! СУПЕР!!!!Edward писал(а):Посмотрите, пожалуйста, Ваш модифицированный отчет:
http://forumru.stimulsoft.com/Upload/st ... dified.zip
По Вашему предыдущему вопросу для скрытия Master бэндов код, о котором я писал выше, был добавлен в BeforePrintEvent GroupHeader-a "Заголовок1". Чтобы заголовок группы скрывался по условию, вместо
ДанныеtblPartsSmet.Enabled = subDetailPresent;
указано
ЗаголовокГруппы1.Enabled = subDetailPresent;
остальной код - без изменений.
По последнему вопросу я изменил во всех формулах вычисление функции CountIf:
CountIf(Данныеtbl_sm_Mat,WorkID == tbl_sm_Mat.smWorkID)
Остальное осталось без изменений.
Спасибо.
Нужен Left Join, а получаю Inner Join (связь)
И Вам хорошего настроения и удачи! Ваши подробные объяснения проблемы и примеры помогают найти решение достаточно быстро с минимальными потерями времени на воспроизводство проблемы. Спасибо Вам за экономию нашего времени!
Спасибо.
Спасибо.
- compositum
- Сообщения: 252
- Зарегистрирован: 15 янв 2008, 15:12
- Откуда: Санкт-Петербург
Нужен Left Join, а получаю Inner Join (связь)
Продолжаю конструирование своего отчета...
создаю отчет по объекту:
но получаю странный результат:
разместил данный отчет здесь. Не могу понять, в следствие чего происходит это смещение, а так же почему не верно считает колонка Стоимость Цена за ед., ведь в ней я просто сложил две формулы (указал как 1 и 2).
Так же, после каждой группы работ нужно выводить начисления на эту группу. Решил закинуть их через вложенный отчет, т.к. если просто забросить на бэнд итога группы поля, то получаю лишь первое.
Однако возникла проблема. Записи начислений не напрямую связаны с таблицей разделов, а через таблицу групп начислений.
Т.о. в обеих таблицах имеется ID группы начислений...
Учитывая этот факт, я создал в таблице разделов дополнительную связь, которая минуя таблицу групп начислений связывает записи разделов с записями начислений на этот раздел... Но... мне повезло, что между ними была посредником лишь одна таблица, а если бы их было больше - этот номер не прошел бы...
Правильно ли я поступил, или есть другой, более рациональный способ решения этой задачи? Кроме того, задача все же не решена... записи разделов добавились, но... Как=то странно (по одной записи на лист, размещаясь непосредственно на др. записях отчета... Почему так получилось? Так же для данной таблицы не удастся установить свойство ReconnectonEachRow = true, поскольку у нее оно отсутствует...
создаю отчет по объекту:
но получаю странный результат:
разместил данный отчет здесь. Не могу понять, в следствие чего происходит это смещение, а так же почему не верно считает колонка Стоимость Цена за ед., ведь в ней я просто сложил две формулы (указал как 1 и 2).
Так же, после каждой группы работ нужно выводить начисления на эту группу. Решил закинуть их через вложенный отчет, т.к. если просто забросить на бэнд итога группы поля, то получаю лишь первое.
Однако возникла проблема. Записи начислений не напрямую связаны с таблицей разделов, а через таблицу групп начислений.
Т.о. в обеих таблицах имеется ID группы начислений...
Учитывая этот факт, я создал в таблице разделов дополнительную связь, которая минуя таблицу групп начислений связывает записи разделов с записями начислений на этот раздел... Но... мне повезло, что между ними была посредником лишь одна таблица, а если бы их было больше - этот номер не прошел бы...
Правильно ли я поступил, или есть другой, более рациональный способ решения этой задачи? Кроме того, задача все же не решена... записи разделов добавились, но... Как=то странно (по одной записи на лист, размещаясь непосредственно на др. записях отчета... Почему так получилось? Так же для данной таблицы не удастся установить свойство ReconnectonEachRow = true, поскольку у нее оно отсутствует...