Товарищи давайте реализуем в рознице печать одного чека на фр и на pos принтер

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. seregapplk 30.09.13 19:33 Сейчас в теме
Два предпринимателя в одном магазине, понимаю что номенклатуру нужно разделить на две группы, фискальную и не фискальную, можно создать свойство в карточке! КАК В РОЗНИЦЕ РАЗДЕЛИТЬ ПЕЧАТЬ? фискальник unisistem mini fp-6
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. newbas 534 30.09.13 22:41 Сейчас в теме
(1) штатно - никак. А вообще можно использовать категории или добавить реквизит (№ ФР или секция) как это сделано на РМК
2. tango 546 30.09.13 20:25 Сейчас в теме
дивно ходит мысль (это не наезд, искреннее удивление)
copybases; +1 Ответить
3. seregapplk 30.09.13 22:00 Сейчас в теме
5. seregapplk 30.09.13 23:45 Сейчас в теме
хорошо пусть реквизит секция(кстати куда добавить секцию в карточку номенклатуры или склад?), как разделить печать в обработках принтеров или 1с ке
6. ant1773 6 01.10.13 08:18 Сейчас в теме
(5) seregapplk,

Сформулируйте четко задание и бюджет.
Зачем нужно разделить номенклатуру на фискальную и не фискальную? Наличие хоть 10 предпринимателей в одном магазине такой задачи не создает.
7. mixa4 01.10.13 13:27 Сейчас в теме
(6) ant1773,
это ж форум экстрасенсов, очевидно же что один предприниматель - енвд, другой - не очень, и по первому нужно печатать нефискальные чеки
8. seregapplk 01.10.13 18:37 Сейчас в теме
это ж форум экстрасенсов, очевидно же что один предприниматель - енвд, другой - не очень, и по первому нужно печатать нефискальные чеки

Да вы правы какая разница сколько кто на чем главное что нужно разделить печать в одном документе чек ккм(рмк) на фискальную и не фискальную
9. seregapplk 11.10.13 23:46 Сейчас в теме
В карточке номенклатура создано свойство печатьФР
конфигуратор, в документе ЧекККМ печать разделена по ID устройств
10. seregapplk 11.10.13 23:51 Сейчас в теме
// Функция осуществляет проведение документа и печать чека на ФР.
//
// Параметры:
// Ответ - <Строка>
// - Выходной параметр; описание произошедшей ошибки.
//
// Отказ - <Булево>
// - Выходной параметр; признак отказа от выполнения операции.
//
// Возвращаемое значение:
// <Булево> - Истина в случае успешного завершения операции.
//
Функция ПровестиИРаспечататьЧек(Ответ, Отказ, ФормаДокумента, ПечатьПакетаДокументовВозврат = Ложь, РучнойРежимПечати = Ложь, ВсеПРН = Ложь,ВсеФР = Ложь) Экспорт

Результат = Истина;
Ответ = "";

Попытка

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

Если ПечатьПакетаДокументовВозврат Тогда
Печать("КМ3");
КонецЕсли;

Исключение

Ответ = "Ошибка при попытке проведения документа!";
Отказ = Истина;
Результат = Ложь;

Возврат Результат;

КонецПопытки;

Если СтатусЧекаККМ = Перечисления.СтатусыЧековККМ.Пробитый Тогда
Возврат Результат;
КонецЕсли;


ФР = глЗначениеПеременной("мФР");
//серега
Если ИмяКомпьютера() = "LENOVOG" Тогда
ФР = Неопределено;
КонецЕсли;
//серега
Если ФР = Неопределено Тогда
МассивФР = ПолучитьСерверТО().ПолучитьСписокУстройств(
Перечисления.ВидыТорговогоОборудования.ФискальныйРегистратор,
КассаККМ);

КоличествоФР = МассивФР.Количество();

Если КоличествоФР = 0 Тогда
Ответ = "Чек не пробит, т.к. не подключен фискальный регистратор!";
Отказ = Истина;
Результат = Истина;
Возврат Результат;
ИначеЕсли КоличествоФР = 1 Тогда
ФР = МассивФР[0];
Иначе
//серега
Если ИмяКомпьютера() = "LENOVOG" Тогда
Попытка
Если НЕ ВсеПРН И НЕ ВсеФР Тогда
ЗакрытиеНеФискальногоЧека("1C224805-2FF7-4843-B17D-43212DCFEEF0");
ЗакрытиеФискальногоЧека("7D54CEF5-55B2-44BF-9B5C-DD7C3C56B87B");

Отказ = Ложь;
Результат = Истина;
Возврат Результат;

ИначеЕсли ВсеФР Тогда

ПолноеЗакрытиеЧека("1C224805-2FF7-4843-B17D-43212DCFEEF0");

Отказ = Ложь;
Результат = Истина;
Возврат Результат;

Иначе
ПолноеЗакрытиеЧека("7D54CEF5-55B2-44BF-9B5C-DD7C3C56B87B");

Отказ = Ложь;
Результат = Истина;
Возврат Результат;
КонецЕсли;
Исключение
Отказ = Истина;
Ответ = "Чек не пробит!";
Результат = Ложь;
Возврат Результат;
КонецПопытки;
Иначе
//серега
СписокФР = РаботаСТорговымОборудованием.ПолучитьСписокУстройствТОДляВыбора(МассивФР);

ФР = СписокФР.ВыбратьЭлемент("Необходимо выбрать фискальный регистратор");
Если ФР = Неопределено Тогда
Ответ = "Операция отменена пользователем.";
Отказ = Истина;
Результат = Ложь;

Если РежимРМК Тогда
ТекстОшибки = "Операция отменена!" + Символы.ПС +
"Фискальный регистратор для печати чека выбран не был!" + Символы.ПС +
"Возможны расхождения данных в информационной базе и фискальном регистраторе (принтере чеков).";
ВывестиИнформациюОбОшибке(ТекстОшибки);
КонецЕсли;

Возврат Результат;
Иначе
ФР = ФР.Значение;
КонецЕсли;
//серега
КонецЕсли;
//серега
КонецЕсли;
КонецЕсли;

ОшибкаТО = Перечисления.ТООшибкиОбщие.ПустаяСсылка();
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ТчТовары.Номенклатура.Представление КАК Номенклатура,
| ТчТовары.ХарактеристикаНоменклатуры.Представление КАК ХарактеристикаНоменклатуры,
| ТчТовары.Номенклатура.Код КАК Код,
| ТчТовары.Номенклатура.Весовой КАК Весовой,
| ТчТовары.ЕдиницаИзмерения.Представление КАК ЕдиницаИзмерения,
| ТчТовары.Цена КАК Цена,
| ТчТовары.Количество КАК Количество,
| ВЫБОР
| КОГДА ТчТовары.Цена * ТчТовары.Количество = 0
| ТОГДА 0
| ИНАЧЕ (1 - ТчТовары.Сумма / (ТчТовары.Цена * ТчТовары.Количество)) * 100
| КОНЕЦ КАК ПроцентСкидкиНаценки,
| ТчТовары.СтавкаНДС,
| ТчТовары.СуммаНДС
|ИЗ
| Документ.ЧекККМ.Товары КАК ТчТовары
|ГДЕ
| ТчТовары.Ссылка = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Ответ = "Пустой чек не может быть пробит на фискальном регистраторе!";
Отказ = Истина;
Результат = Ложь;

Если РежимРМК Тогда
ТекстОшибки = "Пустой чек!" + Символы.ПС +
"Пустой чек не может быть распечатан на фискальном регистраторе!" + Символы.ПС +
"Это не критичная ошибка, т.к. проведенный пустой чек не влияет на данные информационной базы.";
ВывестиИнформациюОбОшибке(ТекстОшибки);
КонецЕсли;

Возврат Результат;
КонецЕсли;


Выборка = РезультатЗапроса.Выбрать();
ТаблицаТоваров = Новый ТаблицаЗначений;
ТаблицаТоваров.Колонки.Добавить("Наименование");
ТаблицаТоваров.Колонки.Добавить("Код");
ТаблицаТоваров.Колонки.Добавить("Весовой");
ТаблицаТоваров.Колонки.Добавить("НомерСекции");
ТаблицаТоваров.Колонки.Добавить("Цена");
ТаблицаТоваров.Колонки.Добавить("Количество");
ТаблицаТоваров.Колонки.Добавить("Скидка");
ТаблицаТоваров.Колонки.Добавить("СтавкаНДС");

ПечататьНДСВКассовыхЧекахИзДокументовЧекККМ = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ПечататьНДСВКассовыхЧекахИзДокументовЧекККМ");

Пока Выборка.Следующий() Цикл
Товар = ТаблицаТоваров.Добавить();

Товар.Наименование = СокрЛП(Выборка.Номенклатура)
+ "(" + СокрЛП(Выборка.ЕдиницаИзмерения)
+ ?(ПустаяСтрока(Выборка.ХарактеристикаНоменклатуры), "", ", " + СокрЛП(Выборка.ХарактеристикаНоменклатуры)) + ")";

Товар.Код = Выборка.Код;
Товар.Весовой = Выборка.Весовой;
Товар.НомерСекции = 1;
Товар.Цена = Выборка.Цена;
Товар.Количество = Выборка.Количество;
Товар.Скидка = Выборка.ПроцентСкидкиНаценки;
Товар.СтавкаНДС = ?(ПечататьНДСВКассовыхЧекахИзДокументовЧекККМ, Ценообразование.ПолучитьСтавкуНДС(Выборка.СтавкаНДС), 0);
КонецЦикла;

ОшибкаТО = ПечатьЧекаККМ(ФР, НомерЧекаККМ, НомерСменыККМ,
ТаблицаТоваров, ПолучитьСуммуНаличнойОплаты(),
ПолучитьСуммуБезналичнойОплаты() + ПолучитьСуммуОплатыПодарочнымиСертификатами(),
ВидОперации = Перечисления.ВидыОперацийЧекККМ.Возврат);

Если НЕ ЗначениеЗаполнено(ОшибкаТО) Тогда
СтатусЧекаККМ = Перечисления.СтатусыЧековККМ.Пробитый;
Попытка
Записать(РежимЗаписиДокумента.Запись);
Исключение

Ответ = "Не удалось записать документ с установленными параметрами пробитого чека.";
Отказ = Истина;
Результат = Ложь;

Если РежимРМК Тогда
ТекстОшибки = "Ошибка записи чека!" + Символы.ПС +
"Не удалось установить признак пробития чека!" + Символы.ПС +
"Это не критичная ошибка, т.к. при закрытии смены чек в любом случае попадет в отчет о продажах.";
ВывестиИнформациюОбОшибке(ТекстОшибки);
КонецЕсли;
КонецПопытки;
Иначе

Ответ = ПолучитьСерверТО().ПолучитьТекстОшибкиФРТО(ОшибкаТО);
Отказ = Истина;
Результат = Ложь;

Если РежимРМК Тогда
ТекстОшибки = "Ошибка фискального регистратора!" + Символы.ПС +
Ответ + Символы.ПС + "!" +
"Необходимо проверить настройки подключения фискального регистратора.";
ВывестиИнформациюОбОшибке(ТекстОшибки);
КонецЕсли;

КонецЕсли;

Если ПараметрыСеанса.НаличиеОбменаДаннымиПоКассе И Не ПараметрыСеанса.ЭтоГлавныйУзелОбменаПоКассе Тогда

//определим настройку для выполнения
СтруктураНастроекОбмена = ПроцедурыОбменаДаннымиПоКассе.ПолучитьСтруктуруНастроекОбменаВУзлеКассы();

Если Не ЗначениеЗаполнено(СтруктураНастроекОбмена.НастройкаОбменаДанными) Тогда

Сообщить("Не смог определить настройку обмена данными для узла кассы!
|Необходимо в форме узла обмена выбрать соответствующую настройку обмена!", СтатусСообщения.ОченьВажное);

Иначе

ПроцедурыОбменаДанными.ВыполнитьОбменДаннымиПоПроизвольнойНастройке(СтруктураНастроекОбмена.НастройкаОбменаДанными, Ложь, глЗначениеПеременной("глОбработкаАвтоОбменДанными"));

КонецЕсли;

КонецЕсли;

Возврат Результат;

КонецФункции // ПровестиИРаспечататьЧек()
11. seregapplk 11.10.13 23:57 Сейчас в теме
//серега
Процедура ЗакрытиеФискальногоЧека(Идентификатор)

Запрос = Новый Запрос(
"ВЫБРАТЬ
| ТчТовары.Номенклатура.Представление КАК Номенклатура,
| ТчТовары.ХарактеристикаНоменклатуры.Представление КАК ХарактеристикаНоменклатуры,
| ТчТовары.Номенклатура.Код КАК Код,
| ТчТовары.Номенклатура.Весовой КАК Весовой,
| ТчТовары.ЕдиницаИзмерения.Представление КАК ЕдиницаИзмерения,
| ТчТовары.Цена КАК Цена,
| ТчТовары.Количество КАК Количество,
| ВЫБОР
| КОГДА ТчТовары.Цена * ТчТовары.Количество = 0
| ТОГДА 0
| ИНАЧЕ (1 - ТчТовары.Сумма / (ТчТовары.Цена * ТчТовары.Количество)) * 100
| КОНЕЦ КАК ПроцентСкидкиНаценки,
| ТчТовары.СтавкаНДС,
| ТчТовары.СуммаНДС,
| ТчТовары.Сумма
|ИЗ
| Документ.ЧекККМ.Товары КАК ТчТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
| ПО ТчТовары.Номенклатура.Ссылка = ЗначенияСвойствОбъектов.Объект
| И (ЗначенияСвойствОбъектов.Свойство = ЗНАЧЕНИЕ(ПланВидовХарактеристик.СвойстваОбъектов.ПечатьФР))
|ГДЕ
| ТчТовары.Ссылка = &Ссылка
| И ЗначенияСвойствОбъектов.Значение = ИСТИНА");

Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();

Если РезультатЗапроса.Пустой() Тогда
Возврат;
КонецЕсли;

Выборка = РезультатЗапроса.Выбрать();
ТаблицаТоваров = Новый ТаблицаЗначений;
ТаблицаТоваров.Колонки.Добавить("Наименование");
ТаблицаТоваров.Колонки.Добавить("Код");
ТаблицаТоваров.Колонки.Добавить("Весовой");
ТаблицаТоваров.Колонки.Добавить("НомерСекции");
ТаблицаТоваров.Колонки.Добавить("Цена");
ТаблицаТоваров.Колонки.Добавить("Количество");
ТаблицаТоваров.Колонки.Добавить("Скидка");
ТаблицаТоваров.Колонки.Добавить("СтавкаНДС");
ТаблицаТоваров.Колонки.Добавить("Сумма");

ПечататьНДСВКассовыхЧекахИзДокументовЧекККМ = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ПечататьНДСВКассовыхЧекахИзДокументовЧекККМ");

Пока Выборка.Следующий() Цикл
Товар = ТаблицаТоваров.Добавить();

Товар.Наименование = СокрЛП(Выборка.Номенклатура)
+ "(" + СокрЛП(Выборка.ЕдиницаИзмерения)
+ ?(ПустаяСтрока(Выборка.ХарактеристикаНоменклатуры), "", ", " + СокрЛП(Выборка.ХарактеристикаНоменклатуры)) + ")";

Товар.Код = Выборка.Код;
Товар.Весовой = Выборка.Весовой;
Товар.НомерСекции = 1;
Товар.Цена = Выборка.Цена;
Товар.Количество = Выборка.Количество;
Товар.Скидка = Выборка.ПроцентСкидкиНаценки;
Товар.СтавкаНДС = ?(ПечататьНДСВКассовыхЧекахИзДокументовЧекККМ, Ценообразование.ПолучитьСтавкуНДС(Выборка.СтавкаНДС), 0);
Товар.Сумма = Выборка.Сумма;
КонецЦикла;


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

Если НЕ ЗначениеЗаполнено(ОшибкаТО) Тогда
СтатусЧекаККМ = Перечисления.СтатусыЧековККМ.Пробитый;
Попытка
Записать(РежимЗаписиДокумента.Запись);
Исключение

Ответ = "Не удалось записать документ с установленными параметрами пробитого чека.";
Отказ = Истина;
Результат = Ложь;

КонецПопытки;
Иначе

Ответ = ПолучитьСерверТО().ПолучитьТекстОшибкиФРТО(ОшибкаТО);
Отказ = Истина;
Результат = Ложь;


КонецЕсли;

Если ПараметрыСеанса.НаличиеОбменаДаннымиПоКассе И Не ПараметрыСеанса.ЭтоГлавныйУзелОбменаПоКассе Тогда

//определим настройку для выполнения
СтруктураНастроекОбмена = ПроцедурыОбменаДаннымиПоКассе.ПолучитьСтруктуруНастроекОбменаВУзлеКассы();

Если Не ЗначениеЗаполнено(СтруктураНастроекОбмена.НастройкаОбменаДанными) Тогда

Сообщить("Не смог определить настройку обмена данными для узла кассы!
|Необходимо в форме узла обмена выбрать соответствующую настройку обмена!", СтатусСообщения.ОченьВажное);

Иначе

ПроцедурыОбменаДанными.ВыполнитьОбменДаннымиПоПроизвольнойНастройке(СтруктураНастроекОбмена.НастройкаОбменаДанными, Ложь, глЗначениеПеременной("глОбработкаАвтоОбменДанными"));

КонецЕсли;

КонецЕсли;

КонецПроцедуры

Процедура ЗакрытиеНеФискальногоЧека(Идентификатор)
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ТчТовары.Номенклатура.Представление КАК Номенклатура,
| ТчТовары.ХарактеристикаНоменклатуры.Представление КАК ХарактеристикаНоменклатуры,
| ТчТовары.Номенклатура.Код КАК Код,
| ТчТовары.Номенклатура.Весовой КАК Весовой,
| ТчТовары.ЕдиницаИзмерения.Представление КАК ЕдиницаИзмерения,
| ТчТовары.Цена КАК Цена,
| ТчТовары.Количество КАК Количество,
| ВЫБОР
| КОГДА ТчТовары.Цена * ТчТовары.Количество = 0
| ТОГДА 0
| ИНАЧЕ (1 - ТчТовары.Сумма / (ТчТовары.Цена * ТчТовары.Количество)) * 100
| КОНЕЦ КАК ПроцентСкидкиНаценки,
| ТчТовары.СтавкаНДС,
| ТчТовары.СуммаНДС,
| ТчТовары.Сумма
|ИЗ
| Документ.ЧекККМ.Товары КАК ТчТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
| ПО ТчТовары.Номенклатура.Ссылка = ЗначенияСвойствОбъектов.Объект
| И (ЗначенияСвойствОбъектов.Свойство = ЗНАЧЕНИЕ(ПланВидовХарактеристик.СвойстваОбъектов.ПечатьФР))
|ГДЕ
| ТчТовары.Ссылка = &Ссылка
| И ЗначенияСвойствОбъектов.Значение = ЛОЖЬ");

Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();

Если РезультатЗапроса.Пустой() Тогда
Возврат;
КонецЕсли;

Выборка = РезультатЗапроса.Выбрать();
ТаблицаТоваров = Новый ТаблицаЗначений;
ТаблицаТоваров.Колонки.Добавить("Наименование");
ТаблицаТоваров.Колонки.Добавить("Код");
ТаблицаТоваров.Колонки.Добавить("Весовой");
ТаблицаТоваров.Колонки.Добавить("НомерСекции");
ТаблицаТоваров.Колонки.Добавить("Цена");
ТаблицаТоваров.Колонки.Добавить("Количество");
ТаблицаТоваров.Колонки.Добавить("Скидка");
ТаблицаТоваров.Колонки.Добавить("СтавкаНДС");
ТаблицаТоваров.Колонки.Добавить("Сумма");

ПечататьНДСВКассовыхЧекахИзДокументовЧекККМ = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ПечататьНДСВКассовыхЧекахИзДокументовЧекККМ");

Пока Выборка.Следующий() Цикл
Товар = ТаблицаТоваров.Добавить();

Товар.Наименование = СокрЛП(Выборка.Номенклатура)
+ "(" + СокрЛП(Выборка.ЕдиницаИзмерения)
+ ?(ПустаяСтрока(Выборка.ХарактеристикаНоменклатуры), "", ", " + СокрЛП(Выборка.ХарактеристикаНоменклатуры)) + ")";

Товар.Код = Выборка.Код;
Товар.Весовой = Выборка.Весовой;
Товар.НомерСекции = 1;
Товар.Цена = Выборка.Цена;
Товар.Количество = Выборка.Количество;
Товар.Скидка = Выборка.ПроцентСкидкиНаценки;
Товар.СтавкаНДС = ?(ПечататьНДСВКассовыхЧекахИзДокументовЧекККМ, Ценообразование.ПолучитьСтавкуНДС(Выборка.СтавкаНДС), 0);
Товар.Сумма = Выборка.Сумма;
КонецЦикла;

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

Если НЕ ЗначениеЗаполнено(ОшибкаТО) Тогда
СтатусЧекаККМ = Перечисления.СтатусыЧековККМ.Пробитый;
Попытка
Записать(РежимЗаписиДокумента.Запись);
Исключение

Ответ = "Не удалось записать документ с установленными параметрами пробитого чека.";
Отказ = Истина;
Результат = Ложь;

Если РежимРМК Тогда
ТекстОшибки = "Ошибка записи чека!" + Символы.ПС +
"Не удалось установить признак пробития чека!" + Символы.ПС +
"Это не критичная ошибка, т.к. при закрытии смены чек в любом случае попадет в отчет о продажах.";
ВывестиИнформациюОбОшибке(ТекстОшибки);
КонецЕсли;
КонецПопытки;
Иначе

Ответ = ПолучитьСерверТО().ПолучитьТекстОшибкиФРТО(ОшибкаТО);
Отказ = Истина;
Результат = Ложь;

Если РежимРМК Тогда
ТекстОшибки = "Ошибка фискального регистратора!" + Символы.ПС +
Ответ + Символы.ПС + "!" +
"Необходимо проверить настройки подключения фискального регистратора.";
ВывестиИнформациюОбОшибке(ТекстОшибки);
КонецЕсли;

КонецЕсли;

Если ПараметрыСеанса.НаличиеОбменаДаннымиПоКассе И Не ПараметрыСеанса.ЭтоГлавныйУзелОбменаПоКассе Тогда

//определим настройку для выполнения
СтруктураНастроекОбмена = ПроцедурыОбменаДаннымиПоКассе.ПолучитьСтруктуруНастроекОбменаВУзлеКассы();

Если Не ЗначениеЗаполнено(СтруктураНастроекОбмена.НастройкаОбменаДанными) Тогда

Сообщить("Не смог определить настройку обмена данными для узла кассы!
|Необходимо в форме узла обмена выбрать соответствующую настройку обмена!", СтатусСообщения.ОченьВажное);

Иначе

ПроцедурыОбменаДанными.ВыполнитьОбменДаннымиПоПроизвольнойНастройке(СтруктураНастроекОбмена.НастройкаОбменаДанными, Ложь, глЗначениеПеременной("глОбработкаАвтоОбменДанными"));

КонецЕсли;

КонецЕсли;


КонецПроцедуры

Процедура ПолноеЗакрытиеЧека(Идентификатор);

Запрос = Новый Запрос(
"ВЫБРАТЬ
| ТчТовары.Номенклатура.Представление КАК Номенклатура,
| ТчТовары.ХарактеристикаНоменклатуры.Представление КАК ХарактеристикаНоменклатуры,
| ТчТовары.Номенклатура.Код КАК Код,
| ТчТовары.Номенклатура.Весовой КАК Весовой,
| ТчТовары.ЕдиницаИзмерения.Представление КАК ЕдиницаИзмерения,
| ТчТовары.Цена КАК Цена,
| ТчТовары.Количество КАК Количество,
| ВЫБОР
| КОГДА ТчТовары.Цена * ТчТовары.Количество = 0
| ТОГДА 0
| ИНАЧЕ (1 - ТчТовары.Сумма / (ТчТовары.Цена * ТчТовары.Количество)) * 100
| КОНЕЦ КАК ПроцентСкидкиНаценки,
| ТчТовары.СтавкаНДС,
| ТчТовары.СуммаНДС,
| ТчТовары.Сумма
|ИЗ
| Документ.ЧекККМ.Товары КАК ТчТовары
|ГДЕ
| ТчТовары.Ссылка = &Ссылка");

Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();
ТаблицаТоваров = Новый ТаблицаЗначений;
ТаблицаТоваров.Колонки.Добавить("Наименование");
ТаблицаТоваров.Колонки.Добавить("Код");
ТаблицаТоваров.Колонки.Добавить("Весовой");
ТаблицаТоваров.Колонки.Добавить("НомерСекции");
ТаблицаТоваров.Колонки.Добавить("Цена");
ТаблицаТоваров.Колонки.Добавить("Количество");
ТаблицаТоваров.Колонки.Добавить("Скидка");
ТаблицаТоваров.Колонки.Добавить("СтавкаНДС");
ТаблицаТоваров.Колонки.Добавить("Сумма");

ПечататьНДСВКассовыхЧекахИзДокументовЧекККМ = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ПечататьНДСВКассовыхЧекахИзДокументовЧекККМ");

Пока Выборка.Следующий() Цикл
Товар = ТаблицаТоваров.Добавить();

Товар.Наименование = СокрЛП(Выборка.Номенклатура)
+ "(" + СокрЛП(Выборка.ЕдиницаИзмерения)
+ ?(ПустаяСтрока(Выборка.ХарактеристикаНоменклатуры), "", ", " + СокрЛП(Выборка.ХарактеристикаНоменклатуры)) + ")";

Товар.Код = Выборка.Код;
Товар.Весовой = Выборка.Весовой;
Товар.НомерСекции = 1;
Товар.Цена = Выборка.Цена;
Товар.Количество = Выборка.Количество;
Товар.Скидка = Выборка.ПроцентСкидкиНаценки;
Товар.СтавкаНДС = ?(ПечататьНДСВКассовыхЧекахИзДокументовЧекККМ, Ценообразование.ПолучитьСтавкуНДС(Выборка.СтавкаНДС), 0);
Товар.Сумма = Выборка.Сумма;
КонецЦикла;

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


Если НЕ ЗначениеЗаполнено(ОшибкаТО) Тогда
СтатусЧекаККМ = Перечисления.СтатусыЧековККМ.Пробитый;
Попытка
Записать(РежимЗаписиДокумента.Запись);
Исключение

Ответ = "Не удалось записать документ с установленными параметрами пробитого чека.";
Отказ = Истина;
Результат = Ложь;

Если РежимРМК Тогда
ТекстОшибки = "Ошибка записи чека!" + Символы.ПС +
"Не удалось установить признак пробития чека!" + Символы.ПС +
"Это не критичная ошибка, т.к. при закрытии смены чек в любом случае попадет в отчет о продажах.";
ВывестиИнформациюОбОшибке(ТекстОшибки);
КонецЕсли;
КонецПопытки;
Иначе

Ответ = ПолучитьСерверТО().ПолучитьТекстОшибкиФРТО(ОшибкаТО);
Отказ = Истина;
Результат = Ложь;

Если РежимРМК Тогда
ТекстОшибки = "Ошибка фискального регистратора!" + Символы.ПС +
Ответ + Символы.ПС + "!" +
"Необходимо проверить настройки подключения фискального регистратора.";
ВывестиИнформациюОбОшибке(ТекстОшибки);
КонецЕсли;

КонецЕсли;

Если ПараметрыСеанса.НаличиеОбменаДаннымиПоКассе И Не ПараметрыСеанса.ЭтоГлавныйУзелОбменаПоКассе Тогда

//определим настройку для выполнения
СтруктураНастроекОбмена = ПроцедурыОбменаДаннымиПоКассе.ПолучитьСтруктуруНастроекОбменаВУзлеКассы();

Если Не ЗначениеЗаполнено(СтруктураНастроекОбмена.НастройкаОбменаДанными) Тогда

Сообщить("Не смог определить настройку обмена данными для узла кассы!
|Необходимо в форме узла обмена выбрать соответствующую настройку обмена!", СтатусСообщения.ОченьВажное);

Иначе

ПроцедурыОбменаДанными.ВыполнитьОбменДаннымиПоПроизвольнойНастройке(СтруктураНастроекОбмена.НастройкаОбменаДанными, Ложь, глЗначениеПеременной("глОбработкаАвтоОбменДанными"));

КонецЕсли;

КонецЕсли;


КонецПроцедуры
//серега
////////////////////////////////////////////////////////////­////////////////////
// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ

РежимРМК = Ложь;

КонтролироватьОстаткиТоваровПриЗакрытииЧека = Ложь;
12. seregapplk 11.10.13 23:57 Сейчас в теме
В форме регистрации продаж Завершение закрытие и кнопки в форме
//Производит закрытие чека на фискальном регистраторе и печать товарного чека.
//
// Параметры:
// Печать - булево, признак необходимости печати товарного чека.
//
Процедура ЗакрытьЧек(Печать = Ложь, РучнойРежим = Ложь, ВыбратьДокументПечати = Ложь, ВсеПРН = Ложь, ВсеФР = Ложь)
Перем Отказ;

Если ТолькоПросмотр Тогда
Закрыть();
КонецЕсли;

Если (СтатусЧекаККМ <> Перечисления.СтатусыЧековККМ.Пробитый
Или СтатусЧекаККМ <> Перечисления.СтатусыЧековККМ.Архивный
Или СтатусЧекаККМ <> Перечисления.СтатусыЧековККМ.Аннулированный)
И Товары.Количество() > 0 Тогда

Оплата.Очистить();
ФормаОплат = ПолучитьФорму("ФормаОплатЧека", ЭтаФорма);
ФормаОплат.СуммаОплаты = ЭлементыФормы.ИнфНадписьТекущееЗначение.Значение;

Результат = ФормаОплат.ОткрытьМодально();

ЭлементыФормы.ИнфНадписьТекущееЗначение.Значение = "";
ЭлементыФормы.Панель3.ЦветФона = ЦветаСтиля.ЦветФонаФормы;

КонецЕсли;

Если Результат <> "Закрыть чек" Тогда
Возврат;
КонецЕсли;

Отказ = Ложь;

//Погашение сертификатами

ТаблицаПогашения = ПодготовитьТаблицуПогашения();

ПроверитьЗаполнениеТабличнойЧастиПогашения(ТаблицаПогашения, ЭтотОбъект, Отказ, "");

УправлениеЗапасами.ПроверитьДвиженияСерийныхНомеровДляПогашения(ЭтотОбъект, РежимПроведенияДокумента.Оперативный, Отказ, "");

Если Отказ Тогда
Возврат;
КонецЕсли;


ИтогоПодарочныеСертификатыПоНоминалу = ПолучитьСуммуНоминаловПодарочныхСертификатов();
ИтогоПоЧеку = Товары.Итог("Сумма");
ПотериПокупателя = ИтогоПодарочныеСертификатыПоНоминалу - ИтогоПоЧеку;
Если ПотериПокупателя > 0 Тогда
ФормаИнформацииОбОшибке = Документы.ЧекККМ.ПолучитьФорму("ФормаИнформацииОбОшибке");
ТекстСообщения = "Потери покупателя от недобора товара составляют - " + Формат(ПотериПокупателя, "ЧЦ=15; ЧДЦ=2; ЧГ=3,0") + " грн." + Символы.ПС +
"Покупатель согласен?";
ФормаИнформацииОбОшибке.ТекстОшибки = "Информация для покупателя:" + Символы.ПС + ТекстСообщения;
ФормаИнформацииОбОшибке.Ответ = КодВозвратаДиалога.Нет;
ФормаИнформацииОбОшибке.ОткрытьМодально();

Если Не ФормаИнформацииОбОшибке.Ответ = КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
КонецЕсли;

ПроверитьПодаркиВНаличии();
Если Подарки.Количество()>0 Тогда


мОтбор = Новый Структура;
мОтбор.Вставить("Номенклатура",Справочники.Номенклатура.ПустаяСсылка());

ТаблицаПодарки = Подарки.Выгрузить();
ТаблицаПодарки.Колонки.Добавить("Получен", Новый ОписаниеТипов("Булево"));

МассивНеНужныхСтрок = Новый Массив;

СтрокиПодарков = Подарки.НайтиСтроки(мОтбор);
КонтролироватьОстаткиТоваровПриЗакрытииЧека = мИспользоватьНастройкуРМК И мНастройкаРМК.КонтролироватьОстаткиТоваровПриЗакрытииЧека;

Для каждого СтрокаПодарки Из СтрокиПодарков Цикл
ФормаВыбораПодарка = ПолучитьФорму("ФормаВыбораПодаркаИзСписка", ЭтаФорма);
ФормаВыбораПодарка.КоличествоНаборов = СтрокаПодарки.Количество;
ФормаВыбораПодарка.СкидкаНаценка = СтрокаПодарки.СкидкаНаценка;

Результат = ФормаВыбораПодарка.ОткрытьМодально();

Если ЗначениеЗаполнено(ФормаВыбораПодарка.Номенклатура) Тогда
СтрокаПодарки.Номенклатура = ФормаВыбораПодарка.Номенклатура;
СтрокаПодарки.ХарактеристикаНоменклатуры = ФормаВыбораПодарка.ХарактеристикаНоменклатуры;
СтрокаПодарки.Коэффициент = ФормаВыбораПодарка.Коэффициент;
СтрокаПодарки.Количество = ФормаВыбораПодарка.Количество;
СтрокаПодарки.ЕдиницаИзмерения = ФормаВыбораПодарка.ЕдиницаИзмерения;
СтрокаПодарки.Склад = ОбработкаТабличныхЧастей.ПолучитьСкладПродажиНоменклатуры(СтрокаПодарки.Номенклатура, КассаККМ);
СтрокаПодарки.Цена = Ценообразование.ПолучитьЦенуНоменклатурыВРознице(Дата, КассаККМ.Магазин, СтрокаПодарки.Номенклатура, СтрокаПодарки.ХарактеристикаНоменклатуры, СтрокаПодарки.ЕдиницаИзмерения);
СтрокаПодарки.Сумма = СтрокаПодарки.Цена * СтрокаПодарки.Количество;

СтрокаТаблицыПодарки = ТаблицаПодарки[Подарки.Индекс(СтрокаПодарки)];
СтрокаТаблицыПодарки.Получен = ФормаВыбораПодарка.Получен;

ЗаполнитьЗначенияСвойств(СтрокаТаблицыПодарки, СтрокаПодарки);

ИначеЕсли ФормаВыбораПодарка.ЗакрытаПриОтсутствииДанных Тогда
МассивНеНужныхСтрок.Добавить(СтрокаПодарки);

СтрокаТаблицыПодарки = ТаблицаПодарки[Подарки.Индекс(СтрокаПодарки)];
СтрокаТаблицыПодарки.Получен = Истина;
Иначе
Возврат;
КонецЕсли;
КонецЦикла;

Для каждого СтрокаПодарки Из МассивНеНужныхСтрок Цикл
Подарки.Удалить(СтрокаПодарки);
КонецЦикла;

мОтбор = Новый Структура;
мОтбор.Вставить("Получен",Ложь);
СтрокиТаблицаПодарки = ТаблицаПодарки.НайтиСтроки(мОтбор);

Если СтрокиТаблицаПодарки.Количество()>0 Тогда
ФормаВыдачиПодарков = ПолучитьФорму("ФормаВыдачиПодарков", ЭтаФорма);
ФормаВыдачиПодарков.ВидОперацийЧекККМ = ВидОперации;
ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(СтрокиТаблицаПодарки,ФормаВыдачиПодарков.ТаблицаВыбораПодарка);
ФормаВыдачиПодарков.ТаблицаВыбораПодарка.Свернуть("Номенклатура,ХарактеристикаНоменклатуры,ЕдиницаИзмерения, Помечен","Количество");

Результат = ФормаВыдачиПодарков.ОткрытьМодально();

Если Результат <> "Выдали все подарки" Тогда
Возврат;
КонецЕсли;
КонецЕсли;

УправлениеМаркетинговымиАкциями.ПеренестиПодаркиВТовары(ЭтотОбъект, Товары, Скидки, Подарки, КассаККМ.Магазин);
КонецЕсли;

Эквайринг.ПересчитатьТорговуюУступку(ДоговорЭквайринга, Оплата);
ПересчитатьБанковскийКредит();

ЗавершитьЗакрытиеЧека(Печать, РучнойРежим, ВыбратьДокументПечати, ВсеПРН, ВсеФР);

КонецПроцедуры // ЗакрытьЧек()

// Определяет была ли оплата картой
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// Булево
//
Функция ЕстьОплатаПлатежнойКартой()

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВЫРАЗИТЬ(Оплата.ВидОплаты КАК Справочник.ВидыОплатЧекаККМ) КАК ВидОплаты,
| ВЫРАЗИТЬ(Оплата.Сумма КАК ЧИСЛО) КАК Сумма
|ПОМЕСТИТЬ ТаблицаОплаты
|ИЗ
| &Оплата КАК Оплата
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| ТаблицаОплаты.ВидОплаты,
| ТаблицаОплаты.Сумма
|ИЗ
| ТаблицаОплаты КАК ТаблицаОплаты
|ГДЕ
| ТаблицаОплаты.ВидОплаты.ТипОплаты = ЗНАЧЕНИЕ(Перечисление.ТипыОплатЧекаККМ.ПлатежнаяКарта)
| И ТаблицаОплаты.Сумма > 0";

Запрос.УстановитьПараметр("Оплата", Оплата.Выгрузить());

Результат = Запрос.Выполнить();

Возврат Не Результат.Пустой()

КонецФункции // ЕстьОплатаПлатежнойКартой()


// Процедура закрывает чек в форме
//
Процедура ЗавершитьЗакрытиеЧека(Печать, РучнойРежим = Ложь, ВыбратьДокументПечати = Ложь, ВсеПРН = Ложь, ВсеФР = Ложь) Экспорт

Перем Паника;
Перем Ответ;
СоздатьНовыйЧек = Истина;

ПечатьПакетаДокументовВозврат = (ВидОперации = Перечисления.ВидыОперацийЧекККМ.Возврат И мИспользоватьНастройкуРМК И мНастройкаРМК.ПриВозвратеРаспечатыватьПакетДокументов);

Если НЕ НачалоДня(ДокументОбъект.Дата) = НачалоДня(ТекущаяДата()) Тогда
ДокументОбъект.Дата = НачалоДня(ТекущаяДата());
КонецЕсли;

Если НЕ НачалоДня(ДокументОбъект.Дата) = НачалоДня(ТекущаяДата()) Тогда
ДокументОбъект.Дата = Дата(Год(ДокументОбъект.Дата), Месяц(ДокументОбъект.Дата), День(ДокументОбъект.Дата),
Час(ТекущаяДата()), Минута(ТекущаяДата()), Секунда(ТекущаяДата()))
КонецЕсли;

ЭлементыФормы.ИнфНадписьТекущаяСумма.Заголовок = "";

Результат = ПровестиИРаспечататьЧек(Ответ, Паника, ЭтаФорма, ПечатьПакетаДокументовВозврат, РучнойРежим, ВсеПРН, ВсеФР);
Если Не Результат Тогда
ВывестиИнформациюОбОшибке("Чек не пробит.
|При формировании чека возникла ошибка.
|" + Ответ);
Иначе
ОпределитьСообщенияКассируПослеОформленияЧека();

ДисконтнаяКартаДляЗамены = ДисконтнаяКарта;
КонецЕсли;

Если СтатусЧекаККМ = Перечисления.СтатусыЧековККМ.Пробитый Тогда

Если Печать Тогда
Если ВыбратьДокументПечати Тогда
УниверсальныеМеханизмы.ОткрытьФормуВыбораПечатныхФормОбъекта(ЭтотОбъект, ЭтаФорма);
Иначе
Печать("Чек");
КонецЕсли;
КонецЕсли;

СоздатьНовыйДокумент();

Иначе
Если Не ЭтоНовый() Тогда
Если ЕстьОплатаПлатежнойКартой() Тогда
ТекстСообщения = "Чек не пробит. Была оплата платежной картой" + Символы.ПС +
"Чек нужно пробить позднее или аннулировать перед закрытием смены";
Иначе
ТекстСообщения = "Чек не пробит. " + Символы.ПС +
"Чек нужно пробить позднее или аннулировать перед закрытием смены";
КонецЕсли;

ВывестиИнформациюОбОшибке(ТекстСообщения);

СоздатьНовыйДокумент();
КонецЕсли;
КонецЕсли;

КонецПроцедуры

и

Процедура КнопкаВвестиТоварныйЧекВсеНажатие(Элемент)
Перем Заголовок, Результат;

Отказ = ВыполнитьКонтрольЗакрытияЧека(Заголовок, Результат);

Если Отказ Тогда

ВывестиИнформациюОбОшибке(Заголовок + Результат);

Иначе

ПересчитатьАвтоматическиеСкидки();

ПечатьТоварногоЧека =Ложь;
ЗакрытьЧек(ПечатьТоварногоЧека,,,Истина);

КонецЕсли;

Если ЭлементыФормы.ПанельПодборКлавиши.Страницы.Подбор.Видимость Тогда
мПодбор.НоменклатураПриАктивизацииСтроки(ЭтаФорма, ЭлементыФормы.НоменклатураСписок);
КонецЕсли;


УстановитьАктивныйЭлемент();

КонецПроцедуры

Процедура КнопкаВвестиТоварныйЧекНеВсеНажатие(Элемент)

Перем Заголовок, Результат;

Отказ = ВыполнитьКонтрольЗакрытияЧека(Заголовок, Результат);

Если Отказ Тогда

ВывестиИнформациюОбОшибке(Заголовок + Результат);

Иначе

ПересчитатьАвтоматическиеСкидки();

ПечатьТоварногоЧека =Ложь;
ЗакрытьЧек(ПечатьТоварногоЧека,,,,Истина);

КонецЕсли;

Если ЭлементыФормы.ПанельПодборКлавиши.Страницы.Подбор.Видимость Тогда
мПодбор.НоменклатураПриАктивизацииСтроки(ЭтаФорма, ЭлементыФормы.НоменклатураСписок);
КонецЕсли;


УстановитьАктивныйЭлемент();

КонецПроцедуры

При попытке напечатать чек пишет фр не подключен? ну помогите плиз блин!!!!!!!!!!!!!!!!!!!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот