2 campos calculados con 2 criterios diferentes

Necesito hacer un reporte que haga la sumatoria de una campo con dos criterios distintos en el mismo reporte (obtendría dos resultados). De manera que tengo cada campo y uno de ellos lo utilizo luego para hacer un cálculo. Explicando el caso, tengo un campo calculado que arroja los costos totales por línea de estimado; cada línea de estimado tiene una categoría (Engineering, Labor, Material, Equipment). Yo necesito la sumatoria de los costos por mano de obra (allí el criterio sería Estimate Category = "Engineering" Or "Labor"; y la sumatoria de los costos por materiales (criteria: Estimate Category = "Material" Or "Equipment).
Si baso el reporte en un query, sólo me permitirá establecer un solo criterio. Por eso escrbí este "intento" de código:
Sub Report_Open()
'Sum of all Cost Estimate Lines Where Estimate Category = "Material" Or "Equipment"
Dim TotMatCost As Single
'Sum of all Cost Estimate Lines Where Estimate Category = "Labor" Or "Engineering"
Dim TotLabCost As Single
TotMatCost = "SELECT rptCostEstDet.Line Item Total Cost FROM rptCostEstDet"
WHERE Estimate_Category = "Material" Or "Equipment"
TotLabCost = "SELECT rptCostEstDet.Line Item Total Cost FROM rptCostEstDet"
WHERE Estimate_Category = "Labor" Or "Engineering"
Me!Text45 = TotMatCost
Me!Text47 = TotLabCost
End Sub
"Intento" porque no funcionó... :P

1 respuesta

Respuesta
1
oka.. ningun problema
Hasta el próximo mensaje entonces ^_^
Me pillas de vacaciones i con mucho tiempo libre ^_^
Lo de escapar los caracteres viene por la construcción de tus consultas sql.
Normalmente para comparar dos cadenas se usa la comilla simple, p ej:
"SELECT rptCostEstDet.Line Item Total Cost FROM rptCostEstDet WHERE Estimate_Category = 'Material' Or Estimate_Category='Equipment'"
Esta seria la construcción correcta de tu sentencia sql.
Si trabajas con sentencias sql, deduzco que los datos los tienes en una base de datos access o sql server o cualquier otra, no obstante en tu código no se proporciona la conexión a la base de datos.
En esta pagina encontraras un poco de explikacion al respekto
http://www.elguruprogramador.com.ar/zonas/ver.asp?cod=2
Suerte, i para cualquier duda.. ya sabes...
Quiero mantener la pregunta abierta para asegurar el contacto contigo :) De todos modos cuando la cierre te colocaré Excelente... Aún me falta terminar de implementar la solución. Gracias de neuvo ;) Besos
Hola Elph! Gracias por responder tan rápido :D
Text45 y Text47 son los campos donde quiero que aparezcan los valores calculados de TotMatCost y TotLabCost respectivamente. Cada uno de ellos es la suma de EstLineCost, la diferencia entre cada uno es el criterio. En el primero solamente quiero sumar los EstLineCost que pertenezcan a EstCategory = "Material" Or "Equipment"; mientras que para el segundo el criterio sería EstCategory = "Engineering" Or "Labor". De este modo obtengo los costos del proyecto en materiales por una parte y en mano de obra por otra, en el mismo reporte. Luego los costos por mano de obra los utilizaré para otro cálculo, por eso lo necesito separado. Necesito dos valores a partir de un campo de un conjunto de registros (los valores se diferencian entre si por el criterio con que se suman). Esta es la idea central, puede ser que se haga de otra manera, sin los campos Text.
¿Sabes qué? No entendí muy bien lo de "escapar los caracteres '"' ". En cuanto al código de conexión a la bd, quieres decir algo como Dim (Nombre de la base de datos) As Database?.
Gracias de nuevo ;) Besos
Excelente Elph! ¿Con qué de vacaciones?, que bien! Aunque, tranquil@, no voy a abusar de ti ;) Mira esta solución que me dio una companiera de trabajpo en Houston:
Un campo calculado en el reporte directamente:
=Sum(IIf([Estimate Category]="Material" Or [Estimate Category]="Equipment",[Line Item Total Cost]))
De todos modos quiero desarrollar la solución en VBA porque estoy aprendiéndolo (es el primer código que intento escribir en VBA). Siempre he resuelto todo en Access con queries y macros. Es hora de programar... Gracias de nuevo, besitos.
:)
Si, ya era hora de que tuviera vacaciones.. y algo de tiempo libre...
Es bueno ver que hay gente que se interesa en aprender a programar por su cuenta...
^_^
La solución que me has pasado es bastante ingeniosa, aunque quizás en otros entornos de bases de datos relacionales no te serviría. Aunque supongo que en access si funciona..
Personalmente 'odio' access, pero es una mania personal...
Bueno haya suerte en la programación y hasta otra..
Me pillas de vacaciones i con mucho tiempo libre ^_^
Realmente la forma de hacerlo(al menos como yo lo haría) es la misma.
En tu código puedo ver algunos errores:
-no escapas los caracteres ", aunq deberias usar los ' en Estimate_Category='algo'.
- No veo el código de conexión a la bd...
- En las consultas pides más de un campo como resultado, cuando lo que realmente quieres es un solo valor.
-¿Text45 i text47 son las consultas?
Bueno en verdad, no has especificado en que quieres que te ayude, aunque vas en buen camino...
Suerte
Elph, las tablas que tengo y los campos que uso para eso son las siguientes:
1) Project Header Data
Project ID Number
2) Project Cost Estimate Header Table
Cost Estimate ID
Project ID (Associated project)
Estimate Type (Scoping; Classs II; Actual: Value List)
Estimate Date
Classification (Non-classified;V;III;II)
3) Project Cost Estimate Line Item Detail Table
Estimate Line Item ID
Cost Estimate ID
Line Item Description
Line Item Unit
Line Item Quantity
Line Item Estimate (cost per unit)
Line Item Comment
Change Order (y/n)
Estimate Category
Los campos que no ves aquí, como Line Estimate Total Cost, los calculé a través de un query en que baso el reporte. En código creo que se pueden incluir esos cálculos también en vez de hacer un query.
Besito, ciao, espero que te sirva de entretenimiento en caso de que decidas hacerlo... ;)
Si te soy sincero aun no he llegado a aburrirme tanto :P
no, no... hablando en serio, hace años que deje de programar en vb, i no creo que aprendas mucho vb si te lo hago yo, ¿no?
Xdd.. bueno siento desilusionarte, igualmente aquí me tienes para cualquier duda.
Elph
Elph, hola! ^_^
Ya que tienes tiempo libre, es posible que mientras yo desarrollo la solución con sumas condicionales en Access, ¿tu me ayudes a escribir el código en VBA? Este el el planteamiento de lo requerido:
Tengo los siguientes cmapos para un record (no me culpes por los nombres de los campos tan alrgos, así los hizo mi ex-jefe):
Project ID Number
Estimate Category
Estimate Type
Estimate Classification
Estimate Line Cost
Estimate Line Quantity
Line Estimate Total Cost (que es el resultado dem ultiplicar Quantity por Cost si el campo quantity Is Not Null, porque no quiero perder los viejos registros, ya que antes no existía qunatity sino que colocaban directamente el Cost).
Necesito: 1) La suma de Line Estimate Total Cost por Project ID y por Estimate Type, con un criterio Estimate Category = "Engineering" Or "Labor" (TotalLabCost)
2) La suma de Line Estimate Total Cost por Project ID y por Estimate Type, con un criterio Estimate Category = "Equipment" Or "Material"
(TotalMatCost)
Luego voy a usar TotMatCost en la siguiente fórmula:
Contingency Factor = IIf([Project Cost Estimate Header Table]![Estimate Classification] ="Non-classified",40,IIf( [Project Cost Estimate Header Table]![Estimate Classification]="V",25,IIf( [Project Cost Estimate Header Table]![Estimate Classification]="IV",25,IIf( [Project Cost Estimate Header Table]![Estimate Classification]="III",20,IIf( [Project Cost Estimate Header Table]![Estimate Classification]="II", IIf( [rptCostEstDet]![TotalLabCost]<=50000,15,10)))))))
Total Estimated Project Cost = IIf (Contingency Factor="","",(TotalLabCost+TotalMatCost)+(TotalLabCost+TotalMatCost)*(Contingency Factor)/100
Dí que sí, re-porfa please cubierto de nata...
Nos hablamos más tarde ;)
Gracias Elph. Tienes razón. Bueno voy a cerrar la pregunta y cuando el código te contacto (en este momento estoy haciendo otras cosas). Gracias de nuevo ;)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas