Kaynağa Gözat

FG/SemiFG Production Analysis Report

master
B.E.N.S.O.N 1 gün önce
ebeveyn
işleme
b0e1b3527c
3 değiştirilmiş dosya ile 963 ekleme ve 0 silme
  1. +232
    -0
      src/main/java/com/ffii/fpsms/modules/report/service/ReportService.kt
  2. +67
    -0
      src/main/java/com/ffii/fpsms/modules/report/web/ReportController.kt
  3. +664
    -0
      src/main/resources/jasper/SemiFGProductionAnalysisReport.jrxml

+ 232
- 0
src/main/java/com/ffii/fpsms/modules/report/service/ReportService.kt Dosyayı Görüntüle

@@ -97,6 +97,30 @@ open class ReportService(
return "AND (${conditions.joinToString(" OR ")})"
}

/**
* Helper function to build SQL clause for comma-separated values with exact match.
* Supports multiple values like "val1, val2, val3" and generates OR conditions with =.
*/
private fun buildMultiValueExactClause(
paramValue: String?,
columnName: String,
paramPrefix: String,
args: MutableMap<String, Any>
): String {
if (paramValue.isNullOrBlank()) return ""
val values = paramValue.split(",").map { it.trim() }.filter { it.isNotBlank() }
if (values.isEmpty()) return ""
val conditions = values.mapIndexed { index, value ->
val paramName = "${paramPrefix}_$index"
args[paramName] = value
"$columnName = :$paramName"
}
return "AND (${conditions.joinToString(" OR ")})"
}

/**
* Queries the database for Stock In Traceability Report data.
* Joins stock_in_line, stock_in, items, item_category, qc_result, inventory_lot, inventory_lot_line, warehouse, and shop tables.
@@ -106,6 +130,7 @@ open class ReportService(
stockCategory: String?,
stockSubCategory: String?,
itemCode: String?,
year: String?,
lastInDateStart: String?,
lastInDateEnd: String?
): List<Map<String, Any>> {
@@ -115,6 +140,13 @@ open class ReportService(
val stockSubCategorySql = buildMultiValueLikeClause(stockSubCategory, "ic.sub", "stockSubCategory", args)
val itemCodeSql = buildMultiValueLikeClause(itemCode, "it.code", "itemCode", args)
val yearSql = if (!year.isNullOrBlank()) {
args["year"] = year
"AND YEAR(sil.receiptDate) = :year"
} else {
""
}
val lastInDateStartSql = if (!lastInDateStart.isNullOrBlank()) {
args["lastInDateStart"] = lastInDateStart
"AND sil.receiptDate >= :lastInDateStart"
@@ -168,6 +200,7 @@ open class ReportService(
$stockCategorySql
$stockSubCategorySql
$itemCodeSql
$yearSql
$lastInDateStartSql
$lastInDateEndSql
ORDER BY ic.sub, it.code, sil.lotNo
@@ -176,6 +209,205 @@ open class ReportService(
return jdbcDao.queryForList(sql, args)
}

/**
* Queries the database for Semi FG Production Analysis Report data.
* Flow:
* 1. Filter bom by description (FG/WIP) to get bom.code values
* 2. Match bom.code with stock_ledger.itemCode
* 3. Aggregate stock_ledger data by month for each item based on inQty
* Supports comma-separated values for stockCategory, stockSubCategory, and itemCode.
*/
fun searchSemiFGProductionAnalysisReport(
stockCategory: String?,
stockSubCategory: String?,
itemCode: String?,
year: String?,
lastOutDateStart: String?,
lastOutDateEnd: String?
): List<Map<String, Any>> {
val args = mutableMapOf<String, Any>()
// Filter by stockCategory from bom.description (FG/WIP) - this finds which bom.code values match
// Supports multiple categories separated by comma (e.g., "FG,WIP")
// If "All" is selected or contains "All", don't filter by description
val stockCategorySql = if (!itemCode.isNullOrBlank()) {
// When itemCode is provided, skip stockCategory filter
""
} else if (!stockCategory.isNullOrBlank() && stockCategory != "All" && !stockCategory.contains("All")) {
// Handle multiple categories (comma-separated)
val categories = stockCategory.split(",").map { it.trim() }.filter { it.isNotBlank() && it != "All" }
if (categories.isNotEmpty()) {
val conditions = categories.mapIndexed { index, cat ->
val paramName = "stockCategory_$index"
args[paramName] = cat
"b.description = :$paramName"
}
"AND (${conditions.joinToString(" OR ")})"
} else {
""
}
} else {
""
}
val stockSubCategorySql = buildMultiValueLikeClause(stockSubCategory, "ic.sub", "stockSubCategory", args)
// Filter by itemCode - match bom.code (user input should match bom.code, which then matches stock_ledger.itemCode)
val itemCodeSql = buildMultiValueExactClause(itemCode, "b.code", "itemCode", args)
val yearSql = if (!year.isNullOrBlank()) {
args["year"] = year
"AND YEAR(sl.modified) = :year"
} else {
""
}
val lastOutDateStartSql = if (!lastOutDateStart.isNullOrBlank()) {
args["lastOutDateStart"] = lastOutDateStart
"AND DATE(sl.modified) >= :lastOutDateStart"
} else ""
val lastOutDateEndSql = if (!lastOutDateEnd.isNullOrBlank()) {
args["lastOutDateEnd"] = lastOutDateEnd
"AND DATE(sl.modified) < :lastOutDateEnd"
} else ""

val sql = """
SELECT
COALESCE(ic.sub, '') as stockSubCategory,
COALESCE(sl.itemCode, '') as itemNo,
COALESCE(b.name, '') as itemName,
COALESCE(uc.code, '') as unitOfMeasure,
CAST(COALESCE(SUM(CASE WHEN MONTH(sl.modified) = 1 THEN sl.inQty ELSE 0 END), 0) AS DECIMAL(18,2)) as qtyJan,
CAST(COALESCE(SUM(CASE WHEN MONTH(sl.modified) = 2 THEN sl.inQty ELSE 0 END), 0) AS DECIMAL(18,2)) as qtyFeb,
CAST(COALESCE(SUM(CASE WHEN MONTH(sl.modified) = 3 THEN sl.inQty ELSE 0 END), 0) AS DECIMAL(18,2)) as qtyMar,
CAST(COALESCE(SUM(CASE WHEN MONTH(sl.modified) = 4 THEN sl.inQty ELSE 0 END), 0) AS DECIMAL(18,2)) as qtyApr,
CAST(COALESCE(SUM(CASE WHEN MONTH(sl.modified) = 5 THEN sl.inQty ELSE 0 END), 0) AS DECIMAL(18,2)) as qtyMay,
CAST(COALESCE(SUM(CASE WHEN MONTH(sl.modified) = 6 THEN sl.inQty ELSE 0 END), 0) AS DECIMAL(18,2)) as qtyJun,
CAST(COALESCE(SUM(CASE WHEN MONTH(sl.modified) = 7 THEN sl.inQty ELSE 0 END), 0) AS DECIMAL(18,2)) as qtyJul,
CAST(COALESCE(SUM(CASE WHEN MONTH(sl.modified) = 8 THEN sl.inQty ELSE 0 END), 0) AS DECIMAL(18,2)) as qtyAug,
CAST(COALESCE(SUM(CASE WHEN MONTH(sl.modified) = 9 THEN sl.inQty ELSE 0 END), 0) AS DECIMAL(18,2)) as qtySep,
CAST(COALESCE(SUM(CASE WHEN MONTH(sl.modified) = 10 THEN sl.inQty ELSE 0 END), 0) AS DECIMAL(18,2)) as qtyOct,
CAST(COALESCE(SUM(CASE WHEN MONTH(sl.modified) = 11 THEN sl.inQty ELSE 0 END), 0) AS DECIMAL(18,2)) as qtyNov,
CAST(COALESCE(SUM(CASE WHEN MONTH(sl.modified) = 12 THEN sl.inQty ELSE 0 END), 0) AS DECIMAL(18,2)) as qtyDec,
CAST(COALESCE(SUM(sl.inQty), 0) AS CHAR) as totalProductionQty
FROM stock_ledger sl
INNER JOIN bom b ON sl.itemCode = b.code AND b.deleted = false
LEFT JOIN items it ON sl.itemId = it.id
LEFT JOIN item_category ic ON it.categoryId = ic.id
LEFT JOIN item_uom iu ON it.id = iu.itemId AND iu.stockUnit = true
LEFT JOIN uom_conversion uc ON iu.uomId = uc.id
WHERE sl.deleted = false
AND sl.inQty IS NOT NULL
AND sl.inQty > 0
$stockCategorySql
$stockSubCategorySql
$itemCodeSql
$yearSql
$lastOutDateStartSql
$lastOutDateEndSql
GROUP BY sl.itemCode, ic.sub, it.id, b.name, uc.code, b.description
ORDER BY ic.sub, sl.itemCode
""".trimIndent()
return jdbcDao.queryForList(sql, args)
}

/**
* Gets list of item codes (bom.code) with names based on stockCategory filter.
* Supports multiple categories separated by comma (e.g., "FG,WIP").
* If stockCategory is "All" or null, returns all codes.
* If stockCategory is "FG" or "WIP" or "FG,WIP", returns codes matching those descriptions.
* Returns a list of maps with "code" and "name" keys.
*/
fun getSemiFGItemCodes(stockCategory: String?): List<Map<String, String>> {
val args = mutableMapOf<String, Any>()
val stockCategorySql = if (!stockCategory.isNullOrBlank() && stockCategory != "All" && !stockCategory.contains("All")) {
// Handle multiple categories (comma-separated)
val categories = stockCategory.split(",").map { it.trim() }.filter { it.isNotBlank() && it != "All" }
if (categories.isNotEmpty()) {
val conditions = categories.mapIndexed { index, cat ->
val paramName = "stockCategory_$index"
args[paramName] = cat
"b.description = :$paramName"
}
"AND (${conditions.joinToString(" OR ")})"
} else {
""
}
} else {
""
}

val sql = """
SELECT DISTINCT b.code, COALESCE(b.name, '') as name
FROM bom b
WHERE b.deleted = false
AND b.code IS NOT NULL
AND b.code != ''
$stockCategorySql
ORDER BY b.code
""".trimIndent()
val results = jdbcDao.queryForList(sql, args)
return results.mapNotNull {
val code = it["code"]?.toString()
val name = it["name"]?.toString() ?: ""
if (code != null) {
mapOf("code" to code, "name" to name)
} else {
null
}
}
}

/**
* Gets list of item codes with their category (FG/WIP) and name based on stockCategory filter.
* Supports multiple categories separated by comma (e.g., "FG,WIP").
* Returns a list of maps with "code", "category", and "name" keys.
*/
fun getSemiFGItemCodesWithCategory(stockCategory: String?): List<Map<String, String>> {
val args = mutableMapOf<String, Any>()
val stockCategorySql = if (!stockCategory.isNullOrBlank() && stockCategory != "All" && !stockCategory.contains("All")) {
// Handle multiple categories (comma-separated)
val categories = stockCategory.split(",").map { it.trim() }.filter { it.isNotBlank() && it != "All" }
if (categories.isNotEmpty()) {
val conditions = categories.mapIndexed { index, cat ->
val paramName = "stockCategory_$index"
args[paramName] = cat
"b.description = :$paramName"
}
"AND (${conditions.joinToString(" OR ")})"
} else {
""
}
} else {
""
}

val sql = """
SELECT DISTINCT b.code, COALESCE(b.description, '') as category, COALESCE(b.name, '') as name
FROM bom b
WHERE b.deleted = false
AND b.code IS NOT NULL
AND b.code != ''
$stockCategorySql
ORDER BY b.code
""".trimIndent()
val results = jdbcDao.queryForList(sql, args)
return results.mapNotNull {
val code = it["code"]?.toString()
val category = it["category"]?.toString() ?: ""
val name = it["name"]?.toString() ?: ""
if (code != null) {
mapOf("code" to code, "category" to category, "name" to name)
} else {
null
}
}
}

/**
* Compiles and fills a Jasper Report, returning the PDF as a ByteArray.
*/


+ 67
- 0
src/main/java/com/ffii/fpsms/modules/report/web/ReportController.kt Dosyayı Görüntüle

@@ -85,6 +85,7 @@ class ReportController(
@RequestParam(required = false) stockCategory: String?,
@RequestParam(required = false) stockSubCategory: String?,
@RequestParam(required = false) itemCode: String?,
@RequestParam(required = false) year: String?,
@RequestParam(required = false) lastInDateStart: String?,
@RequestParam(required = false) lastInDateEnd: String?
): ResponseEntity<ByteArray> {
@@ -94,6 +95,7 @@ class ReportController(
parameters["stockCategory"] = stockCategory ?: "All"
parameters["stockSubCategory"] = stockSubCategory ?: "All"
parameters["itemNo"] = itemCode ?: "All"
parameters["year"] = year ?: LocalDate.now().year.toString()
parameters["reportDate"] = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))
parameters["reportTime"] = LocalTime.now().format(DateTimeFormatter.ofPattern("HH:mm:ss"))
parameters["lastInDateStart"] = lastInDateStart ?: ""
@@ -104,6 +106,7 @@ class ReportController(
stockCategory,
stockSubCategory,
itemCode,
year,
lastInDateStart,
lastInDateEnd
)
@@ -122,4 +125,68 @@ class ReportController(

return ResponseEntity(pdfBytes, headers, HttpStatus.OK)
}

@GetMapping("/print-semi-fg-production-analysis")
fun generateSemiFGProductionAnalysisReport(
@RequestParam(required = false) stockCategory: String?,
@RequestParam(required = false) stockSubCategory: String?,
@RequestParam(required = false) itemCode: String?,
@RequestParam(required = false) year: String?,
@RequestParam(required = false) lastOutDateStart: String?,
@RequestParam(required = false) lastOutDateEnd: String?
): ResponseEntity<ByteArray> {
val parameters = mutableMapOf<String, Any>()
// Set report header parameters
parameters["stockCategory"] = stockCategory ?: "All"
parameters["stockSubCategory"] = stockSubCategory ?: "All"
parameters["itemNo"] = itemCode ?: "All"
parameters["year"] = year ?: LocalDate.now().year.toString()
parameters["reportDate"] = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))
parameters["reportTime"] = LocalTime.now().format(DateTimeFormatter.ofPattern("HH:mm:ss"))
parameters["lastOutDateStart"] = lastOutDateStart ?: ""
parameters["lastOutDateEnd"] = lastOutDateEnd ?: ""
parameters["deliveryPeriodStart"] = ""
parameters["deliveryPeriodEnd"] = ""

// Query the DB to get a list of data
val dbData = reportService.searchSemiFGProductionAnalysisReport(
stockCategory,
stockSubCategory,
itemCode,
year,
lastOutDateStart,
lastOutDateEnd
)

val pdfBytes = reportService.createPdfResponse(
"/jasper/SemiFGProductionAnalysisReport.jrxml",
parameters,
dbData
)

val headers = HttpHeaders().apply {
contentType = MediaType.APPLICATION_PDF
setContentDispositionFormData("attachment", "SemiFGProductionAnalysisReport.pdf")
set("filename", "SemiFGProductionAnalysisReport.pdf")
}

return ResponseEntity(pdfBytes, headers, HttpStatus.OK)
}

@GetMapping("/semi-fg-item-codes")
fun getSemiFGItemCodes(
@RequestParam(required = false) stockCategory: String?
): ResponseEntity<List<Map<String, String>>> {
val itemCodes = reportService.getSemiFGItemCodes(stockCategory)
return ResponseEntity(itemCodes, HttpStatus.OK)
}

@GetMapping("/semi-fg-item-codes-with-category")
fun getSemiFGItemCodesWithCategory(
@RequestParam(required = false) stockCategory: String?
): ResponseEntity<List<Map<String, String>>> {
val itemCodesWithCategory = reportService.getSemiFGItemCodesWithCategory(stockCategory)
return ResponseEntity(itemCodesWithCategory, HttpStatus.OK)
}
}

+ 664
- 0
src/main/resources/jasper/SemiFGProductionAnalysisReport.jrxml Dosyayı Görüntüle

