Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Передача між кліентом та сервером
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
rogabob
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
rogabob @ 04.12.21, 21:18 необходимо зарегистрироваться для просмотра ссылки ,
Потрібно замість &НаСервере зробити це &НаКлиенте.
rogabob
Petre @ Сегодня, 8:12 необходимо зарегистрироваться для просмотра ссылки ,
якби то бало так просто!
ТекушийПользователь=  ПараметрыСеанса.ТекущийПользователь;

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

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


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

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


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

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


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

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

і т.д.

(Перечисление теж на клієнті недоступно......)
Vofka
rogabob, подход должен быть такой: идем на сервер, формируем нужные данные для печати на ФР и отдаем их на клиент; на клиенте выполняем уже только функции печати.
rogabob
Цитата(sava1 @ 06.12.21, 10:42) необходимо зарегистрироваться для просмотра ссылки
Обект.Товари - також треба отримувати на сервері, передавати на клієнт і там обробляти



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

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

але при виклику зклієнта перем обнулялася
Batchir
&НаКлиенте
Процедура ПечатьФК()

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

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

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

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

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

КонецФункции
rogabob
Цитата(Batchir @ 06.12.21, 14:10) необходимо зарегистрироваться для просмотра ссылки

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

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

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

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

І ще раз дякую модератору що закрив необходимо зарегистрироваться для просмотра ссылки... бо прийшлося дивитися уроки по "ЗАПРОСАМ" по 100 раз одне і те саме, і воно помаленьку почало доходитиsmile.gif..але ж все таки вдалося..можливо не грамотно і можливо не цілком правильно, але воно працює..поки щоsmile.gif
44000000.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.