Имя: Пароль:
1C
 
не расчитывается сумма НДС в табличной части документа "Поступление товаров
0 Anzhi
 
22.03.07
18:27
Помогите разобраться почему не расчитывается сумма НДС в табличной части документа "Поступление товаров и услуг" на закладке "Оборудование"

Процедура ОборудованиеСтавкаНДСПриИзменении(Элемент)
   
РассчитатьСуммуНДСТабЧасти(ЭлементыФормы.Оборудование.ТекущиеДанные, ЭтотОбъект);
   
КонецПроцедуры


// Расчет, исходя из постоянной суммы
Процедура РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ДокументОбъект) Экспорт

   МетаданныеДокумента = ДокументОбъект.Метаданные();
   ИмяТабличнойЧасти = ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(СтрокаТабличнойЧасти);
   
   Если ЕстьРеквизитТабЧастиДокумента("Сумма", МетаданныеДокумента, ИмяТабличнойЧасти) И
       ЕстьРеквизитТабЧастиДокумента("СтавкаНДС", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
       
       СтрокаТабличнойЧасти.СуммаНДС = РассчитатьСуммуНДС(СтрокаТабличнойЧасти.Сумма,
                                                         
?(ЕстьРеквизитДокумента("УчитыватьНДС", МетаданныеДокумента),ДокументОбъект.УчитыватьНДС,Истина),
                         
?(ЕстьРеквизитДокумента("СуммаВключаетНДС", МетаданныеДокумента),ДокументОбъект.СуммаВключаетНДС,Ложь),
                                                          ПолучитьСтавкуНДС(СтрокаТабличнойЧасти.СтавкаНДС));
   КонецЕсли;

КонецПроцедуры // РассчитатьСуммуНДСТабЧасти()
1 MikleV
 
22.03.07
18:28
ну и
2 MikleV
 
22.03.07
18:28
лезь отладчиком да смотри, вот проблем то
3 Anzhi
 
22.03.07
18:32
Процедура РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ДокументОбъект) Экспорт

не функционирует, хотя она написана правильно
4 Dionisious
 
22.03.07
18:37
(3) Оригинально не функционирует функция РассчитатьСуммуНДСТабЧасти а код привел процедуры РассчитатьСуммуНДСТабЧасти
5 Dionisious
 
22.03.07
18:37
(4)+ что то я стормозил.
6 Dionisious
 
22.03.07
18:41
В функции ЕстьРеквизитТабЧастиДокумента второй параметр не строка случайно?
7 Anzhi
 
25.03.07
14:06
"не функционирует" значит не работает, не действует и не оказывает ни какого влияния...

Там (в demo версии) нет никакой функции, только процедура.

"В функции ЕстьРеквизитТабЧастиДокумента второй параметр не строка случайно?"
Вроде, нет!
8 Neco
 
25.03.07
14:23
У реквизита "СтавкаНДС" табличной части "Оборудование" установлен обработчик события ПриИзменении?
9 Anzhi
 
25.03.07
15:11
У реквизита "СтавкаНДС" табличной части "Оборудование" установлен обработчик события ПриИзменении

Да, установлен.
10 Anzhi
 
25.03.07
16:48
Влияет ли последователность процедур и функций?
Что означает эта ошибка?

{ОбщийМодуль.РасчетНДС(55,13)}: Обнаружено логическое завершение исходного текста модуля
КонецФункции<<?>> // ЕстьРеквизитТабЧастиДокумента()



// Функция возвращает имя табличной части, к которой принадлежит переданная строка
Функция ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(СтрокаТабличнойЧасти) Экспорт

   Возврат Метаданные.НайтиПоТипу(ТипЗнч(СтрокаТабличнойЧасти)).Имя;

КонецФункции // ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку()


// Позволяет определить есть ли среди реквизитов шапки документа
// реквизит с переданным именем.
//
// Параметры:
//  ИмяРеквизита - строковое имя искомого реквизита,
//  МетаданныеДокумента - объект описания метаданных документа, среди реквизитов которого производится поиск.
//
// Возвращаемое значение:
//  Истина - нашли реквизит с таким именем, Ложь - не нашли.
//
Функция ЕстьРеквизитДокумента(ИмяРеквизита, МетаданныеДокумента) Экспорт

Возврат НЕ (МетаданныеДокумента.Реквизиты.Найти(ИмяРеквизита) = Неопределено);

КонецФункции // ЕстьРеквизитДокумента()

// Позволяет определить есть ли среди реквизитов табличной части документа
// реквизит с переданным именем.
//
// Параметры:
//  ИмяРеквизита - строковое имя искомого реквизита,
//  МетаданныеДокумента - объект описания метаданных документа, среди реквизитов которого производится поиск.
//  ИмяТабЧасти  - строковое имя табличной части документа, среди реквизитов которого производится поиск
//
// Возвращаемое значение:
//  Истина - нашли реквизит с таким именем, Ложь - не нашли.
//
Функция ЕстьРеквизитТабЧастиДокумента(ИмяРеквизита, МетаданныеДокумента, ИмяТабЧасти) Экспорт

   ТабЧасть = МетаданныеДокумента.ТабличныеЧасти.Найти(ИмяТабЧасти);

   Если ТабЧасть = Неопределено Тогда // Нет такой таб. части в документе
       Возврат Ложь;

   Иначе
       Возврат НЕ (ТабЧасть.Реквизиты.Найти(ИмяРеквизита) = Неопределено);

   КонецЕсли;

КонецФункции // ЕстьРеквизитТабЧастиДокумента()


//Функция возвращает курс ставку НДС

Параметры:
 Валюта - СправочникСсылка.Валюты, валюта, по которой необходимо получить курс
 ДатаКурса - Дата, календарная дата, на которую необходимо получить курс валюты

Возвращаемое значение:
   Курс переданной валюты на переданную дату, 1 в случае отсутствия значения.

Функция ПолучитьСтавкуНДС(СтавкаНДС) Экспорт

   Если СтавкаНДС = Перечисления.СтавкиНДС.НДС20 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120 Тогда
       Возврат 20;

   ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС10 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110 Тогда
       Возврат 10;

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

   КонецЕсли;

   Возврат 0;

КонецФункции // ПолучитьСтавкуНДС()

// Рассчитывает сумму НДС исходя из суммы и флагов налогообложения
//
// Параметры:
//  Сумма            - число, сумма от которой надо рассчитывать налоги,
//  УчитыватьНДС     - булево, признак учета НДС в сумме,
//  СуммаВключаетНДС - булево, признак включения НДС в сумму ("внутри" или "сверху"),
//  СтавкаНДС        - число , процентная ставка НДС,
//
// Возвращаемое значение:
//  Число, полученная сумма НДС
//
Функция РассчитатьСуммуНДС(Сумма, УчитыватьНДС, СуммаВключаетНДС, СтавкаНДС) Экспорт

   Если (УчитыватьНДС) И (СуммаВключаетНДС) Тогда
       СуммаБезНДС = 100 * Сумма / (100 + СтавкаНДС);
       СуммаНДС = Сумма - СуммаБезНДС;
   Иначе
       СуммаБезНДС = Сумма;
   КонецЕсли;

   Если УчитыватьНДС Тогда
       Если НЕ СуммаВключаетНДС Тогда
           СуммаНДС = СуммаБезНДС * СтавкаНДС / 100;
       КонецЕсли;
   Иначе
       СуммаНДС = 0;
   КонецЕсли;

   Возврат СуммаНДС;

КонецФункции // РассчитатьСуммуНДС()

// Расчет, исходя из постоянной суммы
//
// Параметры:
//  СтрокаТабличнойЧасти - строка табличной части документа,
//  ДокументОбъект       - объект редактируемого документа.
//
Процедура РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ДокументОбъект) Экспорт

   МетаданныеДокумента = ДокументОбъект.Метаданные();
   ИмяТабличнойЧасти = ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(СтрокаТабличнойЧасти);
   
   Если ЕстьРеквизитТабЧастиДокумента("Сумма", МетаданныеДокумента, ИмяТабличнойЧасти) И
       ЕстьРеквизитТабЧастиДокумента("СтавкаНДС", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
       
       СтрокаТабличнойЧасти.СуммаНДС = РассчитатьСуммуНДС(СтрокаТабличнойЧасти.Сумма,
                                                          ?(ЕстьРеквизитДокумента("УчитыватьНДС", МетаданныеДокумента),ДокументОбъект.УчитыватьНДС,Истина),
                                                          ?(ЕстьРеквизитДокумента("СуммаВключаетНДС", МетаданныеДокумента),ДокументОбъект.СуммаВключаетНДС,Ложь),
                                                          ПолучитьСтавкуНДС(СтрокаТабличнойЧасти.СтавкаНДС));
   КонецЕсли;

КонецПроцедуры // РассчитатьСуммуНДСТабЧасти()


   // Процедура заполняет ставку НДС в строке табличной части документа
//
// Параметры:
//  СтрокаТабличнойЧасти     - строка табличной части документа,
//  ДокументОбъект           - объект редактируемого документа.
//
Процедура ЗаполнитьСтавкуНДСТабЧасти(СтрокаТабличнойЧасти, ДокументОбъект) Экспорт///////

   ИмяТабличнойЧасти = ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(СтрокаТабличнойЧасти);
   МетаданныеДокумента = ДокументОбъект.Метаданные();

   //Заполнить СтавкаНДС
   Если ЕстьРеквизитТабЧастиДокумента("Номенклатура", МетаданныеДокумента, ИмяТабличнойЧасти)
       и ТипЗнч(СтрокаТабличнойЧасти.Номенклатура) = Тип("СправочникСсылка.Номенклатура")
       и ЕстьРеквизитТабЧастиДокумента("СтавкаНДС", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
       СтрокаТабличнойЧасти.СтавкаНДС = СтрокаТабличнойЧасти.Номенклатура.СтавкаНДС;
       
   КонецЕсли;    
КонецПроцедуры // ЗаполнитьСтавкуНДСТабЧасти()
11 Anzhi
 
25.03.07
17:01
С ошибкой разобралась.
{ОбщийМодуль.РасчетНДС(55,13)}: Обнаружено логическое завершение исходного текста модуля
КонецФункции<<?>> // ЕстьРеквизитТабЧастиДокумента()


Я не понимаю почему не рассчитывается СуммаНДС.

Модуль см. выше...
12 Anzhi
 
25.03.07
17:49
Все ли я процедуры и функции использовала для расчета Суммы НДС?


// Функция возвращает имя табличной части, к которой принадлежит переданная строка
Функция ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(СтрокаТабличнойЧасти) Экспорт

// Позволяет определить есть ли среди реквизитов шапки документа
// реквизит с переданным именем.
Функция ЕстьРеквизитДокумента(ИмяРеквизита, МетаданныеДокумента) Экспорт

// Позволяет определить есть ли среди реквизитов табличной части документа
// реквизит с переданным именем.
Функция ЕстьРеквизитТабЧастиДокумента(ИмяРеквизита, МетаданныеДокумента, ИмяТабЧасти) Экспорт

Функция ПолучитьСтавкуНДС(СтавкаНДС) Экспорт

// Рассчитывает сумму НДС исходя из суммы и флагов налогообложения
Функция РассчитатьСуммуНДС(Сумма, УчитыватьНДС, СуммаВключаетНДС, СтавкаНДС) Экспорт

// Расчет, исходя из постоянной суммы
Процедура РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ДокументОбъект) Экспорт
13 Anzhi
 
26.03.07
16:33
помогите