Конфігурація Розница 2.0, 1с 8.3 (кліент-сервер)
Є клієнт, на якому підключений фіскальний апарат .t400me.
При оплаті потрібна відправка даних на фіскальний апарат (умова= вигрузка в касовий = ИСТИНА, + кількість і штрихкод)
Суть в тому, що код нижче, пряцює при умові якщо кліент і є сервером.. при інакших обставинах там купа помилок.. тобто коли клієнт не є сервером
&НаСервере
Процедура ПечатьФК()
ТекушийПользователь= ПараметрыСеанса.ТекущийПользователь;
Если ТекушийПользователь.Наименование="Адміністратор" Тогда
ПроверкаКаса=Ложь;
Для каждого стр из Объект.Товары Цикл
Если стр.Номенклатура.ВигрузкаКасовий=Истина тогда
ПроверкаКаса=Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ПроверкаКаса=Истина Тогда
Драйвер = Новый COMОбъект("ecrmini.t400");
Драйвер.t400me("open_port;2;115200;");
Драйвер.t400me("cashier_registration;1;0;");
Драйвер.t400me("open_receipt;0;");
КонецЕсли;
Для каждого стр из Объект.Товары Цикл
Если стр.Номенклатура.ВигрузкаКасовий=Истина тогда
ШтрихКод1=ПолучитьШтрихКод(стр.Номенклатура);
ШтрихКод=СокрЛП(ШтрихКод1);
КстьТов=Формат(стр.Количество,"ЧДЦ=3; ЧРД=.; ЧГ=0");
Драйвер.t400me("sale_plu;0;1;0;"+КстьТов+";"+ШтрихКод+";");
КонецЕсли;
КонецЦикла;
ОплатаКарткою=Ложь;
Для каждого стрО из Объект.Оплата Цикл
Если стрО.ВидОплаты.ТипОплаты=Перечисления.ТипыОплатЧекаККМ.ПлатежнаяКарта Тогда
ОплатаКарткою=Истина;
КонецЕсли;
КонецЦикла;
Если ПроверкаКаса=Истина Тогда
Если ОплатаКарткою=Истина Тогда
Драйвер.t400me("pay;2;0;");
Драйвер.t400me("close_port;");
Иначе
Драйвер.t400me("pay;0;0;");
Драйвер.t400me("close_port;");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
rogabob @ 04.12.21, 21:18
,
Потрібно замість &НаСервере зробити це &НаКлиенте.
Petre @ Сегодня, 8:12
,
якби то бало так просто!
ТекушийПользователь= ПараметрыСеанса.ТекущийПользователь;
&НаСервере
Объект.Товары
доступний тільки на сервері...Процедура ЗаполнитьЧекПоВсемДанным(ОбъектЧекККМ)
ЗаполнитьЗначенияСвойств(ОбъектЧекККМ, Объект,,"Ссылка, Дата");
ПечатьФК();
ОбщегоНазначенияРТСервер.ЗагрузитьВТаблицуЗначений(Объект.Товары , ОбъектЧекККМ.Товары, Истина);
ОбщегоНазначенияРТСервер.ЗагрузитьВТаблицуЗначений(Объект.УправляемыеСкидки , ОбъектЧекККМ.УправляемыеСкидки, Истина);
ОбщегоНазначенияРТСервер.ЗагрузитьВТаблицуЗначений(Объект.Подарки , ОбъектЧекККМ.Подарки, Истина);
ОбщегоНазначенияРТСервер.ЗагрузитьВТаблицуЗначений(Объект.СкидкиНаценки , ОбъектЧекККМ.СкидкиНаценки, Истина);
ОбщегоНазначенияРТСервер.ЗагрузитьВТаблицуЗначений(Объект.СерийныеНомера , ОбъектЧекККМ.СерийныеНомера, Истина);
ОбщегоНазначенияРТСервер.ЗагрузитьВТаблицуЗначений(Объект.Серии , ОбъектЧекККМ.Серии, Истина);
ОбщегоНазначенияРТСервер.ЗагрузитьВТаблицуЗначений(Объект.Оплата , ОбъектЧекККМ.Оплата, Истина);
ОбщегоНазначенияРТСервер.ЗагрузитьВТаблицуЗначений(Объект.ПогашениеПодарочныхСертификатов, ОбъектЧекККМ.ПогашениеПодарочныхСертификатов, Истина);
КонецПроцедуры // ЗаполнитьЧекПоВсемДанным()
rogabob, подход должен быть такой: идем на сервер, формируем нужные данные для печати на ФР и отдаем их на клиент; на клиенте выполняем уже только функции печати.
НАСервере Перем
&НаКлиенте
Процедура ПечатьФК()
Драйвер = Новый COMОбъект("ecrmini.t400");
стрДанных = ПолучитьДанныеССервера();
Для каждого стр из стрДанных .Товары Цикл
Драйвер.t400me("sale_plu;.........");
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПолучитьДанныеССервера()
стрДанных = Новый Структура("Товары");
// формируем массив строк (структур) которые нужно вывести на ФР и закидываем в возвращаемую структуру
Возврат стрДанных;
КонецФункции
// Оплата чека
&НаКлиенте
Процедура ОплатитьТовары(ИмяФормыОплаты, ОплатаПлатежнойКартой = Неопределено, Печать = Ложь)
СоздатьНовыйНаборКлиент();
ТекушийПользователь = ТекПольз();
Если ТекушийПользователь="АДМЕН" Тогда...
//////
&НаСервере
Функция ТекПольз()
Возврат ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
КонецФункции;
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua