Имя: Пароль:
1C
1C 7.7
v7: условие для действия кассира
0 Fanat26
 
03.08.11
05:07
Здравствуйте уважаемые форумчане! в панорамировании пока новичок, возникла такая ситуация - есть рабочее место с 1с предприятие 7.7 Штрих-М кассир, все настроено все работает нормально, но нужно что бы кассир мог делать "СТОРНО" для товара до определенной цены (например товар с ценной до 100 руб. можно отменить - сторно)
Подскажите пожалуйста какие нибудь идеи.
модуль сторно могу выложить
1 Rie
 
03.08.11
05:13
(0) Как вариант - в РегистрацияПродаж в ОбработкаВнешнегоСобытия() для "НажатиеКлавиши" проверить, что код нажатой клавиши - это код сторно, глянуть в текущую строку таблицы Чек и, ежели условию не удовлетворяет, - послать кассира в светлую даль.
2 Fanat26
 
03.08.11
05:24
извените маленько недопонимаю=((
не могли бы вы объяснить по подробнее.
3 Fanat26
 
03.08.11
05:24
Процедура Сторно()
       Если НовыйЧек=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;
   КонецПроцедуры
4 Rie
 
03.08.11
05:31
(3) Если хочешь править здесь, то после проверки

Если ПроверкаПрав("Сторно")=0 Тогда

воткни проверку на сумму товара в текущей строке чека.
5 Fanat26
 
03.08.11
05:40
Эхх тяжко все это =)
большое спасибо за подсказку!!!
6 Fanat26
 
03.08.11
05:46
сегодня попробую поправить, сможете потом посмотерть праильно ли я мыслю?)
7 Rie
 
03.08.11
05:55
(6) Правильно ли ты мыслишь - тебе скажут кассиры. Ну или директор конторы :-)
8 Erhov_egor
 
03.08.11
05:58
Если Чек.Цена<= 100 Тогда
четочтотебенужно;
КонецЕсли;
9 Fanat26
 
03.08.11
11:43
Erhov_egor а куда это в модуле вставлять??
10 Rie
 
04.08.11
05:42
(9) Не трогайте модуль и обратитесь к специалисту.
11 Rie
 
04.08.11
06:13
Вообще, ответы вопросы по "Штрих-М Кассир" можно получить здесь: http://new.shtrih-m.ru/forum/
Их техподдержка отвечает вполне нормально (разумеется, каков вопрос - таков и ответ). Обязательно назвать версию - они довольно сильно отличаются внутри.

Самостоятельно ковырять конфигурацию, не разобравшись в ней, -  несколько рискованно. У них довольно оригинальное взаимодействие модулей - через две глубоко внедрённых ВК. В остальном же конфигурация довольно проста.
12 Erhov_egor
 
04.08.11
07:50
можно процедуру написать типо
процедура НаймиСпециалистаЛучше()
Если Чек.Цена<=100 Тогда
Сторно()
КонецЕСли;
КонецПроцедуры
13 Erhov_egor
 
04.08.11
07:51
Могу на удаленке поработать цена договоная...
14 KRV
 
04.08.11
08:13
Прикольно будет... (13) только-только рассказали про то, как отключить автоввод новой строки, а он уже удаленно готов поработать..
15 Erhov_egor
 
04.08.11
08:17
(14)потому что забыл
16 Erhov_egor
 
04.08.11
08:18
и пришел с проводов
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn