Для запуска данного макроса необходимо перейти в режим «Складской учет»-«Расчетные документы», выбрать расчетный документ и перейти на его закладку «Спецификация расчетного документа».
Макрос «Калькуляция учетной цены». Позволяет перебирать записи в спецификации расчетного документа, вычислять учетную цену, и при необходимости пересчитывать единицы измерения документа в базовые.
Sub FormMacro_U_Cost(TCSActiveModule)
'
' Калькуляция учетной цены позиций расчетного документа
'
' Исходные данные:
'
' PRICE Исходная цена
' COEFF Коэффициент пересчета единиц измерения
' NDS НДС(%)
' QUANTITY Исходное количество
' QUANTITY_REGISTRATION Учетное количество
'
'
' Учетная цена вычисляется как:
'
' PRICE_REGISTRATION=(PRICE*(1-NDS/(100+NDS))*QUANTITY)/QUANTITY_REGISTRATION
'
'
Dim LastCursor 'текущая позиция курсора
Dim NDS 'НДС(%) вводится в процессе вычисления
Dim Rn 'Служебная переменная
Dim LStr 'Служебная переменная
LastCursor=TCSActiveModule.GetBookMark 'Запомнить полжение курсора
NDS=TCSApp.InputBox("Коэффициент","НДС(%) исключить: ",18)'Ввести НДС
TCSActiveModule.First 'Встать на начало спецификации
Do While Not TCSActiveModule.EOF 'Перебираем записи спецификации
Call TCSActiveModule.Edit 'Берем запись на редактирование
If TCSActiveModule.Properties( "BASE_MESUR_ID" ).AsInteger <> TCSActiveModule.Properties( "MESUR_ID" ).AsInteger Then 'Если единица измерения отличается от базовой
If TCSActiveModule.Properties( "COEFF" ).AsFloat=0 Or TCSActiveModule.Properties( "COEFF" ).AsFloat=1 Then'И при этом не указан коэффициент пересчета
LStr="Из <" & TCSActiveModule.Properties( "MESUR_NOTE" ).DisplayText 'Сформировать заголовок
LStr=LStr & "> в <" & TCSActiveModule.Properties( "BASE_MESUR_NOTE" ).DisplayText 'Для InputBox-а
LStr=LStr & "> для: " & TCSActiveModule.Properties( "NMK_NAME" ).DisplayText '
Rn=0
While Rn=0 'Пока не будет введен коэффициент
Rn=TCSApp.InputBox("Введите коэффициент пересчета ",LStr,TCSActiveModule.Properties( "COEFF" ).AsFloat) 'Ввести коэфф.пересчета
TCSActiveModule.Properties( "COEFF" ).AsFloat=Rn 'И сохранить его
Wend
Call TCSActiveModule.SaveChanges 'Сохранить изменения
Call TCSActiveModule.Edit 'И снова взять запись на редактирование
End If
End If
Rn = TCSActiveModule.Properties("PRICE").Value * (1- NDS/(100+NDS)) 'Цена без НДС
Rn = Rn * TCSActiveModule.Properties("QUANTITY").Value 'Сумма без НДС
Rn = Rn/TCSActiveModule.Properties("QUANTITY_REGISTRATION").Value 'Учетная цена
TCSActiveModule.Properties("PRICE_REGISTRATION").AsFloat = Rn 'Занести учетную цену
On Error Resume Next 'В случае ошибки подолжить цикл
Call TCSActiveModule.SaveChanges 'Сохраним расчетный документ, и если произошла
Call TCSActiveModule.CancelChanges 'ошибка, отменим все изменения
TCSActiveModule.Next 'Взять следующую запись
Loop 'Конец цикла по спецификации
Call TCSActiveModule.GotoBookmark( LastCursor ) 'Вернуть курсор в исходное положение
End Sub
! См. также: