Для запуска данного макроса необходимо перейти в режим «Складской учет»-«Расчетные документы», выбрать расчетный документ и перейти на его закладку «Спецификация расчетного документа».

 

Макрос «Калькуляция учетной цены». Позволяет перебирать записи в спецификации расчетного документа, вычислять учетную цену, и при необходимости пересчитывать единицы измерения документа в базовые.

 

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

 

! См. также:

18.2 В режиме «Складской учет»