|
v7: Помогите разобраться ККМ + кассовый чек | ☑ | ||
---|---|---|---|---|
0
sanekdark
14.08.18
✎
07:40
|
Переделал Кассовый чек под ККМ. при проведние документа кассового чека , например продали товар за наличку . он попадает и в кассу и попадает на клиента в задолжность . не могу понять где что не так сделал.
вот код кода касового чека Перем Валюта_Прежн; Перем Курс_Прежн; Перем Режим; Перем ТипЦен Экспорт; Перем СпрККМ,СпрКомпьютеры; Перем СтараяСумма, СтараяПолучено; //****************************************************************************** //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ // //***************************************************************************** // ПриВыбореВариантаОплаты() // // Параметры: // Нет // // Возвращаемое значение: // Название операции // // Описание: // Формирует название операции и заголовок формы диалога // Функция ПриИзмененииВариантаОплаты() Если ВариантОплаты = Перечисление.ТипыОплатЧекаККМ.ПлатежнаяКарта Тогда Получено = Итог("Сумма"); КонецЕсли; КонецФункции // ПриИзмененииВариантаОплаты //***************************************************************************** // ЗаголовокФормы() // // Параметры: // Нет // // Возвращаемое значение: // Название операции // // Описание: // Формирует название операции и заголовок формы диалога // Функция ЗаголовокФормы() Перем Заголовок, Название; Заголовок = Строка(ВидОперации); Название = Заголовок+" №"; Если Выбран() = 1 Тогда Если Проведен() = 1 Тогда Заголовок = Заголовок + ". Проведен"; Иначе Заголовок = Заголовок + ". Не проведен"; КонецЕсли; Иначе Заголовок = Заголовок + ". Новый"; КонецЕсли; Форма.Заголовок(Заголовок); Возврат Название; КонецФункции // ЗаголовокФормы //****************************************************************************** // РасчетСдачи() // // Параметры: // Нет // // Возвращаемое значение: // Сумма сдачи // // Вызывается из формул элементов диалога: // Надпись "Сдача". // // Описание: // Вычисляет сумму сдачи. // Функция РасчетСдачи() ВремСумма = Итог("Сумма"); ВремСдача = Макс(Получено - ВремСумма, 0); Если (СтараяСумма <> ВремСумма) ИЛИ (СтараяПолучено <> Получено) Тогда СтараяСумма = ВремСумма; СтараяПолучено = Получено; КонецЕсли; Возврат (глФРМ(ВремСдача)); КонецФункции // РасчетСдачи() //****************************************************************************** // ПечатьЧека() // // Параметры: // Нет // // Возвращаемое значение: // Нет // // Описание: // Печатает чек на фискальном регистраторе // Процедура ПробитьЧекККМ() Перем НомерЧека; Если Получено < Итог("Сумма") Тогда Предупреждение("Не хватает средств для оплаты!"); Возврат; КонецЕсли; Если НомерЧекаККМ <> 0 Тогда Предупреждение("Чек уже пробит на фискальном регистраторе!",60); Возврат; ИначеЕсли глФРВкл=0 Тогда Предупреждение("Фискальный регистратор не подключен!",60); Возврат; ИначеЕсли ПометкаУдаления()=1 Тогда Предупреждение("Документ помечен на удаление, поэтому" + РазделительСтрок + "нельзя пробить чек на фискальном регистраторе!",60); Возврат; ИначеЕсли Проведен()=0 Тогда Если Вопрос("Провести документ и пробить чек на фискальном регистраторе?","Да+Нет")="Нет" Тогда Возврат; КонецЕсли; Попытка Записать(); Провести(); Исключение Возврат; КонецПопытки; ИначеЕсли Модифицированность()=1 Тогда Если Вопрос("Сохранить документ и пробить чек на фискальном регистраторе?","Да+Нет")="Нет" Тогда Возврат; КонецЕсли; Попытка Записать(); Исключение Возврат; КонецПопытки; КонецЕсли; ЗначениеНДС = 6; //БЕЗ НДС ПУП = 8; //ЕНВД СписокТоваров = СоздатьОбъект("ТаблицаЗначений"); СписокТоваров.НоваяКолонка("ТовНаим" , "Строка"); СписокТоваров.НоваяКолонка("Цена" , "Число"); СписокТоваров.НоваяКолонка("Количество", "Число"); СписокТоваров.НоваяКолонка("Сумма" , "Число"); СписокТоваров.НоваяКолонка("СтавкаНДС" , "Число"); ВыбратьСтроки(); Пока ПолучитьСтроку() = 1 Цикл СписокТоваров.НоваяСтрока(); СписокТоваров.ТовНаим = Сред(СокрЛП(Товар.Код)+"/"+ СокрЛП(Товар.Наименование),1,65); СписокТоваров.Цена = Цена; СписокТоваров.Количество = Количество; СписокТоваров.Сумма = Сумма; КонецЦикла; ПризнВозврата = ?(ВидОперации = Перечисление.ВидыОперацийЧекККМ.Чек, 1, 2); ПроцентСкидки = ?(Число(ДисконтнаяКарта.Тип.Процент)=0,0,Число(ДисконтнаяКарта.Тип.Процент)); Кассир = ""; СпрККМ=СоздатьОбъект("Справочник.ККМ"); Если СпрККМ.НайтиПоРеквизиту("Компьютер", Компьютер.ТекущийЭлемент(),1) = 1 Тогда ПУП = глОпределитьПУП(СпрККМ.ПУП); ЗначениеНДС = глОпределитьНДС(СпрККМ.СтавкаНДС); Если ПустоеЗначение(СпрККМ.КассирККМ.Получить(ДатаДок)) = 0 Тогда ВыбКассир = СпрККМ.КассирККМ.Получить(ДатаДок); Кассир = глФамилияИмяОтчество(ВыбКассир.Наименование); КонецЕсли; Иначе Предупреждение("Не определены параметры учетной политики, чек не пробит!",60); Возврат; КонецЕсли; ТелПокупателя = ""; ЭлПочтаПокупателя = ""; Если СтрДлина(СокрЛП(КонтактПокупателя))>0 Тогда Если Найти(КонтактПокупателя,"@") = 0 Тогда //телефон ТелПокупателя = СокрЛП(КонтактПокупателя); Иначе //почта ЭлПочтаПокупателя = СокрЛП(КонтактПокупателя); КонецЕсли; КонецЕсли; //ТипОплаты = ?(ВариантОплаты = Перечисление.ТипыОплатЧекаККМ.Наличные,0,1); //наличка - 0, карта - 1 ТипОплаты = 0; //наличка - 0, карта - 1 Если ВариантОплаты = Перечисление.ТипыОплатЧекаККМ.ПлатежнаяКарта Тогда ТипОплаты = 1; КонецЕсли; ЧекПробитККМ = глФРПечататьЧек(СписокТоваров, Итог("Сумма"), ?(Получено=0,Итог("Сумма"),Получено), процентСкидки, ПризнВозврата, ЗначениеНДС, НомерЧека, ПУП, Кассир, ТелПокупателя, ЭлПочтаПокупателя, ТипОплаты); Если ЧекПробитККМ = 1 Тогда НомерЧекаККМ = ?(НомерЧека = 0, -1, НомерЧека); СтатусЧекаККМ = Перечисление.СтатусыЧековККМ.Пробитый; ПриЗаписиПерепроводить(0); Записать(); ПриЗаписиПерепроводить(1); КонецЕсли; КонецПроцедуры //****************************************************************************** //****************************************************************************** Процедура Подбор() Режим="Каталог"; //ОткрытьПодбор("Товары","ДляПодбора2"); ОткрытьПодбор("Товары","ДляПодбора2"); УстановитьЗначениеВПодборе("Склад",Склад); КонецПроцедуры //****************************************************************************** Процедура РассчитатьСкидку() Пер=СоздатьОбъект("Периодический"); Пер.ИспользоватьОбъект("Розн_цена",Товар); Цена=Пер.ЗначениеНаДату(ДатаДок); СЦ=Окр(Цена*ДисконтнаяКарта.Тип.Процент/100,2); Если (СЦ-цел(СЦ)=0)или(СЦ-цел(СЦ)=0.50) тогда СкидкаЦ=СЦ; КонецЕсли; Если (СЦ-цел(СЦ)>0)и(СЦ-цел(СЦ)<0.50) тогда СкидкаЦ=цел(СЦ); КонецЕсли; Если (СЦ-цел(СЦ)>0.50)и(СЦ-цел(СЦ)<1) тогда СкидкаЦ=цел(СЦ)+0.50; КонецЕсли; Скидка=СкидкаЦ*Количество; Цена=Цена-СкидкаЦ; Сумма=Цена*Количество; КонецПроцедуры Процедура УстСкидку() ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл РассчитатьСкидку(); КонецЦикла; КонецПроцедуры //****************************************************************************** //****************************************************************************** Процедура ОбработкаПодбора(Выб) Если КоличествоСтрок()>10 тогда Предупреждение("В кассовом чеке может быть не более 11 строк!!!"); СтатусВозврата(0); Возврат; КонецЕсли; ЗапросКоличестваВПодборе(Контекст,Режим,Выб); УстанЦеныРасх(Контекст); Выч_суммы_накл(Контекст); РассчитатьСкидку(); АктивизироватьСтроку(); КонецПроцедуры //****************************************************************************** Процедура ПечатьОрдер() Таб=СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Ордер"); Таб.ВывестиСекцию("ОрдерГ"); Таб.Опции(0,0,0,0,ПарСтрДок); Таб.Защита(Константа.ФлагЗащитыТаблиц); Таб.ТолькоПросмотр(1); Таб.Показать("Приходный кассовый ордер",""); КонецПроцедуры //****************************************************************************** Процедура Печать(Печ=0) //Если Проведен()=0 тогда // Предупреждение("Документ не проведен!"); // СтатусВозврата(0); // Возврат; //КонецЕсли; Фирма.ИспользоватьДату(ДатаДок); Таб=СоздатьОбъект("Таблица"); Таб.ВывестиСекцию("Шапка"); ВыбратьСтроки(); Ном=0; Пока ПолучитьСтроку() = 1 Цикл Ном=Ном+1; Таб.ВывестиСекцию("Строка"); Если Товар.ВидТовара=Перечисление.ВидыТоваров.Комплект Тогда Таб.ВывестиСекцию("ВСоставе"); Кмп=СоздатьОбъект("Справочник.Комплектация"); Кмп.ИспользоватьВладельца(Товар); Кмп.ВыбратьЭлементы(); Пока Кмп.ПолучитьЭлемент()>0 Цикл Таб.ВывестиСекцию("Состав"); КонецЦикла; Кмп=0; КонецЕсли; КонецЦикла; Таб.ВывестиСекцию("Подвал"); Таб.Защита(Константа.ФлагЗащитыТаблиц); Таб.Опции(0,0,0,0,"КопияЧека"); Таб.ПараметрыСтраницы(1,100,0,10,10,0,0,0,0,0); Таб.ТолькоПросмотр(1); Таб.Показать("Печать накладной",""); // Предупреждение("Вставьте бумагу"); Если Печ=1 тогда Таб.Напечатать(1); КонецЕсли; КонецПроцедуры //****************************************************************************** Процедура Ок() Если Получено < Итог("Сумма") Тогда Предупреждение("Не хватает средств для оплаты!"); Возврат; КонецЕсли; Записать(); Провести(); ПробитьЧекККМ(); //Если Вопрос("Печатать копию чека?",4)=6 тогда // Печать(1); //Иначе Печать(0); //КонецЕсли; //Здесь надо добавить запрос на необходимость печати копии чека Форма.Закрыть(); КонецПроцедуры Процедура ПриВводеСтроки() Если КоличествоСтрок()>19 тогда Предупреждение("В кассовом чеке может быть не более 20 строк!!!"); СтатусВозврата(0); Возврат; КонецЕсли; КонецПроцедуры //****************************************************************************** //****************************************************************************** Процедура ПриОткрытии() ПроверкаРазрешенияРедактирования(Контекст); Если ЧекПробитККМ = 1 Тогда Форма.ТолькоПросмотр(1); КонецЕсли; Если НазваниеНабораПрав()="Администратор" тогда Форма.КнСклад.Доступность(1); Форма.кнПровести.Доступность(1); Форма.кнЗаписать.Доступность(1); Иначе Форма.КнСклад.Доступность(0); Форма.кнПровести.Доступность(0); Форма.кнЗаписать.Доступность(0); КонецЕсли; Если Форма.ТолькоПросмотр()=1 Тогда Форма.кнОКлиенте.Доступность(0); Форма.КонтактПокупателяХ.Доступность(0); Форма.ПодборПоКаталогу.Доступность(0); Форма.кнЗаполнитьПолученоПоИтогу.Доступность(0); Форма.ОК.Доступность(0); КонецЕсли; КонецПроцедуры //**************************************** Процедура ВводНового(Копирование) Перем СпрККМ,СпрКомпьютеры; Если Копирование = 1 Тогда ЧекПробитККМ = 0; КонецЕсли; Автор=Пользователь; ВидТорговли=Перечисление.ВидыТорговли.ЗаНал; ТипНакладной=Перечисление.ТипыНакладных.Расходная; ПризнакНакладной=Перечисление.ПризнРасхНакл.Продажа; ДатаДок=РабочаяДата(); Валюта=Константа.ОснВалютаПродажи; Дата_Курса=ДатаДок; Курс=КурсДляВалюты(Валюта,Дата_Курса); Фирма=Константа.ОснФирма; ДисконтнаяКарта=Константа.ОснДисконтнаяКарта; ДатаОплаты=ДатаДок; //**************************************** СпрККМ = СоздатьОбъект("Справочник.ККМ"); СпрКомпьютеры = СоздатьОбъект("Справочник.Компьютеры"); Если СпрКомпьютеры.НайтиЭлемент(Пользователь.Компьютер.ТекущийЭлемент())<>1 тогда Предупреждение("Компьютер с именем " + Пользователь.Компьютер.ТекущийЭлемент() + " в базе не зарегистрирован!"); СтатусВозврата(0); Возврат; КонецЕсли; Если СпрККМ.НайтиПоРеквизиту("Компьютер", СпрКомпьютеры.ТекущийЭлемент(),1)=1 тогда Склад = СпрККМ.СкладКомпании; //сообщить(Склад); Компьютер = СпрКомпьютеры.ТекущийЭлемент(); Иначе Предупреждение("Создавать кассовые чеки можно только на компьютерах с ККМ!"); СтатусВозврата(0); Возврат; КонецЕсли; Клиент = Константа.ОснПокупатель; Валюта_Прежн = Валюта; Курс_Прежн = Курс; ТипЦен = Перечисление.ТипыРасхЦен.Розничные; ВидОперации = Перечисление.ВидыОперацийЧекККМ.Чек; ВариантОплаты = Перечисление.ТипыОплатЧекаККМ.Наличные; Подбор(); КонецПроцедуры //****************************************************************************** Процедура ВводНаОсновании(ДокОснование) Если ДокОснование.Выбран()=0 Тогда Предупреждение("Документ - основание не выбран!"); СтатусВозврата(0); Возврат; КонецЕсли; ВидОсн = ДокОснование.Вид(); Если (ВидОсн <> "КассовыйЧек") Тогда Предупреждение("Неверный вид документа - основания!"); СтатусВозврата(0); Возврат; КонецЕсли; // вид ДокОснования Если ДокОснование.ВидОперации = Перечисление.ВидыОперацийЧекККМ.ЧекНаВозврат Тогда Предупреждение("На основании документа ""Чек на возврат"" нельзя вводить документы !"); СтатусВозврата(0); Возврат; КонецЕсли; Автор=Пользователь; ВидТорговли=Перечисление.ВидыТорговли.ЗаНал; ТипНакладной=Перечисление.ТипыНакладных.Расходная; ПризнакНакладной=Перечисление.ПризнРасхНакл.Продажа; ДатаДок=РабочаяДата(); Валюта=ДокОснование.Валюта; Дата_Курса=ДокОснование.Дата_Курса; Курс=ДокОснование.Курс; Валюта_Прежн=Валюта; Курс_Прежн=Курс; Фирма=ДокОснование.Фирма; **************************************** СпрККМ = СоздатьОбъект("Справочник.ККМ"); СпрКомпьютеры = СоздатьОбъект("Справочник.Компьютеры"); Если СпрКомпьютеры.НайтиЭлемент(Пользователь.Компьютер.ТекущийЭлемент())<>1 тогда Предупреждение("Компьютер с именем " + Пользователь.Компьютер.ТекущийЭлемент() + " в базе не зарегистрирован!"); СтатусВозврата(0); Возврат; КонецЕсли; Если СпрККМ.НайтиПоРеквизиту("Компьютер", СпрКомпьютеры.ТекущийЭлемент(),1)=1 тогда Склад = СпрККМ.Склад; Компьютер = СпрКомпьютеры.ТекущийЭлемент(); Иначе Предупреждение("Создавать кассовые чеки можно только на компьютерах с ККМ!"); СтатусВозврата(0); Возврат; КонецЕсли; Клиент = ДокОснование.Клиент; Валюта_Прежн = Валюта; Курс_Прежн = Курс; ТипЦен = Перечисление.ТипыРасхЦен.Розничные; // чек вводится только на основании другого чека, // поэтому он всегда является "чеком на возврат" ВидОперации = Перечисление.ВидыОперацийЧекККМ.ЧекНаВозврат; ВариантОплаты = ДокОснование.ВариантОплаты; ДокОснование.ВыбратьСтроки(); Пока ДокОснование.ПолучитьСтроку() = 1 Цикл НоваяСтрока(); Товар = ДокОснование.Товар; Цена = ДокОснование.Цена; Единица = ДокОснование.Единица; Коэффициент = ДокОснование.Коэффициент; Количество = ДокОснование.Количество; НДС = ДокОснование.НДС; Сумма = ДокОснование.Сумма; // Цена2 = ДокОснование.Цена2; // Сумма2 = ДокОснование.Сумма2; КонецЦикла; КонецПроцедуры // ВводНаОсновании() //**************************************** // { Функция ТекстБонуснойКарты() Если (БонуснаяКарта.Выбран() = 1) и (БонуснаяПрограмма.Выбран() = 1) Тогда РегБонусы = СоздатьОбъект("Регистр.Бонусы"); Если Выбран()>0 Тогда // документ не новый, а существующий Если(СравнитьТА()<0) Тогда // так делаем, что бы отделить новый Документ // если итоги актуальны, то смотрим итоги на ТА // если итоги не актуальны, то берем из временногно расчета Регистра РегБонусы.ВременныйРасчет(); РегБонусы.УстановитьФильтр(БонуснаяКарта,БонуснаяПрограмма); РассчитатьРегистрыПо(ТекущийДокумент()); КонецЕсли; Иначе // документ новый Дат=ПолучитьДатуТА(); Если Дат>ДатаДок Тогда РегБонусы.ВременныйРасчет(); РегБонусы.УстановитьФильтр(БонуснаяКарта,БонуснаяПрограмма); РассчитатьРегистрыНа(ДатаДок+1); КонецЕсли; КонецЕсли; РегБонусы.ВыбратьИтоги(); Если РегБонусы.ПолучитьИтог()>0 Тогда ОстатокБонусовВсего = РегБонусы.Бонусы; Иначе ОстатокБонусовВсего = 0; КонецЕсли; Возврат "Карта: " + БонуснаяКарта.Держатель.Наименование + " |Остаток бонусов: " + Формат(ОстатокБонусовВсего, "Ч-15.2"); КонецЕсли; Если Клиент.Выбран() = 0 Тогда Возврат "Не выбран клиент"; КонецЕсли; КонецФункции //} Функция НомерЧека() Если НомерЧекаККМ > 0 Тогда Возврат "Номер чека: "+СокрЛП(НомерЧекаККМ); Иначе Возврат ""; КонецЕсли; КонецФункции //++ Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные); Если Scaner.OldVersion<>0 Тогда Сообщить("Old Version <> 0"); Сообщить("Источник: "+Строка( Источник )); Сообщить("Событие: "+Строка( Событие )); Сообщить(Строка("Данные от устройства: "+ Данные)); Иначе //Контекст.Форма.Закрыть(); Scaner.EventNumber=Число(Данные); ДанныеСканера = Scaner.ScanData; //++ Беседин,ИС,26.10.2017 //Если у нас длинный результат сканирования - то отсканировали номенклатуру и нам нужно добавить новую строку с ней Если СтрДлина(СОКРЛП(ДанныеСканера))>= 13 Тогда ДанныеСканера = СОКРЛП(СтрЗаменить(ДанныеСканера,"+","")); СпрНом = СоздатьОбъект("Справочник.Товары"); Если СпрНом.НайтиПоРеквизиту("Штрихкод",ДанныеСканера,1) = 1 Тогда УжеЕсть = 0; ВыбратьСтроки(); Пока ПолучитьСтроку() = 1 Цикл Если Товар = СпрНом.ТекущийЭлемент() Тогда Количество = Количество+1; Выч_суммы_накл(Контекст); УжеЕсть = 1; Прервать; КонецЕсли; КонецЦикла; Если УжеЕсть = 0 Тогда НоваяСтрока(); Товар = СпрНом.ТекущийЭлемент(); УстанЦеныРасх(Контекст); Количество = 1; Выч_суммы_накл(Контекст); КонецЕсли; Иначе Сообщить("Не найден товар по данному штрихкоду!","!!!"); КонецЕсли; ИначеЕсли СтрДлина(СОКРЛП(ДанныеСканера))= 8 Тогда ДанныеСканера = Сред(ДанныеСканера,4,5); СпрДК = СоздатьОбъект("Справочник.БонусныеКарты"); Если СпрДК.НайтиПоРеквизиту("НомерКарты",ДанныеСканера,1)= 1 Тогда БонуснаяКарта = СпрДК.ТекущийЭлемент(); Если БонуснаяПрограмма.Выбран() = 0 Тогда БонуснаяПрограмма = Константа.ТекущаяБонуснаяПрограмма.Получить(ДатаДок); КонецЕсли; Иначе Сообщить("Не найдена Бонусная карта! "+ДанныеСканера); КонецЕсли; ТекстБонуснойКарты(); Иначе Если Сред(ДанныеСканера,3,1) = "+" Тогда ДанныеСканера = Сред(ДанныеСканера,4,4); Иначе ДанныеСканера = Сред(ДанныеСканера,3,4); КОнецЕсли; //НомерКарты = ДанныеСканера; СпрДК = СоздатьОбъект("Справочник.ДисконтныеКарты"); Если СпрДК.НайтиПоРеквизиту("НомерКарты",ДанныеСканера,1)= 1 Тогда Если Константа.ДисконтПоДокументуВЦелом =1 Тогда ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл ДисконтнаяКарта = СпрДК.ТекущийЭлемент(); // ДискКарта(); УстСкидку (); КонецЦикла; Иначе ДисконтнаяКарта = СпрДК.ТекущийЭлемент(); // Дисконт = СпрДК.ТекущийЭлемент(); // ДискКарта(); УстСкидку (); КонецЕсли; // Сообщить("Найдено! "+ДанныеСканера); Иначе Сообщить("Не найдена дисконтная карта! "+ДанныеСканера); КонецЕсли; КонецЕсли; //-- Беседин,ИС,26.10.2017 Scaner.DeleteEvent(); КонецЕсли; Scaner.DataEventEnabled = 1; КонецПроцедуры //************************************************************************ //-- //************************************************************************ Процедура ПоискШтрихКода() СпрНом = СоздатьОбъект("Справочник.Товары"); Если СпрНом.НайтиПоРеквизиту("Штрихкод",пШтрихКод,1) = 1 Тогда УжеЕсть = 0; ВыбратьСтроки(); Пока ПолучитьСтроку() = 1 Цикл Если Товар = СпрНом.ТекущийЭлемент() Тогда Количество = Количество+1; Выч_суммы_накл(Контекст); УжеЕсть = 1; Прервать; КонецЕсли; КонецЦикла; Если УжеЕсть = 0 Тогда НоваяСтрока(); Товар = СпрНом.ТекущийЭлемент(); УстанЦеныРасх(Контекст); Количество = 1; Выч_суммы_накл(Контекст); КонецЕсли; Иначе Сообщить("Не найден товар по данному штрихкоду!","!!!"); КонецЕсли; КонецПроцедуры // { Процедура БезСдачи() Получено = Итог("Сумма"); КонецПроцедуры //} // { Процедура Купюра() Перем Меню, ПунткМеню, Номинал; ПунктМеню = 0; Об = Форма.АктивныйЭлемент(); Меню = СоздатьОбъект("СписокЗначений"); Меню.ДобавитьЗначение("50"); Меню.ДобавитьЗначение("100"); Меню.ДобавитьЗначение("200"); Меню.ДобавитьЗначение("500"); Меню.ДобавитьЗначение("1000"); Меню.ДобавитьЗначение("2000"); Меню.ДобавитьЗначение("5000"); Меню.ВыбратьЗначение(Номинал,,ПунктМеню,,1); Получено = Получено + Номинал; КонецПроцедуры //} // { Процедура ВыбратьБонуснуюКарту() Перем Карта; Если ВвестиЗначение(Карта, "Выберите бонусную карту", "Справочник.БонусныеКарты") = 1 Тогда БонуснаяКарта = Карта; Если БонуснаяПрограмма.Выбран() = 0 Тогда БонуснаяПрограмма = Константа.ТекущаяБонуснаяПрограмма.Получить(ДатаДок); КонецЕсли; КонецЕсли; КонецПроцедуры //} // { Процедура ВыбратьБонуснуюПрограмму() Перем Программа; Если ВвестиЗначение(Программа, "Выберите бонусную программу", "Справочник.БонусныеПрограммы") = 1 Тогда БонуснаяПрограмма = Программа; КонецЕсли; КонецПроцедуры //} //****************************************************************************** // // Переменные модуля СтараяСумма = -1; СтараяПолучено = -1; // // При входе в Форму запомним промежуточные переменные Валюта_Прежн=Валюта; Курс_Прежн=Курс; ТипЦен=Перечисление.ТипыРасхЦен.Розничные; Если НазваниеНабораПрав()="Администратор" тогда Форма.ДатаДок.Доступность(1); Иначе Форма.ДатаДок.Доступность(0); КонецЕсли; |
|||
1
sanekdark
14.08.18
✎
07:47
|
мне нужно чтоб попадал тока в кассу, и при выборе опалата картой чтоб попадал тока в банк )в банк попадает но и в задолжность на клиента тоже также идет
|
|||
2
HawkEye
14.08.18
✎
08:05
|
(0) а где ОбработкаПроведения()?
|
|||
3
sanekdark
14.08.18
✎
08:13
|
обработка в модуле документа
//***************Модуль конвертирован с версии 7.0************** //-------------------------------------------- Процедура ОбработкаПроведения(); Если Склад.Выбран() = 0 Тогда НеПроводить(ТекущийДокумент(),"Не указан склад!"); Возврат; КонецЕсли; Если Клиент.Выбран() = 0 Тогда НеПроводить(Контекст,"Не задан клиент!"); Возврат; КонецЕсли; //ДвиженияРегистровНакладных(Контекст); //****************************************************************************** Если ВидОперации = Перечисление.ВидыОперацийЧекККМ.Чек Тогда // продажа ВыбратьСтроки(); Пока ПолучитьСтроку() > 0 Цикл Если Товар.Выбран() = 0 Тогда Сообщить("В документе " + Вид() + " № " + НомерДок + " от " + ДатаДок + "Не указан товар!"); Продолжить; КонецЕсли; Если Товар.ВидТовара = Перечисление.ВидыТоваров.Услуга Тогда // услуги здесь в этих регистрах не учитываем Продолжить; КонецЕсли; Рег = СоздатьОбъект("Регистр.ОстаткиТоваров"); Рег1 = СоздатьОбъект("Регистр.РезервыТоваров"); Если ИтогиАктуальны() = 0 Тогда Рег.ВременныйРасчет(); Рег1.ВременныйРасчет(); РассчитатьРегистрыНа(ТекущийДокумент()); КонецЕсли; ОбщееКоличество = Количество*Коэффициент; Рег.Товар = Товар; Рег.Склад = Склад; Рег.ОстаткиПолучить(); Если (Рег.ОстатокТовара < ОбщееКоличество) И (НЕ(Константа.РазрешитьОтрицОстатки = Перечисление.Булево.Да)) Тогда Сообщить("На складе нет нужного количества товара " + Товар.Наименование); НеПроводить(ТекущийДокумент(),"На складе осталось " + Рег.ОстатокТовара + " " + Товар.БазоваяЕдиница); Рег=0; Рег1=0; Рег2=0; Возврат; КонецЕсли; // проверяем резерв товара Если НЕ(Константа.РазрешитьПродаватьРезерв = Перечисление.Булево.Да) Тогда // Вычислим, сколько всего данного товара ПолныйОстаток = Рег.СводныйОстаток(Товар,,"ОстатокТовара"); // Вычислим, сколько зарезервировано всего данного товара Резерв = Рег1.СводныйОстаток(Товар,,"РезервТовара"); СвободныйРесурс = ПолныйОстаток - Резерв; Если СвободныйРесурс < 0 Тогда // товара не хватает на все зарезервированные Счета СвободныйРесурс = 0; КонецЕсли; Если СвободныйРесурс < ОбщееКоличество Тогда Сообщить("Нет нужного свободного количества товара " + Товар.Наименование); Сообщить("Всего осталось " + Строка(ПолныйОстаток) + " " + Товар.БазоваяЕдиница); Сообщить("Зарезервировано по выписанным Счетам " + Строка(Резерв) + " " + Товар.БазоваяЕдиница); НеПроводить(ТекущийДокумент(),"Требуемое количество " + Строка(ОбщееКоличество) + " " + Товар.БазоваяЕдиница); Рег=0; Рег1=0; Рег2=0; Возврат; КонецЕсли; Если Рег.ОстатокТовара > 0 Тогда Если Рег.ОстатокТовара < ОбщееКоличество Тогда // Если у нас отоладочный режим эксплуатации и разрешено продавать больше, // чем есть на складе, то стоимость в этом случае после проведения накладной // должна обнулиться!!! Регистр.ОстаткиТоваров.БазоваяСтоимость = Рег.БазоваяСтоимость; Регистр.ОстаткиТоваров.ВалютнаяСтоимость = Рег.ВалютнаяСтоимость; Иначе Регистр.ОстаткиТоваров.БазоваяСтоимость = Рег.БазоваяСтоимость * ОбщееКоличество / Рег.ОстатокТовара; Регистр.ОстаткиТоваров.ВалютнаяСтоимость= Рег.ВалютнаяСтоимость* ОбщееКоличество / Рег.ОстатокТовара; КонецЕсли; Иначе // Если у нас режим отладочной эксплуатации и текущий остаток товара на складе <0 // то стоимости товаров не учитываем, делаем их =0!!! Регистр.ОстаткиТоваров.БазоваяСтоимость = 0; Регистр.ОстаткиТоваров.ВалютнаяСтоимость = 0; КонецЕсли; КонецЕсли; Регистр.ОстаткиТоваров.ОстатокТовара = ОбщееКоличество; Регистр.ОстаткиТоваров.Склад = Склад; Регистр.ОстаткиТоваров.Товар = Товар; Регистр.ОстаткиТоваров.ФлагУчета = 2; Регистр.ОстаткиТоваров.ДвижениеРасходВыполнить(); КонецЦикла; Рег=0; Рег1=0; Рег2=0; Иначе // чек на возврат ВыбратьСтроки(); Пока ПолучитьСтроку() > 0 Цикл Если Товар.Выбран() = 0 Тогда Сообщить("В документе " + Вид() + " № " + НомерДок + " от " + ДатаДок + "Не указан товар!"); Продолжить; КонецЕсли; Если Товар.ВидТовара = Перечисление.ВидыТоваров.Услуга Тогда // услуги здесь в этих регистрах не учитываем Продолжить; КонецЕсли; Рег = СоздатьОбъект("Регистр.ОстаткиТоваров"); Рег1 = СоздатьОбъект("Регистр.РезервыТоваров"); Если ИтогиАктуальны() = 0 Тогда Рег.ВременныйРасчет(); Рег1.ВременныйРасчет(); РассчитатьРегистрыНа(ТекущийДокумент()); КонецЕсли; ОбщееКоличество = Количество*Коэффициент; Рег.Товар = Товар; Рег.Склад = Склад; Рег.ОстаткиПолучить(); ВалютаТовара = Товар.ВалютаУчета; // При возврате товара от Покупателя возвращаем на склад ту стоимость, которая сейчас // есть по этому товару, // если товара нет на складе, то стоимость устанавливаем по ПриходнойЦене // из карточки товара, но при этом предупреждаем пользователя Если Рег.ОстатокТовара <= 0 Тогда // Если у нас отоладочный режим эксплуатации или просто // такого товара нет или его уже весь продали, то себестоимость // его нам неизвестна, значит стоимость устанавливаем по ПриходнойЦене // из карточки товара, но при этом предупреждаем пользователя ВалютаЗакупки = Товар.ВалютаЗакуп; Сообщить("Для возвращаемого товара " + СокрП(Товар.Наименование) + " неизвестна себестоимость!"); Сообщить("оприходовано по себестоимости "+ Товар.Прих_Цена + " " + ВалютаЗакупки.Сокр_назв); СуммаВал = ОбщееКоличество * Пересчет(Товар.Прих_Цена,ВалютаЗакупки,ДатаДок,ВалютаТовара,ДатаДок); СуммаРуб = ОбщееКоличество * Пересчет(Товар.Прих_Цена,ВалютаЗакупки,ДатаДок,Рубли,1); Иначе СуммаВал = Рег.ВалютнаяСтоимость * ОбщееКоличество / Рег.ОстатокТовара; СуммаРуб = Рег.БазоваяСтоимость * ОбщееКоличество / Рег.ОстатокТовара; КонецЕсли; // Учтем возможность отрицательных остатков товара Если Рег.ОстатокТовара<0 Тогда // если у нас режим отладочной эксплуатации и текущий остаток товара на складе <0 Если (-Рег.ОстатокТовара) < ОбщееКоличество Тогда // если у нас отоладочный режим эксплуатации, то при переходе через ноль в плюс, // добавляем стоимость только положительной части товара // (учтем, что у нас здесь Рег.ОстатокТовара<0 ) СуммаВал = СуммаВал * (ОбщееКоличество + Рег.ОстатокТовара) / ОбщееКоличество; СуммаРуб = СуммаРуб * (ОбщееКоличество + Рег.ОстатокТовара) / ОбщееКоличество; Иначе // если у нас отоладочный режим эксплуатации, то в отрицательной области // количества товаров мы стоимости не ведем !!! СуммаВал=0; СуммаРуб=0; КонецЕсли; КонецЕсли; Регистр.ОстаткиТоваров.Склад = Склад; Регистр.ОстаткиТоваров.ОстатокТовара = ОбщееКоличество; Регистр.ОстаткиТоваров.Товар = Товар; Регистр.ОстаткиТоваров.БазоваяСтоимость = СуммаРуб; Регистр.ОстаткиТоваров.ВалютнаяСтоимость = СуммаВал; Регистр.ОстаткиТоваров.ФлагУчета = 2; Регистр.ОстаткиТоваров.ДвижениеПриходВыполнить(); КонецЦикла; Рег=0; Рег1=0; Рег2=0; КонецЕсли; // оприходуем деньги в кассу Если ВариантОплаты = Перечисление.ТипыОплатЧекаККМ.ПлатежнаяКарта Тогда Регистр.Касса.Счет = Константа.БанковскийСчетБанкаЭквайера.Получить(ДатаДок); Регистр.Касса.Банк = Итог("Сумма"); Иначе Регистр.Касса.Наличность = Итог("Сумма"); КонецЕсли; Регистр.Касса.Валюта = Валюта; Регистр.Касса.ПривязыватьСтроку(1); Если ВидОперации = Перечисление.ВидыОперацийЧекККМ.Чек Тогда // продажа Регистр.Касса.ДвижениеПриходВыполнить(); Иначе //надо проверить наличие денег в кассе Рег = СоздатьОбъект("Регистр.Касса"); Если ИтогиАктуальны() = 0 Тогда Рег.ВременныйРасчет(); РассчитатьРегистрыНа(ТекущийДокумент()); КонецЕсли; Если (НЕ(Константа.РазрешитьОтрицОстатки=Перечисление.Булево.Да)) Тогда Если Итог("Сумма") > Рег.Остаток(Валюта,,"Наличность") Тогда Сообщить("Нет нужной суммы в валюты."); НеПроводить(ТекущийДокумент(),"В кассе осталось " + Рег.Остаток(Валюта,"Наличность") + Валюта.Наименование); Рег=0; Возврат; КонецЕсли; КонецЕсли; Регистр.Касса.ДвижениеРасходВыполнить(); КонецЕсли; //****************************************************************************** //старая-------------------------------------------- //Процедура ОбработкаПроведения(); // Если Клиент.Выбран()=0 Тогда // НеПроводить(Контекст,"Не задан клиент!"); // Возврат; // КонецЕсли; // ДвиженияРегистровНакладных(Контекст); //Движения по дисконтным картам Если ДисконтнаяКарта<>Константа.ОснДисконтнаяКарта тогда Если ВыбратьСтроки()=1 тогда Пока ПолучитьСтроку()=1 Цикл Регистр.ДисконтныеКарты.Карта=ДисконтнаяКарта; Регистр.ДисконтныеКарты.Товар=Товар; Регистр.ДисконтныеКарты.Количество=Количество; Регистр.ДисконтныеКарты.Сумма=Сумма-Скидка; Регистр.ДисконтныеКарты.Сумма2=Сумма; Регистр.ДисконтныеКарты.ДвижениеПриходВыполнить(); КонецЦикла; КонецЕсли; КонецЕсли; КонецПроцедуры //-------------------------------------------- |
|||
4
HawkEye
14.08.18
✎
08:18
|
(1) попробуй прожевать и еще раз внятно сказать кто там у тебя куда попадает и не попадает....
|
|||
5
Масянька
14.08.18
✎
08:29
|
(4) ТС не так уж виноват (виноват, конечно, но не на 100%).
Весь бардак из-за дебилизма, который называется "онлайн кассы". |
|||
6
sanekdark
14.08.18
✎
08:30
|
HawkEye
когда продажа идет то деньги должны попасть в кассу . они попадают все ок . но приэтом когда формирую задолжности выводит еще и задолжность на этого клиента. например стоит "частный клиент" продали ему чайник сума 300р , попадает в кассу сразу , делаю задолжности и там "Частный Клиент " должен нам 300р. он должен попадать тока в кассу |
|||
7
sanekdark
14.08.18
✎
08:31
|
Масянька ага ппц еще надо реализовать както ну потом сразу с двумя налого облажениями чтоб было например акцизный товар и простой чтоб печатал ну это потом буду думать) пока это над разобраться
|
|||
8
Время
14.08.18
✎
08:36
|
(6) Потому что читай про розничные продажи.
Ты продал "частному клиенту" (пробил чек), а в конце дня должен приход выручки. Короче, читай. |
|||
9
sanekdark
14.08.18
✎
08:37
|
Время так а почему когда я по карте делаю оплату они тоже попадают и в банк и туда
|
|||
10
HawkEye
14.08.18
✎
08:39
|
(5) т.е. ты считаешь что не знание русского языка у автора как то связано с онлайн-кассами? хм......
ну и собственно что там такого прямо уж бардачного, обычные издержки при внедрении..... (6) ну не двигай взаиморасчеты - не будет попадать... или закрывай эти взаиморасчеты..... (7) ))))) |
|||
11
HawkEye
14.08.18
✎
08:39
|
(9) как написано, так и попадают )
|
|||
12
sanekdark
14.08.18
✎
08:40
|
HawkEye в каком месте убрать не могу понять)
|
|||
13
HawkEye
14.08.18
✎
08:44
|
(12) кто-же знает в твоей поделке что у тебя там в каком месте.... в типовой ТиС нет справочника "Компьютеры"...
что такое: "делаю задолжности"?? отчет? как он строится? откуда вообще в чеке контрагент? и зачем он там? |
|||
14
Время
14.08.18
✎
08:45
|
+(13) В стандарте в регистре Касса нет банка.
ТС замутил... |
|||
15
sanekdark
14.08.18
✎
08:46
|
тоесть нужно посмотреть отчет задолженности откуда там берется что ?
|
|||
16
Время
14.08.18
✎
08:48
|
(15) А на фига в Кассе Банк?
|
|||
17
sanekdark
14.08.18
✎
08:52
|
время
чтоб видеть сколько по безналу прошло по картам банковским отдельно чтоб не путаться наличные с банком |
|||
18
Время
14.08.18
✎
08:54
|
(17) Ну, теперь подумай, как закрывать нал, а как банк?
|
|||
19
sanekdark
14.08.18
✎
08:58
|
не знаю мысли пока не каких нет я ток изучаю 1с вникаю)) по этому строго не судите))
|
|||
20
Время
14.08.18
✎
09:00
|
(19) Ты переделывал стандарт (написано в (0)).
Открой стандарт (не переделанный) и посмотри, как и что сделано. |
|||
21
sanekdark
14.08.18
✎
10:04
|
Время ок попробую разобраться
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |