Для запуска данного макроса необходимо перейти в режим:

«Складской учет»-«Расчетные документы»,

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

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

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

 

См. также:

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