Compare commits

..

2 Commits

Author SHA1 Message Date
chentianrui 8d595b339c Merge branch 'master' of https://git.97id.com/chentianrui/KG_generation 2025-08-18 15:15:58 +08:00
chentianrui 3fd0b2af0c 增加了知识图谱导出excel 2025-08-18 15:14:37 +08:00
610 changed files with 6062 additions and 4932473 deletions
+8
View File
@@ -4,6 +4,14 @@
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "cost_comparison",
"type": "debugpy",
"request": "launch",
"program": "cost_comparison.py",
"console": "integratedTerminal",
"justMyCode": true
},
{
"name": "kg_visualization",
"type": "debugpy",
+25
View File
@@ -198,6 +198,29 @@ name: STRING
计算式: STRING
合价含税: STRING
Accessory
特征段: STRING
单价含税: STRING
单位: STRING
资源库名称: STRING
合价不含税: STRING
类型: STRING
投标数量: STRING
投标单价: STRING
关联父级量: STRING
颜色标记: STRING
运杂费率: STRING
设备类型: STRING
编码: STRING
供货方: STRING
规格型号: STRING
单价不含税: STRING
id: STRING
name: STRING
数量: STRING
计算式: STRING
合价含税: STRING
MaterialOrEquipment
type: STRING
预算价不含税: STRING
@@ -347,6 +370,7 @@ BCL版本: STRING
(:ProjectDivisionItem)-[:HAS_CHILD]->(:Quota)
(:ProjectDivisionItem)-[:HAS_CHILD]->(:MainMaterial)
(:ProjectDivisionItem)-[:HAS_CHILD]->(:Equipment)
(:ProjectDivisionItem)-[:HAS_CHILD]->(:Accessory)
(:ProjectQuantity)-[:HAS_CHILD]->(:MaterialOrEquipment)
(:FeeTableTemplateSet)-[:HAS_CHILD]->(:FeeTableTemplateSet)
(:FeeTableTemplateSet)-[:HAS_CHILD]->(:FeeTableTemplateItem)
@@ -358,6 +382,7 @@ BCL版本: STRING
(:ProjectPropertySet)-[:HAS_CHILD]->(:ProjectProperty)
(:List)-[:HAS_CHILD]->(:ProjectQuantity)
(:List)-[:HAS_CHILD]->(:Equipment)
(:List)-[:HAS_CHILD]->(:Accessory)
(:List)-[:HAS_CHILD]->(:MainMaterial)
(:List)-[:HAS_CHILD]->(:Quota)
(:List)-[:USE]->(:CostSet)
+466 -259
View File
File diff suppressed because it is too large Load Diff
+1 -3
View File
@@ -33,9 +33,7 @@ def convert_json_to_readable(input_file, output_file=None):
if __name__ == "__main__":
# 指定输入文件路径
input_file = (
r"E:\文件\LLM_model\RAG\code\Engineering_data_KG-1\equipment_calculation\new\实际工程\主网预算线路.json"
)
input_file = r"project2json/outputs/json/变电技改国网.json"
# 调用转换函数
convert_json_to_readable(input_file)
+89 -74
View File
@@ -1,3 +1,7 @@
"""
批量对比多个 calculation_results.json 与 project_data.json 中的费用
"""
import json
import os
import re
@@ -6,19 +10,15 @@ from difflib import SequenceMatcher
def extract_guid_from_filename(filename):
"""从文件名中提取 GUID"""
# 匹配 8-4-4-4-12 格式的 GUID
pattern = r"([0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12})"
match = re.search(pattern, filename, re.IGNORECASE)
return match.group(1).upper() if match else None
def normalize_cost_name(name):
"""标准化费用名称,去除特殊符号、后缀等,便于匹配"""
# 去除 ID 后缀如 "_GJJ", "_BZHF" 等
name = re.sub(r"_\w+$", "", name)
# 去除常见符号
name = re.sub(r"[^\w]", "", name)
# 统一转小写
"""标准化费用名称,便于匹配"""
name = re.sub(r"_\w+$", "", name) # 去除后缀如 _GJJ
name = re.sub(r"[^\w]", "", name) # 去除符号
return name.lower()
@@ -40,13 +40,9 @@ def load_calculation_results(json_file_path):
def find_node_by_guid(expense_preview, target_guid):
"""
在 expensePreview 中递归查找 GUID 对应的节点
"""
"""在 expensePreview 中递归查找 GUID 对应的节点"""
def search_recursive(items):
"""在列表中递归查找 GUID"""
for item in items:
current_guid = item.get("GUID", "").strip("{}").upper()
if current_guid == target_guid:
@@ -57,16 +53,11 @@ def find_node_by_guid(expense_preview, target_guid):
return result
return None
# 遍历每个大类(如 "建筑工程")
for category_name, category_data in expense_preview.items():
if not isinstance(category_data, dict):
continue
# 遍历每个子类(如 "建筑"、"安装"
for subcategory_name, items in category_data.items():
if isinstance(items, list):
result = search_recursive(items)
if result is not None:
return result
for category_name, items in expense_preview.items():
if isinstance(items, list):
result = search_recursive(items)
if result is not None:
return result
return None
@@ -84,7 +75,6 @@ def load_project_data_and_find_costs(project_json_path, target_guid):
external_costs = {}
for item in children:
# 有些节点只有 cost,没有 id(可能是合计)
item_id = item.get("id", "")
cost_str = item.get("cost", "0")
try:
@@ -93,10 +83,8 @@ def load_project_data_and_find_costs(project_json_path, target_guid):
cost_val = 0.0
if item_id:
# 只提取有 id 的项
clean_id = re.sub(r"_\w+$", "", item_id) # 去掉 _GJJ 等后缀
clean_id = re.sub(r"_\w+$", "", item_id)
external_costs[clean_id] = cost_val
# 如果没有 id,可以考虑用其他方式标记,这里先忽略
return external_costs
@@ -117,17 +105,16 @@ def match_and_compare_costs(calc_costs, ext_costs, similarity_threshold=0.6):
best_score = score
best_match = ext_name
# 判断是否足够相似
if best_match and best_score >= similarity_threshold:
ext_value = ext_costs[best_match]
difference = calc_value - ext_value
comparison.append(
{
"项目": calc_name,
"计算值": calc_value,
"参考值": ext_value,
"计算值": calc_value,
"差异": difference,
"匹配": best_match,
"原数据": best_match,
"相似度": best_score,
}
)
@@ -136,10 +123,10 @@ def match_and_compare_costs(calc_costs, ext_costs, similarity_threshold=0.6):
comparison.append(
{
"项目": calc_name,
"计算值": calc_value,
"参考值": None,
"计算值": calc_value,
"差异": None,
"匹配": None,
"原数据": None,
"相似度": best_score,
}
)
@@ -148,71 +135,99 @@ def match_and_compare_costs(calc_costs, ext_costs, similarity_threshold=0.6):
for ext_name, ext_value in ext_costs.items():
if ext_name not in matched_ext:
comparison.append(
{"项目": None, "计算值": None, "参考值": ext_value, "差异": None, "匹配项": ext_name, "相似度": None}
{
"项目": None,
"参考值": ext_value,
"计算值": None,
"差异": None,
"原数据项": ext_name,
"相似度": None,
}
)
return comparison
def save_comparison_to_txt(comparison, output_txt_path):
"""保存对比结果到 TXT 文件,差异保留两位小数,交换计算值和参考值位置"""
"""保存对比结果到 TXT 文件"""
with open(output_txt_path, "w", encoding="utf-8") as f:
# 表头:项目、参考值、计算值、差异、原数据项
f.write(f"{'项目':<20} {'参考值':<25} {'计算值':<25} {'差异':<25} {'原数据项':<30}\n")
f.write("-" * 120 + "\n")
for item in comparison:
# 原始字段
project = (item["项目"] or "").ljust(20)[:20] # 最多20字符,左对齐
# 交换计算值和参考值的位置
ref = str(item["参考值"]) if item["参考值"] is not None else ""
project = (item["项目"] or "").ljust(20)[:20]
ref = f"{item['参考值']:.2f}" if item["参考值"] is not None else ""
ref = ref.ljust(25)[:25]
calc = str(item["计算值"]) if item["计算值"] is not None else ""
calc = calc.ljust(25)[:25] # 最多25字符宽度
# 差异保留两位小数
if item["差异"] is not None:
diff = f"{item['差异']:.2f}"
else:
diff = ""
calc = f"{item['计算值']:.2f}" if item["计算值"] is not None else ""
calc = calc.ljust(25)[:25]
diff = f"{item['差异']:.2f}" if item["差异"] is not None else ""
diff = diff.ljust(25)[:25]
original = (item["匹配项"] or "").ljust(30)[:30] # 原数据项字段更宽
original = (item["原数据项"] or "").ljust(30)[:30]
f.write(f"{project}{ref}{calc}{diff}{original}\n")
print(f"对比结果已保存至: {output_txt_path}")
print(f"对比结果已保存至: {output_txt_path}")
def main():
# 配置路径
calculation_json_path = (
"project2json/outputs/bclresult/一般土建_496A54BB-8A38-4BE1-B116-AD4780E6874A_预算工程_calculation_results.json"
)
project_data_json_path = "project2json/outputs/json/220kV变电站工程_readable.json"
# ================== 配置路径 ==================
# 存放所有 calculation_results.json 的文件夹
calc_results_folder = "project2json/outputs/bclresults/变电技改国网"
# 1. 提取 GUID
guid = extract_guid_from_filename(calculation_json_path)
if not guid:
raise ValueError("无法从文件名中提取 GUID")
print(f"提取到 GUID: {guid}")
# 主 project_data.json 路径(参考数据源)
project_data_json_path = "project2json/outputs/json/变电技改国网.json"
# 2. 读取计算结果并汇总
calc_costs = load_calculation_results(calculation_json_path)
print(f"共加载 {len(calc_costs)} 个费用项")
# 输出对比结果的文件夹
output_folder = "project2json/outputs/comparison_results"
os.makedirs(output_folder, exist_ok=True)
# 3. 从 project_data.json 中查找对应 GUID 的费用项
ext_costs = load_project_data_and_find_costs(project_data_json_path, guid)
print(f"从 project_data 中找到 {len(ext_costs)} 个参考费用项")
# 支持的文件名关键词(可根据实际命名调整)
result_file_keyword = "_calculation_results.json"
# 4. 匹配并对比
comparison = match_and_compare_costs(calc_costs, ext_costs, similarity_threshold=0.6)
# ==================================================
# 5. 输出到同名 .txt 文件
base_name = os.path.splitext(calculation_json_path)[0]
output_txt_path = base_name + ".txt"
save_comparison_to_txt(comparison, output_txt_path)
print(f"开始批量处理文件夹: {calc_results_folder}")
processed_count = 0
for filename in os.listdir(calc_results_folder):
if not filename.endswith(".json") or result_file_keyword not in filename:
continue
calc_json_path = os.path.join(calc_results_folder, filename)
try:
# 提取 GUID
guid = extract_guid_from_filename(filename)
if not guid:
print(f"⚠️ 无法从文件名提取 GUID: {filename}")
continue
print(f"\n📄 处理文件: {filename}")
print(f" 提取 GUID: {guid}")
# 读取计算结果
calc_costs = load_calculation_results(calc_json_path)
print(f" 加载 {len(calc_costs)} 个计算费用项")
# 从主 JSON 获取参考费用
ext_costs = load_project_data_and_find_costs(project_data_json_path, guid)
print(f" 找到 {len(ext_costs)} 个参考费用项")
# 对比
comparison = match_and_compare_costs(calc_costs, ext_costs, similarity_threshold=0.6)
# 生成输出文件名(与原 JSON 同名,但输出到指定文件夹)
base_name = os.path.splitext(filename)[0]
output_txt_path = os.path.join(output_folder, base_name + ".txt")
# 保存结果
save_comparison_to_txt(comparison, output_txt_path)
processed_count += 1
except Exception as e:
print(f"❌ 处理文件 {filename} 时出错: {e}")
print(f"\n✅ 批量处理完成!共处理 {processed_count} 个文件。")
print(f"📊 所有对比结果已保存至: {output_folder}")
if __name__ == "__main__":
+1 -1
View File
@@ -10,7 +10,7 @@ import copy
# 配置logging
logging.basicConfig(
level=logging.INFO,
level=logging.DEBUG,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
handlers=[logging.FileHandler("bcl_calculator.log"), logging.StreamHandler()],
)
@@ -10,6 +10,16 @@ class CalculationStrategy(ABC):
每种软件类型可以提供自己的实现,以修改计算过程中的任何规则。
"""
@abstractmethod
def get_output_dir(self) -> str:
"""
获取输出目录路径
Returns:
str: 输出目录路径
"""
pass
@abstractmethod
def calculate_fee_base(
self,
@@ -243,6 +253,17 @@ class DefaultCalculationStrategy(CalculationStrategy):
# 缓存已计算过的费用
self.calculated_fees = {}
# 默认输出目录
self.output_dir = "计算结果"
def get_output_dir(self) -> str:
"""获取输出目录路径"""
return self.output_dir
def set_output_dir(self, output_dir: str) -> None:
"""设置输出目录路径"""
self.output_dir = output_dir
def calculate_fee_base(
self,
fee_base: str,
+16 -3
View File
@@ -23,6 +23,8 @@ class CalculatorBase(ABC):
self.config_dir = software_type.config_dir
# 使用默认计算策略
self.calculation_strategy = self.create_calculation_strategy()
# 默认输出目录
self.output_dir = os.path.join("计算结果", self.software_type.name)
def create_calculation_strategy(self) -> CalculationStrategy:
"""
@@ -41,13 +43,24 @@ class CalculatorBase(ABC):
def get_output_dir(self) -> str:
"""获取输出目录路径"""
base_dir = "计算结果"
return os.path.join(base_dir, self.software_type.name)
return self.output_dir
def set_output_dir(self, output_dir: str) -> None:
"""
设置输出目录路径
Args:
output_dir: 输出目录路径
"""
self.output_dir = output_dir
# 如果计算策略支持设置输出目录,也设置计算策略的输出目录
if hasattr(self.calculation_strategy, "set_output_dir"):
self.calculation_strategy.set_output_dir(output_dir)
def calculate_quantity_fee_tables(
self,
json_file_path: str,
project_name: str,
project_name: str = None,
) -> None:
"""
计算工程量取费表
+15 -6
View File
@@ -356,7 +356,8 @@ def get_quantity_nodes(json_file_path, project_name, engineering_type, project_g
)
node_name = node.get("清单名称", node.get("项目名称", "未命名"))
node_id = node.get("id", node.get("GUID", "未知ID"))
# 强制使用GUID而不是ID
node_id = node.get("GUID") or node.get("guid") or node.get("id", "未知ID")
current_path = f"{parent_path}/{node_name}" if parent_path else node_name
if is_bill_node:
@@ -386,7 +387,8 @@ def get_quantity_nodes(json_file_path, project_name, engineering_type, project_g
# 处理每个清单节点
for bill_node in bill_nodes:
bill_id = bill_node.get("id") or bill_node.get("GUID")
# 强制使用GUID而不是ID
bill_id = bill_node.get("GUID") or bill_node.get("guid") or bill_node.get("id")
bill_name = bill_node.get("清单名称", bill_node.get("项目名称", "未命名清单"))
bill_children = bill_node.get("children", [])
@@ -400,7 +402,9 @@ def get_quantity_nodes(json_file_path, project_name, engineering_type, project_g
# 为每个工程量节点设置清单节点信息
for node in bill_quantity_nodes:
# 存储关键信息而不是整个对象
node["bill_id"] = bill_id
# 强制使用GUID而不是ID
node["bill_guid"] = bill_id # 新增GUID字段
node["bill_id"] = bill_id # 保持兼容性
node["bill_name"] = bill_name
node["取费表名称"] = bill_node.get("取费表名称", bill_node.get("取费表", ""))
# 设置parent_id以保持兼容性
@@ -448,7 +452,9 @@ def get_quantity_nodes(json_file_path, project_name, engineering_type, project_g
# 在项目中查找父节点
def find_node_by_id(node_list, node_id):
for n in node_list:
if n.get("id") == node_id or n.get("GUID") == node_id:
# 强制使用GUID而不是ID进行匹配
node_guid = n.get("GUID") or n.get("guid") or n.get("id")
if node_guid == node_id:
return n
if "children" in n and n["children"]:
found = find_node_by_id(n["children"], node_id)
@@ -471,10 +477,13 @@ def get_quantity_nodes(json_file_path, project_name, engineering_type, project_g
)
if is_bill_node:
bill_id = parent_node.get("id") or parent_node.get("GUID")
# 强制使用GUID而不是ID
bill_id = parent_node.get("GUID") or parent_node.get("guid") or parent_node.get("id")
bill_name = parent_node.get("清单名称", parent_node.get("项目名称", "未命名清单"))
node["bill_id"] = bill_id
# 强制使用GUID而不是ID
node["bill_guid"] = bill_id # 新增GUID字段
node["bill_id"] = bill_id # 保持兼容性
node["bill_name"] = bill_name
node["取费表名称"] = parent_node.get("取费表名称", parent_node.get("取费表", ""))
# 设置parent_id以保持兼容性
+174 -202
View File
@@ -1,10 +1,4 @@
"""
第二步:计算bcl结果
"""
import os
import argparse
import re
import json
from typing import Dict, List, Any, Optional, Tuple
from equipment_calculation.software_types import (
@@ -16,78 +10,23 @@ from equipment_calculation.software_types import (
from equipment_calculation.software_calculators import get_calculator
def parse_arguments():
"""解析命令行参数"""
parser = argparse.ArgumentParser(description="工程量取费和人材机合价计算程序")
# 软件类型参数
parser.add_argument(
"--category", choices=["主网", "配网", "技改"], default="主网", help="软件类别(主网/配网/技改)"
)
parser.add_argument("--engineering-type", choices=["预算", "清单"], default="清单", help="工程类型(预算/清单)")
# 计算类型参数
parser.add_argument(
"--calculate",
choices=["all", "quantity", "resource"],
default="quantity",
help="计算类型(all: 全部, quantity: 工程量取费, resource: 人材机合价)",
)
# 项目参数
parser.add_argument("--project", help="项目名称,如果不指定则处理所有项目")
parser.add_argument("--adjustment-type", default="调差", help="调差类型,默认为'调差'")
# 输入文件参数
parser.add_argument(
"--input-file",
default="测试案例/主网清单变电.json",
help="输入JSON文件路径,如果不指定则使用默认路径",
)
# 添加输入和输出文件夹参数
parser.add_argument("--input-folder", help="输入文件夹路径,包含要处理的JSON文件")
parser.add_argument("--output-folder", default="计算结果", help="输出文件夹路径,用于保存计算结果")
return parser.parse_args()
def parse_filename(filename: str) -> Tuple[str, str]:
"""
从文件名中解析软件类别和工程类型(备用方法)
:param filename: JSON文件名,例如"主网预算变电.json"
:return: (category, engineering_type) 元组,例如 ("主网", "预算")
"""
# 移除扩展名
basename = os.path.splitext(filename)[0]
# 查找类别(主网/配网/技改)
category = None
for cat in ["主网", "配网", "技改"]:
if cat in basename:
category = cat
break
# 查找工程类型(预算/清单)
engineering_type = None
for eng_type in ["预算", "清单"]:
if eng_type in basename:
engineering_type = eng_type
break
# 如果未找到,使用默认值
if not category:
print(f"警告: 无法从文件名 '{filename}' 中解析软件类别,使用默认值 '主网'")
category = "主网"
if not engineering_type:
print(f"警告: 无法从文件名 '{filename}' 中解析工程类型,使用默认值 '清单'")
engineering_type = "清单"
return category, engineering_type
# 软件类别名称映射字典,将各种变体映射到标准类别
CATEGORY_MAPPING = {
# 主网及其变体
"主网": "主网",
"主网工程": "主网",
"主网项目": "主网",
# 配网及其变体
"配网": "配网",
"配网造价": "配网",
"配网清单": "配网",
# 技改及其变体
"技改": "技改",
"技改工程": "技改",
"技改项目": "技改",
"技改造价": "技改",
"技改清单": "技改",
}
def parse_json_content(json_file_path: str) -> Tuple[Optional[str], Optional[str]]:
@@ -102,8 +41,8 @@ def parse_json_content(json_file_path: str) -> Tuple[Optional[str], Optional[str
data = json.load(f)
# 定义阶段类型映射表
budget_types = ["概预算", "定额", "", ""]
list_types = ["清单", "结算", "招标控制价", "招投标工程"]
budget_types = ["概预算", "定额", "定额计价", "", "预算工程"]
list_types = ["清单", "结算", "招标控制价", "招投标工程", "清单计价"]
# 从division字段获取软件名称和阶段类型
if "division" in data:
@@ -112,28 +51,39 @@ def parse_json_content(json_file_path: str) -> Tuple[Optional[str], Optional[str
# 使用-分割division字段
parts = division.split("-")
if len(parts) >= 2:
if len(parts) == 2:
category = parts[0].strip()
stage_type = parts[1].strip()
# 验证软件类别
if category not in ["主网", "配网", "技改"]:
print(f"警告: division中的软件名称 '{category}' 不是有效值,将使用默认值 '主网'")
category = "主网"
# 映射阶段类型
if any(budget_type in stage_type for budget_type in budget_types):
engineering_type = "预算"
elif any(list_type in stage_type for list_type in list_types):
engineering_type = "清单"
else:
print(f"警告: division中的阶段类型 '{stage_type}' 无法映射到预算或清单,将使用默认值 '清单'")
engineering_type = "清单"
print(f"从division解析: 软件名称={category}, 阶段类型={engineering_type} (原始值: {stage_type})")
return category, engineering_type
elif len(parts) == 3:
category = parts[0].strip()
stage_type = parts[2].strip()
else:
print(f"警告: division字段 '{division}' 格式不正确,无法分割")
# 可以选择返回默认值或抛出异常,这里以返回默认值为例
category = "主网"
engineering_type = "清单"
print(f"使用默认值: 软件名称={category}, 阶段类型={engineering_type}")
return category, engineering_type
# 使用映射字典规范化软件类别
if category in CATEGORY_MAPPING:
category = CATEGORY_MAPPING[category]
else:
print(f"警告: division中的软件名称 '{category}' 不是有效值,将使用默认值 '主网'")
category = "主网"
# 映射阶段类型
if any(budget_type in stage_type for budget_type in budget_types):
engineering_type = "预算"
elif any(list_type in stage_type for list_type in list_types):
engineering_type = "清单"
else:
print(f"警告: division中的阶段类型 '{stage_type}' 无法映射到预算或清单,将使用默认值 '清单'")
engineering_type = "清单"
print(f"从division解析: 软件名称={category}, 阶段类型={engineering_type} (原始值: {stage_type})")
return category, engineering_type
else:
print(f"警告: JSON文件中未找到division字段,尝试从basicData中解析")
@@ -145,8 +95,10 @@ def parse_json_content(json_file_path: str) -> Tuple[Optional[str], Optional[str
# 验证解析结果
if category and engineering_type:
# 确保category是有效值
if category not in ["主网", "配网", "技改"]:
# 使用映射字典规范化软件类别
if category in CATEGORY_MAPPING:
category = CATEGORY_MAPPING[category]
else:
print(f"警告: basicData中的软件名称 '{category}' 不是有效值,将使用默认值 '主网'")
category = "主网"
@@ -170,146 +122,166 @@ def parse_json_content(json_file_path: str) -> Tuple[Optional[str], Optional[str
def process_json_file(
input_file: str,
base_output_dir: str = "计算结果",
category: Optional[str] = None,
engineering_type: Optional[str] = None,
project: Optional[str] = None,
adjustment_type: str = "调差",
json_file_path: str, output_dir: str, calculate_type: str = "all", project_name: str = None
) -> bool:
"""
处理单个JSON文件
:param input_file: 输入JSON文件路径
:param base_output_dir: 基础输出目录路径,实际结果会保存在此目录下的子文件夹中
:param category: 软件类别,如果为None则从JSON内容中解析
:param engineering_type: 工程类型,如果为None则从JSON内容中解析
:param project: 项目名称,如果为None则处理所有项目
:param adjustment_type: 调差类型
:return: 处理是否成功
Args:
json_file_path: JSON文件路径
output_dir: 输出目录
calculate_type: 计算类型(all: 全部, quantity: 工程量取费, resource: 人材机合价)
project_name: 项目名称,如果不指定则处理所有项目
Returns:
bool: 处理是否成功
"""
try:
# 获取文件名(不含扩展名)作为输出子文件夹的名称
filename = os.path.basename(input_file)
file_basename = os.path.splitext(filename)[0]
output_dir = os.path.join(base_output_dir, file_basename)
# 从JSON文件内容中解析软件类别和工程类型
category, engineering_type = parse_json_content(json_file_path)
# 创建输出子文件夹
os.makedirs(output_dir, exist_ok=True)
print(f"创建输出目录: {output_dir}")
# 如果解析失败,使用默认值
if category is None:
category = "主网"
print(f"无法从文件中解析软件类别,使用默认值: {category}")
# 如果未指定category或engineering_type,从JSON内容中解析
if category is None or engineering_type is None:
# 首先尝试从JSON内容中解析
json_category, json_engineering_type = parse_json_content(input_file)
if category is None:
if json_category:
category = json_category
else:
# 如果从JSON内容中解析失败,尝试从文件名中解析(作为备用)
print("从JSON内容解析软件名称失败,尝试从文件名解析...")
parsed_category, _ = parse_filename(filename)
category = parsed_category
if engineering_type is None:
if json_engineering_type:
engineering_type = json_engineering_type
else:
# 如果从JSON内容中解析失败,尝试从文件名中解析(作为备用)
print("从JSON内容解析阶段类型失败,尝试从文件名解析...")
_, parsed_engineering_type = parse_filename(filename)
engineering_type = parsed_engineering_type
print(f"处理文件: {input_file}")
print(f" 软件类别: {category}")
print(f" 工程类型: {engineering_type}")
if engineering_type is None:
engineering_type = "预算"
print(f"无法从文件中解析工程类型,使用默认值: {engineering_type}")
# 获取软件类型
software_type = get_software_type(category, engineering_type)
print(f" 使用软件类型: {software_type.name}")
print(f"使用软件类型: {software_type.name}")
# 获取计算器
calculator = get_calculator(software_type)
if not calculator:
print(f" 错误: 未找到软件类型 {software_type.name} 的计算器")
print(f"错误: 未找到软件类型 {software_type.name} 的计算器")
return False
# 设置输出目录
calculator.set_output_dir(output_dir)
# 获取文件名(不含扩展名),并替换空格和特殊字符
base_filename = os.path.basename(json_file_path).replace(".json", "")
# 创建安全的目录名(替换空格和特殊字符)
safe_dirname = base_filename.replace(" ", "_").replace("\\", "_").replace("/", "_")
# 执行计算
print(" 开始计算工程量取费表...")
calculator.calculate_quantity_fee_tables(json_file_path=input_file, project_name=project)
# 设置自定义输出目录
custom_output_dir = os.path.join(output_dir, safe_dirname)
print(" 开始计算人材机合价...")
calculator.calculate_resource_fee_tables(json_file_path=input_file, project_name=project)
# 确保输出目录存在
try:
os.makedirs(custom_output_dir, exist_ok=True)
print(f"创建输出目录: {custom_output_dir}")
except Exception as e:
print(f"创建输出目录失败: {str(e)}")
# 尝试使用更安全的目录名
safe_dirname = f"project_{hash(base_filename) % 10000}"
custom_output_dir = os.path.join(output_dir, safe_dirname)
os.makedirs(custom_output_dir, exist_ok=True)
print(f"使用备用输出目录: {custom_output_dir}")
print(f" 处理完成: {input_file}")
print(f" 结果保存在: {output_dir}")
# 检查计算器是否有set_output_dir方法,如果有则直接设置输出目录
if hasattr(calculator, "set_output_dir"):
calculator.set_output_dir(custom_output_dir)
print(f"已设置计算器输出目录: {custom_output_dir}")
# 根据计算类型执行计算
if calculate_type in ["all", "quantity"]:
print("开始计算工程量取费表...")
calculator.calculate_quantity_fee_tables(
json_file_path=json_file_path,
project_name=project_name,
)
if calculate_type in ["all", "resource"]:
print("开始计算人材机合价...")
calculator.calculate_resource_fee_tables(json_file_path=json_file_path, project_name=project_name)
else:
# 创建一个新的计算器,复制原始计算器的属性
class CustomOutputCalculator:
def __init__(self, original_calculator, custom_dir):
self.original_calculator = original_calculator
self.custom_dir = custom_dir
def get_output_dir(self):
return self.custom_dir
def __getattr__(self, name):
return getattr(self.original_calculator, name)
# 创建自定义输出目录的计算器
custom_calculator = CustomOutputCalculator(calculator, custom_output_dir)
# 根据计算类型执行计算
if calculate_type in ["all", "quantity"]:
print("开始计算工程量取费表...")
custom_calculator.calculate_quantity_fee_tables(
json_file_path=json_file_path,
project_name=project_name,
)
if calculate_type in ["all", "resource"]:
print("开始计算人材机合价...")
custom_calculator.calculate_resource_fee_tables(
json_file_path=json_file_path, project_name=project_name
)
print(f"文件 {json_file_path} 处理完成")
return True
except Exception as e:
print(f" 处理文件 {input_file} 时出错: {str(e)}")
print(f"处理文件 {json_file_path} 时出错: {str(e)}")
import traceback
traceback.print_exc()
return False
def process_BCL_calculate(input_folder: str, output_folder: str) -> List[Tuple[str, bool]]:
def process_directory(input_dir: str, output_dir: str, calculate_type: str = "all") -> None:
"""
处理指定文件夹中的所有JSON文件
批量处理目录中的JSON文件
:param input_folder: 输入文件夹路径,包含要处理的JSON文件
:param output_folder: 输出文件夹路径,用于保存计算结果
:return: 处理结果列表,格式为 [(文件路径, 是否成功), ...]
Args:
input_dir: 输入目录路径
output_dir: 输出目录路径
calculate_type: 计算类型(all: 全部, quantity: 工程量取费, resource: 人材机合价)
"""
# 确保基础输出目录存在
os.makedirs(output_folder, exist_ok=True)
# 确保输出目录存在
os.makedirs(output_dir, exist_ok=True)
# 查找所有JSON文件
json_files = []
for file in os.listdir(input_folder):
if file.lower().endswith(".json"):
json_files.append(os.path.join(input_folder, file))
# 获取目录中的所有JSON文件
json_files = [f for f in os.listdir(input_dir) if f.lower().endswith(".json")]
if not json_files:
print(f"警告: 在目录 {input_folder}没有找到JSON文件")
return []
print(f"警告: 在目录 {input_dir}找到JSON文件")
return
print(f"找到 {len(json_files)} 个JSON文件,开始处理...")
# 处理每个JSON文件
results = []
for input_file in json_files:
success = process_json_file(
input_file=input_file,
base_output_dir=output_folder, # 传递基础输出目录
category=None, # 从JSON内容中解析
engineering_type=None, # 从JSON内容中解析
project=None, # 处理所有项目
adjustment_type="调差",
)
success_count = 0
for i, json_file in enumerate(json_files, 1):
json_file_path = os.path.join(input_dir, json_file)
print(f"处理文件 {i}/{len(json_files)}: {json_file}")
results.append((input_file, success))
if process_json_file(json_file_path, output_dir, calculate_type):
success_count += 1
return results
print(f"处理完成,成功: {success_count}/{len(json_files)}")
def main():
"""程序入口"""
def bcl_calculate(input_dir: str, output_dir: str, calculate_type: str = "all") -> None:
"""
主函数,处理指定目录中的所有JSON文件
input_folder = "project2json/outputs/json"
output_folder = "project2json/outputs/bcl_results"
Args:
input_dir: 输入目录路径
output_dir: 输出目录路径
calculate_type: 计算类型(all: 全部, quantity: 工程量取费, resource: 人材机合价)
"""
print(f"开始处理目录: {input_dir}")
print(f"输出目录: {output_dir}")
print(f"计算类型: {calculate_type}")
results = process_BCL_calculate(input_folder, output_folder)
process_directory(input_dir, output_dir, calculate_type)
# 显示处理结果
success_count = sum(1 for _, success in results if success)
print(f"\n处理完成: 成功 {success_count}/{len(results)} 个文件")
if success_count < len(results):
print("处理失败的文件:")
for file_path, success in results:
if not success:
print(f" - {os.path.basename(file_path)}")
if __name__ == "__main__":
main()
print("所有文件处理完成")
File diff suppressed because it is too large Load Diff
+136 -104
View File
@@ -28,11 +28,12 @@ from equipment_calculation.item_acquisition import (
# 缓存已计算过的费用
calculated_fees = {}
# 添加一个全局变量和一个缓存字典来存储清单数量
_BILL_QUANTITY = 1.0
bill_quantity_cache = {}
# # 添加一个全局变量和一个缓存字典来存储清单数量
# _BILL_QUANTITY = 1.0
# bill_quantity_cache = {}
# 主网处理地形系数
def process_DXdata(json_data):
"""
处理 projectData 中的线路特征段数据,计算每条 bpBillZhXsTable 记录的加权值,
@@ -102,40 +103,39 @@ def process_DXdata(json_data):
# 在create_list_from_node函数后添加一个包装函数
def create_list_from_node_with_quantity(node, quantity=None):
"""创建清单对象并设置数量"""
def create_list_from_node_with_bill_quantity(node, quantity=None):
"""创建清单对象并设置数量,不使用全局变量"""
from equipment_calculation.bcl_utils import create_list_from_node
bill_obj = create_list_from_node(node)
# 设置清单数量
bill_quantity = quantity if quantity is not None else node.get("数量")
if quantity is not None:
bill_quantity = quantity
elif "数量" in node:
try:
bill_quantity = float(node["数量"])
except (ValueError, TypeError):
bill_quantity = 1.0
else:
bill_quantity = 1.0
# 设置到对象属性
bill_obj.quantity = bill_quantity
# 保存到全局变量和缓存
global _BILL_QUANTITY
_BILL_QUANTITY = bill_quantity
# 如果节点有ID,保存到缓存
bill_id = node.get("id") or node.get("GUID")
if bill_id:
bill_quantity_cache[bill_id] = bill_quantity
# 设置环境变量作为后备方案
os.environ["BILL_QUANTITY"] = str(bill_quantity)
if hasattr(bill_obj, "quantity"):
bill_obj.quantity = bill_quantity
else:
# 如果对象没有quantity属性,尝试设置到其他可能的属性
try:
setattr(bill_obj, "quantity", bill_quantity)
except:
pass
print(f"设置清单对象数量: {bill_quantity}")
print(f"全局变量_BILL_QUANTITY: {_BILL_QUANTITY}")
if bill_id:
print(f"缓存清单{bill_id}的数量: {bill_quantity_cache[bill_id]}")
return bill_obj
# 递归查找取费表中包含"取费基数"的节点
def find_fee_base_nodes(node: Dict[str, Any], result: List = None) -> List[Dict[str, Any]]:
def find_fee_base_nodes(node: Dict[str, Any], result: List[Dict[str, Any]] = None) -> List[Dict[str, Any]]:
"""
递归查找取费表中包含"取费基数"的节点或有子节点的费用项
@@ -449,21 +449,11 @@ def calculate_all_fees(
calculation_strategy=None,
) -> Dict[str, float]:
"""
计算项目节点的所有费用
Args:
project_node: 工程量节点
cost_table: 取费表
json_file_path: JSON文件路径,用于获取工程信息
engineering_type: 工程类型,如"清单工程""预算工程"
calculation_strategy: 计算策略,如果为None则使用默认策略
Returns:
Dict[str, float]: 费用计算结果
计算项目节点的所有费用,确保清单数量正确传递
"""
results = {}
# 1. 工程信息上下文 ,在这里暂时先将参数项目划分名称固定
# 1. 工程信息上下文
project_context = create_project_contexts(json_file_path=json_file_path)
with open(json_file_path, "r", encoding="utf-8") as file:
@@ -478,9 +468,9 @@ def calculate_all_fees(
# 获取清单节点
bill_id = project_node.get("bill_id")
bill_name = project_node.get("bill_name")
bill_node = project_node.get("bill_node")
if not bill_node:
bill_node = {
bill_node_data = project_node.get("bill_node")
if not bill_node_data:
bill_node_data = {
"id": bill_id,
"GUID": bill_id,
"清单名称": bill_name,
@@ -491,16 +481,9 @@ def calculate_all_fees(
}
# 使用包装函数创建清单对象
# bill_obj = create_list_from_node_with_quantity(bill_node)
bill_obj = create_list_from_node(bill_node)
# 如果清单节点有数量,确保它被保存到bill_obj
if "数量" in bill_node:
bill_obj.quantity = float(bill_node["数量"])
print(f"设置清单对象数量: {bill_obj.quantity}")
bill_obj = create_list_from_node_with_bill_quantity(bill_node_data)
# 创建工程量对象
from equipment_calculation.bcl_utils import create_node_from_type
project_obj = create_node_from_type(project_node)
dxitem_context = BCLDataSourceContext(DXITEM, project_context)
@@ -508,17 +491,23 @@ def calculate_all_fees(
# 递归数据源链式上下文
billItem = BCLDataSourceItem(bill_obj)
# 设置一个显式的数量属性
# billItem.bill_quantity = float(bill_node.get("数量", 1.0))
# print(f"设置清单数据源项数量: {billItem.bill_quantity}")
# 将清单数量直接设置到billItem对象上
if hasattr(bill_obj, "quantity"):
billItem.bill_quantity = bill_obj.quantity
print(f"设置清单数据源项数量: {billItem.bill_quantity}")
QuantityItem = BCLDataSourceItem(project_obj, billItem)
bill_context = BCLDataSourceContext([billItem], dxitem_context)
context = BCLDataSourceContext([QuantityItem], bill_context)
# 如果计算策略存在,设置清单数量
if calculation_strategy and hasattr(calculation_strategy, "set_bill_quantity"):
if hasattr(bill_obj, "quantity"):
calculation_strategy.set_bill_quantity(bill_obj.quantity)
print(f"设置计算策略的清单数量: {bill_obj.quantity}")
else:
# 非清单工程 - 工程信息 -> 工程量节点
from equipment_calculation.bcl_utils import create_node_from_type
project_obj = create_node_from_type(project_node)
dxitem_context = BCLDataSourceContext(DXITEM, project_context)
@@ -527,16 +516,10 @@ def calculate_all_fees(
QuantityItem = BCLDataSourceItem(project_obj)
context = BCLDataSourceContext([QuantityItem], dxitem_context)
# 打印项目节点信息,用于调试
node_name = project_node.get("项目名称", project_node.get("name", "未知节点"))
print(f"\n处理项目节点: {node_name}")
# 查找包含取费基数的节点
fee_base_nodes = find_fee_base_nodes(cost_table)
# 计算每个费用项
# 先计算基本费用项,再计算复合费用项
# 这里简单按照节点在列表中的顺序计算,可能需要更复杂的依赖解析
for node in fee_base_nodes:
fee_name = node.get("费用名称", node.get("name", "未知费用"))
fee_code = node.get("代码", "")
@@ -715,17 +698,7 @@ def calculate_quantity_fees(
calculation_strategy=None,
) -> str:
"""
计算工程量取费表
Args:
json_file_path: JSON文件路径
project_name: 项目名称
engineering_type: 工程类型
project_guid: 项目GUID,用于区分同名项目
calculation_strategy: 计算策略,如果为None则使用默认策略
Returns:
str: 输出文件路径
计算工程量取费表,不使用全局变量,并按清单节点组织结果
"""
# 如果没有提供计算策略,使用默认策略
if calculation_strategy is None:
@@ -734,7 +707,13 @@ def calculate_quantity_fees(
calculation_strategy = DefaultCalculationStrategy()
# 设置输出目录和文件名
output_dir = "计算结果"
# 检查calculation_strategy是否有get_output_dir方法
if hasattr(calculation_strategy, "get_output_dir"):
output_dir = calculation_strategy.get_output_dir()
else:
# 兼容旧代码,使用默认目录
output_dir = "计算结果"
os.makedirs(output_dir, exist_ok=True)
# 获取项目划分节点的GUID
@@ -781,8 +760,10 @@ def calculate_quantity_fees(
f"{safe_project_name}{safe_project_guid}_{engineering_type}_calculation_results.json",
)
# 在处理清单工程时,保存清单数量供后续使用
# 创建一个字典来存储清单数量
bill_quantities = {}
# 创建一个字典来存储清单信息
bill_info = {}
# 根据工程类型获取取费表和项目节点
if engineering_type == "预算工程":
@@ -809,6 +790,7 @@ def calculate_quantity_fees(
# 获取清单节点信息
bill_id = project_node.get("bill_id")
bill_name = project_node.get("bill_name", "未命名清单")
fee_table_name = project_node.get("取费表名称")
if not bill_id:
@@ -819,9 +801,17 @@ def calculate_quantity_fees(
print(f"工程量节点 '{node_name}' 没有取费表名称")
continue
# 保存清单信息
if bill_id not in bill_info:
bill_info[bill_id] = {
"name": bill_name,
"fee_table_name": fee_table_name,
"guid": bill_id.replace("{", "").replace("}", "") if bill_id else "",
}
# 使用清单节点的取费表名称直接查找取费表
if bill_id not in cost_tables:
print(f"查找清单节点 '{project_node.get('bill_name', '未命名清单')}' 的取费表: {fee_table_name}")
print(f"查找清单节点 '{bill_name}' 的取费表: {fee_table_name}")
# 查找取费表
with open(json_file_path, "r", encoding="utf-8") as f:
@@ -843,7 +833,7 @@ def calculate_quantity_fees(
continue
cost_tables[bill_id] = cost_table_children
print(f"成功获取清单节点 '{project_node.get('bill_name', '未命名清单')}' 的取费表")
print(f"成功获取清单节点 '{bill_name}' 的取费表")
# 在读取JSON文件后,遍历项目中的清单节点,获取并保存清单数量
with open(json_file_path, "r", encoding="utf-8") as f:
@@ -853,10 +843,7 @@ def calculate_quantity_fees(
bill_data = project_data.get("bill", {})
# 递归函数获取所有清单节点
def get_bill_nodes(node, results=None):
if results is None:
results = []
def get_bill_nodes(node):
if isinstance(node, dict):
# 检查是否是清单节点
is_bill = (
@@ -864,39 +851,36 @@ def calculate_quantity_fees(
)
if is_bill and ("id" in node or "GUID" in node):
bill_id = node.get("id") or node.get("GUID")
# 强制使用GUID而不是ID
bill_id = node.get("GUID") or node.get("guid") or node.get("id")
quantity = 1.0 # 默认值
if "数量" in node:
try:
quantity = float(node["数量"])
except (TypeError, ValueError):
pass
results.append((bill_id, quantity))
# 保存到字典
bill_quantities[bill_id] = quantity
# 直接设置到全局变量和缓存
global _BILL_QUANTITY
_BILL_QUANTITY = quantity
bill_quantity_cache[bill_id] = quantity
# 补充清单信息
if bill_id not in bill_info:
bill_info[bill_id] = {
"name": node.get("清单名称", "未命名清单"),
"fee_table_name": node.get("取费表名称", ""),
"guid": bill_id.replace("{", "").replace("}", "") if bill_id else "",
}
# 设置环境变量
os.environ["BILL_QUANTITY"] = str(quantity)
print(f"设置清单 {bill_id} 的数量为全局变量: {quantity}")
print(f"保存清单 {bill_id} 的数量: {quantity}")
# 递归处理子节点
if "children" in node and isinstance(node["children"], list):
for child in node["children"]:
get_bill_nodes(child, results)
return results
get_bill_nodes(child)
# 获取和设置清单数量
get_bill_nodes(bill_data)
# 如果有计算策略,设置清单数量
if calculation_strategy and hasattr(calculation_strategy, "set_bill_quantity"):
calculation_strategy.set_bill_quantity(_BILL_QUANTITY)
else:
print(f"不支持的工程类型: {engineering_type}")
return None
@@ -919,41 +903,89 @@ def calculate_quantity_fees(
# 初始化缓存
calculated_fees.clear() # 使用全局缓存,而不是计算策略中的缓存
# 计算每个项目节点的费用
all_results = {}
# 创建一个新的结果结构,按清单节点组织
structured_results = {}
# 辅助函数:处理ID,移除花括号并保留完整ID
def process_id(id_str):
if not id_str:
return ""
# 移除花括号
return id_str.replace("{", "").replace("}", "")
# 计算每个项目节点的费用
for project_node in project_children:
# 为每个节点清空缓存,确保计算独立
calculated_fees.clear()
node_name = project_node.get("项目名称", project_node.get("name", "未知节点"))
# 强制使用GUID而不是ID
node_id = project_node.get("GUID") or project_node.get("guid") or project_node.get("id", "")
# 添加清单数量信息
# 处理节点ID
processed_node_id = process_id(node_id)
# 创建唯一的节点键
node_key = node_name
if processed_node_id:
node_key = f"{node_name}_{processed_node_id}"
# 添加清单数量信息到项目节点
if engineering_type == "清单工程":
bill_id = project_node.get("bill_id")
# 强制使用GUID而不是ID
bill_id = project_node.get("bill_guid") or project_node.get("bill_id")
if bill_id in bill_quantities:
project_node["bill_quantity"] = bill_quantities[bill_id]
print(f"为工程量节点 '{node_name}' 设置清单数量: {bill_quantities[bill_id]}")
# 如果计算策略支持,设置清单数量
if calculation_strategy and hasattr(calculation_strategy, "set_bill_quantity"):
calculation_strategy.set_bill_quantity(bill_quantities[bill_id])
# 根据工程类型获取对应的取费表
if engineering_type == "预算工程":
# 预算工程 - 使用项目划分节点的取费表
node_results = calculation_strategy.calculate_all_fees(
project_node, {"children": cost_table_children}, json_file_path, engineering_type
)
# 直接使用节点键作为结果键
structured_results[node_key] = node_results
else: # 清单工程
# 清单工程 - 使用清单节点的取费表
parent_id = project_node.get("parent_id")
if parent_id and parent_id in cost_tables:
# 强制使用GUID而不是ID
bill_id = project_node.get("bill_guid") or project_node.get("bill_id")
if bill_id and bill_id in cost_tables:
node_results = calculation_strategy.calculate_all_fees(
project_node, {"children": cost_tables[parent_id]}, json_file_path, engineering_type
project_node, {"children": cost_tables[bill_id]}, json_file_path, engineering_type
)
# 获取清单信息
bill_name = bill_info.get(bill_id, {}).get("name", "未命名清单")
# 处理清单ID - 强制使用GUID
processed_bill_id = process_id(bill_id)
# 创建清单的唯一键 - 强制使用GUID
bill_key = bill_name
if processed_bill_id:
# 获取清单的guid而不是id
bill_guid = bill_info.get(bill_id, {}).get("guid", processed_bill_id)
if not bill_guid:
bill_guid = processed_bill_id
bill_key = f"{bill_name}_{bill_guid}"
# 如果清单节点不存在于结果中,创建它
if bill_key not in structured_results:
structured_results[bill_key] = {}
# 将工程量节点的计算结果添加到对应的清单节点下
structured_results[bill_key][node_key] = node_results
else:
print(f"无法获取工程量节点 '{node_name}' 的取费表")
continue
all_results[node_name] = node_results
# 输出计算结果
print(f"费用计算结果:")
for fee_name, fee_value in node_results.items():
@@ -961,7 +993,7 @@ def calculate_quantity_fees(
# 保存计算结果到JSON文件
with open(output_file, "w", encoding="utf-8") as f:
json.dump(all_results, f, ensure_ascii=False, indent=2)
json.dump(structured_results, f, ensure_ascii=False, indent=2)
print(f"\n计算结果已保存到 {output_file}")
@@ -280,12 +280,12 @@ def calc_rcj_count(
context = BCLDataSourceContext([QuantityItem, moeItem], project_context)
# 根据节点类型选择不同的计算表达式
node_type = node.get("类型", "")
if node_type == "人工":
node_type = node.get("类型", node.get("type", ""))
if node_type == "人工" or node_type == "2":
calc_expr = "_材机合并人工数量"
elif node_type == "材料":
elif node_type == "材料" or node_type == "3":
calc_expr = "_材机合并材料数量"
elif node_type == "机械":
elif node_type == "机械" or node_type == "4":
calc_expr = "_材机合并机械数量"
else:
# 未知类型,使用默认数量
@@ -730,7 +730,7 @@ def calculate_rcj_fees(
f"定额节点 '{node.get('项目名称', node.get('name', '未命名'))}' 有材机列表,数量: {len(node['材机列表'])}"
)
for rcj_node in node["材机列表"]:
node_type = rcj_node.get("类型")
node_type = rcj_node.get("类型", rcj_node.get("type"))
# 同时支持数字类型和字符串类型
if node_type in ["人工", "2"]:
labor_nodes.append((rcj_node, node))
@@ -756,7 +756,7 @@ def calculate_rcj_fees(
f"定额节点 '{node.get('项目名称', node.get('name', '未命名'))}' 有子节点,数量: {len(node['children'])}"
)
for child in node["children"]:
child_type = child.get("类型")
child_type = child.get("类型", child.get("type"))
if child_type in ["人工", "2"]:
labor_nodes.append((child, node))
print(
@@ -893,7 +893,7 @@ def calculate_rcj_fees(
context = BCLDataSourceContext([moeItem], dxitem_context)
# 根据节点类型选择不同的计算表达式
node_type = node.get("类型", "")
node_type = node.get("类型", node.get("type", ""))
if node_type in ["人工", "2"]:
calc_expr = "_材机合并人工数量"
elif node_type in ["材料", "3"]:
@@ -1042,7 +1042,13 @@ def calculate_resource_fees(
safe_project_guid = f"_{safe_project_guid}"
# 设置输出目录和文件名
output_dir = "计算结果"
# 检查calculation_strategy是否有get_output_dir方法
if hasattr(calculation_strategy, "get_output_dir"):
output_dir = calculation_strategy.get_output_dir()
else:
# 兼容旧代码,使用默认目录
output_dir = "计算结果"
os.makedirs(output_dir, exist_ok=True)
rcj_output_file = os.path.join(output_dir, f"{safe_project_name}{safe_project_guid}_rcj_fees.json")
+73 -131
View File
@@ -15,9 +15,9 @@ from typing import Any, Dict, Optional, Set
import sys
import re
# 添加一个全局变量和一个缓存字典来存储清单数量
_BILL_QUANTITY = 1.0
bill_quantity_cache = {}
# 移除全局变量声明
# _BILL_QUANTITY = 1.0
# bill_quantity_cache = {}
# 为每种软件类型定义特定的计算策略
@@ -90,46 +90,42 @@ class MainGridBillCalculationStrategy(DefaultCalculationStrategy):
result = calculator.calculate(var_name, context)
# 获取清单数量 - 首先从全局变量获取
global _BILL_QUANTITY # 在模块级别定义一个全局变量
parent_quantity = _BILL_QUANTITY if "_BILL_QUANTITY" in globals() else 1.0
# 获取清单数量 - 首先尝试从上下文中获取
parent_quantity = 1.0 # 默认值
print(f"\n===== 获取清单数量 =====")
print(f"从全局变量获取清单数量: {parent_quantity}")
# 如果全局变量没有设置正确的值,尝试从bill_quantity_cache获取
if parent_quantity == 1.0 and hasattr(context, "__dict__"):
module = sys.modules.get("quantity_fee_calculator")
if module and hasattr(module, "bill_quantity_cache"):
bill_cache = getattr(module, "bill_quantity_cache")
bill_id = None
# 1. 首先尝试从计算策略中获取
if hasattr(self, "bill_quantity"):
parent_quantity = self.bill_quantity
print(f"从计算策略获取清单数量: {parent_quantity}")
# 尝试从上下文中获取bill_id
if hasattr(context, "bill_id"):
bill_id = context.bill_id
elif hasattr(context, "datasource") and context.datasource:
for item in context.datasource:
if hasattr(item, "object") and hasattr(item.object, "bill_id"):
bill_id = item.object.bill_id
# 2. 如果计算策略中没有,尝试从上下文中获取
if parent_quantity == 1.0 and context:
# 尝试从上下文的数据源中获取
if hasattr(context, "datasource") and context.datasource:
for item in context.datasource:
# 检查是否有bill_quantity属性
if hasattr(item, "bill_quantity"):
parent_quantity = item.bill_quantity
print(f"从数据源项获取清单数量: {parent_quantity}")
break
# 检查是否有object属性,且object有quantity属性
if hasattr(item, "object") and hasattr(item.object, "quantity"):
parent_quantity = item.object.quantity
print(f"从数据源项对象获取清单数量: {parent_quantity}")
break
# 尝试从上下文的父级上下文中获取
if parent_quantity == 1.0 and hasattr(context, "prevContext"):
prev_context = context.prevContext
if prev_context and hasattr(prev_context, "datasource") and prev_context.datasource:
for item in prev_context.datasource:
if hasattr(item, "object") and hasattr(item.object, "quantity"):
parent_quantity = item.object.quantity
print(f"从父级上下文获取清单数量: {parent_quantity}")
break
# 如果找到bill_id并且在缓存中,使用缓存的数量
if bill_id and bill_id in bill_cache:
parent_quantity = bill_cache[bill_id]
print(f"从bill_quantity_cache获取清单{bill_id}的数量: {parent_quantity}")
# 设置一个临时环境变量作为最后的手段
if parent_quantity == 1.0:
import os
env_quantity = os.environ.get("BILL_QUANTITY")
if env_quantity:
try:
parent_quantity = float(env_quantity)
print(f"从环境变量获取清单数量: {parent_quantity}")
except:
pass
print(f"===== 获取清单数量结束 =====\n")
# 将结果乘以父级清单的数量
@@ -260,20 +256,18 @@ class TechnicalRenovationBudgetCalculationStrategy(DefaultCalculationStrategy):
class TechnicalRenovationBillCalculationStrategy(DefaultCalculationStrategy):
"""技改清单计算策略"""
# def calculate_fee_base(
# self, fee_base: str, cost_table: dict, project_node: dict, context, in_calculation=None
# ) -> float:
# """计算取费基数,可以重写以添加技改清单特定的计算规则"""
# # 示例:如果取费基数是特定值,使用特定的计算规则
# if fee_base == "人工费+材料费+机械费":
# print(f"应用技改清单特定的取费基数计算规则: {fee_base}")
# # 这里可以添加特定的计算逻辑
def __init__(self):
super().__init__()
self.bill_quantity = 1.0 # 默认值
# # 暂时仍然使用默认实现
# return super().calculate_fee_base(fee_base, cost_table, project_node, context, in_calculation)
def set_bill_quantity(self, quantity):
"""设置清单数量"""
try:
self.bill_quantity = float(quantity)
print(f"设置计算策略的清单数量: {self.bill_quantity}")
except (TypeError, ValueError):
print(f"无法将 {quantity} 转换为浮点数")
# # 对于其他取费基数,使用默认实现
# return super().calculate_fee_base(fee_base, cost_table, project_node, context, in_calculation)
def calculate_external_variable(self, var_name: str, context: Any) -> float:
"""计算表外变量,并乘以父级清单的数量"""
# 使用默认实现计算表外变量
@@ -281,46 +275,42 @@ class TechnicalRenovationBillCalculationStrategy(DefaultCalculationStrategy):
result = calculator.calculate(var_name, context)
# 获取清单数量 - 首先从全局变量获取
global _BILL_QUANTITY # 在模块级别定义一个全局变量
parent_quantity = _BILL_QUANTITY if "_BILL_QUANTITY" in globals() else 1.0
# 获取清单数量 - 首先尝试从上下文中获取
parent_quantity = 1.0 # 默认值
print(f"\n===== 获取清单数量 =====")
print(f"从全局变量获取清单数量: {parent_quantity}")
# 如果全局变量没有设置正确的值,尝试从bill_quantity_cache获取
if parent_quantity == 1.0 and hasattr(context, "__dict__"):
module = sys.modules.get("quantity_fee_calculator")
if module and hasattr(module, "bill_quantity_cache"):
bill_cache = getattr(module, "bill_quantity_cache")
bill_id = None
# 1. 首先尝试从计算策略中获取
if hasattr(self, "bill_quantity"):
parent_quantity = self.bill_quantity
print(f"从计算策略获取清单数量: {parent_quantity}")
# 尝试从上下文中获取bill_id
if hasattr(context, "bill_id"):
bill_id = context.bill_id
elif hasattr(context, "datasource") and context.datasource:
for item in context.datasource:
if hasattr(item, "object") and hasattr(item.object, "bill_id"):
bill_id = item.object.bill_id
# 2. 如果计算策略中没有,尝试从上下文中获取
if parent_quantity == 1.0 and context:
# 尝试从上下文的数据源中获取
if hasattr(context, "datasource") and context.datasource:
for item in context.datasource:
# 检查是否有bill_quantity属性
if hasattr(item, "bill_quantity"):
parent_quantity = item.bill_quantity
print(f"从数据源项获取清单数量: {parent_quantity}")
break
# 检查是否有object属性,且object有quantity属性
if hasattr(item, "object") and hasattr(item.object, "quantity"):
parent_quantity = item.object.quantity
print(f"从数据源项对象获取清单数量: {parent_quantity}")
break
# 尝试从上下文的父级上下文中获取
if parent_quantity == 1.0 and hasattr(context, "prevContext"):
prev_context = context.prevContext
if prev_context and hasattr(prev_context, "datasource") and prev_context.datasource:
for item in prev_context.datasource:
if hasattr(item, "object") and hasattr(item.object, "quantity"):
parent_quantity = item.object.quantity
print(f"从父级上下文获取清单数量: {parent_quantity}")
break
# 如果找到bill_id并且在缓存中,使用缓存的数量
if bill_id and bill_id in bill_cache:
parent_quantity = bill_cache[bill_id]
print(f"从bill_quantity_cache获取清单{bill_id}的数量: {parent_quantity}")
# 设置一个临时环境变量作为最后的手段
if parent_quantity == 1.0:
import os
env_quantity = os.environ.get("BILL_QUANTITY")
if env_quantity:
try:
parent_quantity = float(env_quantity)
print(f"从环境变量获取清单数量: {parent_quantity}")
except:
pass
print(f"===== 获取清单数量结束 =====\n")
# 将结果乘以父级清单的数量
@@ -401,14 +391,6 @@ class MainGridBudgetCalculator(CalculatorBase):
"""创建主网预算计算策略"""
return MainGridBudgetCalculationStrategy()
def set_output_dir(self, output_dir):
"""
设置计算结果的输出目录
:param output_dir: 输出目录的路径
"""
self.output_dir = output_dir
def apply_quantity_fee_rules(self) -> None:
"""应用主网预算特定的工程量取费规则"""
print(f"应用{self.software_type.name}特定的工程量取费规则 - 对节点进行预处理")
@@ -475,14 +457,6 @@ class MainGridBillCalculator(CalculatorBase):
"""创建主网清单计算策略"""
return MainGridBillCalculationStrategy()
def set_output_dir(self, output_dir):
"""
设置计算结果的输出目录
:param output_dir: 输出目录的路径
"""
self.output_dir = output_dir
def apply_quantity_fee_rules(self) -> None:
"""应用主网清单特定的工程量取费规则"""
print(f"应用{self.software_type.name}特定的工程量取费规则 - 对节点进行预处理")
@@ -547,14 +521,6 @@ class DistributionBudgetCalculator(CalculatorBase):
def __init__(self):
super().__init__(DISTRIBUTION_BUDGET)
def set_output_dir(self, output_dir):
"""
设置计算结果的输出目录
:param output_dir: 输出目录的路径
"""
self.output_dir = output_dir
def create_calculation_strategy(self) -> CalculationStrategy:
"""创建配网预算计算策略"""
return DistributionBudgetCalculationStrategy()
@@ -586,14 +552,6 @@ class DistributionBillCalculator(CalculatorBase):
"""创建配网清单计算策略"""
return DistributionBillCalculationStrategy()
def set_output_dir(self, output_dir):
"""
设置计算结果的输出目录
:param output_dir: 输出目录的路径
"""
self.output_dir = output_dir
def apply_quantity_fee_rules(self) -> None:
"""应用配网清单特定的工程量取费规则"""
print(f"应用{self.software_type.name}特定的工程量取费规则")
@@ -621,14 +579,6 @@ class TechnicalRenovationBudgetCalculator(CalculatorBase):
"""创建技改预算计算策略"""
return TechnicalRenovationBudgetCalculationStrategy()
def set_output_dir(self, output_dir):
"""
设置计算结果的输出目录
:param output_dir: 输出目录的路径
"""
self.output_dir = output_dir
def apply_quantity_fee_rules(self) -> None:
"""应用技改预算特定的工程量取费规则"""
print(f"应用{self.software_type.name}特定的工程量取费规则")
@@ -656,14 +606,6 @@ class TechnicalRenovationBillCalculator(CalculatorBase):
"""创建技改清单计算策略"""
return TechnicalRenovationBillCalculationStrategy()
def set_output_dir(self, output_dir):
"""
设置计算结果的输出目录
:param output_dir: 输出目录的路径
"""
self.output_dir = output_dir
def apply_quantity_fee_rules(self) -> None:
"""应用技改清单特定的工程量取费规则"""
print(f"应用{self.software_type.name}特定的工程量取费规则")
@@ -1,718 +0,0 @@
import json
import os
import math
from typing import Dict, List, Any, Tuple
from copy import deepcopy
from equipment_calculation.item_acquisition import get_quantity_nodes, get_classified_resource_nodes, load_project_data
from bcl_utils import (
ZjMaterialOrEquipmentBCLContext,
ZjProjectBCLContext,
ZjBillBCLContext,
init_bcl_calculator,
calculator,
)
from item_acquisition import get_quantity_nodes, get_classified_resource_nodes
# 人材机节点定义合并条件常量
LABOR_MERGE_CONDITIONS = [
"编码",
"名称",
"单位",
"预算价含税",
"预算价不含税",
"市场价不含税",
"市场价含税",
"调差类型",
"专业属性",
"供货方",
"物料类材料",
]
MATERIAL_MERGE_CONDITIONS = [
"类型",
"编码",
"名称",
"单位",
"预算价不含税",
"预算价含税",
"市场价不含税",
"市场价含税",
"调差类型",
"专业属性",
"供货方",
"集中配送",
"卸车",
"保管",
"物料类材料",
]
MACHINE_MERGE_CONDITIONS = [
"编码",
"名称",
"单位",
"预算价不含税",
"预算价含税",
"市场价不含税",
"市场价含税",
"调差类型",
"专业属性",
"供货方",
"物料类材料",
]
from bcl_utils import (
ZjMaterialOrEquipmentBCLContext,
ZjProjectBCLContext,
ZjBillBCLContext,
init_bcl_calculator,
calculator,
)
def calc_rcj_count(
rcj_nodes: List[Tuple[Dict[str, Any], str]], project_children: List[Dict[str, Any]], json_file_path: str = None
) -> List[Dict[str, Any]]:
"""
计算人材机节点的数量,考虑父级消耗量
Args:
rcj_nodes: 人材机节点列表,每个元素是(节点, 父级ID)元组
project_children: 项目划分级别下的所有工程量节点
json_file_path: JSON文件路径,用于获取工程信息
Returns:
List[Dict[str, Any]]: 计算数量后的人材机节点列表
"""
result_nodes = []
# 检查rcj_nodes是否为空
if not rcj_nodes:
print("没有找到人材机节点")
return result_nodes
# 检查project_children是否为None
if project_children is None:
print("没有找到工程量节点,使用默认数量")
# 使用默认数量处理所有人材机节点
for node, parent_id in rcj_nodes:
node_copy = deepcopy(node)
node_copy["计算数量"] = node_copy.get("数量", "1.0")
# 保存父级ID
node_copy["parent_id"] = parent_id
# 由于没有找到父级节点,使用默认名称
node_copy["parent_name"] = "未知工程量节点"
result_nodes.append(node_copy)
return result_nodes
# 创建父级ID到工程量节点的映射
parent_nodes = {}
for node in project_children:
if "id" in node:
parent_nodes[node["id"]] = node
print(f"找到 {len(parent_nodes)} 个父级工程量节点")
# 初始化BCL计算器
if not init_bcl_calculator():
print("初始化BCL计算器失败,使用默认数量")
# 使用默认数量处理所有人材机节点
for node, parent_id in rcj_nodes:
node_copy = deepcopy(node)
node_copy["计算数量"] = node_copy.get("数量", "1.0")
# 保存父级ID
node_copy["parent_id"] = parent_id
# 由于没有找到父级节点,使用默认名称
node_copy["parent_name"] = "未知工程量节点"
result_nodes.append(node_copy)
return result_nodes
# 创建工程信息上下文(顶层上下文)
project_context = ZjProjectBCLContext(json_file_path=json_file_path)
# 遍历所有节点,计算数量
for node, parent_id in rcj_nodes:
node_copy = deepcopy(node)
# 保存父级ID
node_copy["parent_id"] = parent_id
# 获取父级工程量节点
parent_node = parent_nodes.get(parent_id)
if not parent_node:
print(f"未找到ID为 {parent_id} 的父级工程量节点,使用默认数量")
# 使用默认数量
node_copy["计算数量"] = node_copy.get("数量", "1.0")
# 由于没有找到父级节点,使用默认名称
node_copy["parent_name"] = "未知工程量节点"
result_nodes.append(node_copy)
continue
# 保存父级节点名称
parent_name = parent_node.get("项目名称", parent_node.get("name", "未命名工程量"))
node_copy["parent_name"] = parent_name
# 确保父级节点有数量字段
if "数量" not in parent_node or not parent_node["数量"]:
print(f"父级节点 {parent_id} 没有数量字段,使用默认数量")
parent_node["数量"] = "1.0"
# 打印父级节点信息
print(f"父级节点 {parent_id} ({parent_name}) 的数量: {parent_node.get('数量', '1.0')}")
# 创建定额上下文(中间层上下文)
ration_context = ZjBillBCLContext(prefix="定额", valueDict=parent_node, prevContext=project_context)
# 创建人材机上下文(底层上下文)
context = ZjMaterialOrEquipmentBCLContext(node_data=node, parent_node=parent_node, prevContext=ration_context)
# 根据节点类型选择不同的计算表达式
node_type = node.get("类型", "")
if node_type == "人工":
calc_expr = "_材机合并人工数量"
elif node_type == "材料":
calc_expr = "_材机合并材料数量"
elif node_type == "机械":
calc_expr = "_材机合并机械数量"
else:
# 未知类型,使用默认数量
print(f"未知节点类型 {node_type},使用默认数量")
node_copy["计算数量"] = node_copy.get("数量", "1.0")
result_nodes.append(node_copy)
continue
try:
# 使用BCL计算器计算数量
result = calculator.calculate(calc_expr, context)
# 打印调试信息
print(f"计算 {node.get('名称', '未知节点')} 的数量,表达式: {calc_expr}, 结果: {result}")
# 处理计算结果
if hasattr(result, "value"):
calculated_quantity = result.value
elif isinstance(result, (int, float)):
calculated_quantity = result
else:
# 尝试转换为浮点数
try:
calculated_quantity = float(result)
except (ValueError, TypeError):
print(f"无法将计算结果转换为浮点数: {result}")
calculated_quantity = float(node_copy.get("数量", "1.0") or "1.0")
# 如果计算结果为0,尝试使用原始数量
if calculated_quantity == 0:
orig_quantity = float(node_copy.get("数量", "0.0") or "0.0")
if orig_quantity > 0:
print(f"计算结果为0,使用原始数量: {orig_quantity}")
calculated_quantity = orig_quantity
# 设置计算数量
node_copy["计算数量"] = str(calculated_quantity)
except Exception as e:
print(f"计算节点 '{node.get('名称', '未知节点')}' 的数量时出错: {e}")
# 使用默认数量
node_copy["计算数量"] = node_copy.get("数量", "1.0")
result_nodes.append(node_copy)
return result_nodes
def generate_node_key(node: Dict[str, Any], conditions: List[str]) -> str:
"""
根据合并条件生成节点的唯一键,增加parent_id作为条件
Args:
node: 节点
conditions: 合并条件列表
Returns:
str: 节点的唯一键
"""
key_parts = []
# 添加parent_id作为合并条件的第一个元素
parent_id = node.get("parent_id", "")
key_parts.append(f"parent_id:{parent_id}")
# 添加其他合并条件
for condition in conditions:
value = node.get(condition, "")
# 确保值是字符串
if value is None:
value = ""
elif not isinstance(value, str):
value = str(value)
key_parts.append(f"{condition}:{value}")
return "|".join(key_parts)
def merge_similar_nodes(nodes: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
"""
合并相似的节点
Args:
nodes: 节点列表
Returns:
List[Dict[str, Any]]: 合并后的节点列表
"""
if not nodes:
return []
# 按节点类型分组
nodes_by_type = {}
for node in nodes:
node_type = node.get("类型", "")
if node_type not in nodes_by_type:
nodes_by_type[node_type] = []
nodes_by_type[node_type].append(node)
merged_nodes = []
# 处理每种类型的节点
for node_type, type_nodes in nodes_by_type.items():
# 选择合并条件
if node_type == "人工":
conditions = LABOR_MERGE_CONDITIONS
elif node_type == "材料":
conditions = MATERIAL_MERGE_CONDITIONS
elif node_type == "机械":
conditions = MACHINE_MERGE_CONDITIONS
else:
# 未知类型,不合并
merged_nodes.extend(type_nodes)
continue
# 使用字典存储合并后的节点,键是根据合并条件生成的唯一键
merged_dict = {}
for node in type_nodes:
key = generate_node_key(node, conditions)
if key in merged_dict:
# 合并节点
merged_node = merged_dict[key]
# 合并数量
merged_quantity = float(merged_node.get("取整数量", "0.0") or "0.0")
node_quantity = float(node.get("取整数量", "0.0") or "0.0")
merged_node["取整数量"] = str(merged_quantity + node_quantity)
# 合并计算数量
merged_calc_quantity = float(merged_node.get("计算数量", "0.0") or "0.0")
node_calc_quantity = float(node.get("计算数量", "0.0") or "0.0")
merged_node["计算数量"] = str(merged_calc_quantity + node_calc_quantity)
# 更新原始数量
merged_orig_quantity = float(merged_node.get("数量", "0.0") or "0.0")
node_orig_quantity = float(node.get("数量", "0.0") or "0.0")
merged_node["数量"] = str(merged_orig_quantity + node_orig_quantity)
# 添加合并信息
if "合并来源" not in merged_node:
# 使用唯一标识符,如果没有id字段则使用节点本身的索引
merged_node_id = merged_node.get("id", f"node_{id(merged_node)}")
merged_node["合并来源"] = [merged_node_id]
# 添加当前节点ID到合并来源
node_id = node.get("id", f"node_{id(node)}")
merged_node["合并来源"].append(node_id)
# 更新合并数量计数
merged_node["合并数量"] = str(len(merged_node["合并来源"]))
else:
# 创建新节点
merged_dict[key] = deepcopy(node)
# 添加合并信息
node_id = node.get("id", f"node_{id(node)}")
merged_dict[key]["合并来源"] = [node_id]
merged_dict[key]["合并数量"] = "1"
# 将合并后的节点添加到结果列表
merged_nodes.extend(merged_dict.values())
return merged_nodes
def cat_rcj_count(rcj_nodes: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
"""
处理人材机节点数量的变化并合并相似节点
Args:
rcj_nodes: 人材机节点列表
Returns:
List[Dict[str, Any]]: 处理数量变化后的人材机节点列表
"""
# 使用计算数量,不进行向上取整
processed_nodes = []
for node in rcj_nodes:
node_copy = deepcopy(node)
# 获取计算数量,直接使用,不再向上取整
calc_quantity = float(node_copy.get("计算数量", "0.0") or "0.0")
node_copy["取整数量"] = str(calc_quantity)
processed_nodes.append(node_copy)
# 合并相似节点
merged_nodes = merge_similar_nodes(processed_nodes)
return merged_nodes
def calc_rcj_fee(rcj_nodes: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
"""
计算人材机节点的合价
Args:
rcj_nodes: 人材机节点列表
Returns:
List[Dict[str, Any]]: 计算合价后的人材机节点列表
"""
result_nodes = []
for node in rcj_nodes:
node_copy = deepcopy(node)
# 获取取整数量
quantity = float(node_copy.get("取整数量", "0.0") or "0.0")
# 获取预算价不含税和市场价不含税
budget_price = float(node_copy.get("预算价不含税", "0.0") or "0.0")
market_price = float(node_copy.get("市场价不含税", "0.0") or "0.0")
# 计算预算价合价和市场价合价
budget_total = quantity * budget_price
market_total = quantity * market_price
# 计算价差
price_diff = market_total - budget_total
# 设置合价信息
node_copy["预算价合价"] = str(budget_total)
node_copy["市场价合价"] = str(market_total)
node_copy["价差"] = str(price_diff)
result_nodes.append(node_copy)
return result_nodes
def format_rcj_output(rcj_nodes: List[Dict[str, Any]], node_type: str) -> List[Dict[str, Any]]:
"""
格式化人材机节点输出,只保留需要的字段
Args:
rcj_nodes: 人材机节点列表
node_type: 节点类型("人工""材料""机械"
Returns:
List[Dict[str, Any]]: 格式化后的节点列表
"""
formatted_nodes = []
for node in rcj_nodes:
formatted_node = {}
# 保留父级工程量节点信息
formatted_node["parent_id"] = node.get("parent_id", "")
formatted_node["parent_name"] = node.get("parent_name", "未知工程量节点")
# 根据节点类型保留特定字段
if node_type == "人工":
# 人工节点保存:编码,名称,单位,数量,预算价不含税,市场价不含税,预算价合价,市场价合价,价差
fields = [
"编码",
"名称",
"单位",
"取整数量",
"预算价不含税",
"市场价不含税",
"预算价合价",
"市场价合价",
"价差",
]
for field in fields:
formatted_node[field] = node.get(field, "")
elif node_type == "材料":
# 材料节点保存:供货方,编码,名称,单位,数量,预算价不含税,市场价不含税,预算价合价,市场价合价,价差
fields = [
"供货方",
"编码",
"名称",
"单位",
"取整数量",
"预算价不含税",
"市场价不含税",
"预算价合价",
"市场价合价",
"价差",
]
for field in fields:
formatted_node[field] = node.get(field, "")
elif node_type == "机械":
# 机械节点保存:编码,名称,单位,数量,预算价不含税,市场价不含税,预算价合价,市场价合价,价差
fields = [
"编码",
"名称",
"单位",
"取整数量",
"预算价不含税",
"市场价不含税",
"预算价合价",
"市场价合价",
"价差",
]
for field in fields:
formatted_node[field] = node.get(field, "")
# 重命名取整数量为数量
if "取整数量" in formatted_node:
formatted_node["数量"] = formatted_node.pop("取整数量")
formatted_nodes.append(formatted_node)
return formatted_nodes
def calculate_rcj_fees(
json_file_path: str,
project_name: str,
adjustment_type: str = "拆除",
engineering_type: str = "预算工程",
project_guid: str = None,
) -> Dict[str, Any]:
"""
计算项目划分节点下所有人材机节点的合价
Args:
json_file_path: JSON文件路径
project_name: 项目名称
adjustment_type: 调差类型,默认为"拆除"
engineering_type: 工程类型,默认为"预算工程"
project_guid: 项目GUID,用于区分同名项目
Returns:
Dict[str, Any]: 计算结果,按工程量节点分组
"""
# 获取工程量节点,传递project_guid参数
project_children = get_quantity_nodes(json_file_path, project_name, adjustment_type, engineering_type, project_guid)
# 如果没有找到项目划分节点
if project_children is None:
print(f"警告: 未找到项目 '{project_name}' 的项目划分节点")
return {}
# 如果找到项目划分节点但没有工程量节点
if len(project_children) == 0:
print(f"警告: 项目 '{project_name}' (GUID: {project_guid}) 没有工程量节点,跳过计算")
return {}
# 获取分类后的人材机节点,传递project_guid参数
labor_nodes, material_nodes, machine_nodes = get_classified_resource_nodes(
json_file_path, project_name, adjustment_type, project_guid
)
# 打印调试信息
print(f"找到 {len(labor_nodes)} 个人工节点, {len(material_nodes)} 个材料节点, {len(machine_nodes)} 个机械节点")
# 计算人工节点的数量和合价
labor_with_count = calc_rcj_count(labor_nodes, project_children, json_file_path)
labor_with_cat = cat_rcj_count(labor_with_count)
labor_with_fee = calc_rcj_fee(labor_with_cat)
labor_formatted = format_rcj_output(labor_with_fee, "人工")
# 计算材料节点的数量和合价
material_with_count = calc_rcj_count(material_nodes, project_children, json_file_path)
material_with_cat = cat_rcj_count(material_with_count)
material_with_fee = calc_rcj_fee(material_with_cat)
material_formatted = format_rcj_output(material_with_fee, "材料")
# 计算机械节点的数量和合价
machine_with_count = calc_rcj_count(machine_nodes, project_children, json_file_path)
machine_with_cat = cat_rcj_count(machine_with_count)
machine_with_fee = calc_rcj_fee(machine_with_cat)
machine_formatted = format_rcj_output(machine_with_fee, "机械")
# 创建工程量节点ID到名称的映射
node_id_to_name = {}
for node in project_children:
if "id" in node:
node_name = node.get("项目名称", node.get("name", f"工程量节点_{node['id']}"))
node_id_to_name[node["id"]] = node_name
# 按工程量节点分组结果
result_by_parent = {}
# 处理人工节点
for node in labor_formatted:
parent_id = node.pop("parent_id", "")
parent_name = node.pop("parent_name", "未知工程量节点")
# 使用父级节点名称作为键
parent_key = node_id_to_name.get(parent_id, parent_name)
if parent_key not in result_by_parent:
result_by_parent[parent_key] = {"人工节点": [], "材料节点": [], "机械节点": []}
result_by_parent[parent_key]["人工节点"].append(node)
# 处理材料节点
for node in material_formatted:
parent_id = node.pop("parent_id", "")
parent_name = node.pop("parent_name", "未知工程量节点")
# 使用父级节点名称作为键
parent_key = node_id_to_name.get(parent_id, parent_name)
if parent_key not in result_by_parent:
result_by_parent[parent_key] = {"人工节点": [], "材料节点": [], "机械节点": []}
result_by_parent[parent_key]["材料节点"].append(node)
# 处理机械节点
for node in machine_formatted:
parent_id = node.pop("parent_id", "")
parent_name = node.pop("parent_name", "未知工程量节点")
# 使用父级节点名称作为键
parent_key = node_id_to_name.get(parent_id, parent_name)
if parent_key not in result_by_parent:
result_by_parent[parent_key] = {"人工节点": [], "材料节点": [], "机械节点": []}
result_by_parent[parent_key]["机械节点"].append(node)
# 计算合价只用于调试显示
for parent_key, parent_data in result_by_parent.items():
labor_fee = sum(float(node.get("预算价合价", "0.0") or "0.0") for node in parent_data["人工节点"])
material_fee = sum(float(node.get("预算价合价", "0.0") or "0.0") for node in parent_data["材料节点"])
machine_fee = sum(float(node.get("预算价合价", "0.0") or "0.0") for node in parent_data["机械节点"])
print(f"工程量节点 '{parent_key}': 人工合价={labor_fee}, 材料合价={material_fee}, 机械合价={machine_fee}")
return result_by_parent
def calculate_resource_fees(
json_file_path: str,
project_name: str,
adjustment_type: str,
engineering_type: str,
project_guid: str = None,
calculation_strategy=None,
) -> str:
"""
计算人材机合价
Args:
json_file_path: JSON文件路径
project_name: 项目名称
adjustment_type: 调差类型
engineering_type: 工程类型
project_guid: 项目GUID,用于区分同名项目
calculation_strategy: 计算策略,如果为None则使用默认策略
Returns:
str: 输出文件路径,如果没有工程量节点则返回None
"""
# 如果没有提供计算策略,使用默认策略
if calculation_strategy is None:
from calculation_strategy import DefaultCalculationStrategy
calculation_strategy = DefaultCalculationStrategy()
# 获取项目划分节点的GUID
_, _, _, _, target_node = load_project_data(json_file_path, project_name, project_guid)
# 如果传入了GUID但与节点的GUID不一致,优先使用传入的GUID
node_guid = target_node.get("GUID") or target_node.get("guid", "") if target_node else ""
project_guid = project_guid if project_guid else node_guid
# 将文件名中的非法字符替换为下划线
safe_project_name = (
project_name.replace("/", "_")
.replace("\\", "_")
.replace(":", "_")
.replace("*", "_")
.replace("?", "_")
.replace('"', "_")
.replace("<", "_")
.replace(">", "_")
.replace("|", "_")
)
# 将GUID中的非法字符替换为下划线
safe_project_guid = ""
if project_guid:
safe_project_guid = (
project_guid.replace("/", "_")
.replace("\\", "_")
.replace(":", "_")
.replace("*", "_")
.replace("?", "_")
.replace('"', "_")
.replace("<", "_")
.replace(">", "_")
.replace("|", "_")
.replace("{", "")
.replace("}", "")
)
# 添加下划线作为分隔符
safe_project_guid = f"_{safe_project_guid}"
# 设置输出目录和文件名
output_dir = "计算结果"
os.makedirs(output_dir, exist_ok=True)
rcj_output_file = os.path.join(
output_dir, f"{safe_project_name}{safe_project_guid}_{adjustment_type}_rcj_fees.json"
)
# 计算人材机节点的合价,传递project_guid参数
# 这里使用 calculation_strategy 的 calculate_rcj_fees 方法
if hasattr(calculation_strategy, "calculate_rcj_fees"):
rcj_results = calculation_strategy.calculate_rcj_fees(
json_file_path, project_name, adjustment_type, engineering_type, project_guid
)
else:
# 如果计算策略没有实现 calculate_rcj_fees 方法,使用原始函数
rcj_results = calculate_rcj_fees(json_file_path, project_name, adjustment_type, engineering_type, project_guid)
# 检查是否有人材机数据 - 适应新的按工程量节点分组的结构
has_data = False
# 如果是旧结构(直接包含人工节点、材料节点、机械节点)
if any(key in rcj_results for key in ["人工节点", "材料节点", "机械节点"]):
for node_type in ["人工节点", "材料节点", "机械节点"]:
if rcj_results.get(node_type) and len(rcj_results[node_type]) > 0:
has_data = True
break
# 如果是新结构(按工程量节点分组)
else:
for parent_name, parent_data in rcj_results.items():
for node_type in ["人工节点", "材料节点", "机械节点"]:
if parent_data.get(node_type) and len(parent_data[node_type]) > 0:
has_data = True
break
if has_data:
break
if not has_data:
print(f"项目 '{project_name}' (GUID: {project_guid}) 没有人材机数据,不保存结果")
return None
# 保存人材机合价计算结果到JSON文件
with open(rcj_output_file, "w", encoding="utf-8") as f:
json.dump(rcj_results, f, ensure_ascii=False, indent=2)
print(f"\n人材机合价计算结果已保存到 {rcj_output_file}")
return rcj_output_file
+1188
View File
File diff suppressed because it is too large Load Diff
+126
View File
@@ -0,0 +1,126 @@
import re
import codecs
def extract_errors_and_warnings(input_log_path, output_error_path, warning_stats_path="warning_statistics.txt"):
"""
从日志文件中提取 WARNING 和 ERROR 及其 Traceback 堆栈信息,保存到新文件
支持多种编码格式的日志文件(UTF-8, GBK, ASCII等)
同时统计WARNING信息并输出到单独文件
"""
# 正则匹配日志行开头(时间戳格式)
log_pattern = re.compile(r'^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3})')
# 尝试多种编码格式读取文件
encodings = ['utf-8', 'gbk', 'gb2312', 'ascii']
lines = []
for encoding in encodings:
try:
with open(input_log_path, 'r', encoding=encoding) as f:
lines = f.readlines()
print(f"✅ 成功使用 {encoding} 编码读取文件")
break
except UnicodeDecodeError:
continue
# 如果所有编码都失败,则使用二进制模式读取并尝试解码
if not lines:
try:
with open(input_log_path, 'rb') as f:
content = f.read()
# 尝试解码,忽略错误
lines = content.decode('utf-8', errors='ignore').splitlines(True)
print("⚠️ 使用二进制模式读取文件,可能有字符丢失")
except Exception as e:
print(f"❌ 无法读取文件: {e}")
return
error_lines = []
i = 0
while i < len(lines):
line = lines[i]
# 检查是否是新的日志行(以时间戳开头)
is_new_log = log_pattern.match(line)
if is_new_log:
# 判断是否为 WARNING 或 ERROR
if ' - WARNING - ' in line or ' - ERROR - ' in line:
error_lines.append(line.rstrip())
# 如果是 ERROR,捕获后续的 Traceback 信息
if ' - ERROR - ' in line:
i += 1
# 继续读取后续行,直到遇到下一个时间戳行或文件结束
while i < len(lines):
next_line = lines[i]
# 检查是否是新的日志行
if log_pattern.match(next_line):
# 回退索引,让外层循环处理这一行
i -= 1
break
else:
# 添加非空的后续行
if next_line.strip():
error_lines.append(next_line.rstrip())
i += 1
# 如果是DEBUG/INFO行,检查是否包含Traceback
elif ' - DEBUG - ' in line and i + 1 < len(lines) and 'Traceback' in lines[i + 1]:
# 这是一个包含Traceback的DEBUG信息,也提取
error_lines.append(line.rstrip())
i += 1
# 继续读取后续行,直到遇到下一个时间戳行或文件结束
while i < len(lines):
next_line = lines[i]
# 检查是否是新的日志行
if log_pattern.match(next_line):
# 回退索引,让外层循环处理这一行
i -= 1
break
else:
# 添加非空的后续行
if next_line.strip():
error_lines.append(next_line.rstrip())
i += 1
else:
# 不是新日志行开头,可能是多行信息的一部分
# 只有当前面一行是错误信息时才添加
if error_lines and not log_pattern.match(error_lines[-1]):
if line.strip():
error_lines.append(line.rstrip())
i += 1
# 写入输出文件
with open(output_error_path, 'w', encoding='utf-8') as f:
for err_line in error_lines:
f.write(err_line + '\n')
# 统计WARNING信息
warning_dict = {}
for line in error_lines:
if ' - WARNING - ' in line:
# 提取WARNING后的内容作为键
warning_content = line.split(' - WARNING - ', 1)[1]
if warning_content in warning_dict:
warning_dict[warning_content] += 1
else:
warning_dict[warning_content] = 1
# 写入统计结果到文件
with open(warning_stats_path, 'w', encoding='utf-8') as f:
f.write("WARNING统计结果:\n")
f.write(f"共找到 {len(warning_dict)} 种不同的WARNING信息\n\n")
for warning_content, count in warning_dict.items():
f.write(f"{count}次: {warning_content}\n")
print(f"✅ 提取完成!共找到 {len(error_lines)} 行错误/警告信息。")
print(f"📁 已保存到: {output_error_path}")
print(f"📊 WARNING统计已保存到: {warning_stats_path}")
# ============ 使用示例 ============
if __name__ == "__main__":
input_file = "bcl_calculator.log" # 替换为你的日志文件路径
output_file = "error_report.txt" # 输出的错误报告文件
warning_stats_file = "warning_statistics.txt" # WARNING统计结果文件
extract_errors_and_warnings(input_file, output_file, warning_stats_file)
+83 -12
View File
@@ -472,19 +472,90 @@ def get_node_cost_info(node_id):
@app.route("/api/export/<int:node_id>")
def export_node_tree(node_id):
"""导出整个工程知识图谱为Excel"""
"""导出整个工程知识图谱为Excel,每个一级子节点为一个工作表"""
try:
# 忽略传入的node_id参数,总是导出整个工程
excel_file, filename = KnowledgeGraphService.export_tree_to_excel(None)
if excel_file:
return send_file(
excel_file,
mimetype="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
as_attachment=True,
download_name=f"{filename}.xlsx",
)
else:
return jsonify({"error": "无法生成Excel文件"}), 500
# 获取EngineeringData根节点
eng_data = KnowledgeGraphService.get_engineering_data_node()
if not eng_data:
return jsonify({"error": "未找到工程根节点"}), 404
root_id = eng_data["id"]
root_name = eng_data["name"]
# 获取根节点的一级子节点
children = KnowledgeGraphService.get_children_details(root_id)
# 创建Excel文件
output = BytesIO()
with pd.ExcelWriter(output, engine="openpyxl") as writer:
# 为每个一级子节点创建一个工作表
for child in children:
# 跳过费用相关节点
if child.get("labels") and any("Cost" in label for label in child.get("labels")):
continue
# 获取该子节点的完整树结构
tree_data = KnowledgeGraphService.get_full_tree_structure(child["id"])
if not tree_data:
continue
# 将树结构转换为扁平结构
flat_data = KnowledgeGraphService.flatten_tree_structure(tree_data)
# 创建DataFrame并写入工作表
df = pd.DataFrame(flat_data)
sheet_name = child.get("properties", {}).get("name", f"Sheet{len(writer.sheets) + 1}")
# 工作表名称不能超过31个字符且不能包含特殊字符
sheet_name = (
sheet_name[:31]
.replace(":", "")
.replace("\\", "")
.replace("/", "")
.replace("?", "")
.replace("*", "")
.replace("[", "")
.replace("]", "")
)
df.to_excel(writer, sheet_name=sheet_name, index=False)
# 添加一个总览工作表
overview_tree = KnowledgeGraphService.get_full_tree_structure(root_id)
overview_data = KnowledgeGraphService.flatten_tree_structure(overview_tree)
overview_df = pd.DataFrame(overview_data)
overview_df.to_excel(writer, sheet_name="总览", index=False)
output.seek(0)
return send_file(
output,
mimetype="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
as_attachment=True,
download_name=f"{root_name}.xlsx",
)
except Exception as e:
return jsonify({"error": str(e)}), 500
@app.route("/api/export_root")
def export_root_tree():
"""获取根节点并导出为Excel"""
try:
# 获取根节点
eng_data = KnowledgeGraphService.get_engineering_data_node()
if not eng_data:
return jsonify({"error": "未找到工程根节点"}), 404
# 导出Excel
output, root_name = KnowledgeGraphService.export_tree_to_excel()
if not output:
return jsonify({"error": root_name}), 500
# 返回Excel文件
return send_file(
output,
mimetype="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
as_attachment=True,
download_name=f"{root_name}.xlsx",
)
except Exception as e:
return jsonify({"error": str(e)}), 500
+100 -93
View File
@@ -1,111 +1,118 @@
import requests
from typing import Any, Dict, List, Optional
from langchain_core.language_models import BaseLLM
from langchain_core.callbacks import CallbackManagerForLLMRun
from langchain_core.outputs import LLMResult, Generation
from openai import OpenAI
import httpx
import logging
# import requests
# from typing import Any, Dict, List, Optional
# from langchain_core.language_models import BaseLLM
# from langchain_core.callbacks import CallbackManagerForLLMRun
# from langchain_core.outputs import LLMResult, Generation
# from openai import OpenAI
# import httpx
# import logging
# class OpenAiLLM:
# # class OpenAiLLM:
# # def __init__(self, url, api_key, model_name):
# # self._api_key = api_key
# # self._url = url
# # self._model = model_name
# # def generate(self, prompt):
# # client = OpenAI(api_key=self._api_key, base_url=self._url)
# # try:
# # # 创建 Completion 请求
# # completion = client.chat.completions.create(
# # model=self._model,
# # messages=[
# # {"role": "system", "content": "You are a helpful assistant"},
# # {"role": "user", "content": prompt}
# # ],
# # timeout=httpx.Timeout(300.0),
# # temperature=0.7,
# # )
# # return completion.choices[0].message.content
# # except Exception as e:
# # logging.error(f"LLM调用出错: {e}")
# # return f"模型调用失败: {str(e)}"
# # llm = OpenAiLLM(
# # url="http://172.20.0.145:9995/v1",
# # api_key="xxx",
# # model_name="deepseek-r1-distill-qwen2.5-32b",
# # )
# class Embedding:
# def __init__(self, url, api_key, model_name):
# self._api_key = api_key
# self._url = url
# self._model = model_name
# def generate(self, prompt):
# def embed(self, text):
# # 使用OpenAI客户端
# client = OpenAI(api_key=self._api_key, base_url=self._url)
# try:
# # 创建 Completion 请求
# completion = client.chat.completions.create(
# model=self._model,
# messages=[
# {"role": "system", "content": "You are a helpful assistant"},
# {"role": "user", "content": prompt}
# ],
# timeout=httpx.Timeout(300.0),
# temperature=0.7,
# )
# return completion.choices[0].message.content
# # 调用embeddings API
# response = client.embeddings.create(model=self._model, input=text, timeout=httpx.Timeout(60.0))
# # 返回嵌入向量
# return response.data[0].embedding
# except Exception as e:
# logging.error(f"LLM调用出错: {e}")
# return f"模型调用失败: {str(e)}"
# logging.error(f"嵌入模型调用出错: {e}")
# raise RuntimeError(f"嵌入请求失败: {str(e)}")
# llm = OpenAiLLM(
# url="http://172.20.0.145:9995/v1",
# api_key="xxx",
# model_name="deepseek-r1-distill-qwen2.5-32b",
# embedding = Embedding(url="http://172.20.0.145:9995/v1", api_key="xxx", model_name="bge-m3")
# class SiliconFlowLLM(BaseLLM):
# """自定义硅基流动大模型调用类"""
# api_url: str
# api_key: str
# model: str
# def _generate(
# self,
# prompts: List[str],
# stop: Optional[List[str]] = None,
# run_manager: Optional[CallbackManagerForLLMRun] = None,
# **kwargs: Any,
# ) -> LLMResult:
# from langchain_core.outputs import Generation, LLMResult
# generations = []
# for prompt in prompts:
# try:
# headers = {"Authorization": f"Bearer {self.api_key}", "Content-Type": "application/json"}
# payload = {
# "model": self.model,
# "messages": [{"role": "user", "content": prompt}],
# }
# response = requests.post(self.api_url, json=payload, headers=headers)
# response.raise_for_status()
# text = response.json()["choices"][0]["message"]["content"]
# generations.append([Generation(text=text)])
# except Exception as e:
# raise Exception(f"调用硅基流动API失败: {str(e)}")
# return LLMResult(generations=generations)
# @property
# def _llm_type(self) -> str:
# return "siliconflow"
# llm = SiliconFlowLLM(
# api_url="https://api.siliconflow.cn/v1/chat/completions",
# api_key="sk-bbeamiumkouptsrueilgufqqyuumelcsivxwjbdugqwsqhwj",
# model="Qwen/Qwen2.5-72B-Instruct",
# )
from equipment_calculation.main import bcl_calculate
class Embedding:
def __init__(self, url, api_key, model_name):
self._api_key = api_key
self._url = url
self._model = model_name
input_dir = "project2json/outputs/merged"
output_dir = "project2json/outputs/bclresults"
def embed(self, text):
# 使用OpenAI客户端
client = OpenAI(api_key=self._api_key, base_url=self._url)
try:
# 调用embeddings API
response = client.embeddings.create(model=self._model, input=text, timeout=httpx.Timeout(60.0))
# 返回嵌入向量
return response.data[0].embedding
except Exception as e:
logging.error(f"嵌入模型调用出错: {e}")
raise RuntimeError(f"嵌入请求失败: {str(e)}")
embedding = Embedding(url="http://172.20.0.145:9995/v1", api_key="xxx", model_name="bge-m3")
class SiliconFlowLLM(BaseLLM):
"""自定义硅基流动大模型调用类"""
api_url: str
api_key: str
model: str
def _generate(
self,
prompts: List[str],
stop: Optional[List[str]] = None,
run_manager: Optional[CallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> LLMResult:
from langchain_core.outputs import Generation, LLMResult
generations = []
for prompt in prompts:
try:
headers = {"Authorization": f"Bearer {self.api_key}", "Content-Type": "application/json"}
payload = {
"model": self.model,
"messages": [{"role": "user", "content": prompt}],
}
response = requests.post(self.api_url, json=payload, headers=headers)
response.raise_for_status()
text = response.json()["choices"][0]["message"]["content"]
generations.append([Generation(text=text)])
except Exception as e:
raise Exception(f"调用硅基流动API失败: {str(e)}")
return LLMResult(generations=generations)
@property
def _llm_type(self) -> str:
return "siliconflow"
llm = SiliconFlowLLM(
api_url="https://api.siliconflow.cn/v1/chat/completions",
api_key="sk-bbeamiumkouptsrueilgufqqyuumelcsivxwjbdugqwsqhwj",
model="Qwen/Qwen2.5-72B-Instruct",
)
bcl_calculate(input_dir, output_dir)
@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>analysis-config</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>
@@ -1,265 +0,0 @@
///////////////////////////////////////////////////////////////
//
// 变电
//
///////////////////////////////////////////////////////////////
BEGIN:本期主变压器_型号_最高设备价格
${
iif(getparam("本期主变压器_型号_最高设备价格_已计算") != 1,
?{
setparam("变量值",0);
setparam("中间值",0);
for(filter(@项目划分.安装, "工程量",?工程量.type == "清单"),"清单",
?{
for(filter(items,"消耗量",?(消耗量.type == "设备")),"设备",
?{
setparam("中间值",设备.单价含税);
iif(getparam("中间值") > getparam("变量值"),?setparam("变量值",getparam("中间值")),0);
},?0);
},?0);
setparam("本期主变压器_型号_最高设备价格_已计算", 1);
},?0);
getparam("变量值");
}
BEGIN:主变压器型号
${
iif(getparam("主变压器型号_已计算") != 1,
?{
setparam("变量值_主变压器型号","");
setparam("变量值_主变压器_名称","");
for(filter(@项目划分.安装, "工程量",?工程量.type == "清单" ),"清单",
?{
for(filter(items,"消耗量",?(消耗量.type == "设备")),"设备",
?{
iif(getparam("变量值_主变压器型号") == "" && 本期主变压器_型号_最高设备价格() == 设备.单价含税,
?{
setparam("变量值_主变压器型号",设备.名称);
setparam("变量值_主变压器_名称",设备.规格型号);
},"");
},?0);
},?0);
setparam("主变压器型号_已计算", 1);
},?0);
setparam("变量值_主变压器型号",getparam("变量值_主变压器型号")+getparam("变量值_主变压器_名称"));
getparam("变量值_主变压器型号");
}
BEGIN:中压侧配电装置_最大电压等级
${
iif(getparam("中压侧配电装置_最大电压等级_已计算") != 1,
?{
setparam("变量值_高", 0);
for(@项目划分.安装, "工程量",
?{
iif(工程量.type == "项目划分" && 工程量.叶子节点=="1" && 工程量.存在非拆除清单==1,
?{
iif(strFind(工程量.名称,"配电装置") >= 0,
?{
setparam("遍历清单", 1);
setparam("最大电压等级", 工程量.项目划分电压等级);
},?setparam("遍历清单", 0));
},?0);
iif(工程量.type == "清单" && getparam("遍历清单")== 1,
?{
for(filter(items, "消耗量", ?(消耗量.type == "定额" || 消耗量.type == "主材" || 消耗量.type == "设备" || 消耗量.type == "一笔性费用" || 消耗量.type == "注解")),"定额",
?{
iif(getparam("最大电压等级")>getparam("变量值_高"),?setparam("变量值_高",getparam("最大电压等级")),0);
},?0);
},?0);
}, ?0);
setparam("中压侧配电装置_最大电压等级_已计算", 1);
},?0);
getparam("变量值_高");
}
BEGIN:中压侧配电装置电压等级
${
iif(getparam("中压侧配电装置电压等级_已计算") != 1,
?{
setparam("变量值_中", 0);
for(@项目划分.安装, "工程量",
?{
iif(工程量.type == "项目划分" && 工程量.叶子节点=="1" && 工程量.存在非拆除清单==1,
?{
iif(strFind(工程量.名称,"配电装置") >= 0,
?{
setparam("遍历清单", 1);
setparam("第二大电压等级", 工程量.项目划分电压等级);
},?setparam("遍历清单", 0));
},?0);
iif(工程量.type == "清单" && getparam("遍历清单")== 1,
?{
for(filter(items, "消耗量", ?(消耗量.type == "定额" || 消耗量.type == "主材" || 消耗量.type == "设备" || 消耗量.type == "一笔性费用" || 消耗量.type == "注解")),"定额",
?{
iif(中压侧配电装置_最大电压等级()!=getparam("第二大电压等级") && getparam("第二大电压等级")>getparam("变量值_中"),?setparam("变量值_中",getparam("第二大电压等级")),0);
},?0);
},?0);
}, ?0);
setparam("中压侧配电装置电压等级_已计算", 1);
},?0);
getparam("变量值_中");
}
BEGIN:低压侧配电装置电压等级
${
iif(getparam("中压侧配电装置电压等级_已计算") != 1,
?{
setparam("变量值_低", 0);
for(@项目划分.安装, "工程量",
?{
iif(工程量.type == "项目划分" && 工程量.叶子节点=="1" && 工程量.存在非拆除清单==1,
?{
iif(strFind(工程量.名称,"配电装置") >= 0,
?{
setparam("遍历清单", 1);
setparam("第三大电压等级", 工程量.项目划分电压等级);
},?setparam("遍历清单", 0));
},?0);
iif(工程量.type == "清单" && getparam("遍历清单")== 1,
?{
for(filter(items, "消耗量", ?(消耗量.type == "定额" || 消耗量.type == "主材" || 消耗量.type == "设备" || 消耗量.type == "一笔性费用" || 消耗量.type == "注解")),"定额",
?{
iif(中压侧配电装置_最大电压等级()!=getparam("第三大电压等级") && 中压侧配电装置电压等级()!=getparam("第三大电压等级") && getparam("第三大电压等级")>getparam("变量值_低"),?setparam("变量值_低",getparam("第三大电压等级")),0);
},?0);
},?0);
}, ?0);
setparam("中压侧配电装置电压等级_已计算", 1);
},?0);
getparam("变量值_低");
}
///////////////////////////////////////////////////////////////
//
// 架线
//
///////////////////////////////////////////////////////////////
BEGIN:导线型号
${
setparam("变量值", "");
setparam("导线型号", "");
setparam("个数", 1);
for(filter(@组件, "组件目录", ?(组件目录.名称 == "导线架设")),"组件列表",
?{
for(items,"组件",
?{
setparam("变量值", 组件.导线型号);
iif(getparam("个数") == 1, ?setparam("导线型号", getparam("变量值")), setparam("导线型号", getparam("导线型号") + "," + getparam("变量值")));
iif(getparam("导线型号") != "", ?setparam("个数", getparam("个数") + 1), setparam("个数", 1));
}, ?0);
}, ?0);
getparam("导线型号");
}
BEGIN:地线型号
${
setparam("变量值", "");
setparam("地线型号", "");
setparam("个数", 1);
for(filter(@组件, "组件目录", ?(组件目录.名称 == "避雷线架设")),"组件列表",
?{
for(items,"组件",
?{
setparam("变量值", 组件.避雷线型号);
iif(getparam("个数") == 1, ?setparam("地线型号", getparam("变量值")), setparam("地线型号", getparam("地线型号") + "," + getparam("变量值")));
iif(getparam("地线型号") != "", ?setparam("个数", getparam("个数") + 1), setparam("个数", 1));
}, ?0);
}, ?0);
getparam("地线型号");
}
BEGIN:杆塔总数
${
?round(杆塔_混凝土杆基数() + 杆塔_钢管杆基数() + 钢管塔基数() + 角钢塔基数(),0);
}
BEGIN:杆塔_钢管杆基数
${
setparam("变量值", 0);
for(filter(@组件, "组件目录", ?组件目录.名称 == "钢管杆"),"组件列表",
?{
for(filter(items, "组件", ?组件.杆重 != 0),"组件",
?{
setparam("变量值", getparam("变量值") + 组件.基数);
}, ?0);
}, ?0);
getparam("变量值");
}
BEGIN:杆塔_混凝土杆基数
${
setparam("变量值", 0);
for(filter(@组件, "组件目录", ?组件目录.名称 == "混凝土杆"),"组件列表",
?{
for(filter(items, "组件", ?组件.杆重 != 0),"组件",
?{
setparam("变量值", getparam("变量值") + 组件.基数);
}, ?0);
}, ?0);
getparam("变量值");
}
BEGIN:角钢塔基数
${
setparam("变量值", 0);
for(filter(@组件, "组件目录", ?组件目录.名称 == "角钢塔"),"组件列表",
?{
for(filter(items, "组件", ?组件.塔重 != 0),"组件",
?{
setparam("变量值", getparam("变量值") + 组件.基数);
}, ?0);
}, ?0);
setparam("变量值", ?round(getparam("变量值"),0));
getparam("变量值");
}
BEGIN:钢管塔基数
${
setparam("变量值", 0);
for(filter(@组件, "组件目录", ?组件目录.名称 == "钢管塔"),"组件列表",
?{
for(filter(items, "组件", ?组件.塔重 != 0),"组件",
?{
setparam("变量值", getparam("变量值") + 组件.基数);
}, ?0);
}, ?0);
setparam("变量值", ?round(getparam("变量值"),0));
getparam("变量值");
}
BEGIN:耐张塔基数
${
setparam("变量值", 0);
for(filter(@组件, "组件目录", ?(组件目录.名称 == "角钢塔" || 组件目录.名称 == "钢管塔")),"组件列表",
?{
for(filter(items, "组件", ?(组件.所属塔型 == "耐张(转角)" && 组件.塔重 != 0)),"组件",
?{
setparam("变量值", getparam("变量值") + 组件.基数);
}, ?0);
}, ?0);
setparam("变量值", ?round(getparam("变量值"),0));
getparam("变量值");
}
BEGIN:直线塔基数
${
setparam("变量值", 0);
for(filter(@组件, "组件目录", ?(组件目录.名称 == "角钢塔" || 组件目录.名称 == "钢管塔")),"组件列表",
?{
for(filter(items, "组件", ?(组件.所属塔型 == "直线" && 组件.塔重 != 0)),"组件",
?{
setparam("变量值", getparam("变量值") + 组件.基数);
}, ?0);
}, ?0);
setparam("变量值", ?round(getparam("变量值"),0));
getparam("变量值");
}
@@ -1,344 +0,0 @@
//费用组合单价变量(用于计算清单的单价费用(综合单价、取费费用单价等))
BEGIN:费用组合单价变量
${
sum(source,"工程量代理",?工程量代理.结算费用)
}
//费用组合变量(根据结算条款组合中标费用和结算费用)
BEGIN:费用组合变量
${
sum(source,"工程量代理",?#{
->清单结算状态() == 1
:工程量代理.结算费用 * 工程量代理.数量;
->清单结算状态() == 2 || 清单结算状态() == 3 || 清单结算状态() == 4 || 清单结算状态() == 7 || 清单结算状态() == 8
:工程量代理.中标费用 * 工程量代理.数量;
->清单结算状态() == 5
:工程量代理.中标费用*工程量代理.中标数量*(1+清单工程量调整幅度()/100)
+(工程量代理.数量-工程量代理.中标数量*(1+清单工程量调整幅度()/100))*工程量代理.结算费用;
->清单结算状态() == 6 || 清单结算状态() == 9 || 清单结算状态() == 16 || 清单结算状态() == 17
:工程量代理.结算费用 * 工程量代理.数量;
}
)
}
BEGIN:单条清单结算状态
${
sum(source,"工程量代理",?清单结算状态())
}
BEGIN:清单结算状态
${
#{
->(@工程信息.阶段类型 != "结算" && @工程信息.阶段类型 != "审核") || 工程量代理.设备类费用 == 1
:1;
->
:#{
->工程量代理.阶段类型 == @工程信息.阶段类型
|| (工程量代理.阶段类型 == "结算" && @工程信息.阶段类型 == "审核")
|| 一笔性费用清单结算条款() == 1
:1;
->清单项目特征值结算条款() == 1
:1;
->清单量差比例是否超过设置值结算条款() == 0
:#{
->费用超过合计的比例是否超过设置值结算条款() == 0
:2;
->费用超过合计的比例是否超过设置值结算条款() == 1
:#{
->工程量代理.数量 - 工程量代理.中标数量 > 0
:16;
->工程量代理.数量 - 工程量代理.中标数量 < 0
:17;
};
};
->清单量差比例是否超过设置值结算条款() == 1
:#{
->清单金额增减是否超过设置值结算条款() == 0
:#{
->工程量代理.数量 - 工程量代理.中标数量 > 0
:3;
->工程量代理.数量 - 工程量代理.中标数量 < 0
:4;
};
->清单金额增减是否超过设置值结算条款() == 1
:#{
->工程量代理.数量 - 工程量代理.中标数量 > 0
:5;
->工程量代理.数量 - 工程量代理.中标数量 < 0
:6;
};
};
};
}
}
BEGIN:一笔性费用清单结算条款
${
#{
->工程量代理.一笔性费用 == 0 || 工程量代理.阶段类型 == "" || 工程量代理.阶段类型 == @工程信息.阶段类型
|| (工程量代理.阶段类型 == "结算" && @工程信息.阶段类型 == "审核")
:0;
->
:#{
->@结算条款.一笔性费用清单结算原则.值 == "按实际发生的量和价结算"
:1;
->@结算条款.一笔性费用清单结算原则.值 == "包干费用不可调整"
:3;
->
:2;
};
}
}
BEGIN:清单项目特征值结算条款
${
#{
->一笔性费用清单结算条款() == 3
:0;
->
:#{
->strFind(工程量代理.项目划分类型, "措施项目二") < 0 && 工程量代理.拆除 == 0
:#{
->@结算条款.项目特征发生变化.应用 == 0 || @结算条款.项目特征发生变化.值 != "是"
:0;
->清单项目特征值是否变化() == 0
:0;
->
:1;
};
->strFind(工程量代理.项目划分类型, "措施项目二") < 0 && 工程量代理.拆除 == 1
:#{
->@结算条款.拆除项目特征发生变化.应用 == 0 || @结算条款.拆除项目特征发生变化.值 != "是"
:0;
->清单项目特征值是否变化() == 0
:0;
->
:1;
};
->
:#{
->@结算条款.措施二项目特征发生变化.应用 == 0 || @结算条款.措施二项目特征发生变化.值 != "是"
:0;
->清单项目特征值是否变化() == 0
:0;
->
:1;
};
};
}
}
BEGIN:清单项目特征值是否变化
${
sum(items, "项目特征", ?iif(项目特征.中标项目特征值!=项目特征.项目特征值, 1, 0))
}
BEGIN:清单量差比例是否超过设置值结算条款
${
#{
->一笔性费用清单结算条款() == 3
:0;
->一笔性费用清单结算条款() == 1
:1;
->
:#{
->工程量代理.中标数量 < 0
:0;
->strFind(工程量代理.项目划分类型, "措施项目二") < 0 && 工程量代理.拆除 == 0
:#{
->@结算条款.清单工程量调整幅度.应用 == 0
:0;
->工程量代理.数量 - 工程量代理.中标数量 > 0
:iif((工程量代理.数量 - 工程量代理.中标数量)-@结算条款.清单工程量调整幅度.值/100*工程量代理.中标数量 > 0.0001,1,0);
->
:iif((工程量代理.中标数量 - 工程量代理.数量)-@结算条款.清单工程量调整幅度.值/100*工程量代理.中标数量 > 0.0001,1,0);
};
->strFind(工程量代理.项目划分类型, "措施项目二") < 0 && 工程量代理.拆除 == 1
:#{
->@结算条款.拆除清单工程量调整幅度.应用 == 0
:0;
->工程量代理.数量 - 工程量代理.中标数量 > 0
:iif((工程量代理.数量 - 工程量代理.中标数量)-@结算条款.拆除清单工程量调整幅度.值/100*工程量代理.中标数量 > 0.0001,1,0);
->
:iif((工程量代理.中标数量 - 工程量代理.数量)-@结算条款.拆除清单工程量调整幅度.值/100*工程量代理.中标数量 > 0.0001,1,0);
};
->
:#{
->@结算条款.措施二清单工程量调整幅度.应用 == 0
:0;
->工程量代理.数量 - 工程量代理.中标数量 > 0
:iif((工程量代理.数量 - 工程量代理.中标数量)-@结算条款.措施二清单工程量调整幅度.值/100*工程量代理.中标数量 > 0.0001,1,0);
->
:iif((工程量代理.中标数量 - 工程量代理.数量)-@结算条款.措施二清单工程量调整幅度.值/100*工程量代理.中标数量 > 0.0001,1,0);
};
};
}
}
BEGIN:清单金额增减是否超过设置值结算条款
${
#{
->一笔性费用清单结算条款() == 3
:0;
->一笔性费用清单结算条款() == 1
:1;
->
:#{
->工程量代理.中标数量 < 0
:0;
->strFind(工程量代理.项目划分类型, "措施项目二") < 0 && 工程量代理.拆除 == 0
:#{
->@结算条款.清单金额增减超过.应用 == 0
:1;
->工程量代理.数量 - 工程量代理.中标数量 > 0
:iif(abs(工程量代理.拟定综合单价*(工程量代理.数量-工程量代理.中标数量*(1+@结算条款.清单工程量调整幅度.值/100))+工程量代理.中标合价*(1+@结算条款.清单工程量调整幅度.值/100)-工程量代理.中标单价*工程量代理.数量) > @结算条款.清单金额增减超过.值*10000,1,0);
->
:iif(abs(工程量代理.中标单价*工程量代理.数量-工程量代理.拟定综合单价*工程量代理.数量) > @结算条款.清单金额增减超过.值*10000,1,0);
};
->strFind(工程量代理.项目划分类型, "措施项目二") < 0 && 工程量代理.拆除 == 1
:#{
->@结算条款.拆除清单金额增减超过.应用 == 0
:1;
->工程量代理.数量 - 工程量代理.中标数量 > 0
:iif(abs(工程量代理.拟定综合单价*(工程量代理.数量-工程量代理.中标数量*(1+@结算条款.拆除清单工程量调整幅度.值/100))+工程量代理.中标合价*(1+@结算条款.拆除清单工程量调整幅度.值/100)-工程量代理.中标单价*工程量代理.数量) > @结算条款.拆除清单金额增减超过.值*10000,1,0);
->
:iif(abs(工程量代理.中标单价*工程量代理.数量-工程量代理.拟定综合单价*工程量代理.数量) > @结算条款.拆除清单金额增减超过.值*10000,1,0);
};
->
:#{
->@结算条款.措施二清单金额增减超过.应用 == 0
:1;
->工程量代理.数量 - 工程量代理.中标数量 > 0
:iif(abs(工程量代理.拟定综合单价*(工程量代理.数量-工程量代理.中标数量*(1+@结算条款.措施二清单工程量调整幅度.值/100))+工程量代理.中标合价*(1+@结算条款.措施二清单工程量调整幅度.值/100)-工程量代理.中标单价*工程量代理.数量) > @结算条款.措施二清单金额增减超过.值*10000,1,0);
->
:iif(abs(工程量代理.中标单价*工程量代理.数量-工程量代理.拟定综合单价*工程量代理.数量) > @结算条款.措施二清单金额增减超过.值*10000,1,0);
};
};
}
}
BEGIN:费用超过合计的比例是否超过设置值结算条款
${
#{
->一笔性费用清单结算条款() == 3
:0;
->一笔性费用清单结算条款() == 1
:1;
->
:#{
->工程量代理.中标数量 < 0
:0;
->strFind(工程量代理.项目划分类型, "措施项目二") < 0 && 工程量代理.拆除 == 0
:#{
->@结算条款.差值占分部分项费比例.应用 == 0
:0;
->工程量代理.中标数量 == 0
:#{
->工程量代理.数量 != 0
:1;
->工程量代理.数量 == 0
:0;
};
->
:iif(abs((工程量代理.数量 - 工程量代理.中标数量)*工程量代理.中标单价/工程量代理.分部分项中标合价) > @结算条款.差值占分部分项费比例.值*0.01,1,0);
};
->strFind(工程量代理.项目划分类型, "措施项目二") < 0 && 工程量代理.拆除 == 1
:#{
->@结算条款.拆除差值占分部分项费比例.应用 == 0
:0;
->工程量代理.中标数量 == 0
:#{
->工程量代理.数量 != 0
:1;
->工程量代理.数量 == 0
:0;
};
->
:iif(abs((工程量代理.数量 - 工程量代理.中标数量)*工程量代理.中标单价/工程量代理.分部分项中标合价) > @结算条款.拆除差值占分部分项费比例.值*0.01,1,0);
};
->
:#{
->@结算条款.措施二差值占分部分项费比例.应用 == 0
:0;
->工程量代理.中标数量 == 0
:#{
->工程量代理.数量 != 0
:1;
->工程量代理.数量 == 0
:0;
};
->
:iif(abs((工程量代理.数量 - 工程量代理.中标数量)*工程量代理.中标单价/工程量代理.分部分项中标合价) > @结算条款.措施二差值占分部分项费比例.值*0.01,1,0);
};
};
}
}
BEGIN:清单工程量调整幅度
${
#{
->strFind(工程量代理.项目划分类型, "措施项目二") < 0 && 工程量代理.拆除 == 0
:@结算条款.清单工程量调整幅度.值;
->strFind(工程量代理.项目划分类型, "措施项目二") < 0 && 工程量代理.拆除 == 1
:@结算条款.拆除清单工程量调整幅度.值;
->
:@结算条款.措施二清单工程量调整幅度.值;
}
}
BEGIN:费用表节点是否计算
${
setparam("是否计算", 1);
iif(@工程信息.阶段类型 == "结算" || @工程信息.阶段类型 == "审核",
?{
for(source,"费用表节点",
?{
setparam("类型", 费用表节点.type);
setparam("不可竞争费用", 费用表节点.不可竞争费用);
},?0);
iif(getparam("类型") == "措施建筑" || getparam("类型") == "措施安装" || getparam("类型") == "措施线路",
?{
iif((@结算条款.措施一不可竞争项目随工程量调整而变化.值 == "否" && getparam("不可竞争费用") == 1) || (@结算条款.措施一可竞争项目随工程量调整而变化.值 == "否" && getparam("不可竞争费用") == 0),
?{
setparam("是否计算", 0);
}, ?0);
}, ?0);
iif(getparam("类型") == "规费建筑" || getparam("类型") == "规费安装" || getparam("类型") == "规费线路",
?{
iif((@结算条款.规费不可竞争项目随工程量调整而变化.值 == "否" && getparam("不可竞争费用") == 1) || (@结算条款.规费可竞争项目随工程量调整而变化.值 == "否" && getparam("不可竞争费用") == 0),
?{
setparam("是否计算", 0);
}, ?0);
}, ?0);
}, ?0);
getparam("是否计算");
}
BEGIN:费用表节点是否按分部分项比例计算
${
setparam("是否计算", 0);
iif(@工程信息.阶段类型 == "结算" || @工程信息.阶段类型 == "审核",
?{
for(source,"费用表节点",
?{
setparam("类型", 费用表节点.type);
},?0);
iif(getparam("类型") == "措施建筑" || getparam("类型") == "措施安装" || getparam("类型") == "措施线路",
?{
iif(@结算条款.措施一结算办法.值 == "新疆合同结算规则",
?{
setparam("是否计算", 1);
}, ?0);
}, ?0);
iif(getparam("类型") == "规费建筑" || getparam("类型") == "规费安装" || getparam("类型") == "规费线路",
?{
iif(@结算条款.规费结算办法.值 == "新疆合同结算规则",
?{
setparam("是否计算", 1);
}, ?0);
}, ?0);
}, ?0);
getparam("是否计算");
}
@@ -1,95 +0,0 @@
//------------------定额费用-------------------------------------------
BEGIN:人工费
${
?_人工费_不含特殊费()+脚手架人工费()+混凝土施工调整人工费()+调试人工费()
}
BEGIN:乙供材料费不含税
${
?_乙供材料费_非宏变量()+脚手架材料费()+混凝土施工调整材料费()+调试材料费()
}
BEGIN:机械费
${
?_机械费_不含特殊费()+脚手架机械费()+混凝土施工调整机械费()+调试机械费()
}
BEGIN:人工价差
${
?_人工价差_不含特殊费()+脚手架人工价差()+混凝土施工调整人工价差()+调试人工价差()
}
BEGIN:乙供材料价差不含税
${
?_乙供材料价差_不含特殊费()+脚手架材料价差()+混凝土施工调整材料价差()+调试材料价差()
}
BEGIN:机械价差
${
?_机械价差_不含特殊费()+脚手架机械价差()+混凝土施工调整机械价差()+调试机械价差()
}
//BEGIN:材料费
//${
// ?甲供材料费()+乙供材料费()
//}
BEGIN:材料价差不含税
${
?甲供材料价差不含税()+乙供材料价差不含税()
}
BEGIN:材料价差含税
${
?甲供材料价差含税()+乙供材料价差含税()
}
//------------------以下变量为开发使用,开发自行维护-------------------------------------------
BEGIN:建筑拆分人工材料_价差不含税
${
sum(_过滤定额(),"工程量",?工程量.数量 * 工程量.材料系数 * 工程量.定额系数 * #{
->工程量.调差类型 == "建筑" || 工程量.调差类型 == "建筑拆除" || 工程量.调差类型 == "建筑修缮"
:
sum(_过滤材料(),"人材机",?#{
->人材机.拆分 == 0
:
0;
->人材机.拆分 == 1
:
sum(_过滤人工_定额重算(),"拆分子项",?
#{
->拆分子项.type == "人工"
:
拆分子项.预算价不含税 * 拆分子项.数量 * #{
->工程量.调差类型 == "建筑":@工程信息.建筑人工调差系数 /100;
->工程量.调差类型 == "建筑修缮":@工程信息.建筑修缮人工调差系数 /100;
->工程量.调差类型 == "建筑拆除":@工程信息.建筑拆除人工调差系数 /100;
};
} * 人材机.数量);
});})
}
BEGIN:建筑拆分人工材料_价差含税
${
sum(_过滤定额(),"工程量",?工程量.数量 * 工程量.材料系数 * 工程量.定额系数 * #{
->工程量.调差类型 == "建筑" || 工程量.调差类型 == "建筑拆除" || 工程量.调差类型 == "建筑修缮"
:
sum(_过滤材料(),"人材机",?#{
->人材机.拆分 == 0
:
0;
->人材机.拆分 == 1
:
sum(_过滤人工_定额重算(),"拆分子项",?
#{
->拆分子项.type == "人工"
:
拆分子项.预算价含税 * 拆分子项.数量 * #{
->工程量.调差类型 == "建筑":@工程信息.建筑人工调差系数 /100;
->工程量.调差类型 == "建筑修缮":@工程信息.建筑修缮人工调差系数 /100;
->工程量.调差类型 == "建筑拆除":@工程信息.建筑拆除人工调差系数 /100;
};
} * 人材机.数量);
});})
}
@@ -1,456 +0,0 @@
///////////////////////////////////////////////////////////////
//
// 过滤条件
//
///////////////////////////////////////////////////////////////
BEGIN:_过滤人工_定额重算
${
filter(items,"人材机",?人材机.type == "人工")
}
BEGIN:_过滤材料_定额重算
${
filter(items,"人材机",?人材机.type == "材料")
}
//BEGIN:_过滤甲供材料_定额重算
//${
// filter(items,"人材机",?人材机.type == "材料" && 人材机.供货方 == "甲供")
//}
//BEGIN:_过滤乙供材料_定额重算
//${
// filter(items,"人材机",?人材机.type == "材料" && 人材机.供货方 == "乙供")
//}
BEGIN:_过滤机械_定额重算
${
filter(items,"人材机",?人材机.type == "机械")
}
///////////////////////////////////////////////////////////////
//*************************单条人工费:人工费************************
BEGIN:_普通人工费_定额重算
${
sum(source, "工程量",?sum(_过滤人工_定额重算(),"人材机",?人材机.数量 * 人材机.预算价不含税))
}
BEGIN:人工费_定额重算
${
round(_普通人工费_定额重算(),2)
}
//*************************单条材料费_不含税(甲供+乙供):材料费************************
BEGIN:_普通材料费_定额重算
${
sum(source, "工程量",?sum(_过滤材料_定额重算(),"人材机",?#{
->in(人材机.编码,"C10006,C99010101") == 0:
#{
->人材机.拆分 == 0:人材机.数量 * 人材机.预算价不含税;
->人材机.拆分 == 1:人材机.数量 * round(?round(?sum(_过滤人工_定额重算(),"拆分子项",?round(?拆分子项.数量,4) * 拆分子项.预算价不含税),2)
+round(?sum(_过滤材料_定额重算(),"拆分子项",?round(?拆分子项.数量,4) * 拆分子项.预算价不含税),2)
+round(?sum(_过滤机械_定额重算(),"拆分子项",?round(?拆分子项.数量,4) * 拆分子项.预算价不含税),2),4);
};
}))
}
BEGIN:其他材料费_定额重算
${
sum(source, "工程量",?sum(_过滤材料_定额重算(),"人材机",?#{->in(人材机.编码,"C10006,C99010101"):_普通材料费_定额重算() * 人材机.数量 / 100;}))
}
BEGIN:材料费_定额重算
${
round(_普通材料费_定额重算()+其他材料费_定额重算(),2)
}
//*************************单条材料费_含税(甲供+乙供):材料费_含税************************
BEGIN:_普通材料费_定额重算_含税
${
sum(source, "工程量",?sum(_过滤材料_定额重算(),"人材机",?#{
->in(人材机.编码,"C10006,C99010101") == 0:
#{
->人材机.拆分 == 0:人材机.数量 * 人材机.预算价含税;
->人材机.拆分 == 1:人材机.数量 * round(?round(?sum(_过滤人工_定额重算(),"拆分子项",?round(?拆分子项.数量,4) * 拆分子项.预算价含税),2)
+round(?sum(_过滤材料_定额重算(),"拆分子项",?round(?拆分子项.数量,4) * 拆分子项.预算价含税),2)
+round(?sum(_过滤机械_定额重算(),"拆分子项",?round(?拆分子项.数量,4) * 拆分子项.预算价含税),2),4);
};
}))
}
BEGIN:其他材料费_定额重算_含税
${
sum(source, "工程量",?sum(_过滤材料_定额重算(),"人材机",?#{->in(人材机.编码,"C10006,C99010101"):_普通材料费_定额重算_含税() * 人材机.数量 / 100;}))
}
BEGIN:材料费_定额重算_含税
${
round(_普通材料费_定额重算_含税()+其他材料费_定额重算_含税(),2)
}
//*************************单条甲供材料费_不含税:甲供材料费************************
BEGIN:_甲供普通材料费_定额重算
${
sum(source, "工程量",?sum(_过滤材料_定额重算(),"人材机",?#{
->in(人材机.编码,"C10006,C99010101") == 0:
#{
->人材机.拆分 == 0 && 人材机.供货方 == "甲供":人材机.数量 * 人材机.预算价不含税;
->人材机.拆分 == 1:人材机.数量 * round(?round(?sum(items,"拆分子项",?#{->拆分子项.供货方 == "甲供" && 拆分子项.type == "人工":round(?拆分子项.数量,4) * 拆分子项.预算价不含税;}),2)
+round(?sum(items,"拆分子项",?#{->拆分子项.供货方 == "甲供" && 拆分子项.type == "材料":round(?拆分子项.数量,4) * 拆分子项.预算价不含税;}),2)
+round(?sum(items,"拆分子项",?#{->拆分子项.供货方 == "甲供" && 拆分子项.type == "机械":round(?拆分子项.数量,4) * 拆分子项.预算价不含税;}),2),4);
};
}))
}
BEGIN:_甲供其他材料费_定额重算
${
sum(source, "工程量",?sum(items,"人材机",?#{->in(人材机.编码,"C10006,C99010101") && 人材机.供货方 == "甲供":_普通材料费_定额重算() * 人材机.数量 / 100;}))
}
BEGIN:甲供材料费_定额重算
${
round(_甲供普通材料费_定额重算()+_甲供其他材料费_定额重算(),2)
}
//*************************单条甲供材料费_含税:甲供材料费_含税************************
BEGIN:_甲供普通材料费_定额重算_含税
${
sum(source, "工程量",?sum(_过滤材料_定额重算(),"人材机",?#{
->in(人材机.编码,"C10006,C99010101") == 0:
#{
->人材机.拆分 == 0 && 人材机.供货方 == "甲供":人材机.数量 * 人材机.预算价含税;
->人材机.拆分 == 1:人材机.数量 * round(?round(?sum(items,"拆分子项",?#{->拆分子项.供货方 == "甲供" && 拆分子项.type == "人工":round(?拆分子项.数量,4) * 拆分子项.预算价含税;}),2)
+round(?sum(items,"拆分子项",?#{->拆分子项.供货方 == "甲供" && 拆分子项.type == "材料":round(?拆分子项.数量,4) * 拆分子项.预算价含税;}),2)
+round(?sum(items,"拆分子项",?#{->拆分子项.供货方 == "甲供" && 拆分子项.type == "机械":round(?拆分子项.数量,4) * 拆分子项.预算价含税;}),2),4);
};
}))
}
BEGIN:_甲供其他材料费_定额重算_含税
${
sum(source, "工程量",?sum(items,"人材机",?#{->in(人材机.编码,"C10006,C99010101") && 人材机.供货方 == "甲供":_普通材料费_定额重算_含税() * 人材机.数量 / 100;}))
}
BEGIN:甲供材料费_定额重算_含税
${
round(_甲供普通材料费_定额重算_含税()+_甲供其他材料费_定额重算_含税(),2)
}
//*************************单条机械费:机械费************************
BEGIN:_普通机械费_定额重算
${
sum(source, "工程量", ?sum(_过滤机械_定额重算(),"人材机",?#{
->人材机.编码 != "J09001" && 人材机.编码 != "J99-01-098":人材机.数量 * 人材机.预算价不含税;
}))
}
BEGIN:其他机械费_定额重算
${
sum(source, "工程量", ?sum(items,"人材机",?#{
->人材机.编码 == "J09001" || 人材机.编码 == "J99-01-098":_普通机械费_定额重算()*人材机.数量 / 100;
}))
}
BEGIN:机械费_定额重算
${
round(_普通机械费_定额重算()+其他机械费_定额重算(),2)
}
//*************************基价************************
BEGIN:基价_定额重算
${
sum(source, "工程量", ?round(工程量.人工费 + 工程量.材料费 +工程量.机械费, 2))
}
//*************************工程量界面定额“单价不含税”************************
BEGIN:单价_定额重算
${
sum(source, "定额", ?round(定额.人工费*定额.人工系数*定额.定额系数+定额.材料费*定额.材料系数*定额.定额系数+定额.机械费*定额.机械系数*定额.定额系数, 2))
}
//*************************消材拆分父级预算价不含税价重算************************
BEGIN:拆分材料父级预算价_定额重算_不含税
${
sum(source, "人材机", ?#{->人材机.拆分 == 1:round(?_拆分子级人工预算合价_消材_不含税() + _拆分子级机械预算合价_消材_不含税() + _拆分子级材料预算合价_消材_不含税(),4);})
}
BEGIN:_拆分子级人工预算合价_消材_不含税
${
round(?sum(items,"拆分子项",?#{->拆分子项.type == "人工":round(?拆分子项.数量,4) * 拆分子项.预算价不含税;}),2)
}
BEGIN:_拆分子级机械预算合价_消材_不含税
${
round(?sum(items,"拆分子项",?#{->拆分子项.type == "机械":round(?拆分子项.数量,4) * 拆分子项.预算价不含税;}),2)
}
BEGIN:_拆分子级材料预算合价_消材_不含税
${
round(?sum(items,"拆分子项",?#{->拆分子项.type == "材料":round(?拆分子项.数量,4) * 拆分子项.预算价不含税;}),2)
}
//*************************消材拆分父级预算价含税价重算************************
BEGIN:拆分材料父级预算价_定额重算_含税
${
sum(source, "人材机", ?#{->人材机.拆分 == 1:round(?_拆分子级人工预算合价_消材_含税() + _拆分子级机械预算合价_消材_含税() + _拆分子级材料预算合价_消材_含税(),4);})
}
BEGIN:_拆分子级人工预算合价_消材_含税
${
round(?sum(items,"拆分子项",?#{->拆分子项.type == "人工":round(?拆分子项.数量,4) * 拆分子项.预算价含税;}),2)
}
BEGIN:_拆分子级机械预算合价_消材_含税
${
round(?sum(items,"拆分子项",?#{->拆分子项.type == "机械":round(?拆分子项.数量,4) * 拆分子项.预算价含税;}),2)
}
BEGIN:_拆分子级材料预算合价_消材_含税
${
round(?sum(items,"拆分子项",?#{->拆分子项.type == "材料":round(?拆分子项.数量,4) * 拆分子项.预算价含税;}),2)
}
//*************************消材拆分父级市场价不含税重算************************
BEGIN:拆分材料父级市场价_定额重算_不含税
${
sum(source, "人材机", ?#{->人材机.拆分 == 1:round(?_拆分子级人工市场价合价_消材_不含税() + _拆分子级机械市场价合价_消材_不含税() + _拆分子级材料市场价合价_消材_不含税(),4);})
}
BEGIN:_拆分子级人工市场价合价_消材_不含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type == "人工" && @工程信息.项目类型 == "应急工程":round(?拆分子项.数量,4) * 拆分子项.市场价不含税;
->拆分子项.type == "人工" && @工程信息.项目类型 != "应急工程":round(?拆分子项.数量,4) * 拆分子项.预算价不含税 *#{
->(@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑拆除":
#{
->@工程信息.建筑拆除材机按系数调差 == "是" : 1+@工程信息.建筑拆除材料调差系数 /100;
->@工程信息.建筑拆除材机按系数调差 == "否" : 1+@工程信息.建筑拆除人工调差系数 /100;
};
->@工程信息.工程性质 == "检修" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑修缮":
#{
->@工程信息.建筑修缮材机按系数调差 == "是" : 1+@工程信息.建筑修缮材料调差系数 /100;
->@工程信息.建筑修缮材机按系数调差 == "否" : 1+@工程信息.建筑修缮人工调差系数 /100;
};
->@工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "设备检修":1+@工程信息.设备检修材料调差系数 /100;
->@工程信息.工程类型 == "配网" || @工程信息.项目划分 == "输电线路工程":
#{
->拆分子项.@_@材机按系数调差 == "是" : 1+拆分子项.@_@材料调差系数 /100;
->拆分子项.@_@材机按系数调差 == "否" : 1+拆分子项.@_@人工调差系数 /100;
};
->@工程信息.工程性质 == "技改" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑":
#{
->@工程信息.建筑材机按系数调差 == "是" : 1+@工程信息.建筑材料调差系数 /100;
->@工程信息.建筑材机按系数调差 == "否" : 1+@工程信息.建筑人工调差系数 /100;
};
->@工程信息.工程性质 == "技改" && @工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装":1+@工程信息.安装材料调差系数 /100;
->@工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装拆除":1+@工程信息.安装拆除材料调差系数 /100;
};
}), 2)
}
BEGIN:_拆分子级机械市场价合价_消材_不含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type == "机械" && @工程信息.项目类型 == "应急工程":round(?拆分子项.数量,4) * 拆分子项.市场价不含税;
->拆分子项.type == "机械" && @工程信息.项目类型 != "应急工程":round(?拆分子项.数量,4) * #{
->(@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑拆除":
#{
->@工程信息.建筑拆除材机按系数调差 == "是" : 拆分子项.预算价不含税*(1+@工程信息.建筑拆除材料调差系数 /100);
->@工程信息.建筑拆除材机按系数调差 == "否" : 拆分子项.市场价不含税;
};
->@工程信息.工程性质 == "检修" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑修缮":
#{
->@工程信息.建筑修缮材机按系数调差 == "是" : 拆分子项.预算价不含税*(1+@工程信息.建筑修缮材料调差系数 /100);
->@工程信息.建筑修缮材机按系数调差 == "否" : 拆分子项.市场价不含税;
};
->@工程信息.工程性质 == "检修" && @工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "设备检修":拆分子项.预算价不含税*(1+@工程信息.设备检修材料调差系数 / 100);
->@工程信息.工程类型 == "配网" || @工程信息.项目划分 == "输电线路工程":
#{
->拆分子项.@_@材机按系数调差 == "是" : 拆分子项.预算价不含税*(1+拆分子项.@_@材料调差系数 /100);
->拆分子项.@_@材机按系数调差 == "否" : 拆分子项.市场价不含税;
};
->@工程信息.工程性质 == "技改" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程")&& 拆分子项.调差类型 == "建筑":
#{
->@工程信息.建筑材机按系数调差 == "是" : 拆分子项.预算价不含税*(1+@工程信息.建筑材料调差系数 /100);
->@工程信息.建筑材机按系数调差 == "否" : 拆分子项.市场价不含税;
};
->@工程信息.工程性质 == "技改" && @工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装":拆分子项.预算价不含税*(1+@工程信息.建筑材料调差系数 /100);
->@工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装拆除":拆分子项.预算价不含税*(1+@工程信息.安装拆除材料调差系数 /100);
};
}), 2)
}
BEGIN:_拆分子级材料市场价合价_消材_不含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type == "材料" && @工程信息.项目类型 == "应急工程":round(?拆分子项.数量,4) * 拆分子项.市场价不含税;
->拆分子项.type == "材料" && @工程信息.项目类型 != "应急工程":round(?拆分子项.数量,4) * #{
->(@工程信息.工程类型 == "变电" || @工程信息.工程类型 == "线路")&& 拆分子项.调差类型 == "建筑拆除":
#{
->@工程信息.建筑拆除材机按系数调差 == "是" : 拆分子项.预算价不含税*(1+@工程信息.建筑拆除材料调差系数 / 100);
->@工程信息.建筑拆除材机按系数调差 == "否" : 拆分子项.市场价不含税;
};
->@工程信息.工程性质 == "检修" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑修缮":
#{
->@工程信息.建筑修缮材机按系数调差 == "是" : 拆分子项.预算价不含税*(1+@工程信息.建筑修缮材料调差系数 /100);
->@工程信息.建筑修缮材机按系数调差 == "否" : 拆分子项.市场价不含税;
};
->@工程信息.工程性质 == "检修" && @工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "设备检修":拆分子项.预算价不含税*(1+@工程信息.设备检修材料调差系数 /100);
->@工程信息.工程类型 == "配网" || @工程信息.项目划分 == "输电线路工程":
#{
->拆分子项.@_@材机按系数调差 == "是" : 拆分子项.预算价不含税*(1+拆分子项.@_@材料调差系数 /100);
->拆分子项.@_@材机按系数调差 == "否" : 拆分子项.市场价不含税;
};
->@工程信息.工程性质 == "技改" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑":
#{
->@工程信息.建筑材机按系数调差 == "是" : 拆分子项.预算价不含税*(1+@工程信息.建筑材料调差系数 /100);
->@工程信息.建筑材机按系数调差 == "否" : 拆分子项.市场价不含税;
};
->@工程信息.工程性质 == "技改" && @工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装":拆分子项.预算价不含税*(1+@工程信息.安装材料调差系数 /100);
->@工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装拆除":拆分子项.预算价不含税*(1+@工程信息.安装拆除材料调差系数 /100);
};
}), 2)
}
//*************************消材拆分父级市场价含税重算************************
BEGIN:拆分材料父级市场价_定额重算_含税
${
sum(source, "人材机", ?#{->人材机.拆分 == 1:round(?_拆分子级人工市场价合价_消材_含税() + _拆分子级机械市场价合价_消材_含税() + _拆分子级材料市场价合价_消材_含税(),4);})
}
BEGIN:_拆分子级人工市场价合价_消材_含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type == "人工" && @工程信息.项目类型 == "应急工程":round(?拆分子项.数量,4) * 拆分子项.市场价含税;
->拆分子项.type == "人工" && @工程信息.项目类型 != "应急工程":round(?拆分子项.数量,4) * 拆分子项.预算价含税 *#{
->(@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑拆除":
#{
->@工程信息.建筑拆除材机按系数调差 == "是" : 1+@工程信息.建筑拆除材料调差系数 /100;
->@工程信息.建筑拆除材机按系数调差 == "否" : 1+@工程信息.建筑拆除人工调差系数 /100;
};
->@工程信息.工程性质 == "检修" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑修缮":
#{
->@工程信息.建筑修缮材机按系数调差 == "是" : 1+@工程信息.建筑修缮材料调差系数 /100;
->@工程信息.建筑修缮材机按系数调差 == "否" : 1+@工程信息.建筑修缮人工调差系数 /100;
};
->@工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "设备检修":1+@工程信息.设备检修材料调差系数 /100;
->@工程信息.工程类型 == "配网" || @工程信息.项目划分 == "输电线路工程":
#{
->拆分子项.@_@材机按系数调差 == "是" : 1+拆分子项.@_@材料调差系数 /100;
->拆分子项.@_@材机按系数调差 == "否" : 1+拆分子项.@_@人工调差系数 /100;
};
->@工程信息.工程性质 == "技改" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑":
#{
->@工程信息.建筑材机按系数调差 == "是" : 1+@工程信息.建筑材料调差系数 /100;
->@工程信息.建筑材机按系数调差 == "否" : 1+@工程信息.建筑人工调差系数 /100;
};
->@工程信息.工程性质 == "技改" && @工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装":1+@工程信息.安装材料调差系数 /100;
->@工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装拆除":1+@工程信息.安装拆除材料调差系数 /100;
};
}), 2)
}
BEGIN:_拆分子级机械市场价合价_消材_含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type == "机械" && @工程信息.项目类型 == "应急工程":round(?拆分子项.数量,4) * 拆分子项.市场价含税;
->拆分子项.type == "机械" && @工程信息.项目类型 != "应急工程":round(?拆分子项.数量,4) * #{
->(@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑拆除":
#{
->@工程信息.建筑拆除材机按系数调差 == "是" : 拆分子项.预算价含税*(1+@工程信息.建筑拆除材料调差系数 /100);
->@工程信息.建筑拆除材机按系数调差 == "否" : 拆分子项.市场价含税;
};
->@工程信息.工程性质 == "检修" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑修缮":
#{
->@工程信息.建筑修缮材机按系数调差 == "是" : 拆分子项.预算价含税*(1+@工程信息.建筑修缮材料调差系数 /100);
->@工程信息.建筑修缮材机按系数调差 == "否" : 拆分子项.市场价含税;
};
->@工程信息.工程性质 == "检修" && @工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "设备检修":拆分子项.预算价含税*(1+@工程信息.设备检修材料调差系数 / 100);
->@工程信息.工程类型 == "配网" || @工程信息.项目划分 == "输电线路工程":
#{
->拆分子项.@_@材机按系数调差 == "是" : 拆分子项.预算价含税*(1+拆分子项.@_@材料调差系数 /100);
->拆分子项.@_@材机按系数调差 == "否" : 拆分子项.市场价含税;
};
->@工程信息.工程性质 == "技改" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程")&& 拆分子项.调差类型 == "建筑":
#{
->@工程信息.建筑材机按系数调差 == "是" : 拆分子项.预算价含税*(1+@工程信息.建筑材料调差系数 /100);
->@工程信息.建筑材机按系数调差 == "否" : 拆分子项.市场价含税;
};
->@工程信息.工程性质 == "技改" && @工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装":拆分子项.预算价含税*(1+@工程信息.建筑材料调差系数 /100);
->@工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装拆除":拆分子项.预算价含税*(1+@工程信息.安装拆除材料调差系数 /100);
};
}), 2)
}
BEGIN:_拆分子级材料市场价合价_消材_含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type == "材料" && @工程信息.项目类型 == "应急工程":round(?拆分子项.数量,4) * 拆分子项.市场价含税;
->拆分子项.type == "材料" && @工程信息.项目类型 != "应急工程":round(?拆分子项.数量,4) * #{
->(@工程信息.工程类型 == "变电" || @工程信息.工程类型 == "线路")&& 拆分子项.调差类型 == "建筑拆除":
#{
->@工程信息.建筑拆除材机按系数调差 == "是" : 拆分子项.预算价含税*(1+@工程信息.建筑拆除材料调差系数 / 100);
->@工程信息.建筑拆除材机按系数调差 == "否" : 拆分子项.市场价含税;
};
->@工程信息.工程性质 == "检修" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑修缮":
#{
->@工程信息.建筑修缮材机按系数调差 == "是" : 拆分子项.预算价含税*(1+@工程信息.建筑修缮材料调差系数 /100);
->@工程信息.建筑修缮材机按系数调差 == "否" : 拆分子项.市场价含税;
};
->@工程信息.工程性质 == "检修" && @工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "设备检修":拆分子项.预算价含税*(1+@工程信息.设备检修材料调差系数 /100);
->@工程信息.工程类型 == "配网" || @工程信息.项目划分 == "输电线路工程":
#{
->拆分子项.@_@材机按系数调差 == "是" : 拆分子项.预算价含税*(1+拆分子项.@_@材料调差系数 /100);
->拆分子项.@_@材机按系数调差 == "否" : 拆分子项.市场价含税;
};
->@工程信息.工程性质 == "技改" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑":
#{
->@工程信息.建筑材机按系数调差 == "是" : 拆分子项.预算价含税*(1+@工程信息.建筑材料调差系数 /100);
->@工程信息.建筑材机按系数调差 == "否" : 拆分子项.市场价含税;
};
->@工程信息.工程性质 == "技改" && @工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装":拆分子项.预算价含税*(1+@工程信息.安装材料调差系数 /100);
->@工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装拆除":拆分子项.预算价含税*(1+@工程信息.安装拆除材料调差系数 /100);
};
}), 2)
}
//*************************未计价含税重算:父级含税预算价************************
//BEGIN:拆分父级预算价_定额重算_含税
//${
// sum(source, "未计价", ?#{->未计价.拆分 == 1:_拆分子级人材机预算合价_含税();})
//}
//BEGIN:_拆分子级人材机预算合价_含税
//${
// round(?sum(items,"拆分子项",?(round(?拆分子项.含量,4) * 拆分子项.预算价含税)),2)
//}
//*************************未计价含税重算:父级含税市场价************************
BEGIN:拆分父级市场价_定额重算_含税
${
sum(source, "未计价", ?#{->未计价.拆分 == 1:_拆分子级人材机市场合价_含税();})
}
BEGIN:_拆分子级人材机市场合价_含税
${
round(?sum(items,"拆分子项",?(round(?拆分子项.含量,4) * 拆分子项.市场价含税)),2)
}
//*************************未计价不含税重算:父级不含税预算价************************
//BEGIN:拆分父级预算价_定额重算_不含税
//${
// sum(source, "未计价", ?#{->未计价.拆分 == 1:_拆分子级人材机预算合价_不含税();})
//}
//BEGIN:_拆分子级人材机预算合价_不含税
//${
// round(?sum(items,"拆分子项",?(round(?拆分子项.含量,4) * 拆分子项.预算价不含税)), 2)
//}
//*************************未计价不含税重算:父级不含税市场价************************
BEGIN:拆分父级市场价_定额重算_不含税
${
sum(source, "未计价", ?#{->未计价.拆分 == 1:_拆分子级人材机市场合价_不含税();})
}
BEGIN:_拆分子级人材机市场合价_不含税
${
round(?sum(items,"拆分子项",?(round(?拆分子项.含量,4) * 拆分子项.市场价不含税)), 2)
}
@@ -1,545 +0,0 @@
//----------------------------陕西报表:工程量清单报表(宏变量)-------------------------------------------------
BEGIN:甲供主要材料费含税_合价_拆分
${
?甲供主材费含税_合价_拆分()+甲供主材损耗费含税_合价_拆分() + 甲供主材配送费_合价_拆分()
}
BEGIN:乙供主要材料费不含税_合价_拆分
${
?乙供主材费不含税_合价_拆分()+乙供主材损耗费不含税_合价_拆分() + 乙供主材配送费_合价_拆分()
}
BEGIN:甲供主要材料价差含税_合价_拆分
${
?甲供主材价差含税_合价_拆分()+甲供主材损耗价差含税_合价_拆分()
}
BEGIN:乙供主要材料价差不含税_合价_拆分
${
?乙供主材价差不含税_合价_拆分()+乙供主材损耗价差不含税_合价_拆分()
}
BEGIN:甲供配件购置费含税_合价_拆分
${
?甲供配件费含税_合价_拆分()+甲供配件费运杂费_合价_拆分() + 甲供配件配送费_合价_拆分()
}
BEGIN:乙供配件购置费不含税_合价_拆分
${
?乙供配件费不含税_合价_拆分()+乙供配件费运杂费_合价_拆分() + 乙供配件配送费_合价_拆分()
}
//----------------------------陕西报表:工程量清单报表(基础变量)-------------------------------------------------
BEGIN:甲供主材费含税_合价_拆分
${
sum(_过滤甲供主材拆分(),"拆分子项",?拆分子项.数量 * 拆分子项.预算价含税)
}
BEGIN:乙供主材费不含税_合价_拆分
${
sum(_过滤乙供主材拆分(),"拆分子项",?拆分子项.数量 * 拆分子项.预算价不含税)
}
BEGIN:甲供主材损耗费含税_合价_拆分
${
sum(_过滤甲供主材拆分(),"拆分子项",?拆分子项.数量 * 拆分子项.预算价含税 * 拆分子项.损耗 /100)
}
BEGIN:乙供主材损耗费不含税_合价_拆分
${
sum(_过滤乙供主材拆分(),"拆分子项",?拆分子项.数量 * 拆分子项.预算价不含税 * 拆分子项.损耗 /100)
}
BEGIN:甲供主材配送费_合价_拆分
${
sum(_过滤甲供主材拆分(),"拆分子项",?
#{
->拆分子项.集中配送 == "1"
:
拆分子项.数量 * (1 + 拆分子项.损耗 / 100) * 拆分子项.预算价含税;
}
) * @工程信息.甲供主材配送费费率 / 100
}
BEGIN:乙供主材配送费_合价_拆分
${
sum(_过滤乙供主材拆分(),"拆分子项",?
#{
->拆分子项.集中配送 == "1"
:
拆分子项.数量 * (1 + 拆分子项.损耗 / 100) * 拆分子项.预算价含税;
}
) * @工程信息.甲供主材配送费费率 / 100
}
BEGIN:甲供主材价差含税_合价_拆分
${
sum(_过滤甲供主材拆分(),"拆分子项",?
#{
->:
拆分子项.数量 * (拆分子项.市场价含税 - 拆分子项.预算价含税);
}
)
}
BEGIN:乙供主材价差不含税_合价_拆分
${
sum(_过滤乙供主材拆分(),"拆分子项",?
#{
->:
拆分子项.数量 * (拆分子项.市场价不含税 - 拆分子项.预算价不含税);
}
)
}
BEGIN:甲供主材损耗价差含税_合价_拆分
${
sum(_过滤甲供主材拆分(),"拆分子项",?
#{
->:
拆分子项.数量 * (拆分子项.市场价含税 - 拆分子项.预算价含税) * 拆分子项.损耗 /100;
}
)
}
BEGIN:乙供主材损耗价差不含税_合价_拆分
${
sum(_过滤乙供主材拆分(),"拆分子项",?
#{
->:
拆分子项.数量 * (拆分子项.市场价不含税 - 拆分子项.预算价不含税) * 拆分子项.损耗 /100;
}
)
}
BEGIN:甲供配件费含税_合价_拆分
${
sum(_过滤甲供配件拆分(),"拆分子项",?
#{
->拆分子项.调差类型 == "建筑修缮" || 拆分子项.调差类型 == "设备检修" || 拆分子项.调差类型 == "检修"
:
拆分子项.数量 * (1 + 拆分子项.损耗 / 100) *
#{
->:
拆分子项.市场价含税;
};
})
}
BEGIN:乙供配件费不含税_合价_拆分
${
sum(_过滤乙供配件拆分(),"拆分子项",?
#{
->拆分子项.调差类型 == "建筑修缮" || 拆分子项.调差类型 == "设备检修" || 拆分子项.调差类型 == "检修"
:
拆分子项.数量 * (1 + 拆分子项.损耗 / 100) *
#{
->:
拆分子项.市场价不含税;
};
})
}
BEGIN:甲供配件费运杂费_合价_拆分
${
sum(_过滤甲供配件拆分(),"拆分子项",?
#{
->拆分子项.调差类型 == "建筑修缮" || 拆分子项.调差类型 == "设备检修" || 拆分子项.调差类型 == "检修"
:
拆分子项.数量 * (1 + 拆分子项.损耗 / 100) * 拆分子项.运杂费率 / 100 * 拆分子项.市场价含税;
}
)
}
BEGIN:乙供配件费运杂费_合价_拆分
${
sum(_过滤乙供配件拆分(),"拆分子项",?
#{
->拆分子项.调差类型 == "建筑修缮" || 拆分子项.调差类型 == "设备检修" || 拆分子项.调差类型 == "检修"
:
拆分子项.数量 * (1 + 拆分子项.损耗 / 100) * 拆分子项.运杂费率 / 100 * 拆分子项.市场价含税;
}
)
}
BEGIN:甲供配件配送费_合价_拆分
${
sum(_过滤甲供配件拆分(),"拆分子项",?#{
->配件.调差类型 == "建筑修缮" || 配件.调差类型 == "设备检修" || 配件.调差类型 == "检修"
:
#{
->拆分子项.集中配送 == "1"
:
拆分子项.数量 * (1 + 拆分子项.损耗 / 100) * 拆分子项.市场价含税;
};} * @工程信息.甲供配件配送费费率 / 100 )
}
BEGIN:乙供配件配送费_合价_拆分
${
sum(_过滤乙供配件拆分(),"拆分子项",?#{
->拆分子项.调差类型 == "建筑修缮" || 拆分子项.调差类型 == "设备检修" || 拆分子项.调差类型 == "检修"
:
#{
->拆分子项.集中配送 == "1"
:
拆分子项.数量 * (1 + 拆分子项.损耗 / 100) * 拆分子项.市场价含税;
};} * @工程信息.甲供配件配送费费率 / 100 )
}
//----------------------------清单模式:综合单价分析表中调用-------------------------------------------------
BEGIN:建筑设备购置费
${
?@建筑.甲供设备费含税 + @建筑.甲供设备运杂费 + @建筑.甲供设备配送费
}
//------------------表二调用-------------------------------------------
BEGIN:设备购置费_报表_建筑
${
?甲供设备费含税() + 甲供设备运杂费() + 甲供设备配送费() + 乙供设备费不含税() + 乙供设备运杂费() + 乙供设备配送费()
}
BEGIN:设备购置费_报表_安装
${
?甲供设备费含税() + 甲供设备运杂费() + 甲供设备配送费() + 乙供设备费不含税() + 乙供设备运杂费() + 乙供设备配送费() + 乙供设备税金()
}
BEGIN:配件购置费_报表
${
?甲供配件费含税() + 甲供配件运杂费() + 甲供配件配送费() + 乙供配件费不含税() + 乙供配件运杂费() + 乙供配件配送费() + 乙供配件税金()
}
BEGIN:设备费_报表
${
?甲供设备费含税() + 乙供设备费不含税()
}
//------------------配件费_报表未调取-------------------------------------------
BEGIN:配件费_报表
${
?甲供配件费含税() + 乙供配件费不含税()
}
BEGIN:主材费_报表
${
?甲供主要材料费含税() + 乙供主要材料费不含税()
}
//------------------材料汇总表中调取-------------------------------------------
BEGIN:材料费_报表
${
?#{
->@工程信息.工程类型=="变电" || @工程信息.工程类型=="发电"
:
甲供材料费() + _乙供材料费_非宏变量();
->@工程信息.工程类型=="线路"
:
材料费();
->@工程信息.工程类型=="配网"
:
_乙供材料费_非宏变量();
}
}
BEGIN:机械费_报表
${
?#{
->@工程信息.工程类型=="变电" || @工程信息.工程类型=="发电"
:
_机械费_不含特殊费();
->@工程信息.工程类型=="线路"
:
机械费();
->@工程信息.工程类型=="配网"
:
_机械费_不含特殊费()+地形机械费();
}
}
BEGIN:材料费_价差报表
${
?#{
->@工程信息.工程类型=="变电" || @工程信息.工程类型=="发电"
:
甲供材料费()+乙供材料费();
->@工程信息.工程类型=="线路" || @工程信息.工程类型=="配网"
:
材料费();
}
}
BEGIN:材料费_价差汇总报表
${
?材料价差();
}
BEGIN:机械费_价差汇总报表
${
?机械价差();
}
BEGIN:机械费_价差报表
${
?机械费()
}
BEGIN:人工费_价差报表
${
?人工费()
}
BEGIN:总重_价差报表
${
sum(source,"主材",?主材.单重 * 主材.数量 * ( 1 + 主材.损耗 / 100))
}
BEGIN:其他材料费代码_报表
${
"C10006,C99010101"
}
BEGIN:其他机械费代码_报表
${
"J09001,J99-01-098"
}
BEGIN:普通材料费_报表
${
sum(source,"定额",?sum(_过滤材料(),"材料",?#{
->in(材料.编码,"C10006,C99010101") == 0 :
材料.数量 * 材料.预算价不含税;
}
)
)
}
BEGIN:普通机械费_报表
${
sum(source,"定额",?sum(_过滤机械(),"机械",?#{
->机械.编码 != "J09001" && 机械.编码 != "J99-01-098" :
机械.数量 * 机械.预算价不含税;
}
)
)
}
//------------------主材/配件汇总表中调取(含税市场价)-------------------------------------------
BEGIN:拆分父级市场价_报表_含税
${
sum(source, "未计价", ?#{
->未计价.拆分 == 1
:
round(?_拆分子级人工市场价合价_报表_含税() + _拆分子级机械市场价合价_报表_含税() + _拆分子级材料市场价合价_报表_含税(), 4);
})
}
BEGIN:_拆分子级人工市场价合价_报表_含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type == "人工"
:
round(?拆分子项.含量,4) * 拆分子项.预算价含税 * #{
->@工程信息.工程类型 == "配网" || @工程信息.项目划分 == "输电线路工程"
:
1+拆分子项.@_@人工调差系数 / 100;
->@工程信息.工程性质 == "技改" && @工程信息.工程类型 != "配网"
:
1+#{
->拆分子项.调差类型 == "建筑"
:
@工程信息.建筑人工调差系数 / 100;
->拆分子项.调差类型 == "安装"
:
@工程信息.安装人工调差系数 / 100;
->拆分子项.调差类型 == "建筑拆除"
:
@工程信息.建筑拆除人工调差系数 / 100;
->拆分子项.调差类型 == "安装拆除"
:
@工程信息.安装拆除人工调差系数 / 100;
};
->@工程信息.工程性质 == "检修" && @工程信息.工程类型 != "配网"
:
1+#{
->拆分子项.调差类型 == "安装拆除"
:
@工程信息.安装拆除人工调差系数 / 100;
->拆分子项.调差类型 == "建筑拆除"
:
@工程信息.建筑拆除人工调差系数 / 100;
->拆分子项.调差类型 == "建筑修缮"
:
@工程信息.建筑修缮人工调差系数 / 100;
->拆分子项.调差类型 == "设备检修"
:
@工程信息.设备检修人工调差系数 / 100;
};
};
}), 2)
}
BEGIN:_拆分子级机械市场价合价_报表_含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type == "机械"
:
round(?拆分子项.含量,4) * 拆分子项.预算价含税 * #{
->@工程信息.工程类型 == "配网" || @工程信息.项目划分 == "输电线路工程"
:
1+拆分子项.@_@机械调差系数 / 100;
->@工程信息.工程性质 == "技改" && @工程信息.工程类型 != "配网"
:
1+#{
->拆分子项.调差类型 == "建筑"
:
@工程信息.建筑机械调差系数 / 100;
->拆分子项.调差类型 == "安装"
:
@工程信息.安装机械调差系数 / 100;
->拆分子项.调差类型 == "建筑拆除"
:
@工程信息.建筑拆除机械调差系数 / 100;
->拆分子项.调差类型 == "安装拆除"
:
@工程信息.安装拆除机械调差系数 / 100;
};
->@工程信息.工程性质 == "检修" && @工程信息.工程类型 != "配网"
:
1+#{
->拆分子项.调差类型 == "安装拆除"
:
@工程信息.安装拆除机械调差系数 / 100;
->拆分子项.调差类型 == "建筑拆除"
:
@工程信息.建筑拆除机械调差系数 / 100;
->拆分子项.调差类型 == "建筑修缮"
:
@工程信息.建筑修缮机械调差系数 / 100;
->拆分子项.调差类型 == "设备检修"
:
@工程信息.设备检修机械调差系数 / 100;
};
};
}), 2)
}
BEGIN:_拆分子级材料市场价合价_报表_含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type != "人工" && 拆分子项.type != "机械"
:
round(?拆分子项.含量,4) * 拆分子项.市场价含税;
}), 2)
}
//------------------主材/配件汇总表中调取(不含税市场价)-------------------------------------------
BEGIN:拆分父级市场价_报表_不含税
${
sum(source, "未计价", ?#{
->未计价.拆分 == 1
:
round(?_拆分子级人工市场价合价_报表_不含税() + _拆分子级机械市场价合价_报表_不含税() + _拆分子级材料市场价合价_报表_不含税(), 4);
})
}
BEGIN:_拆分子级人工市场价合价_报表_不含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type == "人工"
:
round(?拆分子项.含量,4) * 拆分子项.预算价不含税 * #{
->@工程信息.工程类型 == "配网" || @工程信息.项目划分 == "输电线路工程"
:
1+拆分子项.@_@人工调差系数 / 100;
->@工程信息.工程性质 == "技改" && @工程信息.工程类型 != "配网"
:
1+#{
->拆分子项.调差类型 == "建筑"
:
@工程信息.建筑人工调差系数 / 100;
->拆分子项.调差类型 == "安装"
:
@工程信息.安装人工调差系数 / 100;
->拆分子项.调差类型 == "建筑拆除"
:
@工程信息.建筑拆除人工调差系数 / 100;
->拆分子项.调差类型 == "安装拆除"
:
@工程信息.安装拆除人工调差系数 / 100;
};
->@工程信息.工程性质 == "检修" && @工程信息.工程类型 != "配网"
:
1+#{
->拆分子项.调差类型 == "安装拆除"
:
@工程信息.安装拆除人工调差系数 / 100;
->拆分子项.调差类型 == "建筑拆除"
:
@工程信息.建筑拆除人工调差系数 / 100;
->拆分子项.调差类型 == "建筑修缮"
:
@工程信息.建筑修缮人工调差系数 / 100;
->拆分子项.调差类型 == "设备检修"
:
@工程信息.设备检修人工调差系数 / 100;
};
};
}), 2)
}
BEGIN:_拆分子级机械市场价合价_报表_不含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type == "机械"
:
round(?拆分子项.含量,4) * 拆分子项.预算价不含税 * #{
->@工程信息.工程类型 == "配网" || @工程信息.项目划分 == "输电线路工程"
:
1+拆分子项.@_@机械调差系数 / 100;
->@工程信息.工程性质 == "技改" && @工程信息.工程类型 != "配网"
:
1+#{
->拆分子项.调差类型 == "建筑"
:
@工程信息.建筑机械调差系数 / 100;
->拆分子项.调差类型 == "安装"
:
@工程信息.安装机械调差系数 / 100;
->拆分子项.调差类型 == "建筑拆除"
:
@工程信息.建筑拆除机械调差系数 / 100;
->拆分子项.调差类型 == "安装拆除"
:
@工程信息.安装拆除机械调差系数 / 100;
};
->@工程信息.工程性质 == "检修" && @工程信息.工程类型 != "配网"
:
1+#{
->拆分子项.调差类型 == "安装拆除"
:
@工程信息.安装拆除机械调差系数 / 100;
->拆分子项.调差类型 == "建筑拆除"
:
@工程信息.建筑拆除机械调差系数 / 100;
->拆分子项.调差类型 == "建筑修缮"
:
@工程信息.建筑修缮机械调差系数 / 100;
->拆分子项.调差类型 == "设备检修"
:
@工程信息.设备检修机械调差系数 / 100;
};
};
}), 2)
}
BEGIN:_拆分子级材料市场价合价_报表_不含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type != "人工" && 拆分子项.type != "机械"
:
round(?拆分子项.含量,4) * 拆分子项.市场价不含税;
}), 2)
}
@@ -1,747 +0,0 @@
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// 材机分析汇总变量计算
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//------------------材机分析界面变量,开发自行维护-------------------------------------------
BEGIN:_材机人工价差_不含税
${
sum(source,"人材机",?人材机.市场价不含税 - 人材机.预算价不含税)
}
BEGIN:_材机人工价差合价_不含税
${
sum(source,"人材机",?(人材机.市场价不含税 - 人材机.预算价不含税) * 人材机.数量)
}
BEGIN:_材机人工价差合价_含税
${
sum(source,"人材机",?(人材机.市场价含税 - 人材机.预算价含税) * 人材机.数量)
}
BEGIN:_材机人工市场价合价_不含税
${
sum(source,"人材机",?人材机.市场价不含税 * 人材机.数量)
}
BEGIN:_材机人工市场价合价_含税
${
sum(source,"人材机",?人材机.市场价含税 * 人材机.数量)
}
BEGIN:_材机人工预算价合价_不含税
${
sum(source,"人材机",?人材机.预算价不含税 * 人材机.数量)
}
BEGIN:_材机人工预算价合价_含税
${
sum(source,"人材机",?人材机.预算价含税 * 人材机.数量)
}
BEGIN:_材机机械价差_不含税
${
sum(source,"人材机",?人材机.市场价不含税 - 人材机.预算价不含税)
}
BEGIN:_材机机械价差合价_不含税
${
sum(source,"人材机",?(人材机.市场价不含税 - 人材机.预算价不含税) * 人材机.数量)
}
BEGIN:_材机机械价差合价_含税
${
sum(source,"人材机",?(人材机.市场价含税 - 人材机.预算价含税) * 人材机.数量)
}
BEGIN:_材机机械市场价合价_不含税
${
sum(source,"人材机",?人材机.市场价不含税 * 人材机.数量)
}
BEGIN:_材机机械市场价合价_含税
${
sum(source,"人材机",?人材机.市场价含税 * 人材机.数量)
}
BEGIN:_材机机械预算价合价_不含税
${
sum(source,"人材机",?人材机.预算价不含税 * 人材机.数量)
}
BEGIN:_材机机械预算价合价_含税
${
sum(source,"人材机",?人材机.预算价含税 * 人材机.数量)
}
BEGIN:_材机材料价差_不含税
${
sum(source,"人材机",?人材机.市场价不含税 - 人材机.预算价不含税)
}
BEGIN:_材机材料价差合价_不含税
${
sum(source,"人材机",?(人材机.市场价不含税 - 人材机.预算价不含税) * 人材机.数量)
}
BEGIN:_材机材料价差合价_含税
${
sum(source,"人材机",?(人材机.市场价含税 - 人材机.预算价含税) * 人材机.数量)
}
BEGIN:_材机材料市场价合价_不含税
${
sum(source,"人材机",?人材机.市场价不含税 * 人材机.数量)
}
BEGIN:_材机材料市场价合价_含税
${
sum(source,"人材机",?人材机.市场价含税 * 人材机.数量)
}
BEGIN:_材机材料预算价合价_不含税
${
sum(source,"人材机",?人材机.预算价不含税 * 人材机.数量)
}
BEGIN:_材机材料预算价合价_含税
${
sum(source,"人材机",?人材机.预算价含税 * 人材机.数量)
}
BEGIN:_材机主材价差_含税
${
sum(source,"人材机",?人材机.市场价含税 - 人材机.预算价含税)
}
BEGIN:_材机主材价差_不含税
${
sum(source,"人材机",?人材机.市场价不含税 - 人材机.预算价不含税)
}
BEGIN:_材机主材价差合价_含税
${
sum(source,"人材机",?(人材机.市场价含税 - 人材机.预算价含税) * 人材机.数量 * ( 1 + 人材机.损耗 / 100))
}
BEGIN:_材机主材市场价合价_价差
${
sum(source,"人材机",?(人材机.市场价含税 - 人材机.市场价不含税) * 人材机.数量 * ( 1 + 人材机.损耗 / 100))
}
BEGIN:_材机主材预算价合价_价差
${
sum(source,"人材机",?(人材机.预算价含税 - 人材机.预算价不含税) * 人材机.数量 * ( 1 + 人材机.损耗 / 100))
}
BEGIN:_材机主材价差合价_不含税
${
sum(source,"人材机",?(人材机.市场价不含税 - 人材机.预算价不含税) * 人材机.数量 * ( 1 + 人材机.损耗 / 100))
}
BEGIN:_材机主材市场价合价_含税
${
sum(source,"人材机",?人材机.市场价含税 * 人材机.数量 * ( 1 + 人材机.损耗 / 100))
}
BEGIN:_材机主材市场价合价_不含税
${
sum(source,"人材机",?人材机.市场价不含税 * 人材机.数量 * ( 1 + 人材机.损耗 / 100))
}
BEGIN:_材机主材预算价合价_含税
${
sum(source,"人材机",?人材机.预算价含税 * 人材机.数量 * ( 1 + 人材机.损耗 / 100))
}
BEGIN:_材机主材预算价合价_不含税
${
sum(source,"人材机",?人材机.预算价不含税 * 人材机.数量 * ( 1 + 人材机.损耗 / 100))
}
BEGIN:_材机设备运杂费_含税
${
sum(source,"人材机",?人材机.市场价含税 * 人材机.运杂费率 / 100)
}
BEGIN:_材机设备市场价合价_含税
${
sum(source,"人材机",?人材机.市场价含税 * 人材机.数量)
}
BEGIN:_材机设备市场价合价_不含税
${
sum(source,"人材机",?人材机.市场价不含税 * 人材机.数量)
}
BEGIN:_材机设备运杂费合价_含税
${
sum(source,"人材机",?人材机.市场价含税 * 人材机.运杂费率 / 100 * 人材机.数量)
}
BEGIN:_材机一笔性费用合价含税
${
sum(source,"人材机",?人材机.单价 * 人材机.数量)
}
BEGIN:_材机一笔性费用合价不含税
${
sum(source,"人材机",?人材机.单价不含税 * 人材机.数量)
}
BEGIN:_材机配件运杂费_含税
${
sum(source,"人材机",?人材机.市场价含税 * 人材机.运杂费率 / 100)
}
BEGIN:_材机配件预算价合价_含税
${
sum(source,"人材机",?人材机.预算价含税 * 人材机.数量 * ( 1 + 人材机.损耗 / 100))
}
BEGIN:_材机配件预算价合价_不含税
${
sum(source,"人材机",?人材机.预算价不含税 * 人材机.数量 * ( 1 + 人材机.损耗 / 100))
}
BEGIN:_材机配件市场价合价_含税
${
sum(source,"人材机",?人材机.市场价含税 * 人材机.数量 * ( 1 + 人材机.损耗 / 100))
}
BEGIN:_材机配件市场价合价_不含税
${
sum(source,"人材机",?人材机.市场价不含税 * 人材机.数量 * ( 1 + 人材机.损耗 / 100))
}
BEGIN:_材机配件价差_含税
${
sum(source,"人材机",?人材机.市场价含税 - 人材机.预算价含税)
}
BEGIN:_材机配件价差_不含税
${
sum(source,"人材机",?人材机.市场价不含税 - 人材机.预算价不含税)
}
BEGIN:_材机配件价差合价_含税
${
sum(source,"人材机",?(人材机.市场价含税 - 人材机.预算价含税) * 人材机.数量 * ( 1 + 人材机.损耗 / 100))
}
BEGIN:_材机配件价差合价_不含税
${
sum(source,"人材机",?(人材机.市场价不含税 - 人材机.预算价不含税) * 人材机.数量 * ( 1 + 人材机.损耗 / 100))
}
BEGIN:_材机配件运杂费合价_含税
${
sum(source,"人材机",?人材机.市场价含税 * ( 1 + 人材机.损耗 / 100) * 人材机.运杂费率 / 100 * 人材机.数量)
}
//***********数量计算***********************************************
BEGIN:_材机主材总重
${
sum(source,"主材",?主材.单重 * 主材.数量 * ( 1 + 主材.损耗 / 100))
}
//-------------------------------------合并材机数量---------------------------------------------
BEGIN:_材机合并机械数量
${
?#{
->@工程信息.工程类型=="变电":sum(source, "机械", ?parent.数量 * 机械.数量 * parent.机械系数 * parent.定额系数);
->(@工程信息.工程类型=="线路" || @工程信息.工程类型=="配网") && @工程信息.工程性质=="技改":sum(source, "机械", ?parent.数量 * 机械.数量 * parent.机械系数 * parent.定额系数 *
(1 + iif((@工程信息.工程类型=="线路" || (@工程信息.工程类型=="配网" && parent.专业属性 != "配电站" && parent.专业属性 != "陆上电缆" && parent.专业属性 != "海底电缆")) && parent.专业类型 != "余物清理", #{
->in(parent.编码,"JYX1-24^108") || (parent.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
机械.@_@地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->parent.调差类型=="建筑拆除" || parent.调差类型=="安装拆除" || parent.调差类型=="拆除措施二" || parent.调差类型=="建筑拆除措施二" || parent.调差类型=="安装拆除措施二"
:
@拆除地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->:
@地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
};
->in(parent.编码,"JYX3-1~212,JGX1-1~17,XYX1-1~21,XYX3-1~6,CYX1-1~4") || (parent.地形费计算方式 == "基础工程")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
机械.@_@地形系数.基础工程;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.基础工程;
->:0;
};
->in(parent.编码,"JYX4-1~192,JGX2-1~59,XYX2-1~79,CYX2-1~40") || (parent.地形费计算方式 == "杆塔工程")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
机械.@_@地形系数.杆塔工程;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.杆塔工程;
->:0;
};
->in(parent.编码,"JGX3-1~54") || (parent.地形费计算方式 == "概算:架线工程")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
机械.@_@地形系数.概算架线工程;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.概算架线工程;
->:0;
};
->in(parent.编码,"JYX5-1~60,XYX4-1~77,CYX3-1~27") || (parent.地形费计算方式 == "预算:架线工程一般放、紧线(不包含跨越架设、拦河线安装)")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
机械.@_@地形系数.预算架线工程一般放紧线不包含跨越架设拦河线安装;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.预算架线工程一般放紧线不包含跨越架设拦河线安装;
->:0;
};
->in(parent.编码,"JYX5-61~119,CYX3-28~42") || (parent.地形费计算方式 == "预算:架线工程张力放紧线(不包含跨越架设、拦河线安装)")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
机械.@_@地形系数.预算架线工程张力放紧线不包含跨越架设拦河线安装;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.预算架线工程张力放紧线不包含跨越架设拦河线安装;
->:0;
};
->in(parent.编码,"JYX5-245~253") || (parent.地形费计算方式 == "预算:架线工程光缆接续(不包括测量)")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
机械.@_@地形系数.预算架线工程光缆接续不包括测量;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.预算架线工程光缆接续不包括测量;
->:0;
};
->in(parent.编码,"JYX6-1~172,JGX4-1~67,XYX5-1~223,CYX4-1~131") || (parent.地形费计算方式 == "附件工程")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
机械.@_@地形系数.附件工程;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.附件工程;
->:0;
};
->in(parent.编码,"JGX6-1~4") || (parent.地形费计算方式 == "概算:辅助工程")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
机械.@_@地形系数.概算辅助工程;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.概算辅助工程;
->:0;
};
->in(parent.编码,"JYX8-1~25") || (parent.地形费计算方式 == "预算:辅助工程(基础辅助)施工道路,固沙,护坡、挡土墙及排洪沟砌筑,喷射混凝土护坡")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
机械.@_@地形系数.预算辅助工程基础辅助施工道路固沙护坡挡土墙及排洪沟砌筑喷射混凝土护坡;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.预算辅助工程基础辅助施工道路固沙护坡挡土墙及排洪沟砌筑喷射混凝土护坡;
->:0;
};
->in(parent.编码,"JYX8-26~45,JYX8-119~130,XYX3-7~25") || (parent.地形费计算方式 == "预算:辅助工程(杆塔辅助)杆塔附属设施,防坠落装置安装,线路避雷器安装,监测装置安装调测,耐张线夹X射线探伤")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
机械.@_@地形系数.预算辅助工程杆塔辅助杆塔附属设施防坠落装置安装线路避雷器安装监测装置安装调测耐张线夹X射线探伤;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.预算辅助工程杆塔辅助杆塔附属设施防坠落装置安装线路避雷器安装监测装置安装调测耐张线夹X射线探伤;
->:0;
};
->in(parent.编码,"JYX8-46~89") || (parent.地形费计算方式 == "预算:辅助工程(索道设施)运输(地形选择按架设索道站所处地带实际地形为准)")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
机械.@_@地形系数.预算辅助工程索道设施运输地形选择按架设索道站所处地带实际地形为准;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.预算辅助工程索道设施运输地形选择按架设索道站所处地带实际地形为准;
->:0;
};
->in(parent.编码,"JYX8-90~118") || (parent.地形费计算方式 == "预算:辅助工程(索道设施)安装(地形选择按架设索道站所处地带实际地形为准)")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
机械.@_@地形系数.预算辅助工程索道设施安装地形选择按架设索道站所处地带实际地形为准;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.预算辅助工程索道设施安装地形选择按架设索道站所处地带实际地形为准;
->:0;
};
} / 100 , 0)
)
);
->(@工程信息.工程类型=="线路" || @工程信息.工程类型=="配网") && @工程信息.工程性质=="检修":sum(source, "机械", ?parent.数量 * 机械.数量 * parent.机械系数 * parent.定额系数*
(1 + #{
->(@工程信息.工程类型=="线路" || (@工程信息.工程类型=="配网" && parent.专业属性 != "配电站" && parent.专业属性 != "陆上电缆" && parent.专业属性 != "海底电缆")) && parent.专业类型 != "余物清理"
:
#{
->in(parent.编码,"JYX1-24^108") || (parent.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
#{
->parent.调差类型=="建筑拆除" || parent.调差类型=="安装拆除" || parent.调差类型=="安装拆除措施二"
:@拆除地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->(@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程") && (parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="安装拆除措施二")
:
机械.@_@地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->:
@地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
};
->in(parent.编码,"JYX3-1~212,JYX4-1~192,JYX5-1~119,JYX5-245~253,JYX6-1~172,JGX1-1~17,JGX2-1~59,JGX3-1~54,JGX4-1~67,XYX1-1~21,XYX2-1~79,XYX3-1~25,XYX4-1~77,XYX5-1~223,CYX1-1~4,CYX2-1~40,CYX3-1~42,CYX4-1~131") || (parent.地形费计算方式 == "基础、杆塔、防雷设施及接地装置、导线及避雷线、附件检修")
:
#{
->parent.调差类型=="建筑拆除" || parent.调差类型=="安装拆除" || parent.调差类型=="安装拆除措施二"
:0;
->(@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程") && (parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="安装拆除措施二")
:
机械.@_@地形系数.基础杆塔防雷设施及接地装置导线及避雷线附件检修;
->:
@地形系数.基础杆塔防雷设施及接地装置导线及避雷线附件检修;
};
};
} / 100
)
);}
}
BEGIN:_材机合并人工数量
${
#{
->@工程信息.工程类型=="变电":sum(source, "人工", ?parent.数量 * 人工.数量 * parent.人工系数 * parent.定额系数);
->(@工程信息.工程类型=="线路" || @工程信息.工程类型=="配网") && @工程信息.工程性质=="技改":sum(source, "人工", ?parent.数量 * 人工.数量 * parent.人工系数 * parent.定额系数 *
(1 + iif((@工程信息.工程类型=="线路" || (@工程信息.工程类型=="配网" && parent.专业属性 != "配电站" && parent.专业属性 != "陆上电缆" && parent.专业属性 != "海底电缆")) && parent.专业类型 != "余物清理", #{
->in(parent.编码,"JYX1-1~16") || (parent.地形费计算方式 == "工地运输(人力运输)混凝土杆、混凝土预制品、钢管杆、线材的运输(不含机械费)")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
人工.@_@地形系数.工地运输人力运输混凝土杆混凝土预制品钢管杆线材的运输不含机械费;
->parent.调差类型=="建筑拆除" || parent.调差类型=="安装拆除" || parent.调差类型=="拆除" || parent.调差类型=="拆除措施二" || parent.调差类型=="建筑拆除措施二" || parent.调差类型=="安装拆除措施二"
:
@拆除地形系数.工地运输人力运输混凝土杆混凝土预制品钢管杆线材的运输不含机械费;
->:@地形系数.工地运输人力运输混凝土杆混凝土预制品钢管杆线材的运输不含机械费;
};
->in(parent.编码,"JYX1-17~22") || (parent.地形费计算方式 == "工地运输(人力运输)金具、绝缘子、零星钢材、塔材、其他建筑安装材料的运输(不含机械费)")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
人工.@_@地形系数.工地运输人力运输金具绝缘子零星钢材塔材其他建筑安装材料的运输不含机械费;
->parent.调差类型=="建筑拆除" || parent.调差类型=="安装拆除" || parent.调差类型=="拆除" || parent.调差类型=="拆除措施二" || parent.调差类型=="建筑拆除措施二" || parent.调差类型=="安装拆除措施二"
:
@拆除地形系数.工地运输人力运输金具绝缘子零星钢材塔材其他建筑安装材料的运输不含机械费;
->:@地形系数.工地运输人力运输金具绝缘子零星钢材塔材其他建筑安装材料的运输不含机械费;
};
->in(parent.编码,"JYX1-24^108") || (parent.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
人工.@_@地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->parent.调差类型=="建筑拆除" || parent.调差类型=="安装拆除" || parent.调差类型=="拆除" || parent.调差类型=="拆除措施二" || parent.调差类型=="建筑拆除措施二" || parent.调差类型=="安装拆除措施二"
:
@拆除地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->:@地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
};
->in(parent.编码,"JYX2-1~232") || (parent.地形费计算方式 == "土石方工程(不含机械费)")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
人工.@_@地形系数.土石方工程不含机械费;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.土石方工程不含机械费;
->:0;
};
->in(parent.编码,"JYX3-1~212,JGX1-1~17,XYX1-1~21,XYX3-1~6,CYX1-1~4") || (parent.地形费计算方式 == "基础工程")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
人工.@_@地形系数.基础工程;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.基础工程;
->:0;
};
->in(parent.编码,"JYX4-1~192,JGX2-1~59,XYX2-1~79,CYX2-1~40") || (parent.地形费计算方式 == "杆塔工程")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
人工.@_@地形系数.杆塔工程;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.杆塔工程;
->:0;
};
->in(parent.编码,"JGX3-1~54") || (parent.地形费计算方式 == "概算:架线工程")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
人工.@_@地形系数.概算架线工程;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.概算架线工程;
->:0;
};
->in(parent.编码,"JYX5-1~60,XYX4-1~77,CYX3-1~27") || (parent.地形费计算方式 == "预算:架线工程一般放、紧线(不包含跨越架设、拦河线安装)")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
人工.@_@地形系数.预算架线工程一般放紧线不包含跨越架设拦河线安装;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.预算架线工程一般放紧线不包含跨越架设拦河线安装;
->:0;
};
->in(parent.编码,"JYX5-61~119,CYX3-28~42") || (parent.地形费计算方式 == "预算:架线工程张力放紧线(不包含跨越架设、拦河线安装)")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
人工.@_@地形系数.预算架线工程张力放紧线不包含跨越架设拦河线安装;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.预算架线工程张力放紧线不包含跨越架设拦河线安装;
->:0;
};
->in(parent.编码,"JYX5-245~253") || (parent.地形费计算方式 == "预算:架线工程光缆接续(不包括测量)")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
人工.@_@地形系数.预算架线工程光缆接续不包括测量;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.预算架线工程光缆接续不包括测量;
->:0;
};
->in(parent.编码,"JYX6-1~172,JGX4-1~67,XYX5-1~223,CYX4-1~131") || (parent.地形费计算方式 == "附件工程")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
人工.@_@地形系数.附件工程;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.附件工程;
->:0;
};
->in(parent.编码,"JGX6-1~4") || (parent.地形费计算方式 == "概算:辅助工程")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
人工.@_@地形系数.概算辅助工程;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.概算辅助工程;
->:0;
};
->in(parent.编码,"JYX8-1~25") || (parent.地形费计算方式 == "预算:辅助工程(基础辅助)施工道路,固沙,护坡、挡土墙及排洪沟砌筑,喷射混凝土护坡")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
人工.@_@地形系数.预算辅助工程基础辅助施工道路固沙护坡挡土墙及排洪沟砌筑喷射混凝土护坡;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.预算辅助工程基础辅助施工道路固沙护坡挡土墙及排洪沟砌筑喷射混凝土护坡;
->:0;
};
->in(parent.编码,"JYX8-26~45,JYX8-119~130,XYX3-7~25") || (parent.地形费计算方式 == "预算:辅助工程(杆塔辅助)杆塔附属设施,防坠落装置安装,线路避雷器安装,监测装置安装调测,耐张线夹X射线探伤")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
人工.@_@地形系数.预算辅助工程杆塔辅助杆塔附属设施防坠落装置安装线路避雷器安装监测装置安装调测耐张线夹X射线探伤;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.预算辅助工程杆塔辅助杆塔附属设施防坠落装置安装线路避雷器安装监测装置安装调测耐张线夹X射线探伤;
->:0;
};
->in(parent.编码,"JYX8-46~89") || (parent.地形费计算方式 == "预算:辅助工程(索道设施)运输(地形选择按架设索道站所处地带实际地形为准)")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
人工.@_@地形系数.预算辅助工程索道设施运输地形选择按架设索道站所处地带实际地形为准;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.预算辅助工程索道设施运输地形选择按架设索道站所处地带实际地形为准;
->:0;
};
->in(parent.编码,"JYX8-90~118") || (parent.地形费计算方式 == "预算:辅助工程(索道设施)安装(地形选择按架设索道站所处地带实际地形为准)")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
人工.@_@地形系数.预算辅助工程索道设施安装地形选择按架设索道站所处地带实际地形为准;
->parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="拆除" && parent.调差类型!="拆除措施二" && parent.调差类型!="建筑拆除措施二" && parent.调差类型!="安装拆除措施二"
:
@地形系数.预算辅助工程索道设施安装地形选择按架设索道站所处地带实际地形为准;
->:0;
};
} / 100, 0)
)
);
->(@工程信息.工程类型=="线路" || @工程信息.工程类型=="配网") && @工程信息.工程性质=="检修":sum(source, "人工", ?parent.数量 * 人工.数量 * parent.人工系数 * parent.定额系数*
(1 + #{
->(@工程信息.工程类型=="线路" || (@工程信息.工程类型=="配网" && parent.专业属性 != "配电站" && parent.专业属性 != "陆上电缆" && parent.专业属性 != "海底电缆")) && parent.专业类型 != "余物清理"
:
#{
->in(parent.编码,"JYX1-1~16") || (parent.地形费计算方式 == "工地运输(人力运输)混凝土杆、混凝土预制品、钢管杆、线材的运输(不含机械费)")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
人工.@_@地形系数.工地运输人力运输混凝土杆混凝土预制品钢管杆线材的运输不含机械费;
->(@工程信息.工程类型!="配网" && @工程信息.项目划分 != "输电线路工程") &&(parent.调差类型=="建筑拆除" || parent.调差类型=="安装拆除" || parent.调差类型=="安装拆除措施二")
:
@拆除地形系数.工地运输人力运输混凝土杆混凝土预制品钢管杆线材的运输不含机械费;
->:@地形系数.工地运输人力运输混凝土杆混凝土预制品钢管杆线材的运输不含机械费;
};
->in(parent.编码,"JYX1-17~22") || (parent.地形费计算方式 == "工地运输(人力运输)金具、绝缘子、零星钢材、塔材、其他建筑安装材料的运输(不含机械费)")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
人工.@_@地形系数.工地运输人力运输金具绝缘子零星钢材塔材其他建筑安装材料的运输不含机械费;
->(@工程信息.工程类型!="配网" && @工程信息.项目划分 != "输电线路工程") &&(parent.调差类型=="建筑拆除" || parent.调差类型=="安装拆除" || parent.调差类型=="安装拆除措施二")
:
@拆除地形系数.工地运输人力运输金具绝缘子零星钢材塔材其他建筑安装材料的运输不含机械费;
->:@地形系数.工地运输人力运输金具绝缘子零星钢材塔材其他建筑安装材料的运输不含机械费;
};
->in(parent.编码,"JYX1-24^108") || (parent.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
#{
->@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程"
:
人工.@_@地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->(@工程信息.工程类型!="配网" && @工程信息.项目划分 != "输电线路工程") &&(parent.调差类型=="建筑拆除" || parent.调差类型=="安装拆除" || parent.调差类型=="安装拆除措施二")
:
@拆除地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->:@地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
};
->in(parent.编码,"JYX3-1~212,JYX4-1~192,JYX5-1~119,JYX5-245~253,JYX6-1~172,JGX1-1~17,JGX2-1~59,JGX3-1~54,JGX4-1~67,XYX1-1~21,XYX2-1~79,XYX3-1~25,XYX4-1~77,XYX5-1~223,CYX1-1~4,CYX2-1~40,CYX3-1~42,CYX4-1~131") || (parent.地形费计算方式 == "基础、杆塔、防雷设施及接地装置、导线及避雷线、附件检修")
:
#{
->parent.调差类型=="建筑拆除" || parent.调差类型=="安装拆除" || parent.调差类型=="安装拆除措施二"
:0;
->(@工程信息.工程类型=="配网" || @工程信息.项目划分 == "输电线路工程") && (parent.调差类型!="建筑拆除" && parent.调差类型!="安装拆除" && parent.调差类型!="安装拆除措施二")
:
人工.@_@地形系数.基础杆塔防雷设施及接地装置导线及避雷线附件检修;
->:@地形系数.基础杆塔防雷设施及接地装置导线及避雷线附件检修;
};
};
} / 100
)
);
}}
BEGIN:_材机合并主材数量
${
#{
->@工程信息.工程性质=="技改"
:
sum(source, "主材",?主材.数量);
->@工程信息.工程性质=="检修"
:
sum(source, "配件",
?#{->配件.配件类型 == "主材"
: 配件.数量;
->:0;});
}
}
BEGIN:_材机合并配件数量
${
sum(source, "配件",?配件.数量)
}
BEGIN:_材机合并设备数量
${
#{
->@工程信息.工程性质=="技改"
:
sum(source, "设备",?设备.数量);
->@工程信息.工程性质=="检修"
:
sum(source, "配件",
?#{->配件.配件类型 == "配件"
: 配件.数量;
->:0;});
}
}
BEGIN:_材机合并材料数量
${
sum(source, "材料",?#{
//普通材料和配合比材料
->parent.type == "定额"
:
parent.数量 * 材料.数量 * parent.材料系数 * parent.定额系数;
//拆分材料
->parent.type == "材料"
:
parent.数量 * parent.parent.数量 * 材料.数量 * parent.parent.材料系数 * parent.parent.定额系数;
}
)
}
BEGIN:_材机合并定额数量
${
sum(source, "定额",?定额.数量)
}
BEGIN:_材机合并一笔性费用数量
${
sum(source, "一笔性费用",?一笔性费用.数量)
}
@@ -1,302 +0,0 @@
//------------------地形增加费-------------------------------------------
BEGIN:_地形人工系数
${
?#{
->(工程量.调差类型 == "建筑拆除" || 工程量.调差类型 == "安装拆除") && 工程量.专业类型 != "余物清理":
#{
->(in(工程量.编码,"JYX1-1~16")) || (工程量.地形费计算方式 == "工地运输(人力运输)混凝土杆、混凝土预制品、钢管杆、线材的运输(不含机械费)")
:
@拆除地形系数.工地运输人力运输混凝土杆混凝土预制品钢管杆线材的运输不含机械费;
->(in(工程量.编码,"JYX1-17~22")) || (工程量.地形费计算方式 == "工地运输(人力运输)金具、绝缘子、零星钢材、塔材、其他建筑安装材料的运输(不含机械费)")
:
@拆除地形系数.工地运输人力运输金具绝缘子零星钢材塔材其他建筑安装材料的运输不含机械费;
->(in(工程量.编码,"JYX1-24^108")) || (工程量.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
@拆除地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
};
->:
#{
->@工程信息.工程性质 == "技改" && 工程量.专业类型 != "拆除":
#{
->(in(工程量.编码,"JYX1-1~16")) || (工程量.地形费计算方式 == "工地运输(人力运输)混凝土杆、混凝土预制品、钢管杆、线材的运输(不含机械费)")
:
@地形系数.工地运输人力运输混凝土杆混凝土预制品钢管杆线材的运输不含机械费;
->(in(工程量.编码,"JYX1-17~22")) || (工程量.地形费计算方式 == "工地运输(人力运输)金具、绝缘子、零星钢材、塔材、其他建筑安装材料的运输(不含机械费)")
:
@地形系数.工地运输人力运输金具绝缘子零星钢材塔材其他建筑安装材料的运输不含机械费;
->(in(工程量.编码,"JYX1-24^108")) || (工程量.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
@地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->(in(工程量.编码,"JYX2-1~232")) || (工程量.地形费计算方式 == "土石方工程(不含机械费)")
:
@地形系数.土石方工程不含机械费;
->(in(工程量.编码,"JYX3-1~212,JGX1-1~17,XYX1-1~21,XYX3-1~6,CYX1-1~4")) || (工程量.地形费计算方式 == "基础工程")
:
@地形系数.基础工程;
->(in(工程量.编码,"JYX4-1~192,JGX2-1~59,XYX2-1~79,CYX2-1~40")) || (工程量.地形费计算方式 == "杆塔工程")
:
@地形系数.杆塔工程;
->(in(工程量.编码,"JGX3-1~54")) || (工程量.地形费计算方式 == "概算:架线工程")
:
@地形系数.概算架线工程;
->(in(工程量.编码,"JYX5-1~60,XYX4-1~77,CYX3-1~27")) || (工程量.地形费计算方式 == "预算:架线工程一般放、紧线(不包含跨越架设、拦河线安装)")
:
@地形系数.预算架线工程一般放紧线不包含跨越架设拦河线安装;
->(in(工程量.编码,"JYX5-61~119,CYX3-28~42")) || (工程量.地形费计算方式 == "预算:架线工程张力放紧线(不包含跨越架设、拦河线安装)")
:
@地形系数.预算架线工程张力放紧线不包含跨越架设拦河线安装;
->(in(工程量.编码,"JYX5-245~253")) || (工程量.地形费计算方式 == "预算:架线工程光缆接续(不包括测量)")
:
@地形系数.预算架线工程光缆接续不包括测量;
->(in(工程量.编码,"JYX6-1~172,JGX4-1~67,XYX5-1~223,CYX4-1~131")) || (工程量.地形费计算方式 == "附件工程")
:
@地形系数.附件工程;
->(in(工程量.编码,"JGX6-1~4")) || (工程量.地形费计算方式 == "概算:辅助工程")
:
@地形系数.概算辅助工程;
->(in(工程量.编码,"JYX8-1~25")) || (工程量.地形费计算方式 == "预算:辅助工程(基础辅助)施工道路,固沙,护坡、挡土墙及排洪沟砌筑,喷射混凝土护坡")
:
@地形系数.预算辅助工程基础辅助施工道路固沙护坡挡土墙及排洪沟砌筑喷射混凝土护坡;
->(in(工程量.编码,"JYX8-26~45,JYX8-119~130,XYX3-7~25")) || (工程量.地形费计算方式 == "预算:辅助工程(杆塔辅助)杆塔附属设施,防坠落装置安装,线路避雷器安装,监测装置安装调测,耐张线夹X射线探伤")
:
@地形系数.预算辅助工程杆塔辅助杆塔附属设施防坠落装置安装线路避雷器安装监测装置安装调测耐张线夹X射线探伤;
->(in(工程量.编码,"JYX8-46~89")) || (工程量.地形费计算方式 == "预算:辅助工程(索道设施)运输(地形选择按架设索道站所处地带实际地形为准)")
:
@地形系数.预算辅助工程索道设施运输地形选择按架设索道站所处地带实际地形为准;
->(in(工程量.编码,"JYX8-90~118")) || (工程量.地形费计算方式 == "预算:辅助工程(索道设施)安装(地形选择按架设索道站所处地带实际地形为准)")
:
@地形系数.预算辅助工程索道设施安装地形选择按架设索道站所处地带实际地形为准;
};
->@工程信息.工程性质 == "检修" && (工程量.调差类型 == "建筑修缮" || 工程量.调差类型 == "设备检修" || 工程量.专业类型 == "余物清理"):
#{
->(in(工程量.编码,"JYX1-1~16")) || (工程量.地形费计算方式 == "工地运输(人力运输)混凝土杆、混凝土预制品、钢管杆、线材的运输(不含机械费)")
:
@地形系数.工地运输人力运输混凝土杆混凝土预制品钢管杆线材的运输不含机械费;
->(in(工程量.编码,"JYX1-17~22")) || (工程量.地形费计算方式 == "工地运输(人力运输)金具、绝缘子、零星钢材、塔材、其他建筑安装材料的运输(不含机械费)")
:
@地形系数.工地运输人力运输金具绝缘子零星钢材塔材其他建筑安装材料的运输不含机械费;
->(in(工程量.编码,"JYX1-24^108")) || (工程量.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
@地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->(in(工程量.编码,"JYX3-1~212,JYX4-1~192,JYX5-1~119,JYX5-245~253,JYX6-1~172,JGX1-1~17,JGX2-1~59,JGX3-1~54,JGX4-1~67,XYX1-1~21,XYX2-1~79,XYX3-1~25,XYX4-1~77,XYX5-1~223,CYX1-1~4,CYX2-1~40,CYX3-1~42,CYX4-1~131")) || (工程量.地形费计算方式 == "基础、杆塔、防雷设施及接地装置、导线及避雷线、附件检修")
:
@地形系数.基础杆塔防雷设施及接地装置导线及避雷线附件检修;
};
};
} / 100
}
BEGIN:_地形机械系数
${
?#{
->工程量.调差类型 == "建筑拆除" || 工程量.调差类型 == "安装拆除" && 工程量.专业类型 != "余物清理" :
#{
->(in(工程量.编码,"JYX1-24^108")) || (工程量.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
@拆除地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
};
->:
#{
->@工程信息.工程性质 == "技改" && 工程量.专业类型 != "拆除":
#{
->(in(工程量.编码,"JYX1-24^108")) || (工程量.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
@地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->(in(工程量.编码,"JYX3-1~212,JGX1-1~17,XYX1-1~21,XYX3-1~6,CYX1-1~4")) || (工程量.地形费计算方式 == "基础工程")
:
@地形系数.基础工程;
->(in(工程量.编码,"JYX4-1~192,JGX2-1~59,XYX2-1~79,CYX2-1~40")) || (工程量.地形费计算方式 == "杆塔工程")
:
@地形系数.杆塔工程;
->(in(工程量.编码,"JGX3-1~54")) || (工程量.地形费计算方式 == "概算:架线工程")
:
@地形系数.概算架线工程;
->(in(工程量.编码,"JYX5-1~60,XYX4-1~77,CYX3-1~27")) || (工程量.地形费计算方式 == "预算:架线工程一般放、紧线(不包含跨越架设、拦河线安装)")
:
@地形系数.预算架线工程一般放紧线不包含跨越架设拦河线安装;
->(in(工程量.编码,"JYX5-61~119,CYX3-28~42")) || (工程量.地形费计算方式 == "预算:架线工程张力放紧线(不包含跨越架设、拦河线安装)")
:
@地形系数.预算架线工程张力放紧线不包含跨越架设拦河线安装;
->(in(工程量.编码,"JYX5-245~253")) || (工程量.地形费计算方式 == "预算:架线工程光缆接续(不包括测量)")
:
@地形系数.预算架线工程光缆接续不包括测量;
->(in(工程量.编码,"JYX6-1~172,JGX4-1~67,XYX5-1~223,CYX4-1~131")) || (工程量.地形费计算方式 == "附件工程")
:
@地形系数.附件工程;
->(in(工程量.编码,"JGX6-1~4")) || (工程量.地形费计算方式 == "概算:辅助工程")
:
@地形系数.概算辅助工程;
->(in(工程量.编码,"JYX8-1~25")) || (工程量.地形费计算方式 == "预算:辅助工程(基础辅助)施工道路,固沙,护坡、挡土墙及排洪沟砌筑,喷射混凝土护坡")
:
@地形系数.预算辅助工程基础辅助施工道路固沙护坡挡土墙及排洪沟砌筑喷射混凝土护坡;
->(in(工程量.编码,"JYX8-26~45,JYX8-119~130,XYX3-7~25")) || (工程量.地形费计算方式 == "预算:辅助工程(杆塔辅助)杆塔附属设施,防坠落装置安装,线路避雷器安装,监测装置安装调测,耐张线夹X射线探伤")
:
@地形系数.预算辅助工程杆塔辅助杆塔附属设施防坠落装置安装线路避雷器安装监测装置安装调测耐张线夹X射线探伤;
->(in(工程量.编码,"JYX8-46~89")) || (工程量.地形费计算方式 == "预算:辅助工程(索道设施)运输(地形选择按架设索道站所处地带实际地形为准)")
:
@地形系数.预算辅助工程索道设施运输地形选择按架设索道站所处地带实际地形为准;
->(in(工程量.编码,"JYX8-90~118")) || (工程量.地形费计算方式 == "预算:辅助工程(索道设施)安装(地形选择按架设索道站所处地带实际地形为准)")
:
@地形系数.预算辅助工程索道设施安装地形选择按架设索道站所处地带实际地形为准;
};
->@工程信息.工程性质 == "检修" && (工程量.调差类型 == "建筑修缮" || 工程量.调差类型 == "设备检修" || 工程量.专业类型 == "余物清理") :
#{
->(in(工程量.编码,"JYX1-24^108")) || (工程量.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
@地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->(in(工程量.编码,"JYX3-1~212,JYX4-1~192,JYX5-1~119,JYX5-245~253,JYX6-1~172,JGX1-1~17,JGX2-1~59,JGX3-1~54,JGX4-1~67,XYX1-1~21,XYX2-1~79,XYX3-1~25,XYX4-1~77,XYX5-1~223,CYX1-1~4,CYX2-1~40,CYX3-1~42,CYX4-1~131")) || (工程量.地形费计算方式 == "基础、杆塔、防雷设施及接地装置、导线及避雷线、附件检修")
:
@地形系数.基础杆塔防雷设施及接地装置导线及避雷线附件检修;
};
};
} / 100
}
BEGIN:地形人工费
${
sum(_过滤定额(),"工程量",?工程量.数量 * 工程量.人工费 * 工程量.人工系数 * 工程量.定额系数 * _地形人工系数())
}
BEGIN:地形人工价差
${
sum(_过滤定额(),"工程量",?iif(工程量.专业类型 != "余物清理",工程量.数量 * 工程量.人工系数 * 工程量.定额系数 * _地形人工系数() * #{
->@工程信息.项目类型 == "应急工程":sum(_过滤人工(),"人材机",?(人材机.市场价不含税 - 人材机.预算价不含税) * 人材机.数量);
->:工程量.人工费 * #{
->工程量.调差类型 == "建筑":@工程信息.建筑人工调差系数 /100;
->工程量.调差类型 == "安装":@工程信息.安装人工调差系数 /100;
->工程量.调差类型 == "建筑修缮":@工程信息.建筑修缮人工调差系数 /100;
->工程量.调差类型 == "设备检修":@工程信息.设备检修人工调差系数 /100;
->工程量.调差类型 == "建筑拆除":@工程信息.建筑拆除人工调差系数 /100;
->工程量.调差类型 == "安装拆除":@工程信息.安装拆除人工调差系数 /100;
};
},0))
}
BEGIN:地形机械费
${
sum(_过滤定额(),"工程量",?工程量.数量 * 工程量.机械费 * 工程量.机械系数 * 工程量.定额系数 * _地形机械系数())
}
BEGIN:地形机械价差
${
sum(_过滤定额(),"工程量",?iif(工程量.专业类型 != "余物清理",工程量.数量 * 工程量.机械系数 * 工程量.定额系数 * _地形机械系数() * #{
->@工程信息.项目类型 == "应急工程":sum(_过滤机械(),"人材机",?(人材机.市场价不含税 - 人材机.预算价不含税) * 人材机.数量);
->:工程量.机械费 * #{
->(工程量.调差类型 == "建筑" && @工程信息.建筑材机按系数调差 == "否")||(工程量.调差类型 == "建筑修缮" && @工程信息.建筑修缮材机按系数调差 == "否")||(工程量.调差类型 == "建筑拆除" && @工程信息.建筑拆除材机按系数调差 == "否"):0;
->工程量.调差类型 == "建筑" && @工程信息.建筑材机按系数调差 == "是":@工程信息.建筑机械调差系数 /100;
->工程量.调差类型 == "建筑修缮" && @工程信息.建筑修缮材机按系数调差 == "是":@工程信息.建筑修缮机械调差系数 /100;
->工程量.调差类型 == "建筑拆除" && @工程信息.建筑拆除材机按系数调差 == "是":@工程信息.建筑拆除机械调差系数 /100;
->工程量.调差类型 == "安装" && @工程信息.项目划分 == "电缆线路工程" && 工程量.专业属性 == "陆上电缆":@工程信息.陆上电缆安装机械调差系数 /100;
->工程量.调差类型 == "安装" && @工程信息.项目划分 == "电缆线路工程" && 工程量.专业属性 == "海底电缆":@工程信息.海底电缆安装机械调差系数 /100;
->工程量.调差类型 == "安装" && @工程信息.项目划分 != "电缆线路工程":@工程信息.安装机械调差系数 /100;
->工程量.调差类型 == "设备检修" && @工程信息.项目划分 == "电缆线路工程" && 工程量.专业属性 == "陆上电缆":@工程信息.陆上电缆设备检修机械调差系数 /100;
->工程量.调差类型 == "设备检修" && @工程信息.项目划分 == "电缆线路工程" && 工程量.专业属性 == "海底电缆":@工程信息.海底电缆设备检修机械调差系数 /100;
->工程量.调差类型 == "设备检修" && @工程信息.项目划分 != "电缆线路工程":@工程信息.设备检修机械调差系数 /100;
->工程量.调差类型 == "安装拆除" && @工程信息.项目划分 == "电缆线路工程" && 工程量.专业属性 == "陆上电缆":@工程信息.陆上电缆安装拆除机械调差系数 /100;
->工程量.调差类型 == "安装拆除" && @工程信息.项目划分 == "电缆线路工程" && 工程量.专业属性 == "海底电缆":@工程信息.海底电缆安装拆除机械调差系数 /100;
->工程量.调差类型 == "安装拆除" && @工程信息.项目划分 != "电缆线路工程":@工程信息.安装拆除机械调差系数 /100;
};
},0))
}
///////////////////////////////////////////////////////////////
BEGIN:人工费
${
?_人工费_不含特殊费()+地形人工费()
}
BEGIN:乙供材料费不含税
${
?_乙供材料费_非宏变量()
}
BEGIN:机械费
${
?_机械费_不含特殊费()+地形机械费()
}
BEGIN:人工价差
${
?_人工价差_不含特殊费()+地形人工价差()
}
BEGIN:乙供材料价差不含税
${
?_乙供材料价差_不含特殊费()
}
BEGIN:机械价差
${
?_机械价差_不含特殊费()+地形机械价差()
}
BEGIN:材料价差不含税
${
?甲供材料价差不含税()+乙供材料价差不含税()
}
BEGIN:材料价差含税
${
?甲供材料价差含税()+乙供材料价差含税()
}
//------------------以下变量为开发使用,开发自行维护-------------------------------------------
BEGIN:_过滤非拆除定额
${
filter(source,"工程量",?工程量.type =="定额" && #{
->@工程信息.工程性质 == "技改"
:
工程量.调差类型 != "建筑拆除" && 工程量.调差类型 != "安装拆除";
->@工程信息.工程性质 == "检修"
:
工程量.调差类型 == "建筑修缮" || 工程量.调差类型 == "设备检修" || 工程量.调差类型 == "建筑拆除" || 工程量.调差类型 == "安装拆除" ;
} == 1)
}
BEGIN:建筑拆分人工材料_价差不含税
${
sum(_过滤定额(),"工程量",?工程量.数量 * 工程量.材料系数 * 工程量.定额系数 * #{
->(工程量.调差类型 == "建筑") || (工程量.调差类型 == "建筑拆除" ) || (工程量.调差类型 == "建筑修缮" )
:
sum(_过滤材料(),"人材机",?#{
->人材机.拆分 == 0
:
0;
->人材机.拆分 == 1
:
sum(_过滤人工_定额重算(),"拆分子项",?
#{
->拆分子项.type == "人工"
:
拆分子项.预算价不含税 * 拆分子项.数量 * #{
->工程量.调差类型 == "建筑":拆分子项.@_@人工调差系数 /100;
->工程量.调差类型 == "建筑修缮":拆分子项.@_@人工调差系数 /100;
->工程量.调差类型 == "建筑拆除":拆分子项.@_@人工调差系数 /100;
};
} * 人材机.数量);
});})
}
BEGIN:建筑拆分人工材料_价差含税
${
sum(_过滤定额(),"工程量",?工程量.数量 * 工程量.材料系数 * 工程量.定额系数 * #{
->(工程量.调差类型 == "建筑") || (工程量.调差类型 == "建筑拆除" ) || (工程量.调差类型 == "建筑修缮" )
:
sum(_过滤材料(),"人材机",?#{
->人材机.拆分 == 0
:
0;
->人材机.拆分 == 1
:
sum(_过滤人工_定额重算(),"拆分子项",?
#{
->拆分子项.type == "人工"
:
拆分子项.预算价含税 * 拆分子项.数量 * #{
->工程量.调差类型 == "建筑":拆分子项.@_@人工调差系数 /100;
->工程量.调差类型 == "建筑修缮":拆分子项.@_@人工调差系数 /100;
->工程量.调差类型 == "建筑拆除":拆分子项.@_@人工调差系数 /100;
};
} * 人材机.数量);
});})
}
@@ -1,326 +0,0 @@
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// 材机分析汇总变量计算
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
BEGIN:_统计水超运数量_人力运输
${
?@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.人力运距 * @统计参数.人力运量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
}
}
BEGIN:_统计水超运数量_汽车运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.汽车运距 * @统计参数.汽车运量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.汽车装卸量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
}
}
BEGIN:_统计水超运数量_拖拉机运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.拖拉机运距 * @统计参数.拖拉机运量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.拖拉机装卸量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
}
}
BEGIN:_统计水超运数量_船舶运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.船舶运距 * @统计参数.船舶运量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.船舶装卸量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
}
}
BEGIN:_统计水超运数量_索道运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.索道运距 * @统计参数.索道运量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.索道处数 * @统计参数.索道装卸量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
}
}
BEGIN:_统计工地运输数量_人力运输
${
?#{
->(@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.人力运距 * @统计参数.人力运量 / 100;
->(@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.人力运距 * @统计参数.人力运量 / 100;
}
}
BEGIN:_统计工地运输数量_汽车运输
${
?#{
->@统计项.装卸 == "0" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.汽车运距 * @统计参数.汽车运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.汽车装卸量 / 100;
->@统计项.装卸 == "0" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.汽车运距 * @统计参数.汽车运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.汽车装卸量 / 100;
}
}
BEGIN:_统计工地运输数量_拖拉机运输
${
?#{
->@统计项.装卸 == "0" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.拖拉机运距 * @统计参数.拖拉机运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.拖拉机装卸量 / 100;
->@统计项.装卸 == "0" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.拖拉机运距 * @统计参数.拖拉机运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.拖拉机装卸量 / 100;
}
}
BEGIN:_统计工地运输数量_船舶运输
${
?#{
->@统计项.装卸 == "0" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.船舶运距 * @统计参数.船舶运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.船舶装卸量 / 100;
->@统计项.装卸 == "0" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.船舶运距 * @统计参数.船舶运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.船舶装卸量 / 100;
}
}
BEGIN:_统计工地运输数量_索道运输
${
?#{
->@统计项.装卸 == "0" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.索道运距 * @统计参数.索道运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.索道处数 * @统计参数.索道装卸量 / 100;
->@统计项.装卸 == "0" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.索道运距 * @统计参数.索道运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.索道处数 * @统计参数.索道装卸量 / 100;
}
}
//------------------余土外运-------------------------------------------
BEGIN:_统计余土外运数量_人力运输
${
?@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.人力运距 * @统计参数.人力运量 / 100
}
BEGIN:_统计余土外运数量_汽车运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.汽车运距 * @统计参数.汽车运量 / 100;
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.汽车装卸量 / 100;
}
}
BEGIN:_统计余土外运数量_拖拉机运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.拖拉机运距 * @统计参数.拖拉机运量 / 100;
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.拖拉机装卸量 / 100;
}
}
BEGIN:_统计余土外运数量_船舶运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.船舶运距 * @统计参数.船舶运量 / 100;
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.船舶装卸量 / 100;
}
}
BEGIN:_统计余土外运数量_索道运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.索道运距 * @统计参数.索道运量 / 100;
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.索道处数 * @统计参数.索道装卸量 / 100;
}
}
@@ -1,436 +0,0 @@
///////////////////////////////////////////////////////////////
//
// 勘察费
//
///////////////////////////////////////////////////////////////
BEGIN:初步勘测基价
${
?round(?@勘察费.方法二.初步勘测基价, 8)
}
BEGIN:初步勘测基价_方法三
${
?round(?@勘察费.方法三.初步勘测基价, 8)
}
BEGIN:初步勘测系数调整
${
?round(?@勘察费.方法二.初步勘测系数调整, 8)
}
BEGIN:初步勘测系数调整_方法三
${
?round(?@勘察费.方法三.初步勘测系数调整, 8)
}
BEGIN:施工图勘测系数调整
${
?round(?@勘察费.方法二.施工图勘测系数调整, 8)
}
BEGIN:施工图勘测系数调整_方法三
${
?round(?@勘察费.方法三.施工图勘测系数调整, 8)
}
BEGIN:施工图和初步勘测基价比值
${
?#{
->@工程信息.工程类型=="变电" || (@工程信息.工程类型=="配网" && @工程信息.勘察费方法=="变电方法二")
:
0.8;
->@工程信息.工程类型=="线路" || (@工程信息.工程类型=="配网" && @工程信息.勘察费方法=="线路方法二")
:
4;
}
}
BEGIN:施工图和初步勘测基价比值_方法三
${
?#{
->@工程信息.工程类型=="变电"
:
0.8;
->@工程信息.工程类型=="线路"
:
4;
}
}
BEGIN:施工图勘测基价
${
?初步勘测基价()*施工图和初步勘测基价比值()
}
BEGIN:施工图勘测基价_方法三
${
?初步勘测基价_方法三()*施工图和初步勘测基价比值_方法三()
}
BEGIN:线路架线长度
${
?#{
->@工程信息.工程类型=="变电" || (@工程信息.工程类型=="配网" && @工程信息.勘察费方法=="变电方法二")
:
1;
->@工程信息.工程类型=="线路"
:
#{
->@工程信息.项目划分=="架空输电线路工程":iif(@工程信息.架空线路亘长 <@勘察费.方法二.初设阶段_线路长度最小值,@勘察费.方法二.初设阶段_线路长度最小值,@工程信息.架空线路亘长);
->@工程信息.项目划分=="电缆线路工程":iif(@工程信息.电缆线路亘长 <@勘察费.方法二.初设阶段_线路长度最小值,@勘察费.方法二.初设阶段_线路长度最小值,@工程信息.电缆线路亘长);
->@工程信息.项目划分=="通信线路工程":iif(@工程信息.通信线路亘长 <@勘察费.方法二.初设阶段_线路长度最小值,@勘察费.方法二.初设阶段_线路长度最小值,@工程信息.通信线路亘长);
};
->(@工程信息.工程类型=="配网" && @工程信息.勘察费方法=="线路方法二")
:
#{
->最大亘长() <@勘察费.方法二.初设阶段_线路长度最小值
:
@勘察费.方法二.初设阶段_线路长度最小值;
->:
最大亘长();
};
}
}
BEGIN:施设阶段_线路架线长度
${
?#{
->@工程信息.工程类型=="变电" || (@工程信息.工程类型=="配网" && @工程信息.勘察费方法=="变电方法二")
:
1;
->@工程信息.工程类型=="线路"
:
#{
->@工程信息.项目划分=="架空输电线路工程":iif(@工程信息.架空线路亘长 <@勘察费.方法二.施设阶段_线路长度最小值,@勘察费.方法二.施设阶段_线路长度最小值,@工程信息.架空线路亘长);
->@工程信息.项目划分=="电缆线路工程":iif(@工程信息.电缆线路亘长 <@勘察费.方法二.施设阶段_线路长度最小值,@勘察费.方法二.施设阶段_线路长度最小值,@工程信息.电缆线路亘长);
->@工程信息.项目划分=="通信线路工程":iif(@工程信息.通信线路亘长 <@勘察费.方法二.施设阶段_线路长度最小值,@勘察费.方法二.施设阶段_线路长度最小值,@工程信息.通信线路亘长);
};
->(@工程信息.工程类型=="配网" && @工程信息.勘察费方法=="线路方法二")
:
#{
->最大亘长() <@勘察费.方法二.施设阶段_线路长度最小值
:
@勘察费.方法二.施设阶段_线路长度最小值;
->:
最大亘长();
};
}
}
BEGIN:最大亘长
${
?#{
->@工程信息.架空线路亘长<@工程信息.电缆线路亘长
:
#{
->@工程信息.电缆线路亘长<@工程信息.通信线路亘长
:
@工程信息.通信线路亘长;
->:
@工程信息.电缆线路亘长;
};
->@工程信息.架空线路亘长>=@工程信息.电缆线路亘长
:
#{
->@工程信息.架空线路亘长<@工程信息.通信线路亘长
:
@工程信息.通信线路亘长;
->:
@工程信息.架空线路亘长;
};
}
}
BEGIN:线路架线长度_方法三
${
?#{
->@工程信息.工程类型=="变电"
:
1;
->@工程信息.工程类型=="线路"
:
#{
->@勘察费.方法三.初设阶段_长度设置模式 == 1
:
#{
->@工程信息.勘察费方法 == "方法三"
:
#{
->@工程信息.项目划分=="架空输电线路工程":iif(@工程信息.架空线路亘长 <@勘察费.方法三.初设阶段_线路长度最小值,@勘察费.方法三.初设阶段_线路长度最小值,@工程信息.架空线路亘长);
->@工程信息.项目划分=="电缆线路工程":iif(@工程信息.电缆线路亘长 <@勘察费.方法三.初设阶段_线路长度最小值,@勘察费.方法三.初设阶段_线路长度最小值,@工程信息.电缆线路亘长);
->@工程信息.项目划分=="通信线路工程":iif(@工程信息.通信线路亘长 <@勘察费.方法三.初设阶段_线路长度最小值,@勘察费.方法三.初设阶段_线路长度最小值,@工程信息.通信线路亘长);
};
->@工程信息.勘察费方法 == "线路方法三"
:
#{
->最大亘长() <@勘察费.方法三.初设阶段_线路长度最小值
:
@勘察费.方法三.初设阶段_线路长度最小值;
->:
最大亘长();
};
};
->: @勘察费.方法三.初设阶段_累计长度;
};
}
}
BEGIN:施设阶段_线路架线长度_方法三
${
?#{
->@工程信息.工程类型=="变电"
:
1;
->@工程信息.工程类型=="线路"
:
#{
->@勘察费.方法三.施设阶段_长度设置模式 == 1
:
#{
->@工程信息.勘察费方法 == "方法三"
:
#{
->@工程信息.项目划分=="架空输电线路工程":iif(@工程信息.架空线路亘长 <@勘察费.方法三.施设阶段_线路长度最小值,@勘察费.方法三.施设阶段_线路长度最小值,@工程信息.架空线路亘长);
->@工程信息.项目划分=="电缆线路工程":iif(@工程信息.电缆线路亘长 <@勘察费.方法三.施设阶段_线路长度最小值,@勘察费.方法三.施设阶段_线路长度最小值,@工程信息.电缆线路亘长);
->@工程信息.项目划分=="通信线路工程":iif(@工程信息.通信线路亘长 <@勘察费.方法三.施设阶段_线路长度最小值,@勘察费.方法三.施设阶段_线路长度最小值,@工程信息.通信线路亘长);
};
->@工程信息.勘察费方法 == "线路方法三"
:
#{
->最大亘长() <@勘察费.方法三.施设阶段_线路长度最小值
:
@勘察费.方法三.施设阶段_线路长度最小值;
->:
最大亘长();
};
};
->: @勘察费.方法三.施设阶段_累计长度;
};
}
}
BEGIN:施工图勘测基准价
${
?施工图勘测基价()* 施工图勘测系数调整() * 施设阶段_线路架线长度()
}
BEGIN:施工图勘测基准价_方法三
${
?施工图勘测基价_方法三()* 施工图勘测系数调整_方法三() * 施设阶段_线路架线长度_方法三()
}
BEGIN:初步勘测基准价
${
?初步勘测基价() * 初步勘测系数调整() * #{
->@工程信息.工程类型=="变电" || (@工程信息.工程类型=="配网" && @工程信息.勘察费方法=="变电方法二")
:
1;
->@工程信息.工程类型=="线路" || (@工程信息.工程类型=="配网" && @工程信息.勘察费方法=="线路方法二")
:
@勘察费.方法二.初设阶段_超长线路长度 + 线路架线长度();
}
}
BEGIN:初步勘测基准价_方法三
${
?初步勘测基价_方法三() * 初步勘测系数调整_方法三() * #{
->@工程信息.工程类型=="变电"
:
1;
->@工程信息.工程类型=="线路"
:
@勘察费.方法三.初设阶段_超长线路长度 + 线路架线长度_方法三();
}
}
BEGIN:勘察费小计
${
?初步勘测基准价()+施工图勘测基准价()
}
BEGIN:勘察费小计_方法三
${
?初步勘测基准价_方法三()+施工图勘测基准价_方法三()
}
BEGIN:作业准备费
${
?勘察费小计()*@勘察费.方法二.作业准备费系数/100
}
BEGIN:作业准备费_方法三
${
?勘察费小计_方法三()*@勘察费.方法三.作业准备费系数/100
}
BEGIN:勘察费总计
${
?勘察费小计() + 作业准备费() + round(?@勘察费.方法二.勘察费调整, 8)
}
BEGIN:勘察费总计_方法三
${
?勘察费小计_方法三() + 作业准备费_方法三() + round(?@勘察费.方法三.勘察费调整, 8)
}
BEGIN:一笔性勘察费
${
?round(?@勘察费.方法一.一笔性勘察费, 8)
}
///////////////////////////////////////////////////////////////
//
//其他费用-宏变量
//
///////////////////////////////////////////////////////////////
BEGIN:勘察费
${
?#{
->@工程信息.电压等级 == "20kV及以下"
:
0;
->:
#{
->(建筑工程费()+安装工程费()+拆除工程费()+建筑修缮费()+设备检修费()+余物清理费()) != 0
:
#{
->@工程信息.勘察费方法=="方法一" : 一笔性勘察费();
->@工程信息.勘察费方法=="方法二" : 勘察费总计();
->@工程信息.勘察费方法=="变电方法二" : 勘察费总计();
->@工程信息.勘察费方法=="线路方法二" : 勘察费总计();
->@工程信息.勘察费方法=="线路方法三" : 勘察费总计_方法三();
->@工程信息.勘察费方法=="方法三" : 勘察费总计_方法三();
};
};
}
}
///////////////////////////////////////////////////////////////
//
//设计费
//
///////////////////////////////////////////////////////////////
//BEGIN:虚拟设计费
//${
// ?#{
// ->@工程信息.工程性质=="技改"
// :round(?@设计费.方法二.计费额, 6) * @设计费.方法二.设计费费率 /100 * round(?@设计费.方法二.专业调整系数, 6);
// ->@工程信息.工程性质=="检修"
// :round(?@设计费.方法二.计费额, 6) * @设计费.方法二.设计费费率 /100 ;
// }
//}
//BEGIN:本体工程费
//${
// ?#{
// -> @工程信息.工程性质=="技改"
// :#{
// ->@工程信息.项目划分 == "通信线路工程" || @工程信息.项目划分 == "架空输电线路工程"
// :安装工程费;
// ->@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程" || @工程信息.工程类型 == "配网"
// :建筑工程费+安装工程费;
// };
// -> @工程信息.工程性质=="检修"
// :#{
// ->@工程信息.项目划分 == "通信线路工程" || @工程信息.项目划分 == "架空输电线路工程"
// :设备检修费;
// ->@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程" || @工程信息.工程类型 == "配网"
// :建筑修缮费+设备检修费;
// };
// };
//}
BEGIN:设备配件占比系数_扩展
${
?#{
-> @工程信息.工程性质=="技改"
:@设计费.方法二.设备占比系数_扩展;
-> @工程信息.工程性质=="检修"
:@设计费.方法二.配件占比系数_扩展;
};
}
BEGIN:设备配件占比系数
${
?round(
?#{
->设备配件占比系数_扩展() >= 0.98
:0.2;
->设备配件占比系数_扩展() >= 0.9 && 设备配件占比系数_扩展() < 0.98
:(1-设备配件占比系数_扩展())*10;
->设备配件占比系数_扩展() < 0.98
:1;
}, 6
)
}
BEGIN:设计费_施工图预算编制费
${
?round(?@设计费.方法二.施工图预算编制费, 6)
}
BEGIN:设计费_竣工图文件编制费
${
?round(?@设计费.方法二.竣工图文件编制费, 6)
}
BEGIN:设计费费率_方法二
${
?round(?@设计费.方法二.设计费费率 / 100, 4)
}
BEGIN:最小基本设计费
${
?#{
-> @工程信息.工程性质=="技改"
: 2000;
-> @工程信息.工程性质=="检修"
: 1000;
};
}
BEGIN:基本设计费_方法二
${
?round(?@设计费.方法二.基本设计费, 6)
}
BEGIN:设计费_方法二
${
?round(?@设计费.方法二.设计费总计, 6)
}
BEGIN:基本设计费_方法一
${
?round(?@设计费.方法一.基本设计费, 6)
}
BEGIN:一笔性设计费
${
?round(?@设计费.方法一.一笔性设计费, 6)
}
///////////////////////////////////////////////////////////////
//
//其他费用-宏变量
//
///////////////////////////////////////////////////////////////
BEGIN:基本设计费
${
?#{
->@工程信息.设计费方法=="方法一" : 基本设计费_方法一();
->@工程信息.设计费方法=="方法二" : 基本设计费_方法二();
}
}
BEGIN:设计费
${
?#{
->@工程信息.设计费方法=="方法一" : 一笔性设计费();
->@工程信息.设计费方法=="方法二" : 设计费_方法二();
};
}
@@ -1,273 +0,0 @@
//------------------地形增加费(配网电缆建筑、线路安装、线路设备检修)-------------------------------------------
BEGIN:_地形人工系数
${
?#{
->@工程信息.工程性质 == "技改"
:
#{
->(in(工程量.编码,"JYX1-1~16")) || (工程量.地形费计算方式 == "工地运输(人力运输)混凝土杆、混凝土预制品、钢管杆、线材的运输(不含机械费)")
:
工程量.@_@地形系数.工地运输人力运输混凝土杆混凝土预制品钢管杆线材的运输不含机械费;
->(in(工程量.编码,"JYX1-17~22")) || (工程量.地形费计算方式 == "工地运输(人力运输)金具、绝缘子、零星钢材、塔材、其他建筑安装材料的运输(不含机械费)")
:
工程量.@_@地形系数.工地运输人力运输金具绝缘子零星钢材塔材其他建筑安装材料的运输不含机械费;
->(in(工程量.编码,"JYX1-24^108")) || (工程量.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
工程量.@_@地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->(in(工程量.编码,"JYX2-1~232")) || (工程量.地形费计算方式 == "土石方工程(不含机械费)")
:
工程量.@_@地形系数.土石方工程不含机械费;
->(in(工程量.编码,"JYX3-1~212,JGX1-1~17,XYX1-1~21,XYX3-1~6,CYX1-1~4")) || (工程量.地形费计算方式 == "基础工程")
:
工程量.@_@地形系数.基础工程;
->(in(工程量.编码,"JYX4-1~192,JGX2-1~59,XYX2-1~79,CYX2-1~40")) || (工程量.地形费计算方式 == "杆塔工程")
:
工程量.@_@地形系数.杆塔工程;
->(in(工程量.编码,"JGX3-1~54")) || (工程量.地形费计算方式 == "概算:架线工程")
:
工程量.@_@地形系数.概算架线工程;
->(in(工程量.编码,"JYX5-1~60,XYX4-1~77,CYX3-1~27")) || (工程量.地形费计算方式 == "预算:架线工程一般放、紧线(不包含跨越架设、拦河线安装)")
:
工程量.@_@地形系数.预算架线工程一般放紧线不包含跨越架设拦河线安装;
->(in(工程量.编码,"JYX5-61~119,CYX3-28~42")) || (工程量.地形费计算方式 == "预算:架线工程张力放紧线(不包含跨越架设、拦河线安装)")
:
工程量.@_@地形系数.预算架线工程张力放紧线不包含跨越架设拦河线安装;
->(in(工程量.编码,"JYX5-245~253")) || (工程量.地形费计算方式 == "预算:架线工程光缆接续(不包括测量)")
:
工程量.@_@地形系数.预算架线工程光缆接续不包括测量;
->(in(工程量.编码,"JYX6-1~172,JGX4-1~67,XYX5-1~223,CYX4-1~131")) || (工程量.地形费计算方式 == "附件工程")
:
工程量.@_@地形系数.附件工程;
->(in(工程量.编码,"JGX6-1~4")) || (工程量.地形费计算方式 == "概算:辅助工程")
:
工程量.@_@地形系数.概算辅助工程;
->(in(工程量.编码,"JYX8-1~25")) || (工程量.地形费计算方式 == "预算:辅助工程(基础辅助)施工道路,固沙,护坡、挡土墙及排洪沟砌筑,喷射混凝土护坡")
:
工程量.@_@地形系数.预算辅助工程基础辅助施工道路固沙护坡挡土墙及排洪沟砌筑喷射混凝土护坡;
->(in(工程量.编码,"JYX8-26~45,JYX8-119~130,XYX3-7~25")) || (工程量.地形费计算方式 == "预算:辅助工程(杆塔辅助)杆塔附属设施,防坠落装置安装,线路避雷器安装,监测装置安装调测,耐张线夹X射线探伤")
:
工程量.@_@地形系数.预算辅助工程杆塔辅助杆塔附属设施防坠落装置安装线路避雷器安装监测装置安装调测耐张线夹X射线探伤;
->(in(工程量.编码,"JYX8-46~89")) || (工程量.地形费计算方式 == "预算:辅助工程(索道设施)运输(地形选择按架设索道站所处地带实际地形为准)")
:
工程量.@_@地形系数.预算辅助工程索道设施运输地形选择按架设索道站所处地带实际地形为准;
->(in(工程量.编码,"JYX8-90~118")) || (工程量.地形费计算方式 == "预算:辅助工程(索道设施)安装(地形选择按架设索道站所处地带实际地形为准)")
:
工程量.@_@地形系数.预算辅助工程索道设施安装地形选择按架设索道站所处地带实际地形为准;
};
->@工程信息.工程性质 == "检修"
:
#{
->(in(工程量.编码,"JYX1-1~16")) || (工程量.地形费计算方式 == "工地运输(人力运输)混凝土杆、混凝土预制品、钢管杆、线材的运输(不含机械费)")
:
工程量.@_@地形系数.工地运输人力运输混凝土杆混凝土预制品钢管杆线材的运输不含机械费;
->(in(工程量.编码,"JYX1-17~22")) || (工程量.地形费计算方式 == "工地运输(人力运输)金具、绝缘子、零星钢材、塔材、其他建筑安装材料的运输(不含机械费)")
:
工程量.@_@地形系数.工地运输人力运输金具绝缘子零星钢材塔材其他建筑安装材料的运输不含机械费;
->(in(工程量.编码,"JYX1-24^108")) || (工程量.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
工程量.@_@地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->(in(工程量.编码,"JYX3-1~212,JYX4-1~192,JYX5-1~119,JYX5-245~253,JYX6-1~172,JGX1-1~17,JGX2-1~59,JGX3-1~54,JGX4-1~67,XYX1-1~21,XYX2-1~79,XYX3-1~25,XYX4-1~77,XYX5-1~223,CYX1-1~4,CYX2-1~40,CYX3-1~42,CYX4-1~131")) || (工程量.地形费计算方式 == "基础、杆塔、防雷设施及接地装置、导线及避雷线、附件检修")
:
工程量.@_@地形系数.基础杆塔防雷设施及接地装置导线及避雷线附件检修;
};
} / 100
}
BEGIN:_地形机械系数
${
?#{
->@工程信息.工程性质 == "技改"
:
#{
->(in(工程量.编码,"JYX1-24^108")) || (工程量.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
工程量.@_@地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->(in(工程量.编码,"JYX3-1~212,JGX1-1~17,XYX1-1~21,XYX3-1~6,CYX1-1~4")) || (工程量.地形费计算方式 == "基础工程")
:
工程量.@_@地形系数.基础工程;
->(in(工程量.编码,"JYX4-1~192,JGX2-1~59,XYX2-1~79,CYX2-1~40")) || (工程量.地形费计算方式 == "杆塔工程")
:
工程量.@_@地形系数.杆塔工程;
->(in(工程量.编码,"JGX3-1~54")) || (工程量.地形费计算方式 == "概算:架线工程")
:
工程量.@_@地形系数.概算架线工程;
->(in(工程量.编码,"JYX5-1~60,XYX4-1~77,CYX3-1~27")) || (工程量.地形费计算方式 == "预算:架线工程一般放、紧线(不包含跨越架设、拦河线安装)")
:
工程量.@_@地形系数.预算架线工程一般放紧线不包含跨越架设拦河线安装;
->(in(工程量.编码,"JYX5-61~119,CYX3-28~42")) || (工程量.地形费计算方式 == "预算:架线工程张力放紧线(不包含跨越架设、拦河线安装)")
:
工程量.@_@地形系数.预算架线工程张力放紧线不包含跨越架设拦河线安装;
->(in(工程量.编码,"JYX5-245~253")) || (工程量.地形费计算方式 == "预算:架线工程光缆接续(不包括测量)")
:
工程量.@_@地形系数.预算架线工程光缆接续不包括测量;
->(in(工程量.编码,"JYX6-1~172,JGX4-1~67,XYX5-1~223,CYX4-1~131")) || (工程量.地形费计算方式 == "附件工程")
:
工程量.@_@地形系数.附件工程;
->(in(工程量.编码,"JGX6-1~4")) || (工程量.地形费计算方式 == "概算:辅助工程")
:
工程量.@_@地形系数.概算辅助工程;
->(in(工程量.编码,"JYX8-1~25")) || (工程量.地形费计算方式 == "预算:辅助工程(基础辅助)施工道路,固沙,护坡、挡土墙及排洪沟砌筑,喷射混凝土护坡")
:
工程量.@_@地形系数.预算辅助工程基础辅助施工道路固沙护坡挡土墙及排洪沟砌筑喷射混凝土护坡;
->(in(工程量.编码,"JYX8-26~45,JYX8-119~130,XYX3-7~25")) || (工程量.地形费计算方式 == "预算:辅助工程(杆塔辅助)杆塔附属设施,防坠落装置安装,线路避雷器安装,监测装置安装调测,耐张线夹X射线探伤")
:
工程量.@_@地形系数.预算辅助工程杆塔辅助杆塔附属设施防坠落装置安装线路避雷器安装监测装置安装调测耐张线夹X射线探伤;
->(in(工程量.编码,"JYX8-46~89")) || (工程量.地形费计算方式 == "预算:辅助工程(索道设施)运输(地形选择按架设索道站所处地带实际地形为准)")
:
工程量.@_@地形系数.预算辅助工程索道设施运输地形选择按架设索道站所处地带实际地形为准;
->(in(工程量.编码,"JYX8-90~118")) || (工程量.地形费计算方式 == "预算:辅助工程(索道设施)安装(地形选择按架设索道站所处地带实际地形为准)")
:
工程量.@_@地形系数.预算辅助工程索道设施安装地形选择按架设索道站所处地带实际地形为准;
};
->@工程信息.工程性质 == "检修"
:
#{
->(in(工程量.编码,"JYX1-24^108")) || (工程量.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
工程量.@_@地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->(in(工程量.编码,"JYX3-1~212,JYX4-1~192,JYX5-1~119,JYX5-245~253,JYX6-1~172,JGX1-1~17,JGX2-1~59,JGX3-1~54,JGX4-1~67,XYX1-1~21,XYX2-1~79,XYX3-1~25,XYX4-1~77,XYX5-1~223,CYX1-1~4,CYX2-1~40,CYX3-1~42,CYX4-1~131")) || (工程量.地形费计算方式 == "基础、杆塔、防雷设施及接地装置、导线及避雷线、附件检修")
:
工程量.@_@地形系数.基础杆塔防雷设施及接地装置导线及避雷线附件检修;
};
} / 100
}
BEGIN:地形人工费
${
sum(_过滤定额(),"工程量",?工程量.数量 * 工程量.人工费 * 工程量.人工系数 * 工程量.定额系数 * _地形人工系数())
}
BEGIN:地形人工价差
${
sum(_过滤定额(),"工程量",?工程量.数量 * 工程量.人工系数 * 工程量.定额系数 * _地形人工系数() * #{
->@工程信息.项目类型 == "应急工程":sum(_过滤人工(),"人材机",?(人材机.市场价不含税 - 人材机.预算价不含税) * 人材机.数量);
->:工程量.人工费 * 工程量.@_@人工调差系数 / 100;
})
}
BEGIN:地形机械费
${
sum(_过滤定额(),"工程量",?工程量.数量 * 工程量.机械费 * 工程量.机械系数 * 工程量.定额系数 * _地形机械系数())
}
BEGIN:地形机械价差
${
sum(_过滤定额(),"工程量",?工程量.数量 * 工程量.机械系数 * 工程量.定额系数 * _地形机械系数() * #{
->@工程信息.项目类型 == "应急工程":sum(_过滤机械(),"人材机",?(人材机.市场价不含税 - 人材机.预算价不含税) * 人材机.数量);
->:#{
->(工程量.调差类型 == "建筑" || 工程量.调差类型 == "建筑拆除" || 工程量.调差类型 == "建筑修缮") && 工程量.@_@材机按系数调差 == "否":0;
->:工程量.机械费 * 工程量.@_@机械调差系数 / 100;
};})
}
//------------------汇总特殊费用-------------------------------------------
BEGIN:人工费
${
?_人工费_不含特殊费()+脚手架人工费()+混凝土施工调整人工费()+调试人工费()+地形人工费()
}
BEGIN:乙供材料费不含税
${
?_乙供材料费_非宏变量()+脚手架材料费()+混凝土施工调整材料费()+调试材料费()
}
BEGIN:机械费
${
?_机械费_不含特殊费()+脚手架机械费()+混凝土施工调整机械费()+调试机械费()+地形机械费()
}
BEGIN:人工价差
${
?_人工价差_不含特殊费()+脚手架人工价差()+混凝土施工调整人工价差()+调试人工价差()+地形人工价差()
}
BEGIN:乙供材料价差不含税
${
?_乙供材料价差_不含特殊费()
}
BEGIN:机械价差
${
?_机械价差_不含特殊费()+地形机械价差()
}
BEGIN:材料价差不含税
${
?甲供材料价差不含税()+乙供材料价差不含税()
}
BEGIN:材料价差含税
${
?甲供材料价差含税()+乙供材料价差含税()
}
//------------------以下变量为开发使用,开发自行维护-------------------------------------------
BEGIN:_过滤非拆除定额
${
filter(source,"工程量",?工程量.type =="定额" && #{
->@工程信息.工程性质 == "技改"
:
#{
->工程量.专业属性 == "架空" || 工程量.专业属性 == "陆上电缆" || 工程量.专业属性 == "海底电缆" || 工程量.专业属性 == "通信"
:
工程量.调差类型 != "建筑拆除" && 工程量.调差类型 != "安装拆除";
};
->@工程信息.工程性质 == "检修"
:
#{
->工程量.专业属性 == "架空" || 工程量.专业属性 == "陆上电缆" || 工程量.专业属性 == "海底电缆" || 工程量.专业属性 == "通信"
:
工程量.调差类型 == "建筑修缮" || 工程量.调差类型 == "设备检修" || 工程量.调差类型 == "建筑拆除" || 工程量.调差类型 == "安装拆除";
};
} == 1)
}
BEGIN:建筑拆分人工材料_价差不含税
${
sum(_过滤定额(),"工程量",?工程量.数量 * 工程量.材料系数 * 工程量.定额系数 * #{
->(工程量.调差类型 == "建筑") || (工程量.调差类型 == "建筑拆除" ) || (工程量.调差类型 == "建筑修缮" )
:
sum(_过滤材料(),"人材机",?#{
->人材机.拆分 == 0
:
0;
->人材机.拆分 == 1
:
sum(_过滤人工_定额重算(),"拆分子项",?
#{
->拆分子项.type == "人工"
:
拆分子项.预算价不含税 * 拆分子项.数量 * #{
->工程量.调差类型 == "建筑":拆分子项.@_@人工调差系数 /100;
->工程量.调差类型 == "建筑修缮":拆分子项.@_@人工调差系数 /100;
->工程量.调差类型 == "建筑拆除":拆分子项.@_@人工调差系数 /100;
};
} * 人材机.数量);
});})
}
BEGIN:建筑拆分人工材料_价差含税
${
sum(_过滤定额(),"工程量",?工程量.数量 * 工程量.材料系数 * 工程量.定额系数 * #{
->(工程量.调差类型 == "建筑") || (工程量.调差类型 == "建筑拆除" ) || (工程量.调差类型 == "建筑修缮" )
:
sum(_过滤材料(),"人材机",?#{
->人材机.拆分 == 0
:
0;
->人材机.拆分 == 1
:
sum(_过滤人工_定额重算(),"拆分子项",?
#{
->拆分子项.type == "人工"
:
拆分子项.预算价含税 * 拆分子项.数量 * #{
->工程量.调差类型 == "建筑":拆分子项.@_@人工调差系数 /100;
->工程量.调差类型 == "建筑修缮":拆分子项.@_@人工调差系数 /100;
->工程量.调差类型 == "建筑拆除":拆分子项.@_@人工调差系数 /100;
};
} * 人材机.数量);
});})
}
@@ -1,326 +0,0 @@
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// 材机分析汇总变量计算
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
BEGIN:_统计水超运数量_人力运输
${
?@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.人力运距 * @统计参数.人力运量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
}
}
BEGIN:_统计水超运数量_汽车运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.汽车运距 * @统计参数.汽车运量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.汽车装卸量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
}
}
BEGIN:_统计水超运数量_拖拉机运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.拖拉机运距 * @统计参数.拖拉机运量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.拖拉机装卸量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
}
}
BEGIN:_统计水超运数量_船舶运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.船舶运距 * @统计参数.船舶运量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.船舶装卸量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
}
}
BEGIN:_统计水超运数量_索道运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.索道运距 * @统计参数.索道运量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.索道处数 * @统计参数.索道装卸量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
}
}
BEGIN:_统计工地运输数量_人力运输
${
?#{
->(@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.人力运距 * @统计参数.人力运量 / 100;
->(@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.人力运距 * @统计参数.人力运量 / 100;
}
}
BEGIN:_统计工地运输数量_汽车运输
${
?#{
->@统计项.装卸 == "0" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.汽车运距 * @统计参数.汽车运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.汽车装卸量 / 100;
->@统计项.装卸 == "0" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.汽车运距 * @统计参数.汽车运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.汽车装卸量 / 100;
}
}
BEGIN:_统计工地运输数量_拖拉机运输
${
?#{
->@统计项.装卸 == "0" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.拖拉机运距 * @统计参数.拖拉机运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.拖拉机装卸量 / 100;
->@统计项.装卸 == "0" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.拖拉机运距 * @统计参数.拖拉机运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.拖拉机装卸量 / 100;
}
}
BEGIN:_统计工地运输数量_船舶运输
${
?#{
->@统计项.装卸 == "0" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.船舶运距 * @统计参数.船舶运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.船舶装卸量 / 100;
->@统计项.装卸 == "0" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.船舶运距 * @统计参数.船舶运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.船舶装卸量 / 100;
}
}
BEGIN:_统计工地运输数量_索道运输
${
?#{
->@统计项.装卸 == "0" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.索道运距 * @统计参数.索道运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.索道处数 * @统计参数.索道装卸量 / 100;
->@统计项.装卸 == "0" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.索道运距 * @统计参数.索道运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.索道处数 * @统计参数.索道装卸量 / 100;
}
}
//------------------余土外运-------------------------------------------
BEGIN:_统计余土外运数量_人力运输
${
?@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.人力运距 * @统计参数.人力运量 / 100
}
BEGIN:_统计余土外运数量_汽车运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.汽车运距 * @统计参数.汽车运量 / 100;
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.汽车装卸量 / 100;
}
}
BEGIN:_统计余土外运数量_拖拉机运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.拖拉机运距 * @统计参数.拖拉机运量 / 100;
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.拖拉机装卸量 / 100;
}
}
BEGIN:_统计余土外运数量_船舶运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.船舶运距 * @统计参数.船舶运量 / 100;
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.船舶装卸量 / 100;
}
}
BEGIN:_统计余土外运数量_索道运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.索道运距 * @统计参数.索道运量 / 100;
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.索道处数 * @统计参数.索道装卸量 / 100;
}
}
@@ -1,34 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<bclManual type="技改" version="1.2.7">
<projectBclSet type="变电">
<bclFile>变电.变量计算配置(变电).bcl</bclFile>
<bclFile>变量计算配置.bcl</bclFile>
<bclFile>材机分析配置.bcl</bclFile>
<bclFile>定额基本信息费用计算.bcl</bclFile>
<bclFile>宏变量配置.bcl</bclFile>
<bclFile>设计勘察费配置.bcl</bclFile>
<bclFile>报表宏变量配置.bcl</bclFile>
</projectBclSet>
<projectBclSet type="线路">
<bclFile>线路.变量计算配置(线路).bcl</bclFile>
<bclFile>线路.工程量统计配置.bcl</bclFile>
<bclFile>变量计算配置.bcl</bclFile>
<bclFile>材机分析配置.bcl</bclFile>
<bclFile>定额基本信息费用计算.bcl</bclFile>
<bclFile>宏变量配置.bcl</bclFile>
<bclFile>设计勘察费配置.bcl</bclFile>
<bclFile>报表宏变量配置.bcl</bclFile>
</projectBclSet>
<projectBclSet type="配网">
<bclFile>配网.变量计算配置(配网).bcl</bclFile>
<bclFile>配网.工程量统计配置.bcl</bclFile>
<bclFile>变量计算配置.bcl</bclFile>
<bclFile>材机分析配置.bcl</bclFile>
<bclFile>定额基本信息费用计算.bcl</bclFile>
<bclFile>宏变量配置.bcl</bclFile>
<bclFile>设计勘察费配置.bcl</bclFile>
<bclFile>报表宏变量配置.bcl</bclFile>
</projectBclSet>
</bclManual>
@@ -1,95 +0,0 @@
//------------------定额费用-------------------------------------------
BEGIN:人工费
${
?_人工费_不含特殊费()+脚手架人工费()+混凝土施工调整人工费()+调试人工费()
}
BEGIN:乙供材料费不含税
${
?_乙供材料费_非宏变量()+脚手架材料费()+混凝土施工调整材料费()+调试材料费()
}
BEGIN:机械费
${
?_机械费_不含特殊费()+脚手架机械费()+混凝土施工调整机械费()+调试机械费()
}
BEGIN:人工价差
${
?_人工价差_不含特殊费()+脚手架人工价差()+混凝土施工调整人工价差()+调试人工价差()
}
BEGIN:乙供材料价差不含税
${
?_乙供材料价差_不含特殊费()+脚手架材料价差()+混凝土施工调整材料价差()+调试材料价差()
}
BEGIN:机械价差
${
?_机械价差_不含特殊费()+脚手架机械价差()+混凝土施工调整机械价差()+调试机械价差()
}
//BEGIN:材料费
//${
// ?甲供材料费()+乙供材料费()
//}
BEGIN:材料价差不含税
${
?甲供材料价差不含税()+乙供材料价差不含税()
}
BEGIN:材料价差含税
${
?甲供材料价差含税()+乙供材料价差含税()
}
//------------------以下变量为开发使用,开发自行维护-------------------------------------------
BEGIN:建筑拆分人工材料_价差不含税
${
sum(_过滤定额(),"工程量",?工程量.数量 * 工程量.材料系数 * 工程量.定额系数 * #{
->工程量.调差类型 == "建筑" || 工程量.调差类型 == "建筑拆除" || 工程量.调差类型 == "建筑修缮"
:
sum(_过滤材料(),"人材机",?#{
->人材机.拆分 == 0
:
0;
->人材机.拆分 == 1
:
sum(_过滤人工_定额重算(),"拆分子项",?
#{
->拆分子项.type == "人工"
:
拆分子项.预算价不含税 * 拆分子项.数量 * #{
->工程量.调差类型 == "建筑":@工程信息.建筑人工调差系数 /100;
->工程量.调差类型 == "建筑修缮":@工程信息.建筑修缮人工调差系数 /100;
->工程量.调差类型 == "建筑拆除":@工程信息.建筑拆除人工调差系数 /100;
};
} * 人材机.数量);
});})
}
BEGIN:建筑拆分人工材料_价差含税
${
sum(_过滤定额(),"工程量",?工程量.数量 * 工程量.材料系数 * 工程量.定额系数 * #{
->工程量.调差类型 == "建筑" || 工程量.调差类型 == "建筑拆除" || 工程量.调差类型 == "建筑修缮"
:
sum(_过滤材料(),"人材机",?#{
->人材机.拆分 == 0
:
0;
->人材机.拆分 == 1
:
sum(_过滤人工_定额重算(),"拆分子项",?
#{
->拆分子项.type == "人工"
:
拆分子项.预算价含税 * 拆分子项.数量 * #{
->工程量.调差类型 == "建筑":@工程信息.建筑人工调差系数 /100;
->工程量.调差类型 == "建筑修缮":@工程信息.建筑修缮人工调差系数 /100;
->工程量.调差类型 == "建筑拆除":@工程信息.建筑拆除人工调差系数 /100;
};
} * 人材机.数量);
});})
}
@@ -1,456 +0,0 @@
///////////////////////////////////////////////////////////////
//
// 过滤条件
//
///////////////////////////////////////////////////////////////
BEGIN:_过滤人工_定额重算
${
filter(items,"人材机",?人材机.type == "人工")
}
BEGIN:_过滤材料_定额重算
${
filter(items,"人材机",?人材机.type == "材料")
}
//BEGIN:_过滤甲供材料_定额重算
//${
// filter(items,"人材机",?人材机.type == "材料" && 人材机.供货方 == "甲供")
//}
//BEGIN:_过滤乙供材料_定额重算
//${
// filter(items,"人材机",?人材机.type == "材料" && 人材机.供货方 == "乙供")
//}
BEGIN:_过滤机械_定额重算
${
filter(items,"人材机",?人材机.type == "机械")
}
///////////////////////////////////////////////////////////////
//*************************单条人工费:人工费************************
BEGIN:_普通人工费_定额重算
${
sum(source, "工程量",?sum(_过滤人工_定额重算(),"人材机",?人材机.数量 * 人材机.预算价不含税))
}
BEGIN:人工费_定额重算
${
round(_普通人工费_定额重算(),2)
}
//*************************单条材料费_不含税(甲供+乙供):材料费************************
BEGIN:_普通材料费_定额重算
${
sum(source, "工程量",?sum(_过滤材料_定额重算(),"人材机",?#{
->in(人材机.编码,"C10006,C99010101") == 0:
#{
->人材机.拆分 == 0:人材机.数量 * 人材机.预算价不含税;
->人材机.拆分 == 1:人材机.数量 * round(?round(?sum(_过滤人工_定额重算(),"拆分子项",?round(?拆分子项.数量,4) * 拆分子项.预算价不含税),2)
+round(?sum(_过滤材料_定额重算(),"拆分子项",?round(?拆分子项.数量,4) * 拆分子项.预算价不含税),2)
+round(?sum(_过滤机械_定额重算(),"拆分子项",?round(?拆分子项.数量,4) * 拆分子项.预算价不含税),2),4);
};
}))
}
BEGIN:其他材料费_定额重算
${
sum(source, "工程量",?sum(_过滤材料_定额重算(),"人材机",?#{->in(人材机.编码,"C10006,C99010101"):_普通材料费_定额重算() * 人材机.数量 / 100;}))
}
BEGIN:材料费_定额重算
${
round(_普通材料费_定额重算()+其他材料费_定额重算(),2)
}
//*************************单条材料费_含税(甲供+乙供):材料费_含税************************
BEGIN:_普通材料费_定额重算_含税
${
sum(source, "工程量",?sum(_过滤材料_定额重算(),"人材机",?#{
->in(人材机.编码,"C10006,C99010101") == 0:
#{
->人材机.拆分 == 0:人材机.数量 * 人材机.预算价含税;
->人材机.拆分 == 1:人材机.数量 * round(?round(?sum(_过滤人工_定额重算(),"拆分子项",?round(?拆分子项.数量,4) * 拆分子项.预算价含税),2)
+round(?sum(_过滤材料_定额重算(),"拆分子项",?round(?拆分子项.数量,4) * 拆分子项.预算价含税),2)
+round(?sum(_过滤机械_定额重算(),"拆分子项",?round(?拆分子项.数量,4) * 拆分子项.预算价含税),2),4);
};
}))
}
BEGIN:其他材料费_定额重算_含税
${
sum(source, "工程量",?sum(_过滤材料_定额重算(),"人材机",?#{->in(人材机.编码,"C10006,C99010101"):_普通材料费_定额重算_含税() * 人材机.数量 / 100;}))
}
BEGIN:材料费_定额重算_含税
${
round(_普通材料费_定额重算_含税()+其他材料费_定额重算_含税(),2)
}
//*************************单条甲供材料费_不含税:甲供材料费************************
BEGIN:_甲供普通材料费_定额重算
${
sum(source, "工程量",?sum(_过滤材料_定额重算(),"人材机",?#{
->in(人材机.编码,"C10006,C99010101") == 0:
#{
->人材机.拆分 == 0 && 人材机.供货方 == "甲供":人材机.数量 * 人材机.预算价不含税;
->人材机.拆分 == 1:人材机.数量 * round(?round(?sum(items,"拆分子项",?#{->拆分子项.供货方 == "甲供" && 拆分子项.type == "人工":round(?拆分子项.数量,4) * 拆分子项.预算价不含税;}),2)
+round(?sum(items,"拆分子项",?#{->拆分子项.供货方 == "甲供" && 拆分子项.type == "材料":round(?拆分子项.数量,4) * 拆分子项.预算价不含税;}),2)
+round(?sum(items,"拆分子项",?#{->拆分子项.供货方 == "甲供" && 拆分子项.type == "机械":round(?拆分子项.数量,4) * 拆分子项.预算价不含税;}),2),4);
};
}))
}
BEGIN:_甲供其他材料费_定额重算
${
sum(source, "工程量",?sum(items,"人材机",?#{->in(人材机.编码,"C10006,C99010101") && 人材机.供货方 == "甲供":_普通材料费_定额重算() * 人材机.数量 / 100;}))
}
BEGIN:甲供材料费_定额重算
${
round(_甲供普通材料费_定额重算()+_甲供其他材料费_定额重算(),2)
}
//*************************单条甲供材料费_含税:甲供材料费_含税************************
BEGIN:_甲供普通材料费_定额重算_含税
${
sum(source, "工程量",?sum(_过滤材料_定额重算(),"人材机",?#{
->in(人材机.编码,"C10006,C99010101") == 0:
#{
->人材机.拆分 == 0 && 人材机.供货方 == "甲供":人材机.数量 * 人材机.预算价含税;
->人材机.拆分 == 1:人材机.数量 * round(?round(?sum(items,"拆分子项",?#{->拆分子项.供货方 == "甲供" && 拆分子项.type == "人工":round(?拆分子项.数量,4) * 拆分子项.预算价含税;}),2)
+round(?sum(items,"拆分子项",?#{->拆分子项.供货方 == "甲供" && 拆分子项.type == "材料":round(?拆分子项.数量,4) * 拆分子项.预算价含税;}),2)
+round(?sum(items,"拆分子项",?#{->拆分子项.供货方 == "甲供" && 拆分子项.type == "机械":round(?拆分子项.数量,4) * 拆分子项.预算价含税;}),2),4);
};
}))
}
BEGIN:_甲供其他材料费_定额重算_含税
${
sum(source, "工程量",?sum(items,"人材机",?#{->in(人材机.编码,"C10006,C99010101") && 人材机.供货方 == "甲供":_普通材料费_定额重算_含税() * 人材机.数量 / 100;}))
}
BEGIN:甲供材料费_定额重算_含税
${
round(_甲供普通材料费_定额重算_含税()+_甲供其他材料费_定额重算_含税(),2)
}
//*************************单条机械费:机械费************************
BEGIN:_普通机械费_定额重算
${
sum(source, "工程量", ?sum(_过滤机械_定额重算(),"人材机",?#{
->人材机.编码 != "J09001" && 人材机.编码 != "J99-01-098":人材机.数量 * 人材机.预算价不含税;
}))
}
BEGIN:其他机械费_定额重算
${
sum(source, "工程量", ?sum(items,"人材机",?#{
->人材机.编码 == "J09001" || 人材机.编码 == "J99-01-098":_普通机械费_定额重算()*人材机.数量 / 100;
}))
}
BEGIN:机械费_定额重算
${
round(_普通机械费_定额重算()+其他机械费_定额重算(),2)
}
//*************************基价************************
BEGIN:基价_定额重算
${
sum(source, "工程量", ?round(工程量.人工费 + 工程量.材料费 +工程量.机械费, 2))
}
//*************************工程量界面定额“单价不含税”************************
BEGIN:单价_定额重算
${
sum(source, "定额", ?round(定额.人工费*定额.人工系数*定额.定额系数+定额.材料费*定额.材料系数*定额.定额系数+定额.机械费*定额.机械系数*定额.定额系数, 2))
}
//*************************消材拆分父级预算价不含税价重算************************
BEGIN:拆分材料父级预算价_定额重算_不含税
${
sum(source, "人材机", ?#{->人材机.拆分 == 1:round(?_拆分子级人工预算合价_消材_不含税() + _拆分子级机械预算合价_消材_不含税() + _拆分子级材料预算合价_消材_不含税(),4);})
}
BEGIN:_拆分子级人工预算合价_消材_不含税
${
round(?sum(items,"拆分子项",?#{->拆分子项.type == "人工":round(?拆分子项.数量,4) * 拆分子项.预算价不含税;}),2)
}
BEGIN:_拆分子级机械预算合价_消材_不含税
${
round(?sum(items,"拆分子项",?#{->拆分子项.type == "机械":round(?拆分子项.数量,4) * 拆分子项.预算价不含税;}),2)
}
BEGIN:_拆分子级材料预算合价_消材_不含税
${
round(?sum(items,"拆分子项",?#{->拆分子项.type == "材料":round(?拆分子项.数量,4) * 拆分子项.预算价不含税;}),2)
}
//*************************消材拆分父级预算价含税价重算************************
BEGIN:拆分材料父级预算价_定额重算_含税
${
sum(source, "人材机", ?#{->人材机.拆分 == 1:round(?_拆分子级人工预算合价_消材_含税() + _拆分子级机械预算合价_消材_含税() + _拆分子级材料预算合价_消材_含税(),4);})
}
BEGIN:_拆分子级人工预算合价_消材_含税
${
round(?sum(items,"拆分子项",?#{->拆分子项.type == "人工":round(?拆分子项.数量,4) * 拆分子项.预算价含税;}),2)
}
BEGIN:_拆分子级机械预算合价_消材_含税
${
round(?sum(items,"拆分子项",?#{->拆分子项.type == "机械":round(?拆分子项.数量,4) * 拆分子项.预算价含税;}),2)
}
BEGIN:_拆分子级材料预算合价_消材_含税
${
round(?sum(items,"拆分子项",?#{->拆分子项.type == "材料":round(?拆分子项.数量,4) * 拆分子项.预算价含税;}),2)
}
//*************************消材拆分父级市场价不含税重算************************
BEGIN:拆分材料父级市场价_定额重算_不含税
${
sum(source, "人材机", ?#{->人材机.拆分 == 1:round(?_拆分子级人工市场价合价_消材_不含税() + _拆分子级机械市场价合价_消材_不含税() + _拆分子级材料市场价合价_消材_不含税(),4);})
}
BEGIN:_拆分子级人工市场价合价_消材_不含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type == "人工" && @工程信息.项目类型 == "应急工程":round(?拆分子项.数量,4) * 拆分子项.市场价不含税;
->拆分子项.type == "人工" && @工程信息.项目类型 != "应急工程":round(?拆分子项.数量,4) * 拆分子项.预算价不含税 *#{
->(@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑拆除":
#{
->@工程信息.建筑拆除材机按系数调差 == "是" : 1+@工程信息.建筑拆除材料调差系数 /100;
->@工程信息.建筑拆除材机按系数调差 == "否" : 1+@工程信息.建筑拆除人工调差系数 /100;
};
->@工程信息.工程性质 == "检修" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑修缮":
#{
->@工程信息.建筑修缮材机按系数调差 == "是" : 1+@工程信息.建筑修缮材料调差系数 /100;
->@工程信息.建筑修缮材机按系数调差 == "否" : 1+@工程信息.建筑修缮人工调差系数 /100;
};
->@工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "设备检修":1+@工程信息.设备检修材料调差系数 /100;
->@工程信息.工程类型 == "配网" || @工程信息.项目划分 == "输电线路工程":
#{
->拆分子项.@_@材机按系数调差 == "是" : 1+拆分子项.@_@材料调差系数 /100;
->拆分子项.@_@材机按系数调差 == "否" : 1+拆分子项.@_@人工调差系数 /100;
};
->@工程信息.工程性质 == "技改" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑":
#{
->@工程信息.建筑材机按系数调差 == "是" : 1+@工程信息.建筑材料调差系数 /100;
->@工程信息.建筑材机按系数调差 == "否" : 1+@工程信息.建筑人工调差系数 /100;
};
->@工程信息.工程性质 == "技改" && @工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装":1+@工程信息.安装材料调差系数 /100;
->@工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装拆除":1+@工程信息.安装拆除材料调差系数 /100;
};
}), 2)
}
BEGIN:_拆分子级机械市场价合价_消材_不含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type == "机械" && @工程信息.项目类型 == "应急工程":round(?拆分子项.数量,4) * 拆分子项.市场价不含税;
->拆分子项.type == "机械" && @工程信息.项目类型 != "应急工程":round(?拆分子项.数量,4) * #{
->(@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑拆除":
#{
->@工程信息.建筑拆除材机按系数调差 == "是" : 拆分子项.预算价不含税*(1+@工程信息.建筑拆除材料调差系数 /100);
->@工程信息.建筑拆除材机按系数调差 == "否" : 拆分子项.市场价不含税;
};
->@工程信息.工程性质 == "检修" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑修缮":
#{
->@工程信息.建筑修缮材机按系数调差 == "是" : 拆分子项.预算价不含税*(1+@工程信息.建筑修缮材料调差系数 /100);
->@工程信息.建筑修缮材机按系数调差 == "否" : 拆分子项.市场价不含税;
};
->@工程信息.工程性质 == "检修" && @工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "设备检修":拆分子项.预算价不含税*(1+@工程信息.设备检修材料调差系数 / 100);
->@工程信息.工程类型 == "配网" || @工程信息.项目划分 == "输电线路工程":
#{
->拆分子项.@_@材机按系数调差 == "是" : 拆分子项.预算价不含税*(1+拆分子项.@_@材料调差系数 /100);
->拆分子项.@_@材机按系数调差 == "否" : 拆分子项.市场价不含税;
};
->@工程信息.工程性质 == "技改" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程")&& 拆分子项.调差类型 == "建筑":
#{
->@工程信息.建筑材机按系数调差 == "是" : 拆分子项.预算价不含税*(1+@工程信息.建筑材料调差系数 /100);
->@工程信息.建筑材机按系数调差 == "否" : 拆分子项.市场价不含税;
};
->@工程信息.工程性质 == "技改" && @工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装":拆分子项.预算价不含税*(1+@工程信息.建筑材料调差系数 /100);
->@工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装拆除":拆分子项.预算价不含税*(1+@工程信息.安装拆除材料调差系数 /100);
};
}), 2)
}
BEGIN:_拆分子级材料市场价合价_消材_不含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type == "材料" && @工程信息.项目类型 == "应急工程":round(?拆分子项.数量,4) * 拆分子项.市场价不含税;
->拆分子项.type == "材料" && @工程信息.项目类型 != "应急工程":round(?拆分子项.数量,4) * #{
->(@工程信息.工程类型 == "变电" || @工程信息.工程类型 == "线路")&& 拆分子项.调差类型 == "建筑拆除":
#{
->@工程信息.建筑拆除材机按系数调差 == "是" : 拆分子项.预算价不含税*(1+@工程信息.建筑拆除材料调差系数 / 100);
->@工程信息.建筑拆除材机按系数调差 == "否" : 拆分子项.市场价不含税;
};
->@工程信息.工程性质 == "检修" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑修缮":
#{
->@工程信息.建筑修缮材机按系数调差 == "是" : 拆分子项.预算价不含税*(1+@工程信息.建筑修缮材料调差系数 /100);
->@工程信息.建筑修缮材机按系数调差 == "否" : 拆分子项.市场价不含税;
};
->@工程信息.工程性质 == "检修" && @工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "设备检修":拆分子项.预算价不含税*(1+@工程信息.设备检修材料调差系数 /100);
->@工程信息.工程类型 == "配网" || @工程信息.项目划分 == "输电线路工程":
#{
->拆分子项.@_@材机按系数调差 == "是" : 拆分子项.预算价不含税*(1+拆分子项.@_@材料调差系数 /100);
->拆分子项.@_@材机按系数调差 == "否" : 拆分子项.市场价不含税;
};
->@工程信息.工程性质 == "技改" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑":
#{
->@工程信息.建筑材机按系数调差 == "是" : 拆分子项.预算价不含税*(1+@工程信息.建筑材料调差系数 /100);
->@工程信息.建筑材机按系数调差 == "否" : 拆分子项.市场价不含税;
};
->@工程信息.工程性质 == "技改" && @工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装":拆分子项.预算价不含税*(1+@工程信息.安装材料调差系数 /100);
->@工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装拆除":拆分子项.预算价不含税*(1+@工程信息.安装拆除材料调差系数 /100);
};
}), 2)
}
//*************************消材拆分父级市场价含税重算************************
BEGIN:拆分材料父级市场价_定额重算_含税
${
sum(source, "人材机", ?#{->人材机.拆分 == 1:round(?_拆分子级人工市场价合价_消材_含税() + _拆分子级机械市场价合价_消材_含税() + _拆分子级材料市场价合价_消材_含税(),4);})
}
BEGIN:_拆分子级人工市场价合价_消材_含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type == "人工" && @工程信息.项目类型 == "应急工程":round(?拆分子项.数量,4) * 拆分子项.市场价含税;
->拆分子项.type == "人工" && @工程信息.项目类型 != "应急工程":round(?拆分子项.数量,4) * 拆分子项.预算价含税 *#{
->(@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑拆除":
#{
->@工程信息.建筑拆除材机按系数调差 == "是" : 1+@工程信息.建筑拆除材料调差系数 /100;
->@工程信息.建筑拆除材机按系数调差 == "否" : 1+@工程信息.建筑拆除人工调差系数 /100;
};
->@工程信息.工程性质 == "检修" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑修缮":
#{
->@工程信息.建筑修缮材机按系数调差 == "是" : 1+@工程信息.建筑修缮材料调差系数 /100;
->@工程信息.建筑修缮材机按系数调差 == "否" : 1+@工程信息.建筑修缮人工调差系数 /100;
};
->@工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "设备检修":1+@工程信息.设备检修材料调差系数 /100;
->@工程信息.工程类型 == "配网" || @工程信息.项目划分 == "输电线路工程":
#{
->拆分子项.@_@材机按系数调差 == "是" : 1+拆分子项.@_@材料调差系数 /100;
->拆分子项.@_@材机按系数调差 == "否" : 1+拆分子项.@_@人工调差系数 /100;
};
->@工程信息.工程性质 == "技改" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑":
#{
->@工程信息.建筑材机按系数调差 == "是" : 1+@工程信息.建筑材料调差系数 /100;
->@工程信息.建筑材机按系数调差 == "否" : 1+@工程信息.建筑人工调差系数 /100;
};
->@工程信息.工程性质 == "技改" && @工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装":1+@工程信息.安装材料调差系数 /100;
->@工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装拆除":1+@工程信息.安装拆除材料调差系数 /100;
};
}), 2)
}
BEGIN:_拆分子级机械市场价合价_消材_含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type == "机械" && @工程信息.项目类型 == "应急工程":round(?拆分子项.数量,4) * 拆分子项.市场价含税;
->拆分子项.type == "机械" && @工程信息.项目类型 != "应急工程":round(?拆分子项.数量,4) * #{
->(@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑拆除":
#{
->@工程信息.建筑拆除材机按系数调差 == "是" : 拆分子项.预算价含税*(1+@工程信息.建筑拆除材料调差系数 /100);
->@工程信息.建筑拆除材机按系数调差 == "否" : 拆分子项.市场价含税;
};
->@工程信息.工程性质 == "检修" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑修缮":
#{
->@工程信息.建筑修缮材机按系数调差 == "是" : 拆分子项.预算价含税*(1+@工程信息.建筑修缮材料调差系数 /100);
->@工程信息.建筑修缮材机按系数调差 == "否" : 拆分子项.市场价含税;
};
->@工程信息.工程性质 == "检修" && @工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "设备检修":拆分子项.预算价含税*(1+@工程信息.设备检修材料调差系数 / 100);
->@工程信息.工程类型 == "配网" || @工程信息.项目划分 == "输电线路工程":
#{
->拆分子项.@_@材机按系数调差 == "是" : 拆分子项.预算价含税*(1+拆分子项.@_@材料调差系数 /100);
->拆分子项.@_@材机按系数调差 == "否" : 拆分子项.市场价含税;
};
->@工程信息.工程性质 == "技改" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程")&& 拆分子项.调差类型 == "建筑":
#{
->@工程信息.建筑材机按系数调差 == "是" : 拆分子项.预算价含税*(1+@工程信息.建筑材料调差系数 /100);
->@工程信息.建筑材机按系数调差 == "否" : 拆分子项.市场价含税;
};
->@工程信息.工程性质 == "技改" && @工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装":拆分子项.预算价含税*(1+@工程信息.建筑材料调差系数 /100);
->@工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装拆除":拆分子项.预算价含税*(1+@工程信息.安装拆除材料调差系数 /100);
};
}), 2)
}
BEGIN:_拆分子级材料市场价合价_消材_含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type == "材料" && @工程信息.项目类型 == "应急工程":round(?拆分子项.数量,4) * 拆分子项.市场价含税;
->拆分子项.type == "材料" && @工程信息.项目类型 != "应急工程":round(?拆分子项.数量,4) * #{
->(@工程信息.工程类型 == "变电" || @工程信息.工程类型 == "线路")&& 拆分子项.调差类型 == "建筑拆除":
#{
->@工程信息.建筑拆除材机按系数调差 == "是" : 拆分子项.预算价含税*(1+@工程信息.建筑拆除材料调差系数 / 100);
->@工程信息.建筑拆除材机按系数调差 == "否" : 拆分子项.市场价含税;
};
->@工程信息.工程性质 == "检修" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑修缮":
#{
->@工程信息.建筑修缮材机按系数调差 == "是" : 拆分子项.预算价含税*(1+@工程信息.建筑修缮材料调差系数 /100);
->@工程信息.建筑修缮材机按系数调差 == "否" : 拆分子项.市场价含税;
};
->@工程信息.工程性质 == "检修" && @工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "设备检修":拆分子项.预算价含税*(1+@工程信息.设备检修材料调差系数 /100);
->@工程信息.工程类型 == "配网" || @工程信息.项目划分 == "输电线路工程":
#{
->拆分子项.@_@材机按系数调差 == "是" : 拆分子项.预算价含税*(1+拆分子项.@_@材料调差系数 /100);
->拆分子项.@_@材机按系数调差 == "否" : 拆分子项.市场价含税;
};
->@工程信息.工程性质 == "技改" && (@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程") && 拆分子项.调差类型 == "建筑":
#{
->@工程信息.建筑材机按系数调差 == "是" : 拆分子项.预算价含税*(1+@工程信息.建筑材料调差系数 /100);
->@工程信息.建筑材机按系数调差 == "否" : 拆分子项.市场价含税;
};
->@工程信息.工程性质 == "技改" && @工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装":拆分子项.预算价含税*(1+@工程信息.安装材料调差系数 /100);
->@工程信息.工程类型 == "线路" && 拆分子项.调差类型 == "安装拆除":拆分子项.预算价含税*(1+@工程信息.安装拆除材料调差系数 /100);
};
}), 2)
}
//*************************未计价含税重算:父级含税预算价************************
//BEGIN:拆分父级预算价_定额重算_含税
//${
// sum(source, "未计价", ?#{->未计价.拆分 == 1:_拆分子级人材机预算合价_含税();})
//}
//BEGIN:_拆分子级人材机预算合价_含税
//${
// round(?sum(items,"拆分子项",?(round(?拆分子项.含量,4) * 拆分子项.预算价含税)),2)
//}
//*************************未计价含税重算:父级含税市场价************************
BEGIN:拆分父级市场价_定额重算_含税
${
sum(source, "未计价", ?#{->未计价.拆分 == 1:_拆分子级人材机市场合价_含税();})
}
BEGIN:_拆分子级人材机市场合价_含税
${
round(?sum(items,"拆分子项",?(round(?拆分子项.含量,4) * 拆分子项.市场价含税)),2)
}
//*************************未计价不含税重算:父级不含税预算价************************
//BEGIN:拆分父级预算价_定额重算_不含税
//${
// sum(source, "未计价", ?#{->未计价.拆分 == 1:_拆分子级人材机预算合价_不含税();})
//}
//BEGIN:_拆分子级人材机预算合价_不含税
//${
// round(?sum(items,"拆分子项",?(round(?拆分子项.含量,4) * 拆分子项.预算价不含税)), 2)
//}
//*************************未计价不含税重算:父级不含税市场价************************
BEGIN:拆分父级市场价_定额重算_不含税
${
sum(source, "未计价", ?#{->未计价.拆分 == 1:_拆分子级人材机市场合价_不含税();})
}
BEGIN:_拆分子级人材机市场合价_不含税
${
round(?sum(items,"拆分子项",?(round(?拆分子项.含量,4) * 拆分子项.市场价不含税)), 2)
}
@@ -1,545 +0,0 @@
//----------------------------陕西报表:工程量清单报表(宏变量)-------------------------------------------------
BEGIN:甲供主要材料费含税_合价_拆分
${
?甲供主材费含税_合价_拆分()+甲供主材损耗费含税_合价_拆分() + 甲供主材配送费_合价_拆分()
}
BEGIN:乙供主要材料费不含税_合价_拆分
${
?乙供主材费不含税_合价_拆分()+乙供主材损耗费不含税_合价_拆分() + 乙供主材配送费_合价_拆分()
}
BEGIN:甲供主要材料价差含税_合价_拆分
${
?甲供主材价差含税_合价_拆分()+甲供主材损耗价差含税_合价_拆分()
}
BEGIN:乙供主要材料价差不含税_合价_拆分
${
?乙供主材价差不含税_合价_拆分()+乙供主材损耗价差不含税_合价_拆分()
}
BEGIN:甲供配件购置费含税_合价_拆分
${
?甲供配件费含税_合价_拆分()+甲供配件费运杂费_合价_拆分() + 甲供配件配送费_合价_拆分()
}
BEGIN:乙供配件购置费不含税_合价_拆分
${
?乙供配件费不含税_合价_拆分()+乙供配件费运杂费_合价_拆分() + 乙供配件配送费_合价_拆分()
}
//----------------------------陕西报表:工程量清单报表(基础变量)-------------------------------------------------
BEGIN:甲供主材费含税_合价_拆分
${
sum(_过滤甲供主材拆分(),"拆分子项",?拆分子项.数量 * 拆分子项.预算价含税)
}
BEGIN:乙供主材费不含税_合价_拆分
${
sum(_过滤乙供主材拆分(),"拆分子项",?拆分子项.数量 * 拆分子项.预算价不含税)
}
BEGIN:甲供主材损耗费含税_合价_拆分
${
sum(_过滤甲供主材拆分(),"拆分子项",?拆分子项.数量 * 拆分子项.预算价含税 * 拆分子项.损耗 /100)
}
BEGIN:乙供主材损耗费不含税_合价_拆分
${
sum(_过滤乙供主材拆分(),"拆分子项",?拆分子项.数量 * 拆分子项.预算价不含税 * 拆分子项.损耗 /100)
}
BEGIN:甲供主材配送费_合价_拆分
${
sum(_过滤甲供主材拆分(),"拆分子项",?
#{
->拆分子项.集中配送 == "1"
:
拆分子项.数量 * (1 + 拆分子项.损耗 / 100) * 拆分子项.预算价含税;
}
) * @工程信息.甲供主材配送费费率 / 100
}
BEGIN:乙供主材配送费_合价_拆分
${
sum(_过滤乙供主材拆分(),"拆分子项",?
#{
->拆分子项.集中配送 == "1"
:
拆分子项.数量 * (1 + 拆分子项.损耗 / 100) * 拆分子项.预算价含税;
}
) * @工程信息.甲供主材配送费费率 / 100
}
BEGIN:甲供主材价差含税_合价_拆分
${
sum(_过滤甲供主材拆分(),"拆分子项",?
#{
->:
拆分子项.数量 * (拆分子项.市场价含税 - 拆分子项.预算价含税);
}
)
}
BEGIN:乙供主材价差不含税_合价_拆分
${
sum(_过滤乙供主材拆分(),"拆分子项",?
#{
->:
拆分子项.数量 * (拆分子项.市场价不含税 - 拆分子项.预算价不含税);
}
)
}
BEGIN:甲供主材损耗价差含税_合价_拆分
${
sum(_过滤甲供主材拆分(),"拆分子项",?
#{
->:
拆分子项.数量 * (拆分子项.市场价含税 - 拆分子项.预算价含税) * 拆分子项.损耗 /100;
}
)
}
BEGIN:乙供主材损耗价差不含税_合价_拆分
${
sum(_过滤乙供主材拆分(),"拆分子项",?
#{
->:
拆分子项.数量 * (拆分子项.市场价不含税 - 拆分子项.预算价不含税) * 拆分子项.损耗 /100;
}
)
}
BEGIN:甲供配件费含税_合价_拆分
${
sum(_过滤甲供配件拆分(),"拆分子项",?
#{
->拆分子项.调差类型 == "建筑修缮" || 拆分子项.调差类型 == "设备检修" || 拆分子项.调差类型 == "检修"
:
拆分子项.数量 * (1 + 拆分子项.损耗 / 100) *
#{
->:
拆分子项.市场价含税;
};
})
}
BEGIN:乙供配件费不含税_合价_拆分
${
sum(_过滤乙供配件拆分(),"拆分子项",?
#{
->拆分子项.调差类型 == "建筑修缮" || 拆分子项.调差类型 == "设备检修" || 拆分子项.调差类型 == "检修"
:
拆分子项.数量 * (1 + 拆分子项.损耗 / 100) *
#{
->:
拆分子项.市场价不含税;
};
})
}
BEGIN:甲供配件费运杂费_合价_拆分
${
sum(_过滤甲供配件拆分(),"拆分子项",?
#{
->拆分子项.调差类型 == "建筑修缮" || 拆分子项.调差类型 == "设备检修" || 拆分子项.调差类型 == "检修"
:
拆分子项.数量 * (1 + 拆分子项.损耗 / 100) * 拆分子项.运杂费率 / 100 * 拆分子项.市场价含税;
}
)
}
BEGIN:乙供配件费运杂费_合价_拆分
${
sum(_过滤乙供配件拆分(),"拆分子项",?
#{
->拆分子项.调差类型 == "建筑修缮" || 拆分子项.调差类型 == "设备检修" || 拆分子项.调差类型 == "检修"
:
拆分子项.数量 * (1 + 拆分子项.损耗 / 100) * 拆分子项.运杂费率 / 100 * 拆分子项.市场价含税;
}
)
}
BEGIN:甲供配件配送费_合价_拆分
${
sum(_过滤甲供配件拆分(),"拆分子项",?#{
->配件.调差类型 == "建筑修缮" || 配件.调差类型 == "设备检修" || 配件.调差类型 == "检修"
:
#{
->拆分子项.集中配送 == "1"
:
拆分子项.数量 * (1 + 拆分子项.损耗 / 100) * 拆分子项.市场价含税;
};} * @工程信息.甲供配件配送费费率 / 100 )
}
BEGIN:乙供配件配送费_合价_拆分
${
sum(_过滤乙供配件拆分(),"拆分子项",?#{
->拆分子项.调差类型 == "建筑修缮" || 拆分子项.调差类型 == "设备检修" || 拆分子项.调差类型 == "检修"
:
#{
->拆分子项.集中配送 == "1"
:
拆分子项.数量 * (1 + 拆分子项.损耗 / 100) * 拆分子项.市场价含税;
};} * @工程信息.甲供配件配送费费率 / 100 )
}
//----------------------------清单模式:综合单价分析表中调用-------------------------------------------------
BEGIN:建筑设备购置费
${
?@建筑.甲供设备费含税 + @建筑.甲供设备运杂费 + @建筑.甲供设备配送费
}
//------------------表二调用-------------------------------------------
BEGIN:设备购置费_报表_建筑
${
?甲供设备费含税() + 甲供设备运杂费() + 甲供设备配送费() + 乙供设备费不含税() + 乙供设备运杂费() + 乙供设备配送费()
}
BEGIN:设备购置费_报表_安装
${
?甲供设备费含税() + 甲供设备运杂费() + 甲供设备配送费() + 乙供设备费不含税() + 乙供设备运杂费() + 乙供设备配送费() + 乙供设备税金()
}
BEGIN:配件购置费_报表
${
?甲供配件费含税() + 甲供配件运杂费() + 甲供配件配送费() + 乙供配件费不含税() + 乙供配件运杂费() + 乙供配件配送费() + 乙供配件税金()
}
BEGIN:设备费_报表
${
?甲供设备费含税() + 乙供设备费不含税()
}
//------------------配件费_报表未调取-------------------------------------------
BEGIN:配件费_报表
${
?甲供配件费含税() + 乙供配件费不含税()
}
BEGIN:主材费_报表
${
?甲供主要材料费含税() + 乙供主要材料费不含税()
}
//------------------材料汇总表中调取-------------------------------------------
BEGIN:材料费_报表
${
?#{
->@工程信息.工程类型=="变电" || @工程信息.工程类型=="发电"
:
甲供材料费() + _乙供材料费_非宏变量();
->@工程信息.工程类型=="线路"
:
材料费();
->@工程信息.工程类型=="配网"
:
_乙供材料费_非宏变量();
}
}
BEGIN:机械费_报表
${
?#{
->@工程信息.工程类型=="变电" || @工程信息.工程类型=="发电"
:
_机械费_不含特殊费();
->@工程信息.工程类型=="线路"
:
机械费();
->@工程信息.工程类型=="配网"
:
_机械费_不含特殊费()+地形机械费();
}
}
BEGIN:材料费_价差报表
${
?#{
->@工程信息.工程类型=="变电" || @工程信息.工程类型=="发电"
:
甲供材料费()+乙供材料费();
->@工程信息.工程类型=="线路" || @工程信息.工程类型=="配网"
:
材料费();
}
}
BEGIN:材料费_价差汇总报表
${
?材料价差();
}
BEGIN:机械费_价差汇总报表
${
?机械价差();
}
BEGIN:机械费_价差报表
${
?机械费()
}
BEGIN:人工费_价差报表
${
?人工费()
}
BEGIN:总重_价差报表
${
sum(source,"主材",?主材.单重 * 主材.数量 * ( 1 + 主材.损耗 / 100))
}
BEGIN:其他材料费代码_报表
${
"C10006,C99010101"
}
BEGIN:其他机械费代码_报表
${
"J09001,J99-01-098"
}
BEGIN:普通材料费_报表
${
sum(source,"定额",?sum(_过滤材料(),"材料",?#{
->in(材料.编码,"C10006,C99010101") == 0 :
材料.数量 * 材料.预算价不含税;
}
)
)
}
BEGIN:普通机械费_报表
${
sum(source,"定额",?sum(_过滤机械(),"机械",?#{
->机械.编码 != "J09001" && 机械.编码 != "J99-01-098" :
机械.数量 * 机械.预算价不含税;
}
)
)
}
//------------------主材/配件汇总表中调取(含税市场价)-------------------------------------------
BEGIN:拆分父级市场价_报表_含税
${
sum(source, "未计价", ?#{
->未计价.拆分 == 1
:
round(?_拆分子级人工市场价合价_报表_含税() + _拆分子级机械市场价合价_报表_含税() + _拆分子级材料市场价合价_报表_含税(), 4);
})
}
BEGIN:_拆分子级人工市场价合价_报表_含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type == "人工"
:
round(?拆分子项.含量,4) * 拆分子项.预算价含税 * #{
->@工程信息.工程类型 == "配网" || @工程信息.项目划分 == "输电线路工程"
:
1+拆分子项.@_@人工调差系数 / 100;
->@工程信息.工程性质 == "技改" && @工程信息.工程类型 != "配网"
:
1+#{
->拆分子项.调差类型 == "建筑"
:
@工程信息.建筑人工调差系数 / 100;
->拆分子项.调差类型 == "安装"
:
@工程信息.安装人工调差系数 / 100;
->拆分子项.调差类型 == "建筑拆除"
:
@工程信息.建筑拆除人工调差系数 / 100;
->拆分子项.调差类型 == "安装拆除"
:
@工程信息.安装拆除人工调差系数 / 100;
};
->@工程信息.工程性质 == "检修" && @工程信息.工程类型 != "配网"
:
1+#{
->拆分子项.调差类型 == "安装拆除"
:
@工程信息.安装拆除人工调差系数 / 100;
->拆分子项.调差类型 == "建筑拆除"
:
@工程信息.建筑拆除人工调差系数 / 100;
->拆分子项.调差类型 == "建筑修缮"
:
@工程信息.建筑修缮人工调差系数 / 100;
->拆分子项.调差类型 == "设备检修"
:
@工程信息.设备检修人工调差系数 / 100;
};
};
}), 2)
}
BEGIN:_拆分子级机械市场价合价_报表_含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type == "机械"
:
round(?拆分子项.含量,4) * 拆分子项.预算价含税 * #{
->@工程信息.工程类型 == "配网" || @工程信息.项目划分 == "输电线路工程"
:
1+拆分子项.@_@机械调差系数 / 100;
->@工程信息.工程性质 == "技改" && @工程信息.工程类型 != "配网"
:
1+#{
->拆分子项.调差类型 == "建筑"
:
@工程信息.建筑机械调差系数 / 100;
->拆分子项.调差类型 == "安装"
:
@工程信息.安装机械调差系数 / 100;
->拆分子项.调差类型 == "建筑拆除"
:
@工程信息.建筑拆除机械调差系数 / 100;
->拆分子项.调差类型 == "安装拆除"
:
@工程信息.安装拆除机械调差系数 / 100;
};
->@工程信息.工程性质 == "检修" && @工程信息.工程类型 != "配网"
:
1+#{
->拆分子项.调差类型 == "安装拆除"
:
@工程信息.安装拆除机械调差系数 / 100;
->拆分子项.调差类型 == "建筑拆除"
:
@工程信息.建筑拆除机械调差系数 / 100;
->拆分子项.调差类型 == "建筑修缮"
:
@工程信息.建筑修缮机械调差系数 / 100;
->拆分子项.调差类型 == "设备检修"
:
@工程信息.设备检修机械调差系数 / 100;
};
};
}), 2)
}
BEGIN:_拆分子级材料市场价合价_报表_含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type != "人工" && 拆分子项.type != "机械"
:
round(?拆分子项.含量,4) * 拆分子项.市场价含税;
}), 2)
}
//------------------主材/配件汇总表中调取(不含税市场价)-------------------------------------------
BEGIN:拆分父级市场价_报表_不含税
${
sum(source, "未计价", ?#{
->未计价.拆分 == 1
:
round(?_拆分子级人工市场价合价_报表_不含税() + _拆分子级机械市场价合价_报表_不含税() + _拆分子级材料市场价合价_报表_不含税(), 4);
})
}
BEGIN:_拆分子级人工市场价合价_报表_不含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type == "人工"
:
round(?拆分子项.含量,4) * 拆分子项.预算价不含税 * #{
->@工程信息.工程类型 == "配网" || @工程信息.项目划分 == "输电线路工程"
:
1+拆分子项.@_@人工调差系数 / 100;
->@工程信息.工程性质 == "技改" && @工程信息.工程类型 != "配网"
:
1+#{
->拆分子项.调差类型 == "建筑"
:
@工程信息.建筑人工调差系数 / 100;
->拆分子项.调差类型 == "安装"
:
@工程信息.安装人工调差系数 / 100;
->拆分子项.调差类型 == "建筑拆除"
:
@工程信息.建筑拆除人工调差系数 / 100;
->拆分子项.调差类型 == "安装拆除"
:
@工程信息.安装拆除人工调差系数 / 100;
};
->@工程信息.工程性质 == "检修" && @工程信息.工程类型 != "配网"
:
1+#{
->拆分子项.调差类型 == "安装拆除"
:
@工程信息.安装拆除人工调差系数 / 100;
->拆分子项.调差类型 == "建筑拆除"
:
@工程信息.建筑拆除人工调差系数 / 100;
->拆分子项.调差类型 == "建筑修缮"
:
@工程信息.建筑修缮人工调差系数 / 100;
->拆分子项.调差类型 == "设备检修"
:
@工程信息.设备检修人工调差系数 / 100;
};
};
}), 2)
}
BEGIN:_拆分子级机械市场价合价_报表_不含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type == "机械"
:
round(?拆分子项.含量,4) * 拆分子项.预算价不含税 * #{
->@工程信息.工程类型 == "配网" || @工程信息.项目划分 == "输电线路工程"
:
1+拆分子项.@_@机械调差系数 / 100;
->@工程信息.工程性质 == "技改" && @工程信息.工程类型 != "配网"
:
1+#{
->拆分子项.调差类型 == "建筑"
:
@工程信息.建筑机械调差系数 / 100;
->拆分子项.调差类型 == "安装"
:
@工程信息.安装机械调差系数 / 100;
->拆分子项.调差类型 == "建筑拆除"
:
@工程信息.建筑拆除机械调差系数 / 100;
->拆分子项.调差类型 == "安装拆除"
:
@工程信息.安装拆除机械调差系数 / 100;
};
->@工程信息.工程性质 == "检修" && @工程信息.工程类型 != "配网"
:
1+#{
->拆分子项.调差类型 == "安装拆除"
:
@工程信息.安装拆除机械调差系数 / 100;
->拆分子项.调差类型 == "建筑拆除"
:
@工程信息.建筑拆除机械调差系数 / 100;
->拆分子项.调差类型 == "建筑修缮"
:
@工程信息.建筑修缮机械调差系数 / 100;
->拆分子项.调差类型 == "设备检修"
:
@工程信息.设备检修机械调差系数 / 100;
};
};
}), 2)
}
BEGIN:_拆分子级材料市场价合价_报表_不含税
${
round(?sum(items,"拆分子项",?#{
->拆分子项.type != "人工" && 拆分子项.type != "机械"
:
round(?拆分子项.含量,4) * 拆分子项.市场价不含税;
}), 2)
}
@@ -1,407 +0,0 @@
//------------------地形增加费-------------------------------------------
BEGIN:_地形人工系数
${
?#{
->(工程量.调差类型 == "建筑拆除" || 工程量.调差类型 == "安装拆除" || 工程量.调差类型 == "建筑拆除措施二" || 工程量.调差类型 == "安装拆除措施二") && 工程量.专业类型 != "余物清理":
#{
->@工程信息.工程性质 == "技改":
#{
->(in(工程量.编码,"JYX1-1~16")) || (工程量.地形费计算方式 == "工地运输(人力运输)混凝土杆、混凝土预制品、钢管杆、线材的运输(不含机械费)")
:
@拆除地形系数.工地运输人力运输混凝土杆混凝土预制品钢管杆线材的运输不含机械费;
->(in(工程量.编码,"JYX1-17~22")) || (工程量.地形费计算方式 == "工地运输(人力运输)金具、绝缘子、零星钢材、塔材、其他建筑安装材料的运输(不含机械费)")
:
@拆除地形系数.工地运输人力运输金具绝缘子零星钢材塔材其他建筑安装材料的运输不含机械费;
->(in(工程量.编码,"JYX1-24^108")) || (工程量.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
@拆除地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->(in(工程量.编码,"JYX2-1~232")) || (工程量.地形费计算方式 == "土石方工程(不含机械费)")
:
@拆除地形系数.土石方工程不含机械费;
->(in(工程量.编码,"JYX3-1~212,JGX1-1~17,XYX1-1~21,XYX3-1~6,CYX1-1~4")) || (工程量.地形费计算方式 == "基础工程")
:
@拆除地形系数.基础工程;
->(in(工程量.编码,"JYX4-1~192,JGX2-1~59,XYX2-1~79,CYX2-1~40")) || (工程量.地形费计算方式 == "杆塔工程")
:
@拆除地形系数.杆塔工程;
->(in(工程量.编码,"JGX3-1~54")) || (工程量.地形费计算方式 == "概算:架线工程")
:
@拆除地形系数.概算架线工程;
->(in(工程量.编码,"JYX5-1~60,XYX4-1~77,CYX3-1~27")) || (工程量.地形费计算方式 == "预算:架线工程一般放、紧线(不包含跨越架设、拦河线安装)")
:
@拆除地形系数.预算架线工程一般放紧线不包含跨越架设拦河线安装;
->(in(工程量.编码,"JYX5-61~119,CYX3-28~42")) || (工程量.地形费计算方式 == "预算:架线工程张力放紧线(不包含跨越架设、拦河线安装)")
:
@拆除地形系数.预算架线工程张力放紧线不包含跨越架设拦河线安装;
->(in(工程量.编码,"JYX5-245~253")) || (工程量.地形费计算方式 == "预算:架线工程光缆接续(不包括测量)")
:
@拆除地形系数.预算架线工程光缆接续不包括测量;
->(in(工程量.编码,"JYX6-1~172,JGX4-1~67,XYX5-1~223,CYX4-1~131")) || (工程量.地形费计算方式 == "附件工程")
:
@拆除地形系数.附件工程;
->(in(工程量.编码,"JGX6-1~4")) || (工程量.地形费计算方式 == "概算:辅助工程")
:
@拆除地形系数.概算辅助工程;
->(in(工程量.编码,"JYX8-1~25")) || (工程量.地形费计算方式 == "预算:辅助工程(基础辅助)施工道路,固沙,护坡、挡土墙及排洪沟砌筑,喷射混凝土护坡")
:
@拆除地形系数.预算辅助工程基础辅助施工道路固沙护坡挡土墙及排洪沟砌筑喷射混凝土护坡;
->(in(工程量.编码,"JYX8-26~45,JYX8-119~130,XYX3-7~25")) || (工程量.地形费计算方式 == "预算:辅助工程(杆塔辅助)杆塔附属设施,防坠落装置安装,线路避雷器安装,监测装置安装调测,耐张线夹X射线探伤")
:
@拆除地形系数.预算辅助工程杆塔辅助杆塔附属设施防坠落装置安装线路避雷器安装监测装置安装调测耐张线夹X射线探伤;
->(in(工程量.编码,"JYX8-46~89")) || (工程量.地形费计算方式 == "预算:辅助工程(索道设施)运输(地形选择按架设索道站所处地带实际地形为准)")
:
@拆除地形系数.预算辅助工程索道设施运输地形选择按架设索道站所处地带实际地形为准;
->(in(工程量.编码,"JYX8-90~118")) || (工程量.地形费计算方式 == "预算:辅助工程(索道设施)安装(地形选择按架设索道站所处地带实际地形为准)")
:
@拆除地形系数.预算辅助工程索道设施安装地形选择按架设索道站所处地带实际地形为准;
};
->@工程信息.工程性质 == "检修":
#{
->(in(工程量.编码,"JYX1-1~16")) || (工程量.地形费计算方式 == "工地运输(人力运输)混凝土杆、混凝土预制品、钢管杆、线材的运输(不含机械费)")
:
@拆除地形系数.工地运输人力运输混凝土杆混凝土预制品钢管杆线材的运输不含机械费;
->(in(工程量.编码,"JYX1-17~22")) || (工程量.地形费计算方式 == "工地运输(人力运输)金具、绝缘子、零星钢材、塔材、其他建筑安装材料的运输(不含机械费)")
:
@拆除地形系数.工地运输人力运输金具绝缘子零星钢材塔材其他建筑安装材料的运输不含机械费;
->(in(工程量.编码,"JYX1-24^108")) || (工程量.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
@拆除地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->(in(工程量.编码,"JYX3-1~212,JYX4-1~192,JYX5-1~119,JYX5-245~253,JYX6-1~172,JGX1-1~17,JGX2-1~59,JGX3-1~54,JGX4-1~67,XYX1-1~21,XYX2-1~79,XYX3-1~25,XYX4-1~77,XYX5-1~223,CYX1-1~4,CYX2-1~40,CYX3-1~42,CYX4-1~131")) || (工程量.地形费计算方式 == "基础、杆塔、防雷设施及接地装置、导线及避雷线、附件检修")
:
@拆除地形系数.基础杆塔防雷设施及接地装置导线及避雷线附件检修;
};
};
->:
#{
->@工程信息.工程性质 == "技改" && 工程量.专业类型 != "拆除":
#{
->(in(工程量.编码,"JYX1-1~16")) || (工程量.地形费计算方式 == "工地运输(人力运输)混凝土杆、混凝土预制品、钢管杆、线材的运输(不含机械费)")
:
@地形系数.工地运输人力运输混凝土杆混凝土预制品钢管杆线材的运输不含机械费;
->(in(工程量.编码,"JYX1-17~22")) || (工程量.地形费计算方式 == "工地运输(人力运输)金具、绝缘子、零星钢材、塔材、其他建筑安装材料的运输(不含机械费)")
:
@地形系数.工地运输人力运输金具绝缘子零星钢材塔材其他建筑安装材料的运输不含机械费;
->(in(工程量.编码,"JYX1-24^108")) || (工程量.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
@地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->(in(工程量.编码,"JYX2-1~232")) || (工程量.地形费计算方式 == "土石方工程(不含机械费)")
:
@地形系数.土石方工程不含机械费;
->(in(工程量.编码,"JYX3-1~212,JGX1-1~17,XYX1-1~21,XYX3-1~6,CYX1-1~4")) || (工程量.地形费计算方式 == "基础工程")
:
@地形系数.基础工程;
->(in(工程量.编码,"JYX4-1~192,JGX2-1~59,XYX2-1~79,CYX2-1~40")) || (工程量.地形费计算方式 == "杆塔工程")
:
@地形系数.杆塔工程;
->(in(工程量.编码,"JGX3-1~54")) || (工程量.地形费计算方式 == "概算:架线工程")
:
@地形系数.概算架线工程;
->(in(工程量.编码,"JYX5-1~60,XYX4-1~77,CYX3-1~27")) || (工程量.地形费计算方式 == "预算:架线工程一般放、紧线(不包含跨越架设、拦河线安装)")
:
@地形系数.预算架线工程一般放紧线不包含跨越架设拦河线安装;
->(in(工程量.编码,"JYX5-61~119,CYX3-28~42")) || (工程量.地形费计算方式 == "预算:架线工程张力放紧线(不包含跨越架设、拦河线安装)")
:
@地形系数.预算架线工程张力放紧线不包含跨越架设拦河线安装;
->(in(工程量.编码,"JYX5-245~253")) || (工程量.地形费计算方式 == "预算:架线工程光缆接续(不包括测量)")
:
@地形系数.预算架线工程光缆接续不包括测量;
->(in(工程量.编码,"JYX6-1~172,JGX4-1~67,XYX5-1~223,CYX4-1~131")) || (工程量.地形费计算方式 == "附件工程")
:
@地形系数.附件工程;
->(in(工程量.编码,"JGX6-1~4")) || (工程量.地形费计算方式 == "概算:辅助工程")
:
@地形系数.概算辅助工程;
->(in(工程量.编码,"JYX8-1~25")) || (工程量.地形费计算方式 == "预算:辅助工程(基础辅助)施工道路,固沙,护坡、挡土墙及排洪沟砌筑,喷射混凝土护坡")
:
@地形系数.预算辅助工程基础辅助施工道路固沙护坡挡土墙及排洪沟砌筑喷射混凝土护坡;
->(in(工程量.编码,"JYX8-26~45,JYX8-119~130,XYX3-7~25")) || (工程量.地形费计算方式 == "预算:辅助工程(杆塔辅助)杆塔附属设施,防坠落装置安装,线路避雷器安装,监测装置安装调测,耐张线夹X射线探伤")
:
@地形系数.预算辅助工程杆塔辅助杆塔附属设施防坠落装置安装线路避雷器安装监测装置安装调测耐张线夹X射线探伤;
->(in(工程量.编码,"JYX8-46~89")) || (工程量.地形费计算方式 == "预算:辅助工程(索道设施)运输(地形选择按架设索道站所处地带实际地形为准)")
:
@地形系数.预算辅助工程索道设施运输地形选择按架设索道站所处地带实际地形为准;
->(in(工程量.编码,"JYX8-90~118")) || (工程量.地形费计算方式 == "预算:辅助工程(索道设施)安装(地形选择按架设索道站所处地带实际地形为准)")
:
@地形系数.预算辅助工程索道设施安装地形选择按架设索道站所处地带实际地形为准;
};
->@工程信息.工程性质 == "检修" && (工程量.调差类型 == "建筑修缮" || 工程量.调差类型 == "设备检修" || 工程量.调差类型 == "建筑修缮措施二" || 工程量.调差类型 == "设备检修措施二" || 工程量.专业类型 == "余物清理"):
#{
->(in(工程量.编码,"JYX1-1~16")) || (工程量.地形费计算方式 == "工地运输(人力运输)混凝土杆、混凝土预制品、钢管杆、线材的运输(不含机械费)")
:
@地形系数.工地运输人力运输混凝土杆混凝土预制品钢管杆线材的运输不含机械费;
->(in(工程量.编码,"JYX1-17~22")) || (工程量.地形费计算方式 == "工地运输(人力运输)金具、绝缘子、零星钢材、塔材、其他建筑安装材料的运输(不含机械费)")
:
@地形系数.工地运输人力运输金具绝缘子零星钢材塔材其他建筑安装材料的运输不含机械费;
->(in(工程量.编码,"JYX1-24^108")) || (工程量.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
@地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->(in(工程量.编码,"JYX3-1~212,JYX4-1~192,JYX5-1~119,JYX5-245~253,JYX6-1~172,JGX1-1~17,JGX2-1~59,JGX3-1~54,JGX4-1~67,XYX1-1~21,XYX2-1~79,XYX3-1~25,XYX4-1~77,XYX5-1~223,CYX1-1~4,CYX2-1~40,CYX3-1~42,CYX4-1~131")) || (工程量.地形费计算方式 == "基础、杆塔、防雷设施及接地装置、导线及避雷线、附件检修")
:
@地形系数.基础杆塔防雷设施及接地装置导线及避雷线附件检修;
};
};
} / 100
}
BEGIN:_地形机械系数
${
?#{
->(工程量.调差类型 == "建筑拆除" || 工程量.调差类型 == "安装拆除" || 工程量.调差类型 == "建筑拆除措施二" || 工程量.调差类型 == "安装拆除措施二") && 工程量.专业类型 != "余物清理" :
#{
->@工程信息.工程性质 == "技改":
#{
->(in(工程量.编码,"JYX1-24^108")) || (工程量.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
@拆除地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->(in(工程量.编码,"JYX3-1~212,JGX1-1~17,XYX1-1~21,XYX3-1~6,CYX1-1~4")) || (工程量.地形费计算方式 == "基础工程")
:
@拆除地形系数.基础工程;
->(in(工程量.编码,"JYX4-1~192,JGX2-1~59,XYX2-1~79,CYX2-1~40")) || (工程量.地形费计算方式 == "杆塔工程")
:
@拆除地形系数.杆塔工程;
->(in(工程量.编码,"JGX3-1~54")) || (工程量.地形费计算方式 == "概算:架线工程")
:
@拆除地形系数.概算架线工程;
->(in(工程量.编码,"JYX5-1~60,XYX4-1~77,CYX3-1~27")) || (工程量.地形费计算方式 == "预算:架线工程一般放、紧线(不包含跨越架设、拦河线安装)")
:
@拆除地形系数.预算架线工程一般放紧线不包含跨越架设拦河线安装;
->(in(工程量.编码,"JYX5-61~119,CYX3-28~42")) || (工程量.地形费计算方式 == "预算:架线工程张力放紧线(不包含跨越架设、拦河线安装)")
:
@拆除地形系数.预算架线工程张力放紧线不包含跨越架设拦河线安装;
->(in(工程量.编码,"JYX5-245~253")) || (工程量.地形费计算方式 == "预算:架线工程光缆接续(不包括测量)")
:
@拆除地形系数.预算架线工程光缆接续不包括测量;
->(in(工程量.编码,"JYX6-1~172,JGX4-1~67,XYX5-1~223,CYX4-1~131")) || (工程量.地形费计算方式 == "附件工程")
:
@拆除地形系数.附件工程;
->(in(工程量.编码,"JGX6-1~4")) || (工程量.地形费计算方式 == "概算:辅助工程")
:
@拆除地形系数.概算辅助工程;
->(in(工程量.编码,"JYX8-1~25")) || (工程量.地形费计算方式 == "预算:辅助工程(基础辅助)施工道路,固沙,护坡、挡土墙及排洪沟砌筑,喷射混凝土护坡")
:
@拆除地形系数.预算辅助工程基础辅助施工道路固沙护坡挡土墙及排洪沟砌筑喷射混凝土护坡;
->(in(工程量.编码,"JYX8-26~45,JYX8-119~130,XYX3-7~25")) || (工程量.地形费计算方式 == "预算:辅助工程(杆塔辅助)杆塔附属设施,防坠落装置安装,线路避雷器安装,监测装置安装调测,耐张线夹X射线探伤")
:
@拆除地形系数.预算辅助工程杆塔辅助杆塔附属设施防坠落装置安装线路避雷器安装监测装置安装调测耐张线夹X射线探伤;
->(in(工程量.编码,"JYX8-46~89")) || (工程量.地形费计算方式 == "预算:辅助工程(索道设施)运输(地形选择按架设索道站所处地带实际地形为准)")
:
@拆除地形系数.预算辅助工程索道设施运输地形选择按架设索道站所处地带实际地形为准;
->(in(工程量.编码,"JYX8-90~118")) || (工程量.地形费计算方式 == "预算:辅助工程(索道设施)安装(地形选择按架设索道站所处地带实际地形为准)")
:
@拆除地形系数.预算辅助工程索道设施安装地形选择按架设索道站所处地带实际地形为准;
};
->@工程信息.工程性质 == "检修":
#{
->(in(工程量.编码,"JYX1-24^108")) || (工程量.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
@拆除地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->(in(工程量.编码,"JYX3-1~212,JYX4-1~192,JYX5-1~119,JYX5-245~253,JYX6-1~172,JGX1-1~17,JGX2-1~59,JGX3-1~54,JGX4-1~67,XYX1-1~21,XYX2-1~79,XYX3-1~25,XYX4-1~77,XYX5-1~223,CYX1-1~4,CYX2-1~40,CYX3-1~42,CYX4-1~131")) || (工程量.地形费计算方式 == "基础、杆塔、防雷设施及接地装置、导线及避雷线、附件检修")
:
@拆除地形系数.基础杆塔防雷设施及接地装置导线及避雷线附件检修;
};
};
->:
#{
->@工程信息.工程性质 == "技改" && 工程量.专业类型 != "拆除":
#{
->(in(工程量.编码,"JYX1-24^108")) || (工程量.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
@地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->(in(工程量.编码,"JYX3-1~212,JGX1-1~17,XYX1-1~21,XYX3-1~6,CYX1-1~4")) || (工程量.地形费计算方式 == "基础工程")
:
@地形系数.基础工程;
->(in(工程量.编码,"JYX4-1~192,JGX2-1~59,XYX2-1~79,CYX2-1~40")) || (工程量.地形费计算方式 == "杆塔工程")
:
@地形系数.杆塔工程;
->(in(工程量.编码,"JGX3-1~54")) || (工程量.地形费计算方式 == "概算:架线工程")
:
@地形系数.概算架线工程;
->(in(工程量.编码,"JYX5-1~60,XYX4-1~77,CYX3-1~27")) || (工程量.地形费计算方式 == "预算:架线工程一般放、紧线(不包含跨越架设、拦河线安装)")
:
@地形系数.预算架线工程一般放紧线不包含跨越架设拦河线安装;
->(in(工程量.编码,"JYX5-61~119,CYX3-28~42")) || (工程量.地形费计算方式 == "预算:架线工程张力放紧线(不包含跨越架设、拦河线安装)")
:
@地形系数.预算架线工程张力放紧线不包含跨越架设拦河线安装;
->(in(工程量.编码,"JYX5-245~253")) || (工程量.地形费计算方式 == "预算:架线工程光缆接续(不包括测量)")
:
@地形系数.预算架线工程光缆接续不包括测量;
->(in(工程量.编码,"JYX6-1~172,JGX4-1~67,XYX5-1~223,CYX4-1~131")) || (工程量.地形费计算方式 == "附件工程")
:
@地形系数.附件工程;
->(in(工程量.编码,"JGX6-1~4")) || (工程量.地形费计算方式 == "概算:辅助工程")
:
@地形系数.概算辅助工程;
->(in(工程量.编码,"JYX8-1~25")) || (工程量.地形费计算方式 == "预算:辅助工程(基础辅助)施工道路,固沙,护坡、挡土墙及排洪沟砌筑,喷射混凝土护坡")
:
@地形系数.预算辅助工程基础辅助施工道路固沙护坡挡土墙及排洪沟砌筑喷射混凝土护坡;
->(in(工程量.编码,"JYX8-26~45,JYX8-119~130,XYX3-7~25")) || (工程量.地形费计算方式 == "预算:辅助工程(杆塔辅助)杆塔附属设施,防坠落装置安装,线路避雷器安装,监测装置安装调测,耐张线夹X射线探伤")
:
@地形系数.预算辅助工程杆塔辅助杆塔附属设施防坠落装置安装线路避雷器安装监测装置安装调测耐张线夹X射线探伤;
->(in(工程量.编码,"JYX8-46~89")) || (工程量.地形费计算方式 == "预算:辅助工程(索道设施)运输(地形选择按架设索道站所处地带实际地形为准)")
:
@地形系数.预算辅助工程索道设施运输地形选择按架设索道站所处地带实际地形为准;
->(in(工程量.编码,"JYX8-90~118")) || (工程量.地形费计算方式 == "预算:辅助工程(索道设施)安装(地形选择按架设索道站所处地带实际地形为准)")
:
@地形系数.预算辅助工程索道设施安装地形选择按架设索道站所处地带实际地形为准;
};
->@工程信息.工程性质 == "检修" && (工程量.调差类型 == "建筑修缮" || 工程量.调差类型 == "设备检修" || 工程量.调差类型 == "建筑修缮措施二" || 工程量.调差类型 == "设备检修措施二" || 工程量.专业类型 == "余物清理") :
#{
->(in(工程量.编码,"JYX1-24^108")) || (工程量.地形费计算方式 == "工地运输汽车、拖拉机运输(不含装卸,沙漠地形没有正式公路时使用)")
:
@地形系数.工地运输汽车拖拉机运输不含装卸沙漠地形没有正式公路时使用;
->(in(工程量.编码,"JYX3-1~212,JYX4-1~192,JYX5-1~119,JYX5-245~253,JYX6-1~172,JGX1-1~17,JGX2-1~59,JGX3-1~54,JGX4-1~67,XYX1-1~21,XYX2-1~79,XYX3-1~25,XYX4-1~77,XYX5-1~223,CYX1-1~4,CYX2-1~40,CYX3-1~42,CYX4-1~131")) || (工程量.地形费计算方式 == "基础、杆塔、防雷设施及接地装置、导线及避雷线、附件检修")
:
@地形系数.基础杆塔防雷设施及接地装置导线及避雷线附件检修;
};
};
} / 100
}
BEGIN:地形人工费
${
sum(_过滤定额(),"工程量",?工程量.数量 * 工程量.人工费 * 工程量.人工系数 * 工程量.定额系数 * _地形人工系数())
}
BEGIN:地形人工价差
${
sum(_过滤定额(),"工程量",?iif(工程量.专业类型 != "余物清理",工程量.数量 * 工程量.人工系数 * 工程量.定额系数 * _地形人工系数() * #{
->@工程信息.项目类型 == "应急工程":sum(_过滤人工(),"人材机",?(人材机.市场价不含税 - 人材机.预算价不含税) * 人材机.数量);
->:工程量.人工费 * #{
->工程量.调差类型 == "建筑":@工程信息.建筑人工调差系数 /100;
->工程量.调差类型 == "安装":@工程信息.安装人工调差系数 /100;
->工程量.调差类型 == "建筑修缮":@工程信息.建筑修缮人工调差系数 /100;
->工程量.调差类型 == "设备检修":@工程信息.设备检修人工调差系数 /100;
->工程量.调差类型 == "建筑拆除":@工程信息.建筑拆除人工调差系数 /100;
->工程量.调差类型 == "安装拆除":@工程信息.安装拆除人工调差系数 /100;
};
},0))
}
BEGIN:地形机械费
${
sum(_过滤定额(),"工程量",?工程量.数量 * 工程量.机械费 * 工程量.机械系数 * 工程量.定额系数 * _地形机械系数())
}
BEGIN:地形机械价差
${
sum(_过滤定额(),"工程量",?iif(工程量.专业类型 != "余物清理",工程量.数量 * 工程量.机械系数 * 工程量.定额系数 * _地形机械系数() * #{
->@工程信息.项目类型 == "应急工程":sum(_过滤机械(),"人材机",?(人材机.市场价不含税 - 人材机.预算价不含税) * 人材机.数量);
->:工程量.机械费 * #{
->(工程量.调差类型 == "建筑" && @工程信息.建筑材机按系数调差 == "否")||(工程量.调差类型 == "建筑修缮" && @工程信息.建筑修缮材机按系数调差 == "否")||(工程量.调差类型 == "建筑拆除" && @工程信息.建筑拆除材机按系数调差 == "否"):0;
->工程量.调差类型 == "建筑" && @工程信息.建筑材机按系数调差 == "是":@工程信息.建筑机械调差系数 /100;
->工程量.调差类型 == "建筑修缮" && @工程信息.建筑修缮材机按系数调差 == "是":@工程信息.建筑修缮机械调差系数 /100;
->工程量.调差类型 == "建筑拆除" && @工程信息.建筑拆除材机按系数调差 == "是":@工程信息.建筑拆除机械调差系数 /100;
->工程量.调差类型 == "安装" && @工程信息.项目划分 == "电缆线路工程" && 工程量.专业属性 == "陆上电缆":@工程信息.陆上电缆安装机械调差系数 /100;
->工程量.调差类型 == "安装" && @工程信息.项目划分 == "电缆线路工程" && 工程量.专业属性 == "海底电缆":@工程信息.海底电缆安装机械调差系数 /100;
->工程量.调差类型 == "安装" && @工程信息.项目划分 != "电缆线路工程":@工程信息.安装机械调差系数 /100;
->工程量.调差类型 == "设备检修" && @工程信息.项目划分 == "电缆线路工程" && 工程量.专业属性 == "陆上电缆":@工程信息.陆上电缆设备检修机械调差系数 /100;
->工程量.调差类型 == "设备检修" && @工程信息.项目划分 == "电缆线路工程" && 工程量.专业属性 == "海底电缆":@工程信息.海底电缆设备检修机械调差系数 /100;
->工程量.调差类型 == "设备检修" && @工程信息.项目划分 != "电缆线路工程":@工程信息.设备检修机械调差系数 /100;
->工程量.调差类型 == "安装拆除" && @工程信息.项目划分 == "电缆线路工程" && 工程量.专业属性 == "陆上电缆":@工程信息.陆上电缆安装拆除机械调差系数 /100;
->工程量.调差类型 == "安装拆除" && @工程信息.项目划分 == "电缆线路工程" && 工程量.专业属性 == "海底电缆":@工程信息.海底电缆安装拆除机械调差系数 /100;
->工程量.调差类型 == "安装拆除" && @工程信息.项目划分 != "电缆线路工程":@工程信息.安装拆除机械调差系数 /100;
};
},0))
}
///////////////////////////////////////////////////////////////
BEGIN:人工费
${
?_人工费_不含特殊费()+地形人工费()
}
BEGIN:乙供材料费不含税
${
?_乙供材料费_非宏变量()
}
BEGIN:机械费
${
?_机械费_不含特殊费()+地形机械费()
}
BEGIN:人工价差
${
?_人工价差_不含特殊费()+地形人工价差()
}
BEGIN:乙供材料价差不含税
${
?_乙供材料价差_不含特殊费()
}
BEGIN:机械价差
${
?_机械价差_不含特殊费()+地形机械价差()
}
BEGIN:材料价差不含税
${
?甲供材料价差不含税()+乙供材料价差不含税()
}
BEGIN:材料价差含税
${
?甲供材料价差含税()+乙供材料价差含税()
}
//------------------以下变量为开发使用,开发自行维护-------------------------------------------
BEGIN:_过滤非拆除定额
${
filter(source,"工程量",?工程量.type =="定额" && #{
->@工程信息.工程性质 == "技改"
:
工程量.调差类型 != "建筑拆除" && 工程量.调差类型 != "安装拆除";
->@工程信息.工程性质 == "检修"
:
工程量.调差类型 == "建筑修缮" || 工程量.调差类型 == "设备检修" || 工程量.调差类型 == "建筑拆除" || 工程量.调差类型 == "安装拆除" ;
} == 1)
}
BEGIN:建筑拆分人工材料_价差不含税
${
sum(_过滤定额(),"工程量",?工程量.数量 * 工程量.材料系数 * 工程量.定额系数 * #{
->(工程量.调差类型 == "建筑") || (工程量.调差类型 == "建筑拆除" ) || (工程量.调差类型 == "建筑修缮" )
:
sum(_过滤材料(),"人材机",?#{
->人材机.拆分 == 0
:
0;
->人材机.拆分 == 1
:
sum(_过滤人工_定额重算(),"拆分子项",?
#{
->拆分子项.type == "人工"
:
拆分子项.预算价不含税 * 拆分子项.数量 * #{
->工程量.调差类型 == "建筑":拆分子项.@_@人工调差系数 /100;
->工程量.调差类型 == "建筑修缮":拆分子项.@_@人工调差系数 /100;
->工程量.调差类型 == "建筑拆除":拆分子项.@_@人工调差系数 /100;
};
} * 人材机.数量);
});})
}
BEGIN:建筑拆分人工材料_价差含税
${
sum(_过滤定额(),"工程量",?工程量.数量 * 工程量.材料系数 * 工程量.定额系数 * #{
->(工程量.调差类型 == "建筑") || (工程量.调差类型 == "建筑拆除" ) || (工程量.调差类型 == "建筑修缮" )
:
sum(_过滤材料(),"人材机",?#{
->人材机.拆分 == 0
:
0;
->人材机.拆分 == 1
:
sum(_过滤人工_定额重算(),"拆分子项",?
#{
->拆分子项.type == "人工"
:
拆分子项.预算价含税 * 拆分子项.数量 * #{
->工程量.调差类型 == "建筑":拆分子项.@_@人工调差系数 /100;
->工程量.调差类型 == "建筑修缮":拆分子项.@_@人工调差系数 /100;
->工程量.调差类型 == "建筑拆除":拆分子项.@_@人工调差系数 /100;
};
} * 人材机.数量);
});})
}
@@ -1,326 +0,0 @@

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// 材机分析汇总变量计算
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
BEGIN:_统计水超运数量_人力运输
${
?@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.人力运距 * @统计参数.人力运量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
}
}
BEGIN:_统计水超运数量_汽车运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.汽车运距 * @统计参数.汽车运量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.汽车装卸量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
}
}
BEGIN:_统计水超运数量_拖拉机运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.拖拉机运距 * @统计参数.拖拉机运量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.拖拉机装卸量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
}
}
BEGIN:_统计水超运数量_船舶运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.船舶运距 * @统计参数.船舶运量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.船舶装卸量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
}
}
BEGIN:_统计水超运数量_索道运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.索道运距 * @统计参数.索道运量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.索道处数 * @统计参数.索道装卸量 / 100 *
#{
->in(@统计项.编码,"JYX3-63~72,JYX3-169~172,JYX3-190~191,JYX3-61~62")
:
0.5;
->in(@统计项.编码,"JYX3-73~81,JYX3-173~176")
:
0.32;
->in(@统计项.编码,"JYX3-55~59")
:
0.5*0.3;
->in(@统计项.编码,"JYX3-50~54")
:
0.5*0.2;
};
}
}
BEGIN:_统计工地运输数量_人力运输
${
?#{
->(@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.人力运距 * @统计参数.人力运量 / 100;
->(@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.人力运距 * @统计参数.人力运量 / 100;
}
}
BEGIN:_统计工地运输数量_汽车运输
${
?#{
->@统计项.装卸 == "0" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.汽车运距 * @统计参数.汽车运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.汽车装卸量 / 100;
->@统计项.装卸 == "0" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.汽车运距 * @统计参数.汽车运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.汽车装卸量 / 100;
}
}
BEGIN:_统计工地运输数量_拖拉机运输
${
?#{
->@统计项.装卸 == "0" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.拖拉机运距 * @统计参数.拖拉机运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.拖拉机装卸量 / 100;
->@统计项.装卸 == "0" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.拖拉机运距 * @统计参数.拖拉机运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.拖拉机装卸量 / 100;
}
}
BEGIN:_统计工地运输数量_船舶运输
${
?#{
->@统计项.装卸 == "0" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.船舶运距 * @统计参数.船舶运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.船舶装卸量 / 100;
->@统计项.装卸 == "0" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.船舶运距 * @统计参数.船舶运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.船舶装卸量 / 100;
}
}
BEGIN:_统计工地运输数量_索道运输
${
?#{
->@统计项.装卸 == "0" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.索道运距 * @统计参数.索道运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 != "建筑拆除" && @统计项.调差类型 != "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.索道处数 * @统计参数.索道装卸量 / 100;
->@统计项.装卸 == "0" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.索道运距 * @统计参数.索道运量 / 100;
->@统计项.装卸 == "1" && (@统计项.调差类型 == "建筑拆除" || @统计项.调差类型 == "安装拆除")
:
@统计项.数量 * @统计项.单重 / 1000 * @统计参数.索道处数 * @统计参数.索道装卸量 / 100;
}
}
//------------------余土外运-------------------------------------------
BEGIN:_统计余土外运数量_人力运输
${
?@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.人力运距 * @统计参数.人力运量 / 100
}
BEGIN:_统计余土外运数量_汽车运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.汽车运距 * @统计参数.汽车运量 / 100;
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.汽车装卸量 / 100;
}
}
BEGIN:_统计余土外运数量_拖拉机运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.拖拉机运距 * @统计参数.拖拉机运量 / 100;
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.拖拉机装卸量 / 100;
}
}
BEGIN:_统计余土外运数量_船舶运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01)* (1 + @统计参数.毛重 * 0.01) * @统计参数.船舶运距 * @统计参数.船舶运量 / 100;
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.船舶装卸量 / 100;
}
}
BEGIN:_统计余土外运数量_索道运输
${
?#{
->@统计项.装卸 == "0"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.索道运距 * @统计参数.索道运量 / 100;
->@统计项.装卸 == "1"
:
@统计项.数量 * ( 1 + @统计项.损耗 * 0.01) * (1 + @统计参数.毛重 * 0.01) * @统计参数.索道处数 * @统计参数.索道装卸量 / 100;
}
}
@@ -1,436 +0,0 @@
///////////////////////////////////////////////////////////////
//
// 勘察费
//
///////////////////////////////////////////////////////////////
BEGIN:初步勘测基价
${
?round(?@勘察费.方法二.初步勘测基价, 8)
}
BEGIN:初步勘测基价_方法三
${
?round(?@勘察费.方法三.初步勘测基价, 8)
}
BEGIN:初步勘测系数调整
${
?round(?@勘察费.方法二.初步勘测系数调整, 8)
}
BEGIN:初步勘测系数调整_方法三
${
?round(?@勘察费.方法三.初步勘测系数调整, 8)
}
BEGIN:施工图勘测系数调整
${
?round(?@勘察费.方法二.施工图勘测系数调整, 8)
}
BEGIN:施工图勘测系数调整_方法三
${
?round(?@勘察费.方法三.施工图勘测系数调整, 8)
}
BEGIN:施工图和初步勘测基价比值
${
?#{
->@工程信息.工程类型=="变电" || (@工程信息.工程类型=="配网" && @工程信息.勘察费方法=="变电方法二")
:
0.8;
->@工程信息.工程类型=="线路" || (@工程信息.工程类型=="配网" && @工程信息.勘察费方法=="线路方法二")
:
4;
}
}
BEGIN:施工图和初步勘测基价比值_方法三
${
?#{
->@工程信息.工程类型=="变电"
:
0.8;
->@工程信息.工程类型=="线路"
:
4;
}
}
BEGIN:施工图勘测基价
${
?初步勘测基价()*施工图和初步勘测基价比值()
}
BEGIN:施工图勘测基价_方法三
${
?初步勘测基价_方法三()*施工图和初步勘测基价比值_方法三()
}
BEGIN:线路架线长度
${
?#{
->@工程信息.工程类型=="变电" || (@工程信息.工程类型=="配网" && @工程信息.勘察费方法=="变电方法二")
:
1;
->@工程信息.工程类型=="线路"
:
#{
->@工程信息.项目划分=="架空输电线路工程":iif(@工程信息.架空线路亘长 <@勘察费.方法二.初设阶段_线路长度最小值,@勘察费.方法二.初设阶段_线路长度最小值,@工程信息.架空线路亘长);
->@工程信息.项目划分=="电缆线路工程":iif(@工程信息.电缆线路亘长 <@勘察费.方法二.初设阶段_线路长度最小值,@勘察费.方法二.初设阶段_线路长度最小值,@工程信息.电缆线路亘长);
->@工程信息.项目划分=="通信线路工程":iif(@工程信息.通信线路亘长 <@勘察费.方法二.初设阶段_线路长度最小值,@勘察费.方法二.初设阶段_线路长度最小值,@工程信息.通信线路亘长);
};
->(@工程信息.工程类型=="配网" && @工程信息.勘察费方法=="线路方法二")
:
#{
->最大亘长() <@勘察费.方法二.初设阶段_线路长度最小值
:
@勘察费.方法二.初设阶段_线路长度最小值;
->:
最大亘长();
};
}
}
BEGIN:施设阶段_线路架线长度
${
?#{
->@工程信息.工程类型=="变电" || (@工程信息.工程类型=="配网" && @工程信息.勘察费方法=="变电方法二")
:
1;
->@工程信息.工程类型=="线路"
:
#{
->@工程信息.项目划分=="架空输电线路工程":iif(@工程信息.架空线路亘长 <@勘察费.方法二.施设阶段_线路长度最小值,@勘察费.方法二.施设阶段_线路长度最小值,@工程信息.架空线路亘长);
->@工程信息.项目划分=="电缆线路工程":iif(@工程信息.电缆线路亘长 <@勘察费.方法二.施设阶段_线路长度最小值,@勘察费.方法二.施设阶段_线路长度最小值,@工程信息.电缆线路亘长);
->@工程信息.项目划分=="通信线路工程":iif(@工程信息.通信线路亘长 <@勘察费.方法二.施设阶段_线路长度最小值,@勘察费.方法二.施设阶段_线路长度最小值,@工程信息.通信线路亘长);
};
->(@工程信息.工程类型=="配网" && @工程信息.勘察费方法=="线路方法二")
:
#{
->最大亘长() <@勘察费.方法二.施设阶段_线路长度最小值
:
@勘察费.方法二.施设阶段_线路长度最小值;
->:
最大亘长();
};
}
}
BEGIN:最大亘长
${
?#{
->@工程信息.架空线路亘长<@工程信息.电缆线路亘长
:
#{
->@工程信息.电缆线路亘长<@工程信息.通信线路亘长
:
@工程信息.通信线路亘长;
->:
@工程信息.电缆线路亘长;
};
->@工程信息.架空线路亘长>=@工程信息.电缆线路亘长
:
#{
->@工程信息.架空线路亘长<@工程信息.通信线路亘长
:
@工程信息.通信线路亘长;
->:
@工程信息.架空线路亘长;
};
}
}
BEGIN:线路架线长度_方法三
${
?#{
->@工程信息.工程类型=="变电"
:
1;
->@工程信息.工程类型=="线路"
:
#{
->@勘察费.方法三.初设阶段_长度设置模式 == 1
:
#{
->@工程信息.勘察费方法 == "方法三"
:
#{
->@工程信息.项目划分=="架空输电线路工程":iif(@工程信息.架空线路亘长 <@勘察费.方法三.初设阶段_线路长度最小值,@勘察费.方法三.初设阶段_线路长度最小值,@工程信息.架空线路亘长);
->@工程信息.项目划分=="电缆线路工程":iif(@工程信息.电缆线路亘长 <@勘察费.方法三.初设阶段_线路长度最小值,@勘察费.方法三.初设阶段_线路长度最小值,@工程信息.电缆线路亘长);
->@工程信息.项目划分=="通信线路工程":iif(@工程信息.通信线路亘长 <@勘察费.方法三.初设阶段_线路长度最小值,@勘察费.方法三.初设阶段_线路长度最小值,@工程信息.通信线路亘长);
};
->@工程信息.勘察费方法 == "线路方法三"
:
#{
->最大亘长() <@勘察费.方法三.初设阶段_线路长度最小值
:
@勘察费.方法三.初设阶段_线路长度最小值;
->:
最大亘长();
};
};
->: @勘察费.方法三.初设阶段_累计长度;
};
}
}
BEGIN:施设阶段_线路架线长度_方法三
${
?#{
->@工程信息.工程类型=="变电"
:
1;
->@工程信息.工程类型=="线路"
:
#{
->@勘察费.方法三.施设阶段_长度设置模式 == 1
:
#{
->@工程信息.勘察费方法 == "方法三"
:
#{
->@工程信息.项目划分=="架空输电线路工程":iif(@工程信息.架空线路亘长 <@勘察费.方法三.施设阶段_线路长度最小值,@勘察费.方法三.施设阶段_线路长度最小值,@工程信息.架空线路亘长);
->@工程信息.项目划分=="电缆线路工程":iif(@工程信息.电缆线路亘长 <@勘察费.方法三.施设阶段_线路长度最小值,@勘察费.方法三.施设阶段_线路长度最小值,@工程信息.电缆线路亘长);
->@工程信息.项目划分=="通信线路工程":iif(@工程信息.通信线路亘长 <@勘察费.方法三.施设阶段_线路长度最小值,@勘察费.方法三.施设阶段_线路长度最小值,@工程信息.通信线路亘长);
};
->@工程信息.勘察费方法 == "线路方法三"
:
#{
->最大亘长() <@勘察费.方法三.施设阶段_线路长度最小值
:
@勘察费.方法三.施设阶段_线路长度最小值;
->:
最大亘长();
};
};
->: @勘察费.方法三.施设阶段_累计长度;
};
}
}
BEGIN:施工图勘测基准价
${
?施工图勘测基价()* 施工图勘测系数调整() * 施设阶段_线路架线长度()
}
BEGIN:施工图勘测基准价_方法三
${
?施工图勘测基价_方法三()* 施工图勘测系数调整_方法三() * 施设阶段_线路架线长度_方法三()
}
BEGIN:初步勘测基准价
${
?初步勘测基价() * 初步勘测系数调整() * #{
->@工程信息.工程类型=="变电" || (@工程信息.工程类型=="配网" && @工程信息.勘察费方法=="变电方法二")
:
1;
->@工程信息.工程类型=="线路" || (@工程信息.工程类型=="配网" && @工程信息.勘察费方法=="线路方法二")
:
@勘察费.方法二.初设阶段_超长线路长度 + 线路架线长度();
}
}
BEGIN:初步勘测基准价_方法三
${
?初步勘测基价_方法三() * 初步勘测系数调整_方法三() * #{
->@工程信息.工程类型=="变电"
:
1;
->@工程信息.工程类型=="线路"
:
@勘察费.方法三.初设阶段_超长线路长度 + 线路架线长度_方法三();
}
}
BEGIN:勘察费小计
${
?初步勘测基准价()+施工图勘测基准价()
}
BEGIN:勘察费小计_方法三
${
?初步勘测基准价_方法三()+施工图勘测基准价_方法三()
}
BEGIN:作业准备费
${
?勘察费小计()*@勘察费.方法二.作业准备费系数/100
}
BEGIN:作业准备费_方法三
${
?勘察费小计_方法三()*@勘察费.方法三.作业准备费系数/100
}
BEGIN:勘察费总计
${
?勘察费小计() + 作业准备费() + round(?@勘察费.方法二.勘察费调整, 8)
}
BEGIN:勘察费总计_方法三
${
?勘察费小计_方法三() + 作业准备费_方法三() + round(?@勘察费.方法三.勘察费调整, 8)
}
BEGIN:一笔性勘察费
${
?round(?@勘察费.方法一.一笔性勘察费, 8)
}
///////////////////////////////////////////////////////////////
//
//其他费用-宏变量
//
///////////////////////////////////////////////////////////////
BEGIN:勘察费
${
?#{
->@工程信息.电压等级 == "20kV及以下"
:
0;
->:
#{
->(建筑工程费()+安装工程费()+拆除工程费()+建筑修缮费()+设备检修费()+余物清理费()) != 0
:
#{
->@工程信息.勘察费方法=="方法一" : 一笔性勘察费();
->@工程信息.勘察费方法=="方法二" : 勘察费总计();
->@工程信息.勘察费方法=="变电方法二" : 勘察费总计();
->@工程信息.勘察费方法=="线路方法二" : 勘察费总计();
->@工程信息.勘察费方法=="线路方法三" : 勘察费总计_方法三();
->@工程信息.勘察费方法=="方法三" : 勘察费总计_方法三();
};
};
}
}
///////////////////////////////////////////////////////////////
//
//设计费
//
///////////////////////////////////////////////////////////////
//BEGIN:虚拟设计费
//${
// ?#{
// ->@工程信息.工程性质=="技改"
// :round(?@设计费.方法二.计费额, 6) * @设计费.方法二.设计费费率 /100 * round(?@设计费.方法二.专业调整系数, 6);
// ->@工程信息.工程性质=="检修"
// :round(?@设计费.方法二.计费额, 6) * @设计费.方法二.设计费费率 /100 ;
// }
//}
//BEGIN:本体工程费
//${
// ?#{
// -> @工程信息.工程性质=="技改"
// :#{
// ->@工程信息.项目划分 == "通信线路工程" || @工程信息.项目划分 == "架空输电线路工程"
// :安装工程费;
// ->@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程" || @工程信息.工程类型 == "配网"
// :建筑工程费+安装工程费;
// };
// -> @工程信息.工程性质=="检修"
// :#{
// ->@工程信息.项目划分 == "通信线路工程" || @工程信息.项目划分 == "架空输电线路工程"
// :设备检修费;
// ->@工程信息.工程类型 == "变电" || @工程信息.项目划分 == "电缆线路工程" || @工程信息.工程类型 == "配网"
// :建筑修缮费+设备检修费;
// };
// };
//}
BEGIN:设备配件占比系数_扩展
${
?#{
-> @工程信息.工程性质=="技改"
:@设计费.方法二.设备占比系数_扩展;
-> @工程信息.工程性质=="检修"
:@设计费.方法二.配件占比系数_扩展;
};
}
BEGIN:设备配件占比系数
${
?round(
?#{
->设备配件占比系数_扩展() >= 0.98
:0.2;
->设备配件占比系数_扩展() >= 0.9 && 设备配件占比系数_扩展() < 0.98
:(1-设备配件占比系数_扩展())*10;
->设备配件占比系数_扩展() < 0.98
:1;
}, 6
)
}
BEGIN:设计费_施工图预算编制费
${
?round(?@设计费.方法二.施工图预算编制费, 6)
}
BEGIN:设计费_竣工图文件编制费
${
?round(?@设计费.方法二.竣工图文件编制费, 6)
}
BEGIN:设计费费率_方法二
${
?round(?@设计费.方法二.设计费费率 / 100, 4)
}
BEGIN:最小基本设计费
${
?#{
-> @工程信息.工程性质=="技改"
: 2000;
-> @工程信息.工程性质=="检修"
: 1000;
};
}
BEGIN:基本设计费_方法二
${
?round(?@设计费.方法二.基本设计费, 6)
}
BEGIN:设计费_方法二
${
?round(?@设计费.方法二.设计费总计, 6)
}
BEGIN:基本设计费_方法一
${
?round(?@设计费.方法一.基本设计费, 6)
}
BEGIN:一笔性设计费
${
?round(?@设计费.方法一.一笔性设计费, 6)
}
///////////////////////////////////////////////////////////////
//
//其他费用-宏变量
//
///////////////////////////////////////////////////////////////
BEGIN:基本设计费
${
?#{
->@工程信息.设计费方法=="方法一" : 基本设计费_方法一();
->@工程信息.设计费方法=="方法二" : 基本设计费_方法二();
}
}
BEGIN:设计费
${
?#{
->@工程信息.设计费方法=="方法一" : 一笔性设计费();
->@工程信息.设计费方法=="方法二" : 设计费_方法二();
};
}

Some files were not shown because too many files have changed in this diff Show More