@@ -0,0 +1,664 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.21.3.final using JasperReports Library version 6.21.3-4a3078d20785ebe464f18037d738d12fc98c13cf -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="SemiFGProductionAnalysisReport" pageWidth="842" pageHeight="595" orientation="Landscape" columnWidth="802" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="055685d6-c02e-403a-8511-48e9df2752d3">
<property name="com.jaspersoft.studio.unit." value="pixel"/>
<property name="com.jaspersoft.studio.unit.pageHeight" value="pixel"/>
<property name="com.jaspersoft.studio.unit.pageWidth" value="pixel"/>
<property name="com.jaspersoft.studio.unit.topMargin" value="pixel"/>
<property name="com.jaspersoft.studio.unit.bottomMargin" value="pixel"/>
<property name="com.jaspersoft.studio.unit.leftMargin" value="pixel"/>
<property name="com.jaspersoft.studio.unit.rightMargin" value="pixel"/>
<property name="com.jaspersoft.studio.unit.columnWidth" value="pixel"/>
<property name="com.jaspersoft.studio.unit.columnSpacing" value="pixel"/>
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<property name="com.jaspersoft.studio.data.sql.tables" value=""/>
<parameter name="stockSubCategory" class="java.lang.String">
<defaultValueExpression><![CDATA["stockSubCategory"]]></defaultValueExpression>
</parameter>
<parameter name="stockCategory" class="java.lang.String">
<defaultValueExpression><![CDATA["stockCategory"]]></defaultValueExpression>
</parameter>
<parameter name="itemNo" class="java.lang.String">
<defaultValueExpression><![CDATA["itemCode"]]></defaultValueExpression>
</parameter>
<parameter name="year" class="java.lang.String"/>
<parameter name="reportDate" class="java.lang.String"/>
<parameter name="reportTime" class="java.lang.String"/>
<parameter name="deliveryPeriodStart" class="java.lang.String"/>
<parameter name="deliveryPeriodEnd" class="java.lang.String"/>
<parameter name="lastOutDateStart" class="java.lang.String">
<parameterDescription><![CDATA["lastOutDateStart"]]></parameterDescription>
</parameter>
<parameter name="lastOutDateEnd" class="java.lang.String">
<parameterDescription><![CDATA["lastOutDateStart"]]></parameterDescription>
</parameter>
<queryString>
<![CDATA[select * from fpsmsdb.items , fpsmsdb.stock_out_line]]>
</queryString>
<field name="id" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.name" value="id"/>
<property name="com.jaspersoft.studio.field.label" value="id"/>
<property name="com.jaspersoft.studio.field.tree.path" value="items"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="modified" class="java.time.LocalDateTime">
<property name="com.jaspersoft.studio.field.name" value="modified"/>
<property name="com.jaspersoft.studio.field.label" value="modified"/>
<property name="com.jaspersoft.studio.field.tree.path" value="items"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="itemNo" class="java.lang.String">
<property name="com.jaspersoft.studio.field.name" value="code"/>
<property name="com.jaspersoft.studio.field.label" value="code"/>
<property name="com.jaspersoft.studio.field.tree.path" value="items"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="itemName" class="java.lang.String">
<property name="com.jaspersoft.studio.field.name" value="name"/>
<property name="com.jaspersoft.studio.field.label" value="name"/>
<property name="com.jaspersoft.studio.field.tree.path" value="items"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="description" class="java.lang.String">
<property name="com.jaspersoft.studio.field.name" value="description"/>
<property name="com.jaspersoft.studio.field.label" value="description"/>
<property name="com.jaspersoft.studio.field.tree.path" value="items"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="remarks" class="java.lang.String">
<property name="com.jaspersoft.studio.field.name" value="remarks"/>
<property name="com.jaspersoft.studio.field.label" value="remarks"/>
<property name="com.jaspersoft.studio.field.tree.path" value="items"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="type" class="java.lang.String">
<property name="com.jaspersoft.studio.field.name" value="type"/>
<property name="com.jaspersoft.studio.field.label" value="type"/>
<property name="com.jaspersoft.studio.field.tree.path" value="items"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="stockSubCategory" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.name" value="categoryId"/>
<property name="com.jaspersoft.studio.field.label" value="categoryId"/>
<property name="com.jaspersoft.studio.field.tree.path" value="items"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="qcCategoryId" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.name" value="qcCategoryId"/>
<property name="com.jaspersoft.studio.field.label" value="qcCategoryId"/>
<property name="com.jaspersoft.studio.field.tree.path" value="items"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="uomId" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.name" value="uomId"/>
<property name="com.jaspersoft.studio.field.label" value="uomId"/>
<property name="com.jaspersoft.studio.field.tree.path" value="items"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="itemId" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.name" value="itemId"/>
<property name="com.jaspersoft.studio.field.label" value="itemId"/>
<property name="com.jaspersoft.studio.field.tree.path" value="stock_out_line"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="qty" class="java.math.BigDecimal">
<property name="com.jaspersoft.studio.field.name" value="qty"/>
<property name="com.jaspersoft.studio.field.label" value="qty"/>
<property name="com.jaspersoft.studio.field.tree.path" value="stock_out_line"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="stockOutId" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.name" value="stockOutId"/>
<property name="com.jaspersoft.studio.field.label" value="stockOutId"/>
<property name="com.jaspersoft.studio.field.tree.path" value="stock_out_line"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="pickOrderLineId" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.name" value="pickOrderLineId"/>
<property name="com.jaspersoft.studio.field.label" value="pickOrderLineId"/>
<property name="com.jaspersoft.studio.field.tree.path" value="stock_out_line"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="status" class="java.lang.String">
<property name="com.jaspersoft.studio.field.name" value="status"/>
<property name="com.jaspersoft.studio.field.label" value="status"/>
<property name="com.jaspersoft.studio.field.tree.path" value="stock_out_line"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="pickTime" class="java.time.LocalDateTime">
<property name="com.jaspersoft.studio.field.name" value="pickTime"/>
<property name="com.jaspersoft.studio.field.label" value="pickTime"/>
<property name="com.jaspersoft.studio.field.tree.path" value="stock_out_line"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="qtyJan" class="java.math.BigDecimal">
<property name="com.jaspersoft.studio.field.name" value="qty"/>
<property name="com.jaspersoft.studio.field.label" value="qty"/>
<property name="com.jaspersoft.studio.field.tree.path" value="stock_out_line"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="qtyFeb" class="java.math.BigDecimal">
<property name="com.jaspersoft.studio.field.name" value="qty"/>
<property name="com.jaspersoft.studio.field.label" value="qty"/>
<property name="com.jaspersoft.studio.field.tree.path" value="stock_out_line"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="qtyMar" class="java.math.BigDecimal">
<property name="com.jaspersoft.studio.field.name" value="qty"/>
<property name="com.jaspersoft.studio.field.label" value="qty"/>
<property name="com.jaspersoft.studio.field.tree.path" value="stock_out_line"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="qtyApr" class="java.math.BigDecimal">
<property name="com.jaspersoft.studio.field.name" value="qty"/>
<property name="com.jaspersoft.studio.field.label" value="qty"/>
<property name="com.jaspersoft.studio.field.tree.path" value="stock_out_line"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="qtyMay" class="java.math.BigDecimal">
<property name="com.jaspersoft.studio.field.name" value="qty"/>
<property name="com.jaspersoft.studio.field.label" value="qty"/>
<property name="com.jaspersoft.studio.field.tree.path" value="stock_out_line"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="qtyJun" class="java.math.BigDecimal">
<property name="com.jaspersoft.studio.field.name" value="qty"/>
<property name="com.jaspersoft.studio.field.label" value="qty"/>
<property name="com.jaspersoft.studio.field.tree.path" value="stock_out_line"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="qtyJul" class="java.math.BigDecimal">
<property name="com.jaspersoft.studio.field.name" value="qty"/>
<property name="com.jaspersoft.studio.field.label" value="qty"/>
<property name="com.jaspersoft.studio.field.tree.path" value="stock_out_line"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="qtyAug" class="java.math.BigDecimal">
<property name="com.jaspersoft.studio.field.name" value="qty"/>
<property name="com.jaspersoft.studio.field.label" value="qty"/>
<property name="com.jaspersoft.studio.field.tree.path" value="stock_out_line"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="qtySep" class="java.math.BigDecimal">
<property name="com.jaspersoft.studio.field.name" value="qty"/>
<property name="com.jaspersoft.studio.field.label" value="qty"/>
<property name="com.jaspersoft.studio.field.tree.path" value="stock_out_line"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="qtyOct" class="java.math.BigDecimal">
<property name="com.jaspersoft.studio.field.name" value="qty"/>
<property name="com.jaspersoft.studio.field.label" value="qty"/>
<property name="com.jaspersoft.studio.field.tree.path" value="stock_out_line"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="qtyNov" class="java.math.BigDecimal">
<property name="com.jaspersoft.studio.field.name" value="qty"/>
<property name="com.jaspersoft.studio.field.label" value="qty"/>
<property name="com.jaspersoft.studio.field.tree.path" value="stock_out_line"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="qtyDec" class="java.math.BigDecimal">
<property name="com.jaspersoft.studio.field.name" value="qty"/>
<property name="com.jaspersoft.studio.field.label" value="qty"/>
<property name="com.jaspersoft.studio.field.tree.path" value="stock_out_line"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="unitOfMeasure" class="java.lang.String"/>
<field name="totalProductionQty" class="java.lang.String"/>
<group name="Group1">
<groupExpression><![CDATA[$F{itemNo}]]></groupExpression>
<groupHeader>
<band height="92">
<staticText>
<reportElement x="0" y="10" width="81" height="20" uuid="09bcfab9-9520-48dd-b851-3c00951cc550">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="12"/>
</textElement>
<text><![CDATA[貨品編號:]]></text>
</staticText>
<textField>
<reportElement x="81" y="10" width="119" height="20" uuid="6f905a5d-cf6b-4d62-8433-ff3d570829ae"/>
<textElement textAlignment="Left" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{itemNo}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="280" y="10" width="80" height="20" uuid="f0d35ecc-bc8d-4f5e-a94c-5cc6e5cde51e">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.height" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Right" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="12"/>
</textElement>
<text><![CDATA[貨品名稱:]]></text>
</staticText>
<textField>
<reportElement x="360" y="10" width="130" height="20" uuid="11265d83-f36f-4cf2-ae3f-60d504226ab0">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement verticalAlignment="Middle">
<font fontName="微軟正黑體" size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{itemName}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="610" y="10" width="41" height="20" uuid="a9054f9d-f217-4daa-a35c-076fe16a2df6">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Right" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="12"/>
</textElement>
<text><![CDATA[單位:]]></text>
</staticText>
<textField>
<reportElement x="651" y="10" width="129" height="20" uuid="1a6c5348-668b-40cd-b8c7-a7b53c5dbcbe">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{unitOfMeasure}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="40" width="56" height="20" uuid="e7a7df0c-bb6b-48da-9612-f9ca6b11f845">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<text><![CDATA[一月]]></text>
</staticText>
<staticText>
<reportElement x="224" y="40" width="56" height="20" uuid="1502529a-e0bf-4fff-aa34-7b4cff72ddf0">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<text><![CDATA[五月]]></text>
</staticText>
<staticText>
<reportElement x="56" y="40" width="56" height="20" uuid="afd73da5-fb15-4768-ae44-ccc1f57123af">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Middle" markup="html">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<text><![CDATA[二月]]></text>
</staticText>
<staticText>
<reportElement x="560" y="40" width="56" height="20" uuid="741b9a24-b91b-4ccb-aa7b-2eee600e7994">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<text><![CDATA[十一月]]></text>
</staticText>
<staticText>
<reportElement x="392" y="40" width="56" height="20" uuid="b2935034-a5b9-4508-aa4a-0029704f8a3b">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<text><![CDATA[八月]]></text>
</staticText>
<staticText>
<reportElement x="112" y="40" width="56" height="20" uuid="7d81e729-e12d-4f2e-a857-6224163177bd">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<text><![CDATA[三月]]></text>
</staticText>
<staticText>
<reportElement x="168" y="40" width="56" height="20" uuid="cc73619f-39f9-4165-a8d7-e4679704b7ee">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<text><![CDATA[四月]]></text>
</staticText>
<staticText>
<reportElement x="336" y="40" width="56" height="20" uuid="7af699eb-2dc9-4f4a-861c-0e54c284fbbd">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.height" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<text><![CDATA[七月]]></text>
</staticText>
<staticText>
<reportElement x="280" y="40" width="56" height="20" uuid="0fbf45b7-f56b-4e19-a130-1adcb46f294d">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<text><![CDATA[六月]]></text>
</staticText>
<staticText>
<reportElement x="616" y="40" width="74" height="20" uuid="3403153f-8bc9-4108-b3e2-45af3fd95305">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<text><![CDATA[十二月]]></text>
</staticText>
<staticText>
<reportElement x="448" y="40" width="56" height="20" uuid="40912a1d-624d-496f-999c-41cd3210a441">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<text><![CDATA[九月]]></text>
</staticText>
<staticText>
<reportElement x="504" y="40" width="56" height="20" uuid="0db0531d-3805-4d02-be13-746e6b97fd14">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<text><![CDATA[十月]]></text>
</staticText>
<textField>
<reportElement x="690" y="62" width="90" height="20" uuid="803f19df-9c30-4b63-a930-69955daf442e">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Top">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<textFieldExpression><![CDATA[$F{totalProductionQty}]]></textFieldExpression>
</textField>
<line>
<reportElement x="0" y="89" width="799" height="1" uuid="72083934-812f-42b9-b29b-b73d98fe6925">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
</reportElement>
</line>
<line>
<reportElement x="0" y="90" width="799" height="1" uuid="f0436daf-da7a-42fd-8514-c5c70716792d">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
</reportElement>
</line>
<staticText>
<reportElement x="690" y="40" width="90" height="20" uuid="4de75182-a992-4144-a36b-e49a56fbe89f">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<text><![CDATA[總和]]></text>
</staticText>
</band>
</groupHeader>
</group>
<pageHeader>
<band height="140" splitType="Stretch">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
<textField evaluationTime="Report">
<reportElement x="770" y="0" width="30" height="23" uuid="6e9ed0a2-e1e6-4533-a786-f086b868a84c">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
<property name="com.jaspersoft.studio.unit.height" value="px"/>
</reportElement>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="690" y="0" width="30" height="23" uuid="5a9e0fa9-418d-4838-9f82-e2f336e5bce7">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="12"/>
</textElement>
<text><![CDATA[頁數]]></text>
</staticText>
<staticText>
<reportElement x="750" y="0" width="30" height="23" uuid="26d3d09c-48aa-4870-822a-c403e7faddfa">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Center" verticalAlignment="Justified">
<font fontName="微軟正黑體" size="12"/>
</textElement>
<text><![CDATA[/]]></text>
</staticText>
<textField>
<reportElement x="730" y="0" width="30" height="23" uuid="0c758a26-1c7f-484d-919e-d215917e9216">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="60" width="90" height="23" uuid="0daddd8b-ca61-42af-9c2b-cbf11b7d7dac">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.height" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="16" isBold="true"/>
</textElement>
<text><![CDATA[報告日期:]]></text>
</staticText>
<textField>
<reportElement x="651" y="90" width="148" height="23" uuid="53b66bc3-4925-4340-add0-b4f2069a76c1"/>
<textElement textAlignment="Right" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="16" isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[$P{year}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="560" y="60" width="90" height="23" uuid="e2be43a3-3570-4a4e-a671-d96f872a5ad7">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.height" value="px"/>
</reportElement>
<textElement textAlignment="Right" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="16" isBold="true"/>
</textElement>
<text><![CDATA[報告時間:]]></text>
</staticText>
<staticText>
<reportElement x="560" y="90" width="90" height="23" uuid="29ed871d-3417-4978-9799-964389143451">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.height" value="px"/>
</reportElement>
<textElement textAlignment="Right" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="16" isBold="true"/>
</textElement>
<text><![CDATA[年份:]]></text>
</staticText>
<textField>
<reportElement x="651" y="60" width="148" height="23" uuid="cb1fbb06-e953-40e5-bdbe-5fc219f7c884"/>
<textElement textAlignment="Right" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="16" isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[$P{reportTime}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="90" y="60" width="190" height="23" uuid="d398cf17-318c-4c16-a8bf-6f064e911965"/>
<textElement>
<font fontName="微軟正黑體" size="16" isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[$P{reportDate}]]></textFieldExpression>
</textField>
<line>
<reportElement x="0" y="129" width="799" height="1" uuid="a7fde15d-ebf2-4516-88ab-fb01689a414e">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
</reportElement>
</line>
<line>
<reportElement x="0" y="130" width="799" height="1" uuid="9e9ba4e3-e369-4180-b01b-1b581e8fa00d">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
</reportElement>
</line>
<staticText>
<reportElement x="280" y="10" width="210" height="39" uuid="7451001b-6d5a-438c-82db-2b9e687d9a27">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.height" value="px"/>
</reportElement>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font fontName="微軟正黑體" size="16" isBold="true"/>
</textElement>
<text><![CDATA[成品/半成品生產分析報告]]></text>
</staticText>
<textField>
<reportElement x="112" y="90" width="336" height="23" uuid="b51949e1-c40a-4db0-a799-4243555893fd">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Top">
<font fontName="微軟正黑體" size="12" isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[$P{lastOutDateStart} + " 到 " + $P{lastOutDateEnd}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="90" width="112" height="23" uuid="fb09a559-f5fa-4e56-a891-87c600a2745a">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
<property name="com.jaspersoft.studio.unit.height" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Top">
<font fontName="微軟正黑體" size="12" isBold="true"/>
</textElement>
<text><![CDATA[完成生產日期:]]></text>
</staticText>
</band>
</pageHeader>
<detail>
<band height="22" splitType="Stretch">
<textField>
<reportElement x="280" y="-30" width="56" height="20" uuid="3c77d2e4-afbf-4d52-9ee0-c90174f35809">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Top">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<textFieldExpression><![CDATA[$F{qtyJun}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="336" y="-30" width="56" height="20" uuid="b7f7d359-7a9a-4d8f-8f0d-3a579fd92af6">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Top">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<textFieldExpression><![CDATA[$F{qtyJul}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="0" y="-30" width="56" height="20" uuid="09cd34d3-ca81-4e96-8e62-9e2b5309b748">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Top">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<textFieldExpression><![CDATA[$F{qtyJan}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="560" y="-30" width="56" height="20" uuid="30c01289-b963-4063-be9f-42a87e0e37d1">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Top">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<textFieldExpression><![CDATA[$F{qtyNov}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="616" y="-30" width="74" height="20" uuid="b4f317e7-6c8f-4f37-b78d-00005559e398">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Top">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<textFieldExpression><![CDATA[$F{qtyDec}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="392" y="-30" width="56" height="20" uuid="a84b08f0-123f-40ff-988b-7f9ac62cec09">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Top">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<textFieldExpression><![CDATA[$F{qtyAug}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="448" y="-30" width="56" height="20" uuid="b4a7d70f-ab5a-4303-b6a8-70f76fda74df">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Top">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<textFieldExpression><![CDATA[$F{qtySep}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="504" y="-30" width="56" height="20" uuid="3661155a-e86a-4fe7-9753-2f3893aed786">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Top">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<textFieldExpression><![CDATA[$F{qtyOct}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="112" y="-30" width="56" height="20" uuid="6393dfd5-1fc6-4ee0-8044-9b2bae5d5019">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Top">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<textFieldExpression><![CDATA[$F{qtyMar}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="168" y="-30" width="56" height="20" uuid="e4f89d0a-4dc5-4408-a99e-51f5458c77ac">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Top">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<textFieldExpression><![CDATA[$F{qtyApr}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="224" y="-30" width="56" height="20" uuid="c2b581c3-979e-4450-b077-5017c7f485b0">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Top">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<textFieldExpression><![CDATA[$F{qtyMay}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="56" y="-30" width="56" height="20" uuid="0153c92a-ff58-457d-9ece-bd61f349530b">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement textAlignment="Left" verticalAlignment="Top">
<font fontName="微軟正黑體" size="10"/>
</textElement>
<textFieldExpression><![CDATA[$F{qtyFeb}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>

Yükleniyor…
İptal
Kaydet