Здравствуйте уважаемые форумчане! в панорамировании пока новичок, возникла такая ситуация - есть рабочее место с 1с предприятие 7.7 Штрих-М кассир, все настроено все работает нормально, но нужно что бы кассир мог делать "СТОРНО" для товара до определенной цены (например товар с ценной до 100 руб. можно отменить - сторно)
Подскажите пожалуйста какие нибудь идеи.
Процедура Сторно()
Если НовыйЧек=1 Тогда
НовыйЧек();
КонецЕсли;
Если НачинатьСНуля=1 Тогда
НачалоСНуля();
КонецЕсли;
Если ЧекОткрыт=0 Тогда
Возврат;
КонецЕсли;
Если ВидЧека>3 Тогда
Сигнал();
Возврат;
КонецЕсли;
ВнешняяКомпонента.MaxKeyNum=-1;
ВнешняяКомпонента.MinKeyNum=-1;
Если Чек.КоличествоСтрок()>0 Тогда
Если Чек.Флаг=2 Тогда
ВнешняяКомпонента.MaxKeyNum=255;
ВнешняяКомпонента.MinKeyNum=1;
Возврат;
КонецЕсли;
Цифры=?(ДесТ=2,"0.00","0.");
ПоложениеТочки=ДесТ;
НажатаТочка=0;
Кол=1;
НажатПромИтог=0;
ТекТовар=0;
К=1;
Если ПустоеЗначение(Чек.Товар)=0 Тогда
ТекТовар=?(Чек.Товар.Вид()="Товары",Чек.Товар,Чек.Товар.Владелец);
Если Чек.Товар.Вид()="Единицы" Тогда
К=?(Чек.Товар.Коэффициент=0,1,Чек.Товар.Коэффициент);
КонецЕсли;
КонецЕсли;
Если ПроверкаПрав("Сторно")=0 Тогда
СтрокаДляТовараКК(3,0,ТекТовар,Чек.Количество*К,Чек.Цена/К,Чек.Сумма,,Чек.НомерСтроки,2006,Чек.СуммаСкидки);
ВнешняяКомпонента.MaxKeyNum=255;
ВнешняяКомпонента.MinKeyNum=1;
Возврат;
КонецЕсли;
Если (ИтогЧека("СуммаСоСкидкой")-СуммаСкидкиНаЧек-Чек.СуммаСоСкидкой<0) И (СкидкаНаЧек=0) И (ЕстьВозвратыВЧекеПродажи=0) Тогда
ЗвуковойСигнал();
ВывестиПредупреждение("Полученная сумма будет меньше нуля!","Сторно невозможно!");
ВнешняяКомпонента.MaxKeyNum=255;
ВнешняяКомпонента.MinKeyNum=1;
Возврат;
КонецЕсли;
Если ВидЧека<>3 Тогда
Если ПечататьКаждуюСтроку>0 Тогда
Если ПечатьРегистрации(Чек.Номер,Чек.Товар,Чек.Количество,Чек.Цена,Чек.Секция,Чек.Продавец,1)=0 Тогда
ВнешняяКомпонента.MaxKeyNum=255;
ВнешняяКомпонента.MinKeyNum=1;
Возврат;
КонецЕсли;
Если Чек.СуммаСкидки<>0 Тогда
СтрокаДляПечати="";
Если ПустоеЗначение(Чек.АвтоматическаяСкидка)=0 Тогда
СтрокаДляПечати=СокрЛП(Чек.АвтоматическаяСкидка.ТекстДляЧека);
КонецЕсли;
Если ПустоеЗначение(Чек.ФиксированнаяСкидка)=0 Тогда
СтрокаДляПечати=СокрЛП(Чек.ФиксированнаяСкидка.ТекстДляЧека);
КонецЕсли;
Если ПечатьСкидки(Чек.СуммаСкидки,Чек.Скидка,Чек.СуммаСоСкидкой,СтрокаДляПечати)=0 Тогда
ВнешняяКомпонента.MaxKeyNum=255;
ВнешняяКомпонента.MinKeyNum=1;
Возврат;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Транз=СоздатьОбъект("Справочник.ВремТранзакции");
Знак=?(ВидЧека=1,-1,1);
Если Чек.Флаг=3 Тогда
Знак=1;
КонецЕсли;
Транз.Новый();
Транз.Код=Формат(Число(Чек.ТранзакцияРегистрации)+7,"Ч(0)7");
Транз.Наименование=?(ПустоеЗначение(Чек.Товар)=0,"Сторно","Секция");
Транз.НомерККМ=Константа.НомерПОС;
Транз.ДатаТранз=ТекущаяДата();
Транз.ВремяТранз=ТекущееВремя();
Транз.ТипТранзакции=?(ПустоеЗначение(Чек.Товар)=0,12,2);
Транз.НомерЧека=НомерЧека;
Транз.Секция=Чек.Секция;
Транз.КодКассира=ТекущийПользователь.Код;
Транз.КодТовара=?(ПустоеЗначение(Чек.Товар)=0,ТекТовар.Код,0);
Транз.Цена=Чек.Цена/К;
Транз.Количество=Знак*Чек.Количество*К;
Транз.Сумма=Окр(Знак*Чек.СуммаСоСкидкой,ДесТ);
Попытка Транз.Записать();
Исключение ЗвуковойСигнал();
ВывестиПредупреждение("Ошибка работы с базой данных:"+РазделительСтрок+ОписаниеОшибки()+"!","Ошибка базы!");
ВнешняяКомпонента.MaxKeyNum=255;
ВнешняяКомпонента.MinKeyNum=1;
Возврат;
КонецПопытки;
Чек.Флаг=2;
СтрокаДляТовараКК(0,0,ТекТовар,Чек.Количество*К,Чек.Цена/К,Чек.Сумма,,Чек.НомерСтроки,2006,Чек.СуммаСкидки);
ПозЧ=РасчСкидкиНаПоз.НайтиЗначение(Чек.НомерСтроки);
Если ПозЧ>0 Тогда
РасчСкидкиНаПоз.УдалитьЗначение(ПозЧ);
КонецЕсли;
Если СкидкаНаЧек<>0 Тогда
Если ПересчетСкидкиНаЧек()=0 Тогда
ВнешняяКомпонента.MaxKeyNum=255;
ВнешняяКомпонента.MinKeyNum=1;
Возврат;
КонецЕсли;
КонецЕсли;
Иначе Чек.УдалитьСтроку();
КонецЕсли;
КонецЕсли;
Если (Константа.РазрешитьАвтоматическиеСкидки>0) И (ВидЧека=1) Тогда
РассчитатьАвтоматическуюСкидкуНаЧек();
КонецЕсли;
Если (Константа.РазрешитьНакопительныеСкидки>0) И (ПустоеЗначение(ВыбраннаяДисконтнаяКарта)=0) Тогда
Если (ПолучитьСкидкуПоДисконтнойКарте(ВыбраннаяДисконтнаяКарта)<>ДисконтнаяСкидкаНаЧек) ИЛИ (Константа.КонтрольСкидок>0) Тогда
Скидка(0,1,,1,,ВыбраннаяДисконтнаяКарта,1);
Скидка(0,0,,1,,ВыбраннаяДисконтнаяКарта,1);
КонецЕсли;
КонецЕсли;
Если (ПустоеЗначение(ФиксированнаяСкидкаНаЧек)=0) И (Константа.КонтрольСкидок>0) Тогда
Если ФиксированнаяСкидкаНаЧек.ВидСкидки=Перечисление.ВидыСкидок.Процентная Тогда
Скидка(?(ФиксированнаяСкидкаНаЧек.ТипСкидки=Перечисление.ТипыСкидок.Скидка,0,2),1,,1,ФиксированнаяСкидкаНаЧек);
Скидка(?(ФиксированнаяСкидкаНаЧек.ТипСкидки=Перечисление.ТипыСкидок.Скидка,0,2),,,1,ФиксированнаяСкидкаНаЧек);
КонецЕсли;
КонецЕсли;
ПересчетСкидкиНаЧек();
Если ВидЧека=1 Тогда
Операция="Продажа";
ИначеЕсли ВидЧека=2 Тогда
Если ФлагВозврата=1 Тогда
Операция="Возврат";
Иначе Операция="Аннул.";
КонецЕсли;
ИначеЕсли ВидЧека=3 Тогда
Если ФлагВозврата=1 Тогда
Операция="Возврат по №";
Иначе Операция="Аннул. по №";
КонецЕсли;
КонецЕсли;
Если Константа.РаботаСДисплеем>0 Тогда
Если Константа.РазделятьТриады=0 Тогда
ФорматСумм="Ч."+ДесТ;
Иначе ФорматСумм="Ч."+ДесТ+".'";
КонецЕсли;
Если Константа.ВыводитьПромИтогНаДисплей>0 Тогда
ВывестиСтрокуНаДисплей("Сторно "+ФормС(Чек.СуммаСоСкидкой,ФорматСумм),1);
ВывестиСтрокуНаДисплей("Пром.итог "+ФормС(ИтогЧека("СуммаСоСкидкой")-СуммаСкидкиНаЧек,ФорматСумм),2);
Иначе ВывестиСтрокуНаДисплей("Сторно",1);
ВывестиСтрокуНаДисплей(ФормС(Чек.СуммаСоСкидкой,ФорматСумм),2);
КонецЕсли;
КонецЕсли;
ОбновитьНомераСтрок();
ВнешняяКомпонента.MaxKeyNum=255;
ВнешняяКомпонента.MinKeyNum=1;
КонецПроцедуры