Для запуска данного макроса необходимо перейти в режим «Складской учет»-«Расчетные документы», выбрать расчетный документ и перейти на его закладку «Спецификация расчетного документа».
Макрос «Калькуляция учетной цены». Позволяет перебирать записи в спецификации расчетного документа, вычислять учетную цену, и при необходимости пересчитывать единицы измерения документа в базовые.
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 IfRn = 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
! См. также: