Версия для печати темы (https://pro1c.org.ua/index.php?s=64087cae9114f97fb213e145f1573d5d&showtopic=66828)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Передача між кліентом та сервером

Автор: rogabob 04.12.21, 21:18

64000000.gif
Конфігурація Розница 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;");  
        КонецЕсли;    
    КонецЕсли;
КонецЕсли;

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


На стороні сервера я пробував і тимчасові таблиці, і перемінну форми.. але все заходив в тупік..

Задача проста, потрібно щоб при натиску кнопки оплата і проходило надсилання даних на фіскальний.
Як грамотно це зробити.



Автор: Petre 06.12.21, 8:12

rogabob @ 04.12.21, 21:18 * ,
Потрібно замість &НаСервере зробити це &НаКлиенте.

Автор: rogabob 06.12.21, 9:08

Petre @ Сегодня, 8:12 * ,
якби то бало так просто!

ТекушийПользователь=  ПараметрыСеанса.ТекущийПользователь;

працює тільки
&НаСервере

А друге
Объект.Товары
доступний тільки на сервері...


а робота надоьєктом відьбувається на клієнті..
Обьект.товари береться з обьекта ОбьектЧекККМ перед закриттям
у процедури на сервері
Процедура ЗаполнитьЧекПоВсемДанным(ОбъектЧекККМ)
    
    ЗаполнитьЗначенияСвойств(ОбъектЧекККМ, Объект,,"Ссылка, Дата");
    
    ПечатьФК();

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

Автор: sava1 06.12.21, 10:42

Цитата(rogabob @ 06.12.21, 9:08) *
якби то бало так просто!


А ніхто і не обіцяв, що буде просто.

Цитата(rogabob @ 06.12.21, 9:08) *
ТекушийПользователь= ПараметрыСеанса.ТекущийПользователь;


такі конструкції отримуємо на сервері через НеКонтектний визов;

Обект.Товари - також треба отримувати на сервері, передавати на клієнт і там обробляти

і т.д.

(Перечисление теж на клієнті недоступно......)

Автор: Vofka 06.12.21, 11:56

rogabob, подход должен быть такой: идем на сервер, формируем нужные данные для печати на ФР и отдаем их на клиент; на клиенте выполняем уже только функции печати.

Автор: rogabob 06.12.21, 13:35

Цитата(sava1 @ 06.12.21, 10:42) *
Обект.Товари - також треба отримувати на сервері, передавати на клієнт і там обробляти



От це цікавіть найбільше... як краще це зробити... направте хоть на щось

Япробував з обьекта витягувати інформацію потрібну в масив структур і записувати це в
 НАСервере Перем

але при виклику зклієнта перем обнулялася

Автор: Batchir 06.12.21, 14:10

&НаКлиенте
Процедура ПечатьФК()

    Драйвер = Новый COMОбъект("ecrmini.t400");
    стрДанных = ПолучитьДанныеССервера();

    Для каждого стр из  стрДанных .Товары Цикл        
            Драйвер.t400me("sale_plu;.........");            
    КонецЦикла;      

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

&НаСервере
Функция ПолучитьДанныеССервера()

    стрДанных = Новый Структура("Товары");
    // формируем массив строк (структур) которые нужно вывести на ФР и закидываем в возвращаемую структуру
    Возврат  стрДанных;    

КонецФункции

Автор: rogabob 06.12.21, 20:29

Цитата(Batchir @ 06.12.21, 14:10) *

Дякую всім за підказки..
// Оплата чека
&НаКлиенте
Процедура ОплатитьТовары(ИмяФормыОплаты, ОплатаПлатежнойКартой = Неопределено, Печать = Ложь)

По "Точкам Останова" і структурі виклику всіх процедур та функцій з клієнта на сервер, таки отримав ті дані, перед самим "так званим очищенням"
СоздатьНовыйНаборКлиент();

Зі своїми умовами
ТекушийПользователь = ТекПольз();
Если ТекушийПользователь="АДМЕН" Тогда...
//////
&НаСервере
Функция ТекПольз()
Возврат ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
КонецФункции;

Вдалося нарешті отримати всі свої Объект.Товары, Номенклатура.ВигрузкаКасовий

І ще раз дякую модератору що закрив https://pro1c.org.ua/topic/klient-server-i-drajver-novyj-comobektecrmini-t400-66808/... бо прийшлося дивитися уроки по "ЗАПРОСАМ" по 100 раз одне і те саме, і воно помаленьку почало доходитиsmile.gif..але ж все таки вдалося..можливо не грамотно і можливо не цілком правильно, але воно працює..поки щоsmile.gif
44000000.gif

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua