Продолжаю конструирование своего отчета...
создаю отчет по объекту:
но получаю странный результат:
разместил данный отчет здесь. Не могу понять, в следствие чего происходит это смещение, а так же почему не верно считает колонка Стоимость Цена за ед., ведь в ней я просто сложил две формулы (указал как 1 и 2).
Так же, после каждой группы работ нужно выводить начисления на эту группу. Решил закинуть их через вложенный отчет, т.к. если просто забросить на бэнд итога группы поля, то получаю лишь первое.
Однако возникла проблема. Записи начислений не напрямую связаны с таблицей разделов, а через таблицу групп начислений.
Т.о. в обеих таблицах имеется ID группы начислений...
Учитывая этот факт, я создал в таблице разделов дополнительную связь, которая минуя таблицу групп начислений связывает записи разделов с записями начислений на этот раздел... Но... мне повезло, что между ними была посредником лишь одна таблица, а если бы их было больше - этот номер не прошел бы...
Правильно ли я поступил, или есть другой, более рациональный способ решения этой задачи? Кроме того, задача все же не решена... записи разделов добавились, но... Как=то странно (по одной записи на лист, размещаясь непосредственно на др. записях отчета... Почему так получилось? Так же для данной таблицы не удастся установить свойство ReconnectonEachRow = true, поскольку у нее оно отсутствует...
Нужен Left Join, а получаю Inner Join (связь)
- compositum
- Сообщения: 252
- Зарегистрирован: 15 янв 2008, 15:12
- Откуда: Санкт-Петербург
- compositum
- Сообщения: 252
- Зарегистрирован: 15 янв 2008, 15:12
- Откуда: Санкт-Петербург
Нужен Left Join, а получаю Inner Join (связь)
В проекте нашел ошибку - не корректно задал условие выборки. в событии
private void btnAccept_Click(object sender, EventArgs e)
Исправил: в текст запроса добавил группировку:
внес изменения в отчет - избавился от переменных, которые ранее насоздавал и использовал, а так же добавил в формулу
функцию округления
однако меня это не спасло - расчет все равно дает погрешность. Остальные вопросы так же остались...
Измененный отчет выложил здесь.
private void btnAccept_Click(object sender, EventArgs e)
Исправил: в текст запроса добавил группировку:
Код: Выделить всё
#region Заливка содержимого групп начислений на разделы сметы...
strCmd = "SELECT tblKoeffGP.KoeffID, tblKoeffGP.KoeffNomber, tblKoeffGP.KoeffName, " +
" tblKoeffGP.KoeffType, tblKoeffGP.KoeffValue, tblKoeffGP.grKoefID " +
" FROM (tbl_grKoef INNER JOIN tblPartsSmet ON tbl_grKoef.grKoefID = tblPartsSmet.grKoefs)" +
" INNER JOIN (tblKoeffType INNER JOIN tblKoeffGP ON tblKoeffType.KoeffTypeID = " +
" tblKoeffGP.KoeffType) ON tbl_grKoef.grKoefID = tblKoeffGP.grKoefID " +
" GROUP BY tblKoeffGP.KoeffID, tblKoeffGP.KoeffNomber, tblKoeffGP.KoeffName, tblKoeffGP.KoeffType, " +
" tblKoeffGP.KoeffValue, tblKoeffGP.grKoefID, " +
" tblPartsSmet.SmetaID HAVING (((tblPartsSmet.SmetaID)=" + selNode.recID + "));";
cmd.CommandText = strCmd;
reader = cmd.ExecuteReader();
dsBuilderPremium.Tables["tblKoeffGP"].Clear();
dsBuilderPremium.Tables["tblKoeffGP"].Load(reader);
функцию округления
Код: Выделить всё
{Round((CountIf(Данныеtbl_sm_Mat,tblWorksSm.WorkSmID == tbl_sm_Mat.smWorkID)>0 ?
SumIf(Данныеtbl_sm_Mat,(tbl_sm_Mat.MatCost * tbl_sm_Mat.MatValue),
tblWorksSm.WorkSmID == tbl_sm_Mat.smWorkID) : 0),2) * tblWorksSm.WorkSmValue}
Измененный отчет выложил здесь.