Имя: Пароль:
1C
 
Непонятки в УТ 8 при вводе суммы в ТЧ документа
0 Nikart
 
24.02.10
09:58
При вводе суммы строки ТЧ документа реализации, если не делится сумма на колличество так, чтобы получилась цена до копеек, то программа пересчитывает сумму в строке ТЧ. Например количесвто 19020, сумма - 4906. цена соответственна получается кудрявая. Но не пойму где программа меняет сумму строки, если мы её вводим. Пробегал отладчиком в конфигураторе, там даже данному реквизиту в обработчике строки не присваивается значение реквизиту Сумма.
Не дойдёт никак, где программав её меняет.
Помогите разобраться.
1 mikecool
 
24.02.10
10:00
Пробегал отладчиком в конфигураторе - плохо пробегал
ОМ ОбработкаТабличнойЧасти - кажется так зовется
2 Nikart
 
24.02.10
10:02
// Процедура выполняет стандартные действия при изменении суммы
// в строке табличной части документа.
//
// Параметры:
//  СтрокаТабличнойЧасти                             - строка табличной части документа,
//  ДокументОбъект                                   - объект редактируемого документа,
//  ТекПользователь                                  - ссылка на текущего пользователя,
//  РасчетАвтоматическихСкидок                       - признак необходимости Расчета автоматических скидок,
//  ЕстьРеквизитДокументаПроцентСкидкиНаценки        - признак наличия в табличной части документа процента скидки (наценки),
//  ПересчитыватьСкидкуДокумента                     - признак необходимости пересчета скидки для данного пользователя,
//  ЕстьРеквизитДокументаПроцентАвтоматическихСкидок - признак наличия в документе реквизита ПроцентАвтоматическихСкидок,
//  ИмяТабЧастиДокумента                             - имя табличной части.
//
Процедура ПриИзмененииСуммыТабЧасти(СтрокаТабличнойЧасти, ДокументОбъект, ТекПользователь, РасчетАвтоматическихСкидок = Ложь,
                                   ЕстьРеквизитДокументаПроцентСкидкиНаценки = Неопределено,
                                   ПересчитыватьСкидкуДокумента = Неопределено,
                                   ЕстьРеквизитДокументаПроцентАвтоматическихСкидок = Неопределено,
                                   ИмяТабЧастиДокумента = Неопределено) Экспорт

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

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

       Если ЕстьРеквизитПроцентСкидкиНаценки Тогда

           ПересчитыватьСкидку = ?(ПересчитыватьСкидкуДокумента = Неопределено,
                                   УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ТекПользователь, "ПриИзмененииСуммыПересчитыватьСкидку"),
                                   ПересчитыватьСкидкуДокумента);

           ЕстьРеквизитПроцентАвтоматическихСкидок = ?( ЕстьРеквизитДокументаПроцентАвтоматическихСкидок = Неопределено,
                                                        ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ПроцентАвтоматическихСкидок",
                                                                                МетаданныеДокумента, ИмяТабличнойЧасти),
                                                        ЕстьРеквизитДокументаПроцентАвтоматическихСкидок);

           Если ПересчитыватьСкидку Тогда
               Если (СтрокаТабличнойЧасти.Цена = 0) Или (СтрокаТабличнойЧасти.Количество = 0) Тогда
                   СтрокаТабличнойЧасти.ПроцентСкидкиНаценки = 0;
                   Если СтрокаТабличнойЧасти.Цена = 0 Тогда
                       ОбщегоНазначения.СообщитьОбОшибке("Цена равна 0, после изменения суммы установлена нулевая скидка!");
                   Иначе
                       ОбщегоНазначения.СообщитьОбОшибке("Количество равно 0, после изменения суммы установлена нулевая скидка!");
                   КонецЕсли;
               Иначе
                   СуммаСоСкидками = СтрокаТабличнойЧасти.Сумма;
                   СуммаБезСкидок  = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Количество;
                   ПроцентСкидки   = 100 - (СуммаСоСкидками * 100) / СуммаБезСкидок;
                   ПроцентАвтоматическихСкидок = 0;

                   Если ЕстьРеквизитПроцентАвтоматическихСкидок Тогда
                       ПроцентАвтоматическихСкидок = СтрокаТабличнойЧасти.ПроцентАвтоматическихСкидок;
                   КонецЕсли;
                   СтрокаТабличнойЧасти.ПроцентСкидкиНаценки = ПроцентСкидки - ПроцентАвтоматическихСкидок;

               КонецЕсли;
           Иначе
               Если СтрокаТабличнойЧасти.ПроцентСкидкиНаценки >= 100 Тогда
                   СтрокаТабличнойЧасти.Цена = 0;
                   ОбщегоНазначения.СообщитьОбОшибке("Скидка равна 100%, после изменения суммы установлена нулевая цена!");
               Иначе
                   ПроцентАвтоматическихСкидок = 0;
                   Если ЕстьРеквизитПроцентАвтоматическихСкидок Тогда
                       ПроцентАвтоматическихСкидок = СтрокаТабличнойЧасти.ПроцентАвтоматическихСкидок;
                   КонецЕсли;
                   СуммаБезСкидок  = СтрокаТабличнойЧасти.Сумма * 100/
                                     (100 - СтрокаТабличнойЧасти.ПроцентСкидкиНаценки - ПроцентАвтоматическихСкидок);
                   СтрокаТабличнойЧасти.Цена = СуммаБезСкидок / СтрокаТабличнойЧасти.Количество;
               КонецЕсли;
           КонецЕсли;
       Иначе
           СтрокаТабличнойЧасти.Цена = СтрокаТабличнойЧасти.Сумма / СтрокаТабличнойЧасти.Количество;
       КонецЕсли;
   КонецЕсли;

КонецПроцедуры // ПриИзмененииСуммыТабЧасти()



Вот эта обработка.. тут нет "СтрокаТабличнойЧасти.Сумма = "
3 Nikart
 
24.02.10
10:21
ап
4 Nikart
 
24.02.10
10:40
никто не подскажет?
5 Nikart
 
24.02.10
10:43
тут получается срабатывает ПриИзмененииЦеныТабличнойЧасти? я правильно понимаю? из-за этого потом и сумма пересчитывается?
6 Pashkaa
 
24.02.10
10:53
Обработчик ТоварыПриОкончанииРедактирования

там есть процедура РассчитатьСкидкиПриПродаже() там есть твоя строка

Для Каждого СтрокаТаблицы Из ТаблицаТоваров Цикл
СтрокаТаблицы.СуммаБезСкидки = СтрокаТаблицы.Количество * СтрокаТаблицы.Цена;
КонецЦикла;


Попробуй поискать концы здесь
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан