Power Builder - Code 128

 
Vista:

Code 128

Publicado por Jose (4 intervenciones) el 23/09/2016 19:39:08
Necesito imprimir codigos de barras Code128 y por lo que he visto por la web, es necesario poner un caracter de inicio, uno de fin y un caracter de control, para lo cual es necesario calcularlo en base a los datos del codigo de barras. ¿ Alguien puede indicarme como hacerlo o tiene el algoritmo que calcula el control ?

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Code 128

Publicado por Manu (7 intervenciones) el 27/10/2016 18:05:54
Hola, te paso las 3 funciones necesarias:

funcion que recibe un string ls_ean128 que se desea imprimir y retorna lo que hay que imprimir:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# funcion string of_ean128 (string ls_ean128)
 
Long ll_i, ll_mini, ll_dummy, ll_asc, ll_checksum
String ls_barcode
boolean lb_tableB
 
for ll_i = 1 to len(ls_ean128)
	ll_asc = asc(mid(ls_ean128,ll_i,1))
	if  (ll_asc >= 32 and ll_asc <= 126) or ll_asc = 203 or ll_asc = 207 then
	else
		ll_i = 0
		exit
	end if
next
 
ls_barcode = ""
lb_tableB = TRUE
ll_dummy = 0
 
if ll_i > 0 then
	ll_i = 1
	do while ll_i <= len(ls_ean128)
		if lb_tableB then
			ll_mini = 6
			if ll_i = 1 or ll_i + 3 = len(ls_ean128) then ll_mini = 4
			of_testnumorfnc1(ll_mini, ll_i, ls_ean128)
			if ll_mini < 0 then
				if ll_i = 1 then
					ls_barcode = char(210)
				else
					ls_barcode = ls_barcode + char(204)
				end if
				lb_tableB = false
			else
				if ll_i = 1 then ls_barcode = char(209)
			end if
		end if
 
		if not lb_TableB then
			if asc(mid(ls_ean128,ll_i,2)) = 207 then
				ls_barcode = ls_barcode + mid(ls_ean128,ll_i,1)
				ll_i ++
			else
				ll_mini = 2
				of_testnum(ll_mini, ll_i, ls_ean128)
				if ll_mini < 0 then
					ll_dummy = long(mid(ls_ean128,ll_i,2))
					if ll_dummy < 95 then
						ll_dummy = ll_dummy + 32
					else
						ll_dummy = ll_dummy + 105
					end if
					ls_barcode = ls_barcode + char(ll_dummy)
					ll_i = ll_i + 2
				else
					ls_barcode = ls_barcode + char(205)
					lb_tableB = true
				end if
			end if
		end if
 
		if lb_tableB then
			ls_barcode = ls_barcode + mid(ls_ean128,ll_i,1)
			ll_i ++
		end if
	loop
 
	//CALCULA EL CHECKSUM
 
	for ll_i = 1 to len(ls_barcode)
		ll_dummy = asc(mid(ls_barcode,ll_i,1))
		if ll_dummy < 127 then
			ll_dummy = ll_dummy -32
		else
			ll_dummy = ll_dummy - 105
		end if
		if ll_i = 1 then ll_checksum = ll_dummy
 
		ll_checksum = mod( (ll_checksum + (ll_i - 1) * ll_dummy),103)
	next
 
	if ll_checksum < 95 then
		ll_checksum = ll_checksum + 32
	else
		ll_checksum = ll_checksum + 105
	end if
 
	ls_barcode = ls_barcode + char(ll_checksum) + char(211)
end if
 
return ls_barcode
 
#######################################################################
# funcion none of_testnumorfnc1(ref long ll_mini, ref long ll_i, string ls_ean128)
Long ll_asc
ll_mini = ll_mini - 1
if (ll_i + ll_mini <= len(ls_ean128)) then
	do while ll_mini >= 0
		ll_asc = asc(mid(ls_ean128, ll_i + ll_mini,1))
		if (ll_asc < 48 or ll_asc > 57) and ll_asc <> 207 then exit
		ll_mini --
	loop
end if
 
############################################################
#funcion of_testnum (ref long ll_mini, ref long ll_i, string ls_ean128);
Long ll_asc
ll_mini --
if ll_i + ll_mini <= len(ls_ean128) then
	do while ll_mini >= 0
		ll_asc = asc(mid(ls_ean128, ll_i + ll_mini, 1))
		if ll_asc < 48 or ll_asc > 57 then
			exit
		end if
		ll_mini --
	loop
end if
############################################################
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Code 128

Publicado por Nicolas (1 intervención) el 09/03/2020 20:31:42
Disculpa que te moleste, yo ya tengo generada la cadena que tengo que imprimir y queria saber si antes de invocar a la funcion para completar el campo del DW tengo que adicionarle a la cadena algun caracter al inicio y algun otro al final. Te pregunto esto porque con la cadena como la tengo no me esta leyendo el lector. Te paso un ejemplo de la cadena

(415)7701155000015(8020)100000060630570014162265(3900)0003269280(96)20191231

Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Pablo

Code 128

Publicado por Pablo (3 intervenciones) el 17/11/2016 22:01:28
Ya existe unos founts que imprimen códigos de barra, primero copias los fonts en el Windows donde deseas imprimir etiquetas, luego en tu DW solo tienes que cambiar al fonts que deseas y solo imprimes. Si necesitas los fonts, me escribes y te los envio.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar