Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 16:33

Расчет НДС

Автор Smokez, 13 мая 2015, 21:45

0 Пользователей и 1 гость просматривают эту тему.

Smokez

Доброго времени суток, Интересует такой вопрос.
Есть документ Приходная накладная где реквизиты ... , цена, %НДС , сумма НДС.
Для %НДС используются перечисления (без НДС и 18%)
Требуется чтобы цена умножалась на %НДС и рассчитывалась сумма.
Каким образом можно это реализовать если в перечислении используется тип строка?

vitasw

>Каким образом можно это реализовать если в перечислении используется тип строка?
В перечислении не используется тип строка - оно самодостаточно, является типообразующим элементом.
В коде конфигурации посмотреть как оно реализовано - религия не позволяет?

Smokez

считаю НДС
СтрокаТабличнойЧасти.СуммаНДС = СтрокаТабличнойЧасти.НДС * СтрокаТабличнойЧасти.Сумма;
выдает ошибку "{Документ.ПриходныеНакладные.Форма.ФормаДокумента.Форма(17)}: Преобразование значения к типу Число не может быть выполнено СтрокаТабличнойЧасти.СуммаНДС = "
Нужно присвоить значениям (18% и БезНДС) перечисления числовые значения (18% - 0.18) и (БезНДС - 1)
не знаю как это сделать

Sandi

Самый простой вариант, если лень искать в конфигураторе:


Если СтрокаТабличнойЧасти.НДС= Перечисления.СтавкиНДС.НДС18 Тогда
     СтрокаТабличнойЧасти.СуммаНДС = 0.18 * СтрокаТабличнойЧасти.Сумма
ИначеЕсли СтрокаТабличнойЧасти.НДС= Перечисления.СтавкиНДС.БезНДС Тогда
      СтрокаТабличнойЧасти.СуммаНДС = 0
КонецЕсли

Smokez

{Документ.ПриходныеНакладные.Форма.ФормаДокумента.Форма(17,34)}: Переменная не определена (Перечисления)
   Если СтрокаТабличнойЧасти.НДС = <<?>>Перечисления.СтавкиНДС.НДС Тогда (Проверка: Тонкий клиент)
Стыдно, но все же, как исправить?

Sandi

попробуйте вынести получение этой ставки в  функцию, выполняемую на сервере

&НаСервере
Функция ПолучитьСтавкуНДС18()
Возврат Перечисления.СтавкиНДС.НДС18
КонецФункции


и потом вызовите ее в своей процедуре:

Если СтрокаТабличнойЧасти.НДС = ПолучитьСтавкуНДС18() Тогда 


и т.д.

Евгений@

Цитата: Sandi от 14 мая 2015, 08:21
попробуйте вынести получение этой ставки в  функцию, выполняемую на сервере

&НаСервере
Функция ПолучитьСтавкуНДС18()
Возврат Перечисления.СтавкиНДС.НДС18
КонецФункции


и потом вызовите ее в своей процедуре:

Если СтрокаТабличнойЧасти.НДС = ПолучитьСтавкуНДС18() Тогда 


и т.д.

Наверное, чуть более правильно: сделать один внеконтекстный серверный вызов для получения процента и выполнить расчет

&НаСервереБезКонтекста
Функция ПолучитьПроцентНДС(Ставка)

Если Ставка = Перечисления.СтавкиНДС.НДС18 Тогда
Возврат 18;
//ИначеЕсли  Ставка = Перечисления.СтавкиНДС.НДС9 Тогда
// Возврат 9;
Иначе
Возврат 0;
КонецЕсли;

КонецФункции

СтрокаТабличнойЧасти.СуммаНДС = ПолучитьПроцентНДС(СтрокаТабличнойЧасти.НДС) * СтрокаТабличнойЧасти.Сумма;

Smokez

Цитата: Sandi от 14 мая 2015, 08:21
попробуйте вынести получение этой ставки в  функцию, выполняемую на сервере


&НаСервере
Функция ПолучитьСтавкуНДС18()
Возврат Перечисления.СтавкиНДС.НДС18
КонецФункции


и потом вызовите ее в своей процедуре:

Если СтрокаТабличнойЧасти.НДС = ПолучитьСтавкуНДС18() Тогда 


и т.д.

Пробовал но все равно пишет: Переменная не определена (Перечисления)
&НаСервере
Функция ПолучитьНДС18(СтавкаНДС)
Возврат Перечисления.СтавкиНДС.НДС18
КонецФункции

&НаСервере
Функция ПолучитьБезНДС(СтавкаНДС)
Возврат Перечисления.СтавкиНДС.БезНДС
КонецФункции

&НаКлиенте
Процедура ТоварыНДСПриИзменении(Элемент)
   СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
   Если СтрокаТабличнойЧасти.НДС= Перечисления.СтавкиНДС.НДС18 Тогда
     СтрокаТабличнойЧасти.СуммаНДС = 0.18 * СтрокаТабличнойЧасти.Сумма
   ИначеЕсли СтрокаТабличнойЧасти.НДС= Перечисления.СтавкиНДС.БезНДС Тогда
      СтрокаТабличнойЧасти.СуммаНДС = 0
   КонецЕсли
КонецПроцедуры

ui;;t;

Sandi

Цитата: Smokez от 14 мая 2015, 14:53
Цитата: Sandi от 14 мая 2015, 08:21
попробуйте вынести получение этой ставки в  функцию, выполняемую на сервере


&НаСервере
Функция ПолучитьСтавкуНДС18()
Возврат Перечисления.СтавкиНДС.НДС18
КонецФункции


и потом вызовите ее в своей процедуре:

Если СтрокаТабличнойЧасти.НДС = ПолучитьСтавкуНДС18() Тогда 


и т.д.

Пробовал но все равно пишет: Переменная не определена (Перечисления)
&НаСервере
Функция ПолучитьНДС18()  -  убирайте парамеитр "СтавкаНДС" Он в теле функции не используется
Возврат Перечисления.СтавкиНДС.НДС18
КонецФункции

&НаСервере
Функция ПолучитьБезНДС()  - то же самое
Возврат Перечисления.СтавкиНДС.БезНДС
КонецФункции

&НаКлиенте
Процедура ТоварыНДСПриИзменении(Элемент)
   СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
   Если СтрокаТабличнойЧасти.НДС= Перечисления.СтавкиНДС.НДС18 Тогда надо писать Если СтрокаТабличнойЧасти.НДС= ПолучитьНДС18() Тогда
     СтрокаТабличнойЧасти.СуммаНДС = 0.18 * СтрокаТабличнойЧасти.Сумма
   ИначеЕсли СтрокаТабличнойЧасти.НДС= Перечисления.СтавкиНДС.БезНДС Тогда надо писать ИначеЕсли СтрокаТабличнойЧасти.НДС= ПолучитьБезНДС() Тогда
      СтрокаТабличнойЧасти.СуммаНДС = 0
   КонецЕсли
КонецПроцедуры

ui;;t;


или сделайте, как Евгений предложил - его метод более удачный.

Smokez

Огромное спасибо, все заработало :zebzdr:

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск