Имя: Пароль:
1C
1С v8
Текущая строка (выборка)...
0 OrenDi
 
07.09.17
14:15
Здравствуйте.

Подскажите пожалуйста в чем ошибка?
Создал условие на проверку принадлежности к группе и по проценту скидки.

Вот код:

ЗАКАЗНОЕ = Справочники.Номенклатура.НайтиПоКоду("00000005");
        
            попытка
        Для каждого ТС Из ЭтаФорма.Товары Цикл
            Если (ТС.номенклатура.ПринадлежитЭлементу(ЗАКАЗНОЕ) и ЭтотОбъект.Товары.Итог("ПроцентСкидки")>0) или
            (ТС.номенклатура.ПринадлежитЭлементу(ЗАКАЗНОЕ) и ЭтотОбъект.Товары.Итог("ПроцентСкидкиСтроки")>0) Тогда
              
                Сообщить("На группу товаров ЗАКАЗНОЕ скидка не действует, только наценка!", СтатусСообщения.Важное);
                ТС.ПроцентСкидки ="";
                ТС.СуммаСкидки=0;
                ТС.СкидкаНаТовар ="";
                ТС.ПроцентСкидкиСтроки  ="";
                ТС.СуммаСкидкиСтроки=0;
                ТС.СуммаВсего=    ТС.сумма;
                ТС.СуммаНДС=Окр(ТС.СуммаВсего-(ТС.СуммаВсего/(ТС.СтавкаНДС.Ставка/100+1)),2);
            КонецЕсли;
            КонецЦикла;
                        
        Исключение
        КонецПопытки;
        
        Попытка

            Если ТС.номенклатура.ПринадлежитЭлементу(ЗАКАЗНОЕ) и ЭтотОбъект.Товары.Итог("ПроцентСкидки")<0  Тогда
                //стр.ПроцентСкидки =ПроцентСкидки;
                ТС.СуммаСкидки=Окр(ТС.Сумма*ТС.ПроцентСкидки/100);
                //стр.СкидкаНаТовар ="";
                //стр.ПроцентСкидкиСтроки  ="";
                //стр.СуммаСкидкиСтроки=0;
                ТС.СуммаВсего=    ТС.Сумма-Окр(ТС.Сумма*ТС.ПроцентСкидки/100,2);
                ТС.СуммаНДС=Окр(ТС.СуммаВсего-(ТС.СуммаВсего/(ТС.СтавкаНДС.Ставка/100+1)),2);
            КонецЕсли;
            
        Исключение
    КонецПопытки;


Но когда заполняю документ товаром, допустим 1 строка товара не принадлежит группе Заказное проставляю скидку 10%, вторая строка принадлежит группе Заказное - выходит сообщение - скидка обнуляется,но вот на третий товар Не принадлежащей группе Заказное все равно выходит  предупреждение сообщение - На группу товаров ЗАКАЗНОЕ скидка не действует, только наценка!. Что не правильно? Спасибо за помощь!
1 Aleksandr N
 
07.09.17
14:42
(0) попытка не пытка
2 Aleksandr N
 
07.09.17
14:44
(0) Скорее всего группы с таким кодом не существует.
3 ILNIK19
 
07.09.17
15:01
(0), Автор, ты когда проставляешь скидку во второй строке, у тебя вторая часть условия срабатывает


ЭтотОбъект.Товары.Итог("ПроцентСкидки")>0
4 OrenDi
 
07.09.17
15:02
Aleksandr N, все работает правильно в итоге. Просто сообщение предупреждение - (На группу товаров ЗАКАЗНОЕ скидка не действует, только наценка!) выскакивает и на те позиции товара которые не принадлежат группе - Заказное!
Для примера:
В документе забиваю 1 строку не из группы - Заказное проставляю скидку (допустим 10%) - скидка предоставилась, сумма пересчиталась, предупреждения нет - все правильно.
Тут же забиваю 2 строку из группы Заказное, проставляю скидку     10% - выскакивает предупреждение - (На группу товаров ЗАКАЗНОЕ скидка не действует, только наценка!), скидка во 2 строке обнуляется - все правильно.
Забиваю 3 строку НЕ из группы заказное проставляю скидку 10% - скидка считается, сумма уменьшается на % скидки - все правильно, но опять выскакивает сообщение, предупреждение  -  (На группу товаров ЗАКАЗНОЕ скидка не действует, только наценка!) - вот это не правильно, т.к. товар не принадлежит группе Заказное.
5 ILNIK19
 
07.09.17
15:03
(0) Вангую ,что тебе недо смотреть не итог по ТЧ, а значение в текущей строке ТЧ
6 ILNIK19
 
07.09.17
15:04
Смотри в отладчике каждую часть условия и поймешь ,почему туда залетает.
7 h-sp
 
07.09.17
15:17
(4) у тебя же так задумано в алгоритме.

       Для каждого ТС Из ЭтаФорма.Товары Цикл


то есть для 3-го товара ты проверяешь всю табчасть. А там есть заказные. Поэтому и выдает предупреждения.
8 h-sp
 
07.09.17
15:21
(4) то есть твой алгоритм: если в табличной части вдруг есть заказные и в табличной части вдруг где-то встречается скидка, то выдать предупреждение.

Ну то есть ты где-то зафигачил скидку, причем это неважно где. Проверь чтобы все скидки были авны 0. Тогда твой алгоритм сработает.
9 OrenDi
 
07.09.17
15:32
h-sp Так в том то и дело, что в документе могут быть товары из разных групп как со скидкой  так и без, в том числе из группы Заказное. Получается нужно убрать - Для каждого ТС Из ЭтаФорма.Товары Цикл,  что бы не бегал по всем строкам?
10 del123
 
07.09.17
15:42
(9) Можно изменить условие: не итог скидки смотреть, а в данной строке.
ну а по факту, если ты по строке добавляешь, то и проверять надо не всю таблицу постоянно, а измененную строку
11 OrenDi
 
07.09.17
15:54
del123 Подскажи как лучше сделать. а то что то не соображу как правильно...(
12 del123
 
07.09.17
15:56
При окончании редактирования проверяешь свои параметры только у строки, которую редактировал и, если необходимо, правишь.
13 OrenDi
 
07.09.17
18:55
стр=ЭтаФорма.ТекущийЭлемент.ТекущаяСтрока;
Да, все получилось. Всем Спасибо!
P.S. Главное изначально так и делал, но что то там меня не устроило и начал мудрить...) - конец недели, конец дня, бывает...)