Имя: Пароль:
1C
1C 7.7
v7: Сумма НДС
,
0 KrutoyDron
 
16.05.12
10:08
Всем доброго дня.
Неправильно счиается сумма ндс. Документ РеализацияТоваров. То больше то меньше то нормально. Подскажите куда копать если у кого-то такое было.
1 lamme
 
16.05.12
10:10
в Отладчик или ЖКК еще не посылали ?
2 Voronve
 
16.05.12
10:10
пример
3 miki
 
16.05.12
10:10
"в т. ч." и "сверху"
5 KrutoyDron
 
16.05.12
10:13
3,120.40 ндс 12% сумма 228.69 а должно 334.33
6 VladZ
 
16.05.12
10:15
(0) "То больше, то меньше" - гы-гы-гы... Компьютер обрел разум и проворачивает финансовые махинации на НДСе! :)
7 VladZ
 
16.05.12
10:16
(5) Отладчик в руки и вперед!
8 Grobik
 
16.05.12
10:16
(5) Нобелевской премией здесь пахнет.
9 Aleksey
 
16.05.12
10:17
(8) Или Казахстаном
10 BlackSeaCat
 
16.05.12
10:22
(8) Не пахнет: за математику нобелевку не дают.
11 Азазелло
 
16.05.12
10:23
(10) за экономику дают, можно будет натянуть :)
12 BlackSeaCat
 
16.05.12
10:27
(11) Не, государство не допустит: смотри (5) - это ж сколько НДС оно недополучит?
13 Азазелло
 
16.05.12
10:29
(12) смотря чье государство :) может мы имеем дело с диссидентом?
14 Grobik
 
16.05.12
10:32
(10) По физике получит как Шредингер. Страшно представить наш мир если открытие KrutoyDron применят на практике. На Альфу-Центавра долетим.
15 1Сергей
 
16.05.12
10:32
а чё про конфу никто не спрашивает?
16 miki
 
16.05.12
10:32
(5)формулу-то засвети
17 KrutoyDron
 
16.05.12
10:39
Кароч по статистике ндс чаще сумма меньше но есть и больше пример : 490.10 ндс 12% 92.59 а должно 52.51.
Бывает что вообще ндс не показывает.
18 1Сергей
 
16.05.12
10:40
(17) конфа поди перепаханная или вообще из разряда народного творчества?
19 Азазелло
 
16.05.12
10:41
(17) см (16) а иначе на пустом месте топчемся
20 Hipernate
 
16.05.12
10:42
НДС 12% не бывает
21 KrutoyDron
 
16.05.12
10:44
бух учет для казахстана
//******************************************************************************
// глПересчетТаблЧасти(Конт,ИмяРеквизита)
//
// Параметры:                
//    Конт                   - контекст документа,
//    ИмяРеквизита           - идентификатор текущей колонки табличной части,
//          
// Возвращаемое значение:
//  Нет
//
// Описание:
//    Производится пересчет зависимых реквизитов при редактировании реквизита
//  табличной части в документах, имеющих сумму и налоги в табличной части,
//  однако не во всех. В некоторых документах (Например, Поступление ТМЦ Импорт)
//  не используется  в связи со специфичностью пересчета.
//
Процедура глПересчетТаблЧасти(Конт,ИмяРеквизита) Экспорт  
   
   Перем СуммаВклНДС, СуммаВклАкциз;
   Перем ЕстьЦена,    ЕстьСумма, ЕстьСуммаБезНалогов;
   Перем ЕстьВалюта,  ЕстьНДС,   ЕстьАкциз, ЕстьВариантРасчетаНалогов;
   Перем ЦенаЦены;
                                                 
   ДатаДок    = Конт.ДатаДок;
   
   ЕстьНДС           = глЕстьРеквизитТабличнойЧасти("СуммаНДС", Конт.Вид());
   ЕстьКоличество = глЕстьРеквизитТабличнойЧасти("Количество", Конт.Вид());
   ЕстьАкциз       = глЕстьРеквизитТабличнойЧасти("СуммаАкциза", Конт.Вид());
   ЕстьЦена             = глЕстьРеквизитТабличнойЧасти("Цена", Конт.Вид());
   ЕстьСумма       = глЕстьРеквизитТабличнойЧасти("Сумма", Конт.Вид());
   ЕстьСуммаБезНалогов       = глЕстьРеквизитТабличнойЧасти("СуммаБезНалогов", Конт.Вид());
   ЕстьВалюта                    = глЕстьРеквизитШапки("Валюта", Конт.Вид());
   ЕстьВариантРасчетаНалогов   = глЕстьРеквизитШапки("ВариантРасчетаНалогов", Конт.Вид());
   
   Если ИмяРеквизита = "ТМЦ" Тогда
       
       ТМЦ = Конт.ТМЦ;
       
       Если ПустоеЗначение(ТМЦ) = 1 Тогда
           
           // Очистили Номенклатуру
           Если ЕстьКоличество <> 0 Тогда
               Конт.Количество = 0;
           КонецЕсли;
           
           Если ЕстьЦена <> 0 Тогда
               Конт.Цена = 0;
           КонецЕсли;
           
           Если ЕстьСумма <> 0 Тогда
               Конт.Сумма = 0;
           КонецЕсли;
           
           Если ЕстьСуммаБезНалогов <> 0 Тогда
               Конт.СуммаБезНалогов = 0;
           КонецЕсли;
           
           Если ЕстьНДС <> 0 Тогда
               Конт.СуммаНДС = 0;
           КонецЕсли;
             
           Если ЕстьАкциз <> 0 Тогда
               Конт.СуммаАкциза = 0;
           КонецЕсли;    
           
           Возврат;
       КонецЕсли;

       // Заполним ставки НДС
       Если ЕстьНДС <> 0 Тогда
           
           Если ЕстьВариантРасчетаНалогов <> 0 Тогда
               СтавкаНДС = глВернутьПараметр(Конт.ВариантРасчетаНалогов, "СтавкаНДС");
           КонецЕсли;    
           
           Если ПустоеЗначение(СтавкаНДС) = 1 Тогда
               
               Если ТипЗначенияСтр(ТМЦ) = "Строка" Тогда
                   // если ТМЦ в документе строкового типа, то выражение
                   // ТМЦ.СтавкаНДС.Получить(Конт.ДатаДок) - выдаст ошибку.
               ИначеЕсли Метаданные.Справочник(ТМЦ.Вид()).Реквизит("СтавкаНДС").Выбран() = 1 Тогда
                   СтавкаНДС = ТМЦ.СтавкаНДС.Получить(Конт.ДатаДок);
               КонецЕсли;
               
           КонецЕсли;
           
           Если ПустоеЗначение(СтавкаНДС) = 1 Тогда
               СтавкаНДС = глЗначениеПоУмолчанию("ОсновнаяСтавкаНДС");
           КонецЕсли;
           
           Если ПустоеЗначение(СтавкаНДС) = 1 Тогда
               // если все же НДС не установлен, то сообщим об этом
               // и не будем считать НДС
               Сообщить("Не определена ставка НДС - сумма НДС не посчитана! Для расчета суммы НДС установите ставку НДС в строке документа, или укажите вариант расчета налогов!");
               Возврат;
           КонецЕсли;
           
           Конт.СтавкаНДС = СтавкаНДС;
           
       КонецЕсли;

       // получим параметры цены
       Если ЕстьЦена = 0 Тогда
           Возврат; // в документе цены нет
       КонецЕсли;
           
        // Заполним ставки акциза
       Если ЕстьАкциз <> 0 Тогда
           
           СтавкаАкциза = глВернутьПараметр(Конт.ВариантРасчетаНалогов, "СтавкаАкциза");
           
           Если ПустоеЗначение(СтавкаАкциза) = 1 Тогда
               
               Если ТипЗначенияСтр(ТМЦ) = "Строка" Тогда
                   // если ТМЦ в документе строкового типа, то выражение
                   // ТМЦ.СтавкаАкциза.Получить(Конт.ДатаДок) - выдаст ошибку.
               ИначеЕсли Метаданные.Справочник(ТМЦ.Вид()).Реквизит("СтавкаАкциза").Выбран() = 1 Тогда
                   СтавкаАкциза = ТМЦ.СтавкаАкциза.Получить(Конт.ДатаДок);
               Иначе
                   СтавкаАкциза = ПолучитьПустоеЗначение("Справочник.СтавкиАкциза");
               КонецЕсли;
               
           КонецЕсли;
           
           Конт.СтавкаАкциза = СтавкаАкциза;
       КонецЕсли;
       
       Если ЕстьВалюта <> 0 Тогда
           Валюта = Конт.Валюта;
           Курс = Конт.Курс;
       Иначе
           Валюта = глВалютаБухУчета;
           Курс = глКурсДляВалюты(глВалютаБухУчета, Конт.ДатаДок);
       КонецЕсли;

       // получим параметры цены
       Если глВернутьЦену(Конт, ТМЦ, ДатаДок, ЕстьВалюта, ЦенаЦены) <> 1 Тогда
           Возврат; // для товара цены нет
       КонецЕсли;
       
       Конт.Цена = ЦенаЦены;
       
       Если ЕстьНДС <> 0 Тогда
           глРасчетНалога(Конт);
       КонецЕсли;
       
   ИначеЕсли ИмяРеквизита = "Количество" Тогда
       
       Если ЕстьЦена = 0 Тогда
           Возврат; // в документе цены нет
       КонецЕсли;
       
       Если ЕстьНДС <> 0 Тогда
           Конт.СуммаНДС = 0;
           глРасчетНалога(Конт);
       КонецЕсли;
       
   ИначеЕсли ИмяРеквизита = "Цена" Тогда
       
       Если ЕстьНДС <> 0 Тогда
           Конт.СуммаНДС = 0;
           глРасчетНалога(Конт);
       КонецЕсли;
       
   ИначеЕсли ИмяРеквизита = "Сумма" Тогда
       
       Если ЕстьЦена <> 0 Тогда
           Конт.Цена = глРассчитатьЦену(Конт);
       КонецЕсли;
       
       Если ЕстьНДС <> 0 Тогда
           Конт.СуммаНДС = 0;
           глРасчетНалога(Конт,1);
       КонецЕсли;
       
   ИначеЕсли ИмяРеквизита = "СтавкаНДС" Тогда
       
       Если ЕстьНДС <> 0 Тогда
           глРасчетНалога(Конт);
       КонецЕсли;
   
   ИначеЕсли ИмяРеквизита = "СтавкаАкциза" Тогда
       
       Если ЕстьАкциз <> 0 Тогда
           глРасчетНалога(Конт);
       КонецЕсли;
       
   КонецЕсли;
   
   // если нет налогов, то их считать не нужно
   Если (ЕстьВариантРасчетаНалогов = 0) или (ЕстьСуммаБезНалогов = 0) Тогда
       Возврат;
   КонецЕсли;
   
   Если ЕстьНДС <> 0 Тогда
       СуммаНДС = Конт.СуммаНДС;
   Иначе
       СуммаНДС = 0;
   КонецЕсли;
   
   Если ЕстьАкциз <> 0 Тогда
       СуммаАкциза = Конт.СуммаАкциза;
   Иначе
       СуммаАкциза = 0;
   КонецЕсли;
   
   // если редактируем сумму, то нам не нужно,
   // чтобы она сама пересчиталась еще раз
   Если (ИмяРеквизита = "Сумма") или (ИмяРеквизита = "СуммаНДС") Тогда
       Конт.СуммаБезНалогов = Конт.Сумма - СуммаНДС - СуммаАкциза;
        Возврат;
   КонецЕсли;
   
   СуммаВклНДС   = глВернутьПараметр(Конт.ВариантРасчетаНалогов, "СуммаВключаетНДС");
   СуммаВклАкциз = глВернутьПараметр(Конт.ВариантРасчетаНалогов, "СуммаВключаетАкциз");
   
   // включен ли НДС в сумму
   Если ЕстьКоличество <> 0 Тогда
       Если СуммаВклНДС = 1 Тогда
           Конт.Сумма = Конт.Цена * Конт.Количество;
       Иначе
           Конт.Сумма = Конт.Цена * Конт.Количество + СуммаНДС;
       КонецЕсли;                                              
   КонецЕсли;    
   
   // включен ли акциз в сумму
   Если СуммаВклАкциз <> 1 Тогда
       Конт.Сумма = Конт.Сумма + СуммаАкциза;
   КонецЕсли;                                            
   
   Конт.СуммаБезНалогов = Конт.Сумма - СуммаНДС - СуммаАкциза;
   
КонецПроцедуры // глПересчетТаблЧасти()
22 BlackSeaCat
 
16.05.12
10:45
(17) Кароч, ты же крутой - кидай компу предъяву: харош рамсить, это ж бабло в натуре!
23 Азазелло
 
16.05.12
10:46
(21) не совсем то. глРасчетНалога нужен еще
24 KrutoyDron
 
16.05.12
10:46
//******************************************************************************
//  глРасчетНалога(Конт)
//
// Параметры:
//    Конт      - контекст документа  
//  ОтСуммы   - признак расчета налогов от суммы
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//    Рассчитываем сумму налога, подставляем ее в документ
//
Процедура глРасчетНалога(Конт, ОтСуммы = 0) Экспорт
   
   Если глЕстьРеквизитШапки("ВариантРасчетаНалогов", Конт.Вид()) <> 0 Тогда
       СуммаВклНДС   = глВернутьПараметр(Конт.ВариантРасчетаНалогов, "СуммаВключаетНДС");
       СуммаВклАкциз = глВернутьПараметр(Конт.ВариантРасчетаНалогов, "СуммаВключаетАкциз");
   Иначе
       СуммаВклНДС   = 1;
       СуммаВклАкциз = 1;
   КонецЕсли;
   
   СтавкаНДС = Конт.СтавкаНДС.Ставка;
   
   Если глЕстьРеквизитТабличнойЧасти("ТаможеннаяСтоимость", Конт.Вид()) <> 0 Тогда
       // Таможенная стоимость в Поступлении ТМЗ по импорту        
       СуммаВклНДС = 0;
       БазаНалога = Конт.ТаможеннаяСтоимость;        
   ИначеЕсли (ОтСуммы = 1) или (глЕстьРеквизитТабличнойЧасти("Количество", Конт.Вид()) = 0)  Тогда
       СуммаВклНДС = 1;
       БазаНалога = Конт.Сумма;
   Иначе
       БазаНалога = Конт.Цена * Конт.Количество;
   КонецЕсли;
   
   СуммаАкциза = 0;
   
   Если глЕстьРеквизитТабличнойЧасти("СтавкаАкциза", Конт.Вид()) <> 0 Тогда
       КоэффициентПересчета = 1;
       Если ТипЗначенияСтр(Конт.ТМЦ) = "Справочник" Тогда
           Если (Конт.ТМЦ.Вид() = "Номенклатура") или  (Конт.ТМЦ.Вид() = "Материалы") Тогда
               Если Конт.ТМЦ.КоэффициентПересчета <> 0 Тогда
                   КоэффициентПересчета =    Конт.ТМЦ.КоэффициентПересчета;
               КонецЕсли;    
           КонецЕсли;  
       КонецЕсли;
       
       Конт.СуммаАкциза = Окр(Конт.Количество * Конт.СтавкаАкциза.Ставка / КоэффициентПересчета, 2);
       СуммаАкциза     = Окр(Конт.Количество * Конт.СтавкаАкциза.Ставка / КоэффициентПересчета, 2);
   КонецЕсли;
   
   Если (СуммаВклАкциз <> 1) и (ОтСуммы <> 1 ) Тогда  
       БазаНалога = БазаНалога + СуммаАкциза;
   КонецЕсли;
   
   Если СуммаВклНДС = 1 Тогда
       Конт.СуммаНДС = Окр(БазаНалога * глВыделяемыйНДС(СтавкаНДС), 2);
   Иначе
       Конт.СуммаНДС = Окр(БазаНалога * глНачисляемыйНДС(СтавкаНДС), 2);
   КонецЕсли;
   
КонецПроцедуры //глРасчетНалога()
25 1Сергей
 
16.05.12
10:46
(21) смотри на каждый товар какая ставка ндс установлена
26 KrutoyDron
 
16.05.12
10:51
везде 12%
27 1Сергей
 
16.05.12
10:52
(26) на дату документа. Если перепровести, исправляется?
28 KrutoyDron
 
16.05.12
10:52
само прикольно когда в таблице перевыбор ндс сделаешь он пересчитает правильно
29 miki
 
16.05.12
10:52
а теперь ещё:
глНачисляемыйНДС()
глВыделяемыйНДС()
30 1Сергей
 
16.05.12
10:54
(28) ну, вот и ответ
31 KrutoyDron
 
16.05.12
10:56
(30) так там стоит 12 а я просто перевыбираю тоже самое 12
32 KrutoyDron
 
16.05.12
10:59
//******************************************************************************
//  глВыделяемыйНДС(Ставка)
//
// Параметры:
//    Ставка - значение типа "Перечисление.СтавкиНДС"
//
// Возвращаемое значение:
//  Числовой коэффициент НДС.
//
// Описание:
//    По ставке НДС (Перечисление) получаем числовой коэффициент НДС, на который
//  необходимо умножить число при выделении НДС (если НДС включен в сумму) для
//  получения суммы НДС.
//
Функция глВыделяемыйНДС(Ставка)   Экспорт
   
   Если ПустоеЗначение(Ставка)=1 Тогда
       Возврат 0;
   Иначе
       Возврат Ставка/(100+Ставка);
   КонецЕсли;
   
КонецФункции //глВыделяемыйНДС()
33 KrutoyDron
 
16.05.12
11:01
//******************************************************************************
//  глНачисляемыйНДС(Ставка)
//
// Параметры:
//    Ставка - значение типа "Перечисление.СтавкиНДС".
//
// Возвращаемое значение:
//  Числовой коэффициент НДС.
//
// Описание:
//    По ставке НДС (Перечисление) получаем числовой коэффициент НДС, на который
//  необходимо умножить число при начислении НДС сверху для получения суммы НДС.
//  
Функция глНачисляемыйНДС(Ставка) Экспорт
   
   Если ПустоеЗначение(Ставка) = 1 Тогда
       Возврат 0;
   Иначе
       Возврат Ставка/100;
   КонецЕсли;
   
КонецФункции // глНачисляемыйНДС()
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн