100分,报表难题!我学PB三年竟不会!-----急!!!!!!!!!

da21 2005-09-21 06:30:55
表字段为:箱号 、颜色、 SIZE、数量

用Crosstab数据窗口可显示成:
箱号 颜色 SIZE_01 SIZE_02 SIZE_03
1 blue 2 4
sky 3
2 blue 2 4
sky 3
3 blue 1 2
sky 1 1

(SIZE_01 SIZE_02 SIZE_03列的数值为对应的数量)

但是现在我要把连续相同的两箱合为一条数据,显示为:
箱号 颜色 SIZE_01 SIZE_02 SIZE_03
1-2 blue 2 4
sky 3
3 blue 1 2
sky 1 1

谁能帮帮我?解决后再加100分
只要能实现这种效果就行了,不一定要用用Crosstab数据窗口,
有实例更好,可发到我邮箱qiuyunda@163.com
...全文
270 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
da21 2005-09-23
  • 打赏
  • 举报
回复
謝謝各位!
方法正在測試中
wscft 2005-09-22
  • 打赏
  • 举报
回复
我曾经做过类似的订单箱单分配表打印程序, 和此类似。
方法是用外部数据源画出一个报表框架, 让后在做三个ds,分别是ids_sizecode,
ids_color,ids_part7 对应尺码表,色好表和箱单分配表
只可惜这里不能贴图片, 要不把数据窗口贴出来!


箱号起 箱号迄 箱数 尺码(横向)
数量(表内填入数据)
颜色(纵向)

////代码如下, 供参考!
li_count = ids_part7.retrieve(ls_docno,li_docseq)
ids_part7.setsort("boxstart A,boxend A,color A")
ids_part7.sort()
if li_count > 0 then
insertrow(0)
li_current = rowcount()
choose case ls_packsel
/////////单色单码包装方式显示
case '1'
for li = 1 to ids_sizecode.rowcount()
ls_sizecode = ids_sizecode.object.sizecode[li]
ls_sizecode_desc = ids_sizecode.object.description[li]
li_count1 = ids_part7.find("sizecode = '"+ls_sizecode+"'" ,1,ids_part7.rowcount())
if li_count1 > 0 then
li_row = li_row + 1
if li_row <= 10 then
ls_array[li_row] = ls_sizecode
object.data[li_current,li_row] = ls_sizecode_desc
end if
end if
next

for n = 1 to ids_part7.retrieve(ls_docno,li_docseq)
for li = 1 to ids_color.rowcount()
ls_color = ids_color.object.color[li]
ls_color_desc = ids_color.object.description[li]
li_count2 = ids_part7.find("color = '"+ls_color+"'",n,n)
if li_count2 > 0 then
object.color[li_current] = ls_color_desc
for li1 = 1 to li_row
if li1 <= 10 then
ls_sizecode1 = ls_array[li1]
if ls_sizecode1 = '' or isnull(ls_sizecode1) then ls_sizecode1 = ''
li_rowcount = ids_part7.find("color = '"+ls_color+"' and sizecode = '"+ls_sizecode1+"'", n,n)
if li_rowcount > 0 then
ld_qty = ids_part7.object.qty[li_rowcount]
ld_boxstart = ids_part7.object.boxstart[li_rowcount]
ld_boxend = ids_part7.object.boxend[li_rowcount]
ld_boxnum = ids_part7.object.boxnum[li_rowcount]
object.boxstart[li_current] = ld_boxstart
object.boxend[li_current] = ld_boxend
object.boxnum[li_current] = ld_boxnum
object.data[li_current,14 + li1] = ld_qty
end if
end if
next
insertrow(0)
li_current = rowcount()
end if
next
next
if li_current > 0 then deleterow(li_current)
/////////单色混码包装方式显示
case '2'
for li = 1 to ids_sizecode.rowcount()
ls_sizecode = ids_sizecode.object.sizecode[li]
ls_sizecode_desc = ids_sizecode.object.description[li]
li_count1 = ids_part7.find("sizecode = '"+ls_sizecode+"'" ,1,ids_part7.rowcount())
if li_count1 > 0 then
li_row = li_row + 1
if li_row <= 10 then
ls_array[li_row] = ls_sizecode
object.data[li_current,li_row] = ls_sizecode_desc
end if
end if
next

for li = 1 to ids_color.rowcount()
ls_color = ids_color.object.color[li]
ls_color_desc = ids_color.object.description[li]
li_count2 = ids_part7.find("color = '"+ls_color+"'",1,ids_part7.rowcount())
if li_count2 > 0 then
object.color[li_current] = ls_color_desc
for li1 = 1 to li_row
if li1 <= 10 then
ls_sizecode1 = ls_array[li1]
if ls_sizecode1 = '' or isnull(ls_sizecode1) then ls_sizecode1 = ''
li_rowcount = ids_part7.find("color = '"+ls_color+"' and sizecode = '"+ls_sizecode1+"'", 1,ids_part7.rowcount())
if li_rowcount > 0 then
ld_qty = ids_part7.object.qty[li_rowcount]
ld_boxstart = ids_part7.object.boxstart[li_rowcount]
ld_boxend = ids_part7.object.boxend[li_rowcount]
ld_boxnum = ids_part7.object.boxnum[li_rowcount]
object.boxstart[li_current] = ld_boxstart
object.boxend[li_current] = ld_boxend
object.boxnum[li_current] = ld_boxnum
object.data[li_current,14 + li1] = ld_qty
end if
end if
next
insertrow(0)
li_current = rowcount()
end if
next
if li_current > 0 then deleterow(li_current)
/////////混色混码包装方式显示
case '3'
for li = 1 to ids_sizecode.rowcount()
ls_sizecode = ids_sizecode.object.sizecode[li]
ls_sizecode_desc = ids_sizecode.object.description[li]
li_count1 = ids_part7.find("sizecode = '"+ls_sizecode+"'" ,1,ids_part7.rowcount())
if li_count1 > 0 then
li_row = li_row + 1
if li_row <= 10 then
ls_array[li_row] = ls_sizecode
object.data[li_current,li_row] = ls_sizecode_desc
end if
end if
next

for n = 1 to ids_part7.rowcount()
ls_sizecode = ids_part7.object.sizecode[n]
ld_qty = ids_part7.object.qty[n]
if n > 1 then
ld_boxstart = ids_part7.object.boxstart[n - 1]
ld_boxstart1 = ids_part7.object.boxstart[n]
ld_boxend = ids_part7.object.boxend[n - 1]
ld_boxend1 = ids_part7.object.boxend[n]
ls_color = ids_part7.object.color[n - 1]
ls_color1 = ids_part7.object.color[n]
if ld_boxstart1 <> ld_boxstart or ld_boxend1 <> ld_boxend or ls_color1 <> ls_color then
li_current = insertrow(0)
li_current = li_current - 1
ls_color = ids_part7.object.color[n]
li_color = ids_color.find(" color = '" + ls_color + "'", 1, ids_color.rowcount() ) //////////////
object.color[li_current] = ids_color.object.description[li_color]
object.boxstart[li_current] = ids_part7.object.boxstart[n]
object.boxend[li_current] = ids_part7.object.boxend[n]
object.boxnum[li_current] = ids_part7.object.boxnum[n]
for li1 = 1 to li_row
if li1 <= 10 then
ls_sizecode1 = ls_array[li1]
if ls_sizecode = ls_sizecode1 then
object.data[li_current, 14 + li1] = ld_qty
exit
end if
end if
next
else
for li1 = 1 to li_row
if li1 <= 10 then
ls_sizecode1 = ls_array[li1] ///////
if ls_sizecode = ls_sizecode1 then
object.data[li_current,14 + li1] = ld_qty
exit
end if
end if
next
end if
else

li_current = insertrow(0)
li_current = li_current - 1
ls_color = ids_part7.object.color[1]
li_color = ids_color.find(" color = '" + ls_color + "'", 1, ids_color.rowcount() ) //////////////
object.color[li_current] = ids_color.object.description[li_color]
object.boxstart[li_current] = ids_part7.object.boxstart[1]
object.boxend[li_current] = ids_part7.object.boxend[1]
object.boxnum[li_current] = ids_part7.object.boxnum[1]
for li1 = 1 to li_row
if li1 <= 10 then
ls_sizecode1 = ls_array[li1] //////
if ls_sizecode = ls_sizecode1 then
object.data[li_current,14 + li1] = ld_qty
exit
end if
end if
next
end if
next
if rowcount() > 0 then deleterow(rowcount())
end choose
end if

if rowcount() > 2 then
for li1 = 1 to li_row
for li = 2 to rowcount()
if li1 <= 10 then
ls_sizecode = object.data[1,li1]
if ls_sizecode = '' or isnull(ls_sizecode) then ls_sizecode = ''
object.data[li,li1] = ls_sizecode
end if
next
next
end if
setredraw(true)
return 1
da21 2005-09-22
  • 打赏
  • 举报
回复
可否说清楚点????
mtu207 2005-09-22
  • 打赏
  • 举报
回复
先合并到临时表里,再做cross!
da21 2005-09-21
  • 打赏
  • 举报
回复
箱号 颜色 SIZE_01 SIZE_02 SIZE_03
1 blue 2 4
sky 3
2 blue 2 4
sky 3
3 blue 1 2
sky 1 1

(SIZE_01 SIZE_02 SIZE_03列的数值为对应的数量)

但是现在我要把连续相同的两箱合为一条数据,显示为:
箱号 颜色 SIZE_01 SIZE_02 SIZE_03
1-2 blue 2 4
sky 3
3 blue 1 2
sky 1 1

609

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