Учет фактического расходования материалов по объектам строительства без планирования |
Порядок настройки пресета
С помощью команды "Создать новый пресет" создайте пресет "Учет фактического расходования материалов по объектам строительства без планирования". На вкладке "Строки" формы "Настройка пресетов" настройте стоки Группа ресурсов -> Ресурс. Рис. 1501 Сохраните настройки пресета. Подробно о настройке строк смотри раздел "Вкладка "Строки" формы "Настройка пресетов" или раздел "Настройка пресета в форме "Настройка пресетов". Добавьте строку "Поступление ресурса" и настройте фильтр как показано на рис. 1502. Рис. 1502 Сохраните настройки пресета. Добавьте строку "Расход ресурса" и настройте фильтр как показано на рис. 1503. Рис. 1503 Сохраните настройки пресета. Для расчета итоговых значений по ресурсу добавьте с помощью команды "Добавить вычисляемую строку" вычисляемую строку, которую переименуйте в "Итого по ресурсу". и выберите язык написания скрипта. Рис. 1504 в разделе "Содержимое скрипта" напишите скрипт следующего содержания
Imports System Imports System.Text Imports System.Data Imports System.Drawing Imports System.Xml Imports System.Collections Imports System.Collections.Generic Imports System.ComponentModel Imports System.Reflection Imports System.IO Imports System.Text.RegularExpressions Imports System.Windows.Forms Imports Microsoft.VisualBasic Imports CommonLibrary
Namespace SFExpressionEvaluator
Public Class CSFScript4TreeViewManagerData
'SFScriptExecuteTester - функция тестирования скрипта SFScriptExecute() Public Function SFScriptExecuteTester() As DataTable 'Файл sf_table4script.xml можно получить при экспорте таблицы для написания скриптов Dim dtMain As New DataTable dtMain.ReadXml(Application.StartupPath & "\sf_table4script.xml")
'Замените FillObject на соответствующее обозначение колонки для которой Вы пишете скрипт. Dim sCurrentColumn As String = "FillObject" Dim pCurrentColumn As DataColumn = dtMain.Columns.Item(sCurrentColumn)
For Each pCurrentRow As DataRow In dtMain.Rows Me.SFScriptExecute(dtMain, pCurrentRow, pCurrentColumn) Next
Return dtMain End Function
'SFScriptExecute - скрипт, который вызывается программой Стройформ для каждой строки таблицы и указанной колонки Public Function SFScriptExecute(ByRef dtMain As DataTable, ByRef pCurrentRow As DataRow, ByRef pCurrentColumn As DataColumn) As Object ' Замените ниже расположенные строки на аналогичные строки, полученные при написании скриптов. Dim ID As Long = CommonLibrary.SF.Convert.ToLong(pCurrentRow("ID")) ' ID строки Dim ParentID As Long = CommonLibrary.SF.Convert.ToLong(pCurrentRow("ParentID")) ' ID родительской строки Dim CurrentObjectID As Long = CommonLibrary.SF.Convert.ToLong(pCurrentRow("CurrentObjectID")) ' ID записи в базе данных Dim iObjectType As Long = CommonLibrary.SF.Convert.ToLong(pCurrentRow("iObjectType")) ' Тип записи Dim IDDimension As Long = CommonLibrary.SF.Convert.ToLong(pCurrentRow("IDDimension")) ' Единица измерения объема/количества Dim MaterialEntity_iVolumeSmeta As Decimal = CommonLibrary.SF.Convert.ToDecimal(pCurrentRow("MaterialEntity_iVolumeSmeta")) ' Объем/количество поступления Dim CoveredWorkMaterial_iVolumeSmeta As Decimal = CommonLibrary.SF.Convert.ToDecimal(pCurrentRow("CoveredWorkMaterial_iVolumeSmeta")) ' Объем/количество расхода Dim CustomCol__16 As String = CommonLibrary.SF.Convert.ToString(pCurrentRow("CustomCol__16")) ' Остаток ресурса
Select Case iObjectType Case eObjectType.tBaseClassObject Dim pDT As DataTable = dtMain.Clone GetChildRowsClone(dtMain, ParentID, pDT, eObjectType.tMaterialEntity)
Dim Summa4_MaterialEntity_iVolumeSmeta As Decimal = 0 Dim Summa4_CoveredWorkMaterial_iVolumeSmeta As Decimal = 0
For Each row As DataRow In pDT.Rows Dim iVolumePostuplenie As Decimal = CommonLibrary.SF.Convert.ToDecimal(row("MaterialEntity_iVolumeSmeta")) ' Объем/количество расхода Dim iVolumeRashod As Decimal = CommonLibrary.SF.Convert.ToDecimal(row("CoveredWorkMaterial_iVolumeSmeta")) ' Объем/количество расхода Summa4_MaterialEntity_iVolumeSmeta += iVolumePostuplenie Summa4_CoveredWorkMaterial_iVolumeSmeta += iVolumeRashod Next
pCurrentRow("MaterialEntity_iVolumeSmeta") = Summa4_MaterialEntity_iVolumeSmeta pCurrentRow("CoveredWorkMaterial_iVolumeSmeta") = Summa4_CoveredWorkMaterial_iVolumeSmeta pCurrentRow("CustomCol__16") = GetVolumeAsString(Summa4_MaterialEntity_iVolumeSmeta - Summa4_CoveredWorkMaterial_iVolumeSmeta) End Select
Return Nothing End Function
Private Sub GetChildRowsClone(ByRef dtMain As DataTable, ByVal ParentID As Long, ByRef pDT As DataTable, ByVal iDestObjectType As eObjectType) For Each row As DataRow In dtMain.Select(" [ParentID] = " & ParentID) Dim iObjectType As Long = CommonLibrary.SF.Convert.ToLong(row("iObjectType")) ' Тип записи
If iObjectType = iDestObjectType Then pDT.ImportRow(row) End If
GetChildRowsClone(dtMain, SF.Convert.ToLong(row("ID")), pDT, iDestObjectType) Next End Sub
End Class End Namespace
Сохраните изменения в пресете. Подробно о написании скрипта смотри раздел "Написание скриптов при настройке пресета". ВНИМАНИЕ! Указанный скрипт написан на языке Microsoft Visual Basic
Создана структура данных с указанием типов строк и родительских связей для вложенных записей для основной колонки создаваемой нами таблицы. Далее необходимо указать параметры выбранных нами типов данных (атрибуты). Параметры материалов, поступление и расход отображаются в колонках. На вкладке "Колонки" формы "Настройка пресетов" настройте колонки
Рис. 1505 Сохраните изменения в пресете. Подробно о настройке колонок смотри раздел "Вкладка "Колонки" формы "Настройка пресетов" или в разделе "Настройка пресета в форме "Настройка пресетов". Для расчета количество расхода по ресурсу в колонке "Объем/количество расхода" выберите язык написания скрипта. Рис. 1506 в разделе "Содержимое скрипта" напишите скрипт следующего содержания
Imports System Imports System.Text Imports System.Data Imports System.Drawing Imports System.Xml Imports System.Collections Imports System.Collections.Generic Imports System.ComponentModel Imports System.Reflection Imports System.IO Imports System.Text.RegularExpressions Imports System.Windows.Forms Imports Microsoft.VisualBasic Imports CommonLibrary
Namespace SFExpressionEvaluator
Public Class CSFScript4TreeViewManagerData
'SFScriptExecuteTester - функция тестирования скрипта SFScriptExecute() Public Function SFScriptExecuteTester() As DataTable 'Файл sf_table4script.xml можно получить при экспорте таблицы для написания скриптов Dim dtMain As New DataTable dtMain.ReadXml(Application.StartupPath & "\sf_table4script.xml")
'Замените FillObject на соответствующее обозначение колонки для которой Вы пишете скрипт. Dim sCurrentColumn As String = "FillObject" Dim pCurrentColumn As DataColumn = dtMain.Columns.Item(sCurrentColumn)
For Each pCurrentRow As DataRow In dtMain.Rows Me.SFScriptExecute(dtMain, pCurrentRow, pCurrentColumn) Next
Return dtMain End Function
'SFScriptExecute - скрипт, который вызывается программой Стройформ для каждой строки таблицы и указанной колонки Public Function SFScriptExecute(ByRef dtMain As DataTable, ByRef pCurrentRow As DataRow, ByRef pCurrentColumn As DataColumn) As Object ' Замените ниже расположенные строки на аналогичные строки, полученные при написании скриптов. Dim ID As Long = CommonLibrary.SF.Convert.ToLong(pCurrentRow("ID")) ' ID строки Dim ParentID As Long = CommonLibrary.SF.Convert.ToLong(pCurrentRow("ParentID")) ' ID родительской строки Dim CurrentObjectID As Long = CommonLibrary.SF.Convert.ToLong(pCurrentRow("CurrentObjectID")) ' ID записи в базе данных Dim iObjectType As Long = CommonLibrary.SF.Convert.ToLong(pCurrentRow("iObjectType")) ' Тип записи Dim IDDimension As Long = CommonLibrary.SF.Convert.ToLong(pCurrentRow("IDDimension")) ' Единица измерения объема/количества Dim MaterialEntity_iVolumeSmeta As Decimal = CommonLibrary.SF.Convert.ToDecimal(pCurrentRow("MaterialEntity_iVolumeSmeta")) ' Объем/количество поступления Dim CoveredWorkMaterial_iVolumeSmeta As Decimal = CommonLibrary.SF.Convert.ToDecimal(pCurrentRow("CoveredWorkMaterial_iVolumeSmeta")) ' Объем/количество расхода Dim CustomCol__16 As String = CommonLibrary.SF.Convert.ToString(pCurrentRow("CustomCol__16")) ' Остаток ресурса
Select Case iObjectType Case eObjectType.tMaterialEntity Dim pDT As DataTable = dtMain.Clone GetChildRowsClone(dtMain, ID, pDT, eObjectType.tCoveredWorkMaterial)
Dim Summa4_CoveredWorkMaterial_iVolumeSmeta As Decimal = 0
For Each row As DataRow In pDT.Rows Dim iVolumeSmeta As Decimal = CommonLibrary.SF.Convert.ToDecimal(row("CoveredWorkMaterial_iVolumeSmeta")) ' Объем/количество расхода Summa4_CoveredWorkMaterial_iVolumeSmeta += iVolumeSmeta Next
pCurrentRow("CoveredWorkMaterial_iVolumeSmeta") = Summa4_CoveredWorkMaterial_iVolumeSmeta End Select
Return Nothing End Function
Private Sub GetChildRowsClone(ByRef dtMain As DataTable, ByVal ParentID As Long, ByRef pDT As DataTable, ByVal iDestObjectType As eObjectType) For Each row As DataRow In dtMain.Select(" [ParentID] = " & ParentID) Dim iObjectType As Long = CommonLibrary.SF.Convert.ToLong(row("iObjectType")) ' Тип записи
If iObjectType = iDestObjectType Then pDT.ImportRow(row) End If
GetChildRowsClone(dtMain, SF.Convert.ToLong(row("ID")), pDT, iDestObjectType) Next End Sub
End Class End Namespace
Сохраните изменения в пресете. Для расчета остатка ресурса в колонке "Остаток ресурса" выберите язык написания скрипта. Рис. 1507 в разделе "Содержимое скрипта" напишите скрипт следующего содержания
Imports System Imports System.Text Imports System.Data Imports System.Drawing Imports System.Xml Imports System.Collections Imports System.Collections.Generic Imports System.ComponentModel Imports System.Reflection Imports System.IO Imports System.Text.RegularExpressions Imports System.Windows.Forms Imports Microsoft.VisualBasic Imports CommonLibrary
Namespace SFExpressionEvaluator
Public Class CSFScript4TreeViewManagerData
'SFScriptExecuteTester - функция тестирования скрипта SFScriptExecute() Public Function SFScriptExecuteTester() As DataTable 'Файл sf_table4script.xml можно получить при экспорте таблицы для написания скриптов Dim dtMain As New DataTable dtMain.ReadXml(Application.StartupPath & "\sf_table4script.xml")
'Замените FillObject на соответствующее обозначение колонки для которой Вы пишете скрипт. Dim sCurrentColumn As String = "FillObject" Dim pCurrentColumn As DataColumn = dtMain.Columns.Item(sCurrentColumn)
For Each pCurrentRow As DataRow In dtMain.Rows Me.SFScriptExecute(dtMain, pCurrentRow, pCurrentColumn) Next
Return dtMain End Function
'SFScriptExecute - скрипт, который вызывается программой Стройформ для каждой строки таблицы и указанной колонки Public Function SFScriptExecute(ByRef dtMain As DataTable, ByRef pCurrentRow As DataRow, ByRef pCurrentColumn As DataColumn) As Object Dim ID As Long = CommonLibrary.SF.Convert.ToLong(pCurrentRow("ID")) ' ID строки Dim ParentID As Long = CommonLibrary.SF.Convert.ToLong(pCurrentRow("ParentID")) ' ID родительской строки Dim CurrentObjectID As Long = CommonLibrary.SF.Convert.ToLong(pCurrentRow("CurrentObjectID")) ' ID записи в базе данных Dim iObjectType As Long = CommonLibrary.SF.Convert.ToLong(pCurrentRow("iObjectType")) ' Тип записи Dim IDDimension As Long = CommonLibrary.SF.Convert.ToLong(pCurrentRow("IDDimension")) ' Единица измерения объема/количества Dim MaterialEntity_iVolumeSmeta As Decimal = CommonLibrary.SF.Convert.ToDecimal(pCurrentRow("MaterialEntity_iVolumeSmeta")) ' Объем/количество поступления Dim CoveredWorkMaterial_iVolumeSmeta As Decimal = CommonLibrary.SF.Convert.ToDecimal(pCurrentRow("CoveredWorkMaterial_iVolumeSmeta")) ' Объем/количество расхода Dim CustomCol__16 As String = CommonLibrary.SF.Convert.ToString(pCurrentRow("CustomCol__16")) ' Остаток ресурса
Select Case iObjectType Case eObjectType.tMaterialEntity pCurrentRow("CustomCol__16") = GetVolumeAsString(MaterialEntity_iVolumeSmeta - CoveredWorkMaterial_iVolumeSmeta) End Select
Return Nothing End Function End Class End Namespace
Сохраните изменения в пресете. Добавьте связующий строку и колонку вид данных "Физическое лицо", переименуйте колонку в "Ответственный за поступление ресурса" и настройте как показано на рис. 1508 Рис. 1508 Сохраните изменения в пресете. Добавьте колонку для вывода информации по ответственному за поступление ресурса Рис. 1509 Сохраните изменения в пресете. Добавьте связующий строку и колонку вид данных "Объект", переименуйте колонку в "Поступил на объект" и настройте как показано на рис. 1510 Рис. 1510 Сохраните изменения в пресете. Добавьте колонку для вывода информации по объекту поступления ресурса Рис. 1511 Сохраните изменения в пресете. Настройте фильтры по фактическому поступлению ресурса как показано на рис. 1512 Рис. 1512 Сохраните изменения в пресете. Настройте фильтры по фактическому расходу ресурса - для строк как показано на рис. 1513 Рис. 1513 - для колонок как показано на рис. 1514 Рис. 1514 Сохраните изменения в пресете. Форма "Управление данными" при наличии в базе данных соответствующей информации примет следующий вид. Рис. 1515 Созданный пресет позволяет добавить фактическое поступление. Для добавления фактического поступления вызовите команду "Добавить новое поступление ресурса по факту к выбранной записи". Рис. 1516 Для добавления фактического расхода вызовите команду "Добавить новое фактический расход к выбранной записи". Рис. 1517 Для добавления ответственного за расходование ресурса вызовите команду "Добавить организацию/лицо осуществляющего расход ресурса к выбранной записи". Рис. 1518 Для добавления объекта расходования ресурса вызовите команду "Добавить к выбранной записи объект, склад, площадка, магазин куда поступил ресурс". Рис. 1519
Для полного понимания процесса создания пресета рекомендуем ознакомится со всеми описаниями создания пресетов в разделе: - Группа пресетов "Управление проектной документацией" - Конфигурация АС "Стройформ": Управление проектом - Графики (отчеты) проверок органов ГСН - Графики проверок в системе качества
|
Руководство пользователя версия 7.4.2013.51, скачать в формате HelpFile.chm, HelpFile.pdf, HelpFile.doc При полном или частичном использовании материалов сайта, ссылка на сайты www.stroyform.ru и www.stroyform.su обязательна support@stroyform.ru. |