Имя: Пароль:
1C
1С v8
РИБ и блокировки УТ 10.3
0 nikast
 
24.09.19
14:42
Всем привет. Хотел получить совет от тех кто уже сталкивался и решал подобную проблему.
Есть РИБ на УТ 10.3 На каждом узле пробиваются чеки ККМ и соответственно создается документ. Обмен происходит 1 раз в час. И получается, что если момент пробития попадает на обмен, то чек по онлайн кассе проходит, а в 1с не записывается.
Как решить подобное ?
Код простой:
Когда пробивается Чек:
1)НовыйЧек = СоздатьЧек()
2)НомерЧека = ПробитьЧекНаККМ()
3)НовыйЧек.ЗаписатьНомер(НомерЧека)
4)НовыйЧек.Провести()
Соответственно, если чек не записался, мы лезем в офд там смотрим что было продано.
1 ДенисЧ
 
24.09.19
14:43
Проверять, идёт ли обмен. Если идёт, то ждать с пробитием чека.
Решение же очевидно
2 nikast
 
24.09.19
14:50
Ага... хорошо. Тогда такой момент, как обработать, если два сотрудники одновременно пробивают чеки, возникает ошибка транзакций, типа таблица SQL заблокирована.
3 d4rkmesa
 
гуру
24.09.19
14:53
(0) Для высокоинтенсивной работы с чеками там слишком неоптимально некоторые функции работают. От явной транзакции можно попытаться избавиться или сократить.
4 ДенисЧ
 
24.09.19
15:00
(2) Аналогично. Первый, кто начинает пробивать - поднимает флаг. Второй (флаг) его видит и идёт курить
5 Фрэнки
 
24.09.19
15:01
можно для общего развития еще здесь почитать
http://catalog.mista.ru/public/629017/
6 Fragster
 
гуру
24.09.19
15:01
пробивать чек в событии ПослеЗаписи формы
7 nikast
 
24.09.19
15:03
Да, но хочется на скорую руку как-то решить.
Вот думаю, может зациклить процедуру проведения
Пока Не проведен Цикл
    Тут проведение (но в случае ошибки, пользователи все равно будут получать модальные сообщения, а хочется чтоб без сообщений просто ждали)
КонецЦикла
8 nikast
 
24.09.19
15:04
(5) Спасибо, сейчас читну.
9 nikast
 
24.09.19
15:05
Как я понимаю, боремся с такой фигней только флагами, а дальше (сложнее) переходим к ручной блокировке.
10 Фрэнки
 
24.09.19
15:11
Начать можно с установки максимального разумного времени ожидания блокировки. Тогда сеанс просто будет висеть до момента завершения блокировки из другого сеанса.
А дальше зависит от того, а сколько параллельно кассиров в этой базе на сервере сидит и проводит? Если их только два, то подождать реально,
а если много - от получения модального окна простым повышением времени ожидания не уйдешь
11 d4rkmesa
 
гуру
24.09.19
15:13
(8) Для начала можно просто потыкать в замер производительности, там в документе между НачатьТранзакцию() и ЗафиксироватьТранзакцию() куча избыточных вызовов функций, которые в принципе не нужны или их можно закэшировать. К примеру, КассовыеСменыВызовСервера.ТекущийНомерЧека (не факт, конечно, что именно эта функция есть в вашем релизе) - не нужно вообще, т.к. ККМ сам возвращает номер чека.
12 nikast
 
24.09.19
15:17
Друзья всем спасибо за информацию!
13 d4rkmesa
 
гуру
24.09.19
15:17
Или даже вообще подумать насчет того, чтобы убрать явную транзакцию в процедуре печати чека, т.к. особого резона, на первый взгляд, в ней нет.
14 nikast
 
24.09.19
15:18
(13) Да, точно.
15 Фрэнки
 
24.09.19
15:32
Конфига уже сильно переписана?

Я бы вовсе предложил изолировать работу кассира торгового зала от проведения документов до момента синхронизации его кассы с центральной базой или с базой торговой точки.

Если товар в торговом зале покупатель обнаружил и на кассу с ним прибежал - ты ему Чек пробей и отпусти его побыстрей.
Кассиру нет никакого резона в поиске остатка товара в базе, в контроле отрицательных остатков и т.п. Проведение чека вообще лишняя процедура для кассы. Пробивать - не лишняя. Проводить - не нужно.
Записываешь все чеки непроведенными. Периодически с компа администратора торгового зала все пробитые чеки текущей смены собираются в отчет и вот тогда он уже проводится со всеми подробностями, но опять же совершенно безболезнено для обслуживания покупателей.

Самое долгое на кассе получение розничной цены номенклатуры, что в принципе никак не должно блокироваться работой администратора зала.

За исключением установки актуальных цен, что просто ставит раком всю смену, если вдруг ее не успели запустить до начала смены.
16 Фрэнки
 
24.09.19
15:36
Кассиры никогда не кричат - а у меня товара в остатках нету! НЕ бывает такого :-)

Они кричат - караул! У меня товар без цены на кассу принесли.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший