Member 14114880 Ответов: 3

Может ли crytsal report отображать текст в ячейках вместо цифр


всем привет,
Я работаю над проектом по человеческим ресурсам
в котором у меня есть таблица сотрудников ,таблица назначений и таблица ежедневных назначений

Запись таблицы ежедневных назначений показывает, что сотрудник сделал в определенную дату, т. е. одна запись для каждого сотрудника в каждую дату это означает, что если есть 50 сотрудников, то 50 записей будут вводиться ежедневно, в течение десяти дней будет 500 записей. Эта таблица содержит (идентификатор сотрудника и идентификатор назначения и дату

Существует таблица сотрудников, которая содержит все данные о сотрудниках (имя, телефон, возраст, ... )
Существует таблица назначений, которая содержит различные типы назначений (на работе, больничный, отпуск, полевая работа ....)

Я хочу отобразить сетку в отчете crystal, которая показывает период (например, месяц)
что каждый сотрудник делал каждый день
это должно быть что-то вроде этого:

колонка : первый день | второй день | третий день | четвертый день
сотрудник 1 : на работе | больничный | на работе | отпуск
сотрудник 2 : на работе | в отпуске | на работе | на работе
сотрудник 3 : задание | задание | задание | задание

может ли кто-нибудь помочь мне с этим

Что я уже пробовал:

Я попытался вкладке Хрустальный крест доклад, но он дает не данные, а не строковые данные

Я сделал код, который отображает его в виде таблицы данных, но для запуска требуется много времени, и мне нужно, чтобы он был напечатан

Maciej Los

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

Member 14114880

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

Maciej Los

Я все еще не вижу ваших входных данных...

Member 14114880

извините , в мой первый раз здесь я обновил его

3 Ответов

Рейтинг:
2

W∴ Balboos, GHB

Чтобы создать таблицу, вам нужно будет использовать ЛЕВОЕ СОЕДИНЕНИЕ, поскольку вполне возможно, что у сотрудника может не быть записи на какой-то конкретный день.

Узнавать ПРИСОЕДИНИТЬСЯ[^]

Иметь месячные колонки на странице - плохая идея, это будет совершенно неуправляемо. Отвратительно печатать и королевскую кастрюлю, если на экране для прокрутки.

Одной из важнейших частей развития является рассмотрение результата. Это можно использовать? Как часто, так и нет, вас попросят сделать вещи, которые будут смехотворны, если их реализовать.


Рейтинг:
2

Member 14114880

Я сделал код, чтобы сделать это в VB.net
это просто
1-получает таблицу для текущего существующего сотрудника
2 - Установите строки сетки отображения (DGV) равными существующему номеру сотрудника
3 - Установите номер столбца DGV равным периоду поиска плюс два (имя и позиция)
4 - получить строковую матрицу имени присваивания с их идентификатором s в качестве индекса
5 - поиск каждого идентификатора сотрудника в течение этого периода и помещает найденные данные в сетку, вычитая дату назначения из даты начала поиска, чтобы получить номер дня и добавить два в качестве индекса столбца (два-это сдвиг, чтобы освободить место для столбца имени и должности)
5 - номер строки-это заказ сотрудника в таблице данных сотрудника


это происходит медленно, потому что он ищет в базе данных как количество сотрудников (огромное количество)

В настоящее время я работаю над созданием поиска по одной таблице для определенного периода, сгруппированного по идентификатору сотрудника
и распределить их по сетке

все равно моя проблема даже если это сработает хорошо
Мне нужно его напечатать
а crystal reports работает быстрее и избавляет меня от необходимости настраивать страницу

ниже приведен код, который я сделал
Он имеет некоторые зависимости которые в свою очередь имеют некоторые зависимости
но если кто-то хочет получить представление, то это здесь
если кому-то нужны зависимости, я буду более чем счастлив дать их бесплатно
(помогите, как вы хотите, чтобы помогли)





Private Sub UpdateMonthAssigmentGrid()
Dim IntMonth As Integer = ComboDisplayedMonth.SelectedIndex + 1 '7 'месяц для поиска
Дим IntYear Как Integer = NumericUpDownDisplayedYear.Значение '2018 'года, чтобы быть найдены
Dim IntMonthLengthDays As Integer = GetMonthLength(IntYear, IntMonth) 'количество дней в месяце (31,30,29,28) для установки номера столбцов сетки
Dim StrStartDate As String = "'" + IntYear.ToString + "-" + IntMonth.ToString + "-01'" 'начало даты поиска
Dim StrEndDate As String = "'" + IntYear.ToString + "-" + IntMonth.ToString + "-" + IntMonthLengthDays.ToString + "'" 'дата окончания поиска

Dim IntDayIndex Как Целое Число
Дим StrAssigmentTypeList() как строку матрицы фамилий Распайка
Dim IntIDAssigment2Order() как целочисленная матрица присвоения идентификатора порядку Аппера
'
Dim GridColNo As Integer = 2 'номер столбца, используемого для отображения данных(имя и ранг)
'
Dim IntEmpolyeeCounter как целочисленная Фиктивная переменная, используемая в цикле для empolyees
Dim INtDaysCounter как целочисленная Фиктивная переменная, используемая в цикле в течение нескольких дней
'
Dim TblEmpolyeeNames As Data.DataTable 'таблица данных, содержащая имена и ранги empolyees
Dim IntEmpolyeeNo As Integer 'the no of empolyee = TblEmpolyeeNames.Rows.Count будет использоваться для установки количества отображаемых строк сетки
Дим IntIdEmpolyee как целочисленная переменная 'манекен, который используется для хранения в настоящее время обрабатываются
Дим TblMonthAssigment Как Данные.Таблицы данных таблица данных проведение empolyees имена и звания
'= ReadDataTable("выберите TblEmpolyee.Идемполии ,Тблемполии.EmpolyeeName ,TblRank.RankName из TblEmpolyee слева присоединяется к TblRank TblRank на TblRank.IDRank= TblEmpolyee.IDRank, где без отрыва от производства= "истинный" порядок TblEmpolyee.IDRank DESC")
Тусклый StrAssigmentDate Как Строка
Дим IntAssigmentType Как Целое, IntAssigmentOrder Как Целое
Тусклый ShowedDayDAte Как Дата
Dim StrMonthlyAssigmentSql Как Строка
'
'ReadSql2DataGrid(DataGridView1, "SELECT [IDEmpolyee],[EmpolyeeName] from TblEmpolyee")
'DataGridView1.DataSource = Ничего
Если Радиобоффрепорт.Проверено = Истина Тогда
TblEmpolyeeNames = ReadDataTable("выберите TblEmpolyee.Идемполии ,Тблемполии.EmpolyeeName ,TblRank.RankName из TblEmpolyee слева присоединяется к TblRank TblRank на TblRank.IDRank= TblEmpolyee.IDRank, где InService='True' и TblEmpolyee.IDRank > 8 заказ от TblEmpolyee.IDRank DESC")
Еще
TblEmpolyeeNames = ReadDataTable("выберите TblEmpolyee.Идемполии ,Тблемполии.EmpolyeeName ,TblRank.RankName из TblEmpolyee слева присоединяется к TblRank TblRank на TblRank.IDRank= TblEmpolyee.IDRank, где InService='True' и TblEmpolyee.IDRank <9 заказ от TblEmpolyee.IDRank DESC")
Конец, Если
'
'DGVMonthlyReport.Источник Данных = TblEmpolyeeNames
-Выход Из Субмарины
Если Радиосвязь Есть, То Да.Проверено = Истина Тогда
StrMonthlyAssigmentSql = "выберите TblDailyAssigment.IDDailyAssigment, TblDailyAssigment.Assignmentdate,TblAssigmentTypeGeneral.Assignmenttypegeneralname ,TblAssigmentTypeGeneral.IDAssigmentTypeGeneral от TblDailyAssigment левое соединение TblAssigmentType TblAssigmentType на TblAssigmentType.IDAssigmentType =TblDailyAssigment.IDAssigmentType левое соединение TblAssigmentTypeGeneral TblAssigmentTypeGeneral на TblAssigmentTypeGeneral.IDAssigmentTypeGeneral=TblAssigmentType.IDAssigmentTypeGeneral"
ReadSql2CStrgArry(StrAssigmentTypeList, "TblAssigmentTypeGeneral", "Assignmenttypegeneralname", "")
ReadSql2IDCorrMat(IntIDAssigment2Order, "TblAssigmentTypeGeneral", "IDAssigmentTypeGeneral", "")
Еще
Если Радио-Телохранители.Проверено = Истина Тогда
- Покажи ежемесячную охрану.
StrMonthlyAssigmentSql = "выберите TblDailyAssigment.IDDailyAssigment, TblDailyAssigment.Assignmentdate,TblGuard.Имя Охранника ,TblGuard.IDGuard из TblDailyAssigment слева присоединяется к TblAssigmentType TblAssigmentType на TblAssigmentType.IDAssigmentType =TblDailyAssigment.IDAssigmentType левое соединение TblGuard TblGuard на TblGuard.IDGuard= TblDailyAssigment.IDGuard"
ReadSql2CStrgArry(StrAssigmentTypeList, "TblGuard", "GuardName", "")
ReadSql2IDCorrMat(IntIDAssigment2Order, "TblGuard", "IDGuard", "")
Еще
- покажите ежемесячное подробное назначение
StrMonthlyAssigmentSql = "выберите TblDailyAssigment.IDDailyAssigment, TblDailyAssigment.Assignmentdate,TblAssigmentType.Assignmenttypename ,TblAssigmentType.IDAssigmentType от TblDailyAssigment левое соединение TblAssigmentType TblAssigmentType на TblAssigmentType.IDAssigmentType =TblDailyAssigment.IDAssigmentType"
ReadSql2CStrgArry(StrAssigmentTypeList, "TblAssigmentType", "Assignmenttypename", "")
ReadSql2IDCorrMat(IntIDAssigment2Order, "TblAssigmentType", "IDAssigmentType", "")
Конец, Если
Конец, Если
'
'установить сетку Holding подробная empolyee данных распайка
IntEmpolyeeNo = TblEmpolyeeNames.Rows.Рассчитывать
DGVMonthlyReport.Rows.Четкий()
DGVMonthlyReport.Количество Строк = IntEmpolyeeNo
DGVMonthlyReport.ColumnCount = GridColNo + IntMonthLengthDays 'количество дней плюс количество столбцов, используемых для отображения данных(имя и ранг)
'Отображение названия дня недели в каждый день
Для s = 1 до IntMonthLengthDays
ShowedDayDAte = CDate(IntYear.ToString + "-" + IntMonth.Метод toString + "-" + ы.Метод toString)
DGVMonthlyReport.Столбцы.Item(s + GridColNo - 1).HeaderText = GetArabicDayName(ShowedDayDAte) + "_" + s.ToString
Следующий
'
'установить сетку Holding подробная empolyee данных распайка
DGVMontlyREportSum.Rows.Четкий()
DGVMontlyREportSum.Количество Строк = IntEmpolyeeNo
DGVMontlyREportSum.ColumnCount = StrAssigmentTypeList.GetUpperBound(0) + GridColNo
Для s = 0 в StrAssigmentTypeList.GetUpperBound(0)
DGVMontlyREportSum.Столбцы.Пункт(s + 1).HeaderText = StrAssigmentTypeList(s)
Следующий
Для IntEmpolyeeCounter = 0 До IntEmpolyeeNo - 1
IntIdEmpolyee = ReadDataTableItem(TblEmpolyeeNames, 0, IntEmpolyeeCounter)
-Отладка.Печать(IntIdEmpolyee)
TblMonthAssigment = ReadDataTable(StrMonthlyAssigmentSql + " where IDEmpolyee=" + IntIdEmpolyee.ToString + "и Assignmentdate между" + StrStartDate + " и " + StrEndDate)
Если TblMonthAssigment.Rows.Тогда считайте > 0
Для INtDaysCounter = 0 До TblMonthAssigment.Rows.Количество - 1
StrAssigmentDate = ReadDataTableItem(TblMonthAssigment, 1, INtDaysCounter)
StrAssigmentDate = Mid(StrAssigmentDate, 9, 2)
IntDayIndex = Val(StrAssigmentDate)
'
DGVMonthlyReport.Item(IntDayIndex + GridColNo - 1, IntEmpolyeeCounter).Value = ReadDataTableItem(TblMonthAssigment, 2, INtDaysCounter)
'
IntAssigmentType = ReadDataTableItem(TblMonthAssigment, 3, INtDaysCounter)
IntAssigmentOrder = IntIDAssigment2Order(IntAssigmentType)
DGVMontlyREportSum.Item(IntAssigmentOrder + GridColNo - 1, IntEmpolyeeCounter).Value = DGVMontlyREportSum.Item(IntAssigmentOrder + GridColNo - 1, IntEmpolyeeCounter).Value + 1
Следующий
'
Конец, Если
DGVMonthlyReport.Item(1, IntEmpolyeeCounter).Value = ReadDataTableItem(TblEmpolyeeNames, 1, IntEmpolyeeCounter)
DGVMonthlyReport.Item(0, IntEmpolyeeCounter).Value = ReadDataTableItem(TblEmpolyeeNames, 2, IntEmpol


Рейтинг:
2

Member 14114880

если вы хотите получить лучшее понимание проблемы
Приведу простой пример
помните проблему с книжным магазином
где есть три стола
1 - таблица данных книг
2 - таблица заемщиков
3 - таблица операций заимствования

если мне нужна таблица, где заголовок столбца-это дни поиска, а заголовки строк-это название книги
в ячейках содержится имя заемщика, у которого сейчас есть книги

Я думаю это общая проблема не только моя