Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Реализация работы двух кассиров на одном ФР

Реализация работы двух кассиров на одном ФР
Я
   PQT
 
21.11.17 - 10:47
Сейчас работает один кассир на двух ФР (т.к. магазин разделен на два ИП), подключенных к одной базе на самописной конфе. Теперь требуется посадить рядом второго кассира без покупки еще двух ФР.
Второй кассир будет работать на том же компьютере через удаленный рабочий стол (RDP).
Из многочисленных вариантов реализации, которые пришли в голову, кажутся привлекательными два следующих:
Компьютер с подключенным ФР будем называть "Тычинка"
Компьютер с удаленным RDP, и не подключенной кассой будем называть "Пестик"
1. При проведении "Пестиком" документа Чек, он регистрирует его в регистре сведений "Очередь печати" (и тут первый вопрос - где лучше подобное хранить? в регистре сведений?).
  "Тычинка" каждые 3 секунды проверяет "Очередь печати", и печатает на ФР все что там появляется.
2. При проведении "Пестиком" документа Чек, константа (булево) "Проверить чеки", устанавливается в "Истина".
   "Тычинка" каждые 3 секунды проверяет эту константу, и когда "Истина", проверяет чеки за этот день и печатает те, которые не пробиты (или помечены Пестиком).
3. Самый простой, но не буду его использовать, т.к. думаю на базу б'ольшая нагрузка. - Просто "Тычинка" проверяет каждые 3 секунды журнал чеков, и пробивает все, что не было пробито.
Надежность между вариантами вроде бы одинаковая, вопрос в том, какой из вариантов менее нагружает базу?
Реализация у обоих вариантов не сложная, но может я что-то не предусмотрел.
И может у кого есть более рациональные решения?
 
 
   bodri
 
1 - 21.11.17 - 10:58
На мой взгляд, третий более оптимальней.
Вопрос: Чеки покупателям не отдаете?
   Лодырь
 
2 - 21.11.17 - 10:59
   Лодырь
 
3 - 21.11.17 - 11:00
   Галахад
 
4 - 21.11.17 - 11:15
Гм. А какая разница, проверять очередь или константу?
   PQT
 
5 - 21.11.17 - 11:17
(1) ФР будут стоять между кассами, доступ к ним будет у обоих кассиров.
   lodger
 
6 - 21.11.17 - 11:22
дело в файловой базе или клиент-сервер?
   Звездец
 
7 - 21.11.17 - 11:23
вариант 4. Использовать кассовый сервер
   PQT
 
8 - 21.11.17 - 11:24
(6) да, файловая база, и все это на не очень шустром компьютере, но реализовать это нужно срочно, т.к. грядет декабрь
   lodger
 
9 - 21.11.17 - 11:26
(8) в (7) хорошая мысля для такого колхоза. вынести ккм из 1с-ки. сделать независимый от 1с сервис и печатать в него.
рабочие места становятся независимыми и могут вообще жить своими жизнями.
   nordbox
 
10 - 21.11.17 - 11:33
(8) Когда то давным давно, когда еще драйвера 8.х только появились, мы как то пробовали всяко разные варианты...
и пришли к выводу что: Любое кроилово приводит в попадалово.
Дешевле, проще,быстрее и не имея проблем  купить второй ФР.
Зачем эти извращения?
посчитай, сколько будет стоить кассовый сервер, головняк с настройкой, постоянно надо что бы прогер под рукой был и т.д.
 
 Рекламное место пустует
   PQT
 
11 - 21.11.17 - 11:33
(9) (7) подразумеваете отдельную 1С базу с данными для печати чеков и вывод этих чеков в ФР? не совсем понял как это работает, постоянный обмен данными?
   PQT
 
12 - 21.11.17 - 11:38
(10) еще + 2 ФР (для двух ИП), и потом обслуживание 4х ФР потребуется., а нужны они нам только по декабрям, т.к. это магазин игрушек)  поэтому предпочту кроилово с попыткой избежать попадалово))
   Звездец
 
13 - 21.11.17 - 11:43
   PQT
 
14 - 21.11.17 - 11:52
(13) Хорошее решение, спасибо что познакомили)
   piter3
 
15 - 21.11.17 - 11:53
(14) На самом деле если поискать то их достаточно много
   perester
 
16 - 21.11.17 - 12:01
лучше прикупить сервер ккм на известном сайте или сервер фр у поставщиков драйверов на кассы
   opus70
 
17 - 21.11.17 - 12:23
купите два кассовых с LAN интерфейсом типа атол 55 или аналогичный штрих и все ваши проблемы
   LienXo
 
18 - 21.11.17 - 16:54
Если Фры не онлайн - пробросить порты по РДП, онлайн - зацепить через ТСР сокет. Только не забывать отключать после пробития чека.
   PQT
 
19 - 22.11.17 - 07:35
(17) о! точно, я и забыл про лан интерфейсы, они у нас как раз имеются в ФР (Атол 22-ПТК), но еще не пробовал)
   PQT
 
20 - 22.11.17 - 07:38
но сегодня пришла другая идея, поочередно подключаться к ФР при пробитии чека, и отключаться. Ну а если подключение будет одновременным, то делать пару секундную задержку. Задам глупый вопрос, но он меня тревожит:
Не влияет ли подключение/отключение при каждом пробитии чека на износ ФР?
   lodger
 
21 - 22.11.17 - 08:10
(20) идея имеет право жить.
сделать циклическое повторение попыток при недоступности порта с прерыванием пользователем (мало ли что).
нет не влияет. какая ему разница?
   PQT
 
22 - 23.11.17 - 06:41
(21) в процессе реализации идеи с повторением попыток, пришла альтернативная (используя таймаут метода):
Если глФР.DeviceEnabled = 0 Тогда
    ~ещеРаз:
    глФР.DeviceEnabled = 1;
    Если глФР.DeviceEnabled = 0 Тогда
        Если Вопрос("ФР занят, ждем...", РежимДиалогаВопрос.ОКОтмена, 1) = КодВозвратаДиалога.Отмена Тогда
            Возврат;
        КонецЕсли;
        Перейти ~ещеРаз;
    КонецЕсли;
КонецЕсли;
   PQT
 
23 - 23.11.17 - 06:43
2 одновременно работающих фискальника заморачивают изза открытия ящика:

    ПараметрыКассовогоРегистратора = КэшПараметров.КассовыеРегистраторы.Получить(К.Организация);
    Если КэшПараметров.РазделятьЧеки Тогда
        Если глФР.CurrentDeviceNumber = КэшПараметров.ДенежныйЯщикПодключенКУстройству и Не КэшПараметров.НеОткрыватьЯщик Тогда
            Если глФР.DeviceEnabled = 0 Тогда
                ~ещеРаз:
                глФР.DeviceEnabled = 1;
                Если глФР.DeviceEnabled = 0 Тогда
                    Если Вопрос("ФР занят, ждем...", РежимДиалогаВопрос.ОКОтмена,1) = КодВозвратаДиалога.Отмена Тогда
                        Возврат;
                    КонецЕсли;
                    Перейти ~ещеРаз;
                КонецЕсли;
            КонецЕсли;
            ОткрытьЯщик(глФР, НужноОткрытьЯщик);
        КонецЕсли; НужноОткрытьЯщик = Ложь;
        Если глФР.CurrentDeviceNumber <> ПараметрыКассовогоРегистратора.НомерУстройства Тогда
            глФР.CurrentDeviceNumber = ПараметрыКассовогоРегистратора.НомерУстройства;
            глФР.DeviceEnabled = 1;// занимаем порт

            ОткрытьЯщик(глФР, НужноОткрытьЯщик);
        КонецЕсли;
    Иначе
        Если КэшПараметров.ПодключатьФРТолькоПриПечатиЧека Тогда
            глФР.DeviceEnabled = 1;
        КонецЕсли;
        ОткрытьЯщик(глФР, НужноОткрытьЯщик);
    КонецЕсли;


а можно ли создать два объекта Новый("AddIn.FprnM45"); и к ним обращаться напрямую?, переключаться с одного на другой
   PQT
 
24 - 23.11.17 - 06:45
...чтобы переключаться с одного на другой.

а то весь этот кусок посвящен открытию денежного ящика
   Галахад
 
25 - 23.11.17 - 06:51
Гм. А типовыми средствами не проще было реализовать? Зачем напрямую к драйверу?
   PQT
 
26 - 23.11.17 - 07:00
(25) Ситуацию затрудняет еще одно усложнение - подключено два ФР, один для одного ИП, другой для второго.
С обоими ФР будут работать два пользовательских сеанса.
Я ящиком приходится заморачиваться изза того, что он подключен к одному из ФР, поэтому приходится проверять - к текущему ли устройству подключен денежный ящик, и если нет, то переключаться на второй > открывать ящик > переключаться назад
   PQT
 
27 - 23.11.17 - 07:06
Выглядит это так перед выводом чека:
    ПараметрыКассовогоРегистратора = КэшПараметров.КассовыеРегистраторы.Получить(К.Организация);
    Если КэшПараметров.РазделятьЧеки Тогда
        Если глФР.CurrentDeviceNumber = КэшПараметров.ДенежныйЯщикПодключенКУстройству и Не КэшПараметров.НеОткрыватьЯщик Тогда
            ЗанятьФР(глФР);
            ОткрытьЯщик(глФР, НужноОткрытьЯщик);
        КонецЕсли; НужноОткрытьЯщик = Ложь;
        Если глФР.CurrentDeviceNumber <> ПараметрыКассовогоРегистратора.НомерУстройства Тогда
            глФР.DeviceEnabled = 0;
            глФР.CurrentDeviceNumber = ПараметрыКассовогоРегистратора.НомерУстройства;
            ЗанятьФР(глФР);
            ОткрытьЯщик(глФР, НужноОткрытьЯщик);
        КонецЕсли;
    Иначе
        Если КэшПараметров.ПодключатьФРТолькоПриПечатиЧека Тогда
            ЗанятьФР(глФР);
        КонецЕсли;
        ОткрытьЯщик(глФР, НужноОткрытьЯщик);
    КонецЕсли;




и после печати чека:
    Если НужноОткрытьЯщик и Не КэшПараметров.НеОткрыватьЯщик Тогда
        Если глФР.CurrentDeviceNumber <> КэшПараметров.ДенежныйЯщикПодключенКУстройству Тогда
            Если КэшПараметров.ПодключатьФРТолькоПриПечатиЧека Тогда
                глФР.DeviceEnabled = 0;// Освобождаем

            КонецЕсли;
            глФР.CurrentDeviceNumber = КэшПараметров.ДенежныйЯщикПодключенКУстройству;
        КонецЕсли;
        ЗанятьФР(глФР);
        ОткрытьЯщик(глФР, НужноОткрытьЯщик);
    КонецЕсли;
    Если КэшПараметров.ПодключатьФРТолькоПриПечатиЧека Тогда
        глФР.DeviceEnabled = 0;
    КонецЕсли;
   PQT
 
28 - 23.11.17 - 07:07
но думаю нужно переписать все созданием двух объектов AddIn.FprnM45, если такое возможно
   mingw
 
29 - 23.11.17 - 09:18
Бюджет какой? Для готового.
   mingw
 
31 - 23.11.17 - 09:49
(30) Почему никто не задается вопросом: "Как печатать с двух компов на один принтер?"
   Сияющий в темноте
 
32 - 23.11.17 - 10:48
фр-ы какие?
настроить через тсп ип
чтобы кпждый пробивал сам
а все идеи с проверкой-в лес
   Галахад
 
33 - 23.11.17 - 11:22
(22) Вообще-то, в типовых так и сделано. Торговое подключается при открытии формы и отключается при закрытии.
 
 
   Torquader
 
34 - 23.11.17 - 12:09
(33) Это легко переписывается - создаём объект драйвера при подключении к форме, а подключаем само оборудование, когда уже нужно с ним работать.
   Галахад
 
35 - 23.11.17 - 12:14
(34) Я знаю. В (33) я хотел сказать, что частое подключение и отключение это нормально.
   Torquader
 
36 - 23.11.17 - 12:23
(35) У Атол-а для этого метод DeviceEnabled и был придуман, а идея использования логических устройств - тоже для того, чтобы все настройки записать заранее, а далее, просто переключать.
   PQT
 
37 - 23.11.17 - 13:02
фух, весь день нетерпелось проверить тот код) дождался таки завершения работы магазина).. проверил - все работает, всем спасибо.
Если кому-то начинающим понадобится раздваивание чеков по ИПшникам (по отделам магазина):
Функция РазделитьЧекПоОрганизациям() Экспорт
    Если Не КэшПараметров.РазделятьЧеки Тогда
        Возврат Истина;
    КонецЕсли;
    Записать();
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ЧекТовары.НомерСтроки,
                   |    ЧекТовары.Товар.Вид.РеализацияС КАК РеализацияС
                   |ИЗ
                   |    Документ.Чек.Товары КАК ЧекТовары
                   |ГДЕ
                   |    ЧекТовары.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка", ЭтотОбъект.Ссылка);
    СтрокиПоОрганизациям = Запрос.Выполнить().Выгрузить();
    Для каждого Стр Из СтрокиПоОрганизациям Цикл
        Если Стр.РеализацияС = Null или Стр.РеализацияС = Неопределено или Стр.РеализацияС.Пустая() Тогда
            Стр.РеализацияС = УмолчанияПользователя.РозничнаяОрганизация;
        КонецЕсли;
        Если Стр.РеализацияС <> Организация Тогда
            ОрганизацияВторогоЧека = Стр.РеализацияС;
        КонецЕсли;
    КонецЦикла;
    ИспОрганизации = Новый Массив;
    ЧастоИспользуемые.ЗаполнитьМассивУникальнымиЗначениями(ИспОрганизации, СтрокиПоОрганизациям.ВыгрузитьКолонку("РеализацияС"));
    
    Если ИспОрганизации.Количество() = 1 Тогда
        Если Организация = ИспОрганизации[0] Тогда
            Возврат Истина;
        Иначе
            Организация = ИспОрганизации[0];
            глПриСменеОрганизации(ЭтотОбъект,,, Ложь);
        КонецЕсли;
    ИначеЕсли ИспОрганизации.Количество() = 2 Тогда
        //************* в чеке товар с двух организаций, значит будем раздваивать ************

        Чек2 = Документы.Чек.СоздатьДокумент();
        СтрокиПереносим = Новый Массив;
        Для Каждого СТр из СтрокиПоОрганизациям Цикл
            Если СТр.РеализацияС <> Организация Тогда
                СтрокаДока = Товары[СТр.НомерСтроки-1];
                СтрокиПереносим.Добавить(СтрокаДока);
                ЗаполнитьЗначенияСвойств(Чек2.Товары.Добавить(),СтрокаДока);
            КонецЕсли;
        КонецЦикла;
        ЗаполнитьЗначенияСвойств(Чек2,ЭтотОбъект);
        Чек2.Организация = ОрганизацияВторогоЧека;
        глПриСменеОрганизации(Чек2,,, Ложь);
        Чек2.КассовыйРегистратор = КэшПараметров.КассовыеРегистраторы[ОрганизацияВторогоЧека].КассовыйРегистратор;
        
        НачатьТранзакцию();
        РасчетЧека2 = Чек2.Товары.Итог("Всего");
        РасчетЧека1 = ЭтотОбъект.Товары.Итог("Всего") - РасчетЧека2;
        Для каждого СтрОплаты Из ЭтотОбъект.Оплата Цикл
            Было = СтрОплаты.Получено;
            СтрОплаты.Получено = Мин(РасчетЧека1,Было);
            Было = Было - СтрОплаты.Получено;
            Если РасчетЧека1 > 0 Тогда
                РасчетЧека1 = РасчетЧека1 - СтрОплаты.Получено;
            КонецЕсли;
            Если РасчетЧека2 > 0 и Было > 0 Тогда
                НовОплата = Чек2.Оплата.Добавить();
                ЗаполнитьЗначенияСвойств(НовОплата,СтрОплаты);
                НовОплата.Получено = Мин(РасчетЧека2,Было);
                РасчетЧека2 = РасчетЧека2 - НовОплата.Получено;
            КонецЕсли;
        КонецЦикла;
        
        Чек2.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
        Отказ = Ложь;
        СерверТО.ПечатьЧекаФР(Чек2, "ПробитьЧек", "Чек", Отказ);
        Если Отказ Тогда
        //    ОтменитьТранзакцию();

        Иначе
            Чек2.ЧекПробитККМ = 1;
            Чек2.Записать(РежимЗаписиДокумента.Запись);
        КонецЕсли;
        Для каждого Стр Из СтрокиПереносим Цикл
            Товары.Удалить(Стр);
        КонецЦикла;
        Записать();
        ЗафиксироватьТранзакцию();
    КонецЕсли;
    Возврат Истина;
КонецФункции
   mingw
 
38 - 23.11.17 - 13:04
Очередь печати нужна.

(37) Попробуй одновременно с двух мест на один фр. Что будет?
   PQT
 
39 - 24.11.17 - 07:17
(38) тут (22) после того как не получилось занять порт, выводится на одну секунду вопрос-сообщение "ФР занят, ждем...". Получается красиво - он будто мигает).. и пользователь может остановить печать чека нажатием "отмена".
   PQT
 
40 - 24.11.17 - 07:18
(39) мигает, потомучто "Вопрос" выводится через каждую секунду, пока не освободится ФР, либо пользователь не отменит
   Otark
 
41 - 24.11.17 - 07:53
Если конфа самописная нет заморочек с кассовыми сменами и еще у вас и атол то, что вам мешает просто подключить по сети атол? то есть как-то вот так: http://catalog.mista.ru/public/537905/


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует