Добрый день.
Имеется конфигурация 2.2.13.12, доработанная.
Учет ведется по 2-м организациям, т.е. в РМК набивается товар по 2-м организациям, при оплате 1С их распределяет, и принимает оплаты сначала по одной, потом по другой.
Используются 2 ККТ ШтрихМ (одна подключена по виртуальному COM-порту, другая по RNDIS).
Периодически возникает ошибка "Сумма товарных позиций больше суммы оплат" во время оплаты (см. скриншот). Я дополнительно добавил вывод сравниваемых сумм, где видно, что 1С не видит полученную оплату.
Данную ошибку не получается воспроизвести. Т.е. если следом набить тот же товар, сделать те же самые действия, ошибок не будет. Ошибка плавающая. Бывает несколько раз в день. А иногда неделю может не быть, а потом появится.
У нас 2 магазина. Данная ошибка появлялась всегда только на одном. Но сегодня 1-й раз появилась на другом магазине.
На другом периодически появляется другая, тоже плавающая, но может быть связь. Там выходит сообщение "FFFFFF8h, Out of memory" (если в этот момент проверить подключение через тест драйвера, то связь есть, помогает только перезапуск 1С)
Происходит это так.
Когда товары в РМК набиты, начинается приём оплат. В основном оплачивают картами, поэтому опишу ситуацию при оплате картой. Сначала покупатель дважды платит картой (сначала по одной организации оплата, потом по другой). Распечатываются 2 слип-чека. Далее должны распечататься уже 2 кассовых чека. И вот тут происходит ошибка "Сумма товарных позиций больше суммы оплат". Оплаты по факту прошли, 2 слипа есть, а кассовых чеков нет.
В 1С сохраняется только чек по 1-й оплате.
Кассиру приходится зайти в список чеков, найти этот документ, и распечатать из него вручную кассовый чек. А 2-й чек приходится набивать заново вручную в документе ЧекККМ, а после распечатать кассовый чек из него же.
Как будто при печати уже кассового чека происходит какая-та ошибка (никаких сообщений), данные по 2-му чеку куда-то исчезают (хотя при оплате чеки должны записываться в базу, но 2-го чек нет, как не ищи), и получаем то, что получаем.
(1)
1) Найди в программе эту строку в коде.
"Сумма товарных позиций больше суммы оплат"
2) Посмотри, что выше неё, код. (по условиям, как попасть на эту строку)
3) Напиши свой лог (все параметры, структуры, ТЗ, массивы).
ЗначениеВСтрокуВнутр ЗначениеИзСтрокиВнутр Всё куда-то сохраняй. Хочешь, в журнал регистрации, хочешь в файл.
4) Когда возникнет ошибка, ты увидишь, какие параметры какое значение имеют.
У тебя бэкапы есть?
1) возникла ошибка, ура
2) делаем копию базы на время, чуть раньше на 2 минуты (умеешь восстанавливать бэкапы на любое время )
RESTORE LOG AdventureWorks
FROM AdventureWorksBackups
WITH FILE=4, NORECOVERY, STOPAT = 'Apr 15, 2025 13:18 AM';
(2) Обработка данной ошибки (проверка перед печатью чека) происходит в общем модуле ФорматноЛогическийКонтрольВызовСервера в процедуре ВыполненаПроверкаОбязательностиИПравильностиЗаполненияТэгов(Параметры, ...).
В нее уже переданы данные для печати. Получается ТЗ Параметры.ТаблицаОплат пустая.
Ошибка невоспроизводима, т.е. сейчас таблица пустая, а при точно таком же чеке (товары и пр.) таблица заполнена.
Ошибка скорее всего возникает где-то в форме РМК после принятия оплат.
Сомневаюсь, что сохранение данных может помочь, но возьму на заметку, может сделаю.
С бэкапом не получится. База файловая, 1 компьютер на магазине, поток покупателей + сами бэкапы на магазинах не делаются, только на сервере (у нас РИБ - сервер в офисе + 2 магазина).
(6)
Сделать расширение и повесить его на программу 1с,
которое будет асинхронно (или синхронно) писать в файл текстовую информацию,
отладочную, какую мы хотим собрать.
Можно, понять, это на любой номенклатуре или на некоторых падает.
Запустим Wireshark для адаптера RnDIS и посмотрим пакеты (ссылку в личку кинул)
Это уже анализ сетевого трафика, нужно быть админом и разбираться в этом.
Можно ли включить отладочную информацию для драйвера?
Может куда-то логи пишутся.