возникла ошибка неизвестный код транзакции receivenoticesendconfirmation

Не удалось распаковать пакет электронных документов. Не настроена связь с контрагентом

возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. %D0%A0%D0%B8%D1%81.%201. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation фото. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation-%D0%A0%D0%B8%D1%81.%201. картинка возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. картинка %D0%A0%D0%B8%D1%81.%201. Данная ошибка возникает в Текущих делах ЭДО при нажатии "Отправить и получить" и свидетельствует о том, что в папке "Распаковать" имеются пакеты электронных документов, автоматическая распаковка которых не была произведена из-за того, что настройка получения электронных документов находится не в состоянии "Присоединен" или отсутствует вовсе.

Данная ошибка возникает в Текущих делах ЭДО при нажатии «Отправить и получить» и свидетельствует о том, что в папке «Распаковать» имеются пакеты электронных документов, автоматическая распаковка которых не была произведена из-за того, что настройка получения электронных документов находится не в состоянии «Присоединен» или отсутствует вовсе.

возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. %D0%A0%D0%B8%D1%81.%202. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation фото. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation-%D0%A0%D0%B8%D1%81.%202. картинка возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. картинка %D0%A0%D0%B8%D1%81.%202. Данная ошибка возникает в Текущих делах ЭДО при нажатии "Отправить и получить" и свидетельствует о том, что в папке "Распаковать" имеются пакеты электронных документов, автоматическая распаковка которых не была произведена из-за того, что настройка получения электронных документов находится не в состоянии "Присоединен" или отсутствует вовсе.

Открыв соответствующий пакет электронных документов можно убедиться, что отсутствуют обязательные поля, необходимые для распаковки пакета и последующего корректного принятия к учету (идентификатор получателя, идентификатор отправителя, контрагент). Для заполнения этих полей в некоторых случаях необходимо наличие в информационной базе приглашения между участниками ЭДО по данному документу в статусе «Присоединен».

возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. %D0%A0%D0%B8%D1%81.%203. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation фото. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation-%D0%A0%D0%B8%D1%81.%203. картинка возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. картинка %D0%A0%D0%B8%D1%81.%203. Данная ошибка возникает в Текущих делах ЭДО при нажатии "Отправить и получить" и свидетельствует о том, что в папке "Распаковать" имеются пакеты электронных документов, автоматическая распаковка которых не была произведена из-за того, что настройка получения электронных документов находится не в состоянии "Присоединен" или отсутствует вовсе.

Решение: Необходимо дождаться перевода приглашения в статус «Присоединен». После этого необходимые для распаковки данные автоматический будут заполнены, и пакет будет успешно распакован.

Отслеживать статус приглашения можно либо в настройке получения электронных документов по этому контрагенту, либо на вкладке «Приглашения» Архива ЭДО.

Если статус не меняется длительное время, это может быть вызвано наличием проблем при настройке роуминговой связи. Для решения вопроса в этом случае необходимо обратиться в техническую поддержку 1С-ЭДО.

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

возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. %D0%A0%D0%B8%D1%81.%204. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation фото. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation-%D0%A0%D0%B8%D1%81.%204. картинка возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. картинка %D0%A0%D0%B8%D1%81.%204. Данная ошибка возникает в Текущих делах ЭДО при нажатии "Отправить и получить" и свидетельствует о том, что в папке "Распаковать" имеются пакеты электронных документов, автоматическая распаковка которых не была произведена из-за того, что настройка получения электронных документов находится не в состоянии "Присоединен" или отсутствует вовсе.

Для этого необходимо перейти в справочник «Организации», нажать «ЭДО – Учетные записи».

возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. %D0%A0%D0%B8%D1%81.%205. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation фото. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation-%D0%A0%D0%B8%D1%81.%205. картинка возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. картинка %D0%A0%D0%B8%D1%81.%205. Данная ошибка возникает в Текущих делах ЭДО при нажатии "Отправить и получить" и свидетельствует о том, что в папке "Распаковать" имеются пакеты электронных документов, автоматическая распаковка которых не была произведена из-за того, что настройка получения электронных документов находится не в состоянии "Присоединен" или отсутствует вовсе.

Двойным нажатием мыши открыть соответствующую Учетную запись ЭДО.

возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. %D0%A0%D0%B8%D1%81.%206. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation фото. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation-%D0%A0%D0%B8%D1%81.%206. картинка возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. картинка %D0%A0%D0%B8%D1%81.%206. Данная ошибка возникает в Текущих делах ЭДО при нажатии "Отправить и получить" и свидетельствует о том, что в папке "Распаковать" имеются пакеты электронных документов, автоматическая распаковка которых не была произведена из-за того, что настройка получения электронных документов находится не в состоянии "Присоединен" или отсутствует вовсе.

В открывшемся окне нажать «Ещё» и выбрать «Начальные даты запроса данных у оператора ЭДО».

возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. %D0%A0%D0%B8%D1%81.%207. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation фото. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation-%D0%A0%D0%B8%D1%81.%207. картинка возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. картинка %D0%A0%D0%B8%D1%81.%207. Данная ошибка возникает в Текущих делах ЭДО при нажатии "Отправить и получить" и свидетельствует о том, что в папке "Распаковать" имеются пакеты электронных документов, автоматическая распаковка которых не была произведена из-за того, что настройка получения электронных документов находится не в состоянии "Присоединен" или отсутствует вовсе.

Начальную дату запроса приглашений у оператора ЭДО необходимо очисть, после чего нажать «Записать и закрыть». Затем вернуться в раздел Текущие дела ЭДО и нажать «Отправить и получить».

С сервера оператора ЭДО в информационную базу будут загружены отсутствующие настройки, и документ успешно распакуется.

Источник

В данной транзакции уже происходили ошибки 1С 8.3 как исправить?

Программа 1С является самой популярной и наиболее удобной при автоматизации предприятия. В ней предусмотрены решения, созданные на базе одной платформы, соответственно, функционируют они по одному принципу, что значительно упрощает использование ПО. Нередко пользователи сталкиваются с сообщением «В данной транзакции уже происходили ошибки». Рассмотрим как в 1С 8.3 исправить подобную проблему.

возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. Ashampoo Snap Thursday March 18 2021 01h37m58s 008. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation фото. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation-Ashampoo Snap Thursday March 18 2021 01h37m58s 008. картинка возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. картинка Ashampoo Snap Thursday March 18 2021 01h37m58s 008. Данная ошибка возникает в Текущих делах ЭДО при нажатии "Отправить и получить" и свидетельствует о том, что в папке "Распаковать" имеются пакеты электронных документов, автоматическая распаковка которых не была произведена из-за того, что настройка получения электронных документов находится не в состоянии "Присоединен" или отсутствует вовсе.

Причина появления сообщения о повторных ошибках в 1С 8.3

Главная проблема заключается в том, что сообщение об ошибке «В данной транзакции уже происходили ошибки» неинформативно, нет никакой конкретики. Поэтому будем опираться на проблемы, с которыми чаще всего сталкиваются пользователи. Например, с технической стороны ошибка такого рода может возникнуть при первой транзакции, то есть и при первичном обращении к базе данных.

возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. Ashampoo Snap Thursday March 18 2021 01h35m24s 007. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation фото. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation-Ashampoo Snap Thursday March 18 2021 01h35m24s 007. картинка возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. картинка Ashampoo Snap Thursday March 18 2021 01h35m24s 007. Данная ошибка возникает в Текущих делах ЭДО при нажатии "Отправить и получить" и свидетельствует о том, что в папке "Распаковать" имеются пакеты электронных документов, автоматическая распаковка которых не была произведена из-за того, что настройка получения электронных документов находится не в состоянии "Присоединен" или отсутствует вовсе.

Подобная ошибка может произойти при обработки ситуации «Попытка-Исключение». Например, при создании записи «Объект_1» формируется исключительная ситуация, а сама ошибка появляется в «Ссылка_2.Наименование». То есть происходит запрос базы данных объектной модели.

В «Попытке-Исключение» начинается обработка операции, которая также должна быть выполнена в транзакции, которая, в свою очередь, может быть явной или неявной (создается в момент записи объекта).

1С: Предприятие 8.3 не поддерживает транзакций вложенного типа. Однако допускается создание вложенной конструкции сразу нескольких транзакций. Из-за наличия явной и неявной транзакции может возникнуть ошибка. То-есть программа запрещает транзакцию 1-го уровня на более низших уровнях.

Есть ли смысл исправлять ошибки транзакции, которые уже происходили

При работе с 1С 8.3 не стоит оставлять подобные вещи без внимания. Прежде всего, другой пользователь также может столкнуться с ней, но не поймет причин её возникновения. Если не выполнить отладку системы, то в дальнейшем могут возникнуть дополнительные проблемы. Так как оповещение «В данной транзакции уже происходили ошибки» появляется при первом обращении, то в журнале регистрации данная строка обязательно зафиксируется, но, опять же, без подробного пояснения. Хоть ошибка и располагается на нижнем уровне кода, она нарушит необходимую иерархию. Это приведет к сбою других функций и только еще больше запутает администратора.

При наличие некорректного кода, транзакции будут выполняться с нарушениями или не будут выполняться вовсе. Поэтому при возникновении таких сообщений стоит решить проблему.

Устраняем ошибку транзакции в 1С Предприятие версии 8.3

В первую очередь стоит очистить кэш базы данных. Сделать это можно вручную. Для этого:

Также можно выполнить удаление другим способом:

возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. Ashampoo Snap Thursday March 18 2021 01h16m05s 004. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation фото. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation-Ashampoo Snap Thursday March 18 2021 01h16m05s 004. картинка возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. картинка Ashampoo Snap Thursday March 18 2021 01h16m05s 004. Данная ошибка возникает в Текущих делах ЭДО при нажатии "Отправить и получить" и свидетельствует о том, что в папке "Распаковать" имеются пакеты электронных документов, автоматическая распаковка которых не была произведена из-за того, что настройка получения электронных документов находится не в состоянии "Присоединен" или отсутствует вовсе.

После того, как файл преобразуется, его можно запустить и весь пользовательский кэш удалится автоматически. Пробуем снова запустить программу и выполнить операцию. Если не помогло, то лучше всего обратиться к администратору. Также нужно помнить про основные особенности написания кода с использованием транзакций. Это поможет исключить ряд распространенных ошибок.

Особенности написания кода, которые помогут исключить ошибку в транзакциях

Прежде всего нужно опираться на нюансы корректной обработки исключений:

Решить проблему транзакций, в которых происходят ошибки, самостоятельно получается не всегда. Поэтому стоит попробовать выполнить простейшие действия – перезагрузить программу или очистить кэш. К более серьезным манипуляциям в 1С стоит переходить только при уверенности, что вы обладаете достаточным опытом.

Источник

Вы не умеете работать с транзакциями

возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. image loader. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation фото. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation-image loader. картинка возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. картинка image loader. Данная ошибка возникает в Текущих делах ЭДО при нажатии "Отправить и получить" и свидетельствует о том, что в папке "Распаковать" имеются пакеты электронных документов, автоматическая распаковка которых не была произведена из-за того, что настройка получения электронных документов находится не в состоянии "Присоединен" или отсутствует вовсе.

Заголовок вышел броским, но накипело. Сразу скажу, что речь пойдет об 1С. Дорогие 1С-ники, вы не умеете работать с транзакциями и не понимаете что такое исключения. К такому выводу я пришел, просматривая большое количество кода на 1С, рождаемого в дебрях отечественного энтерпрайза. В типовых конфигурациях с этим все достаточно хорошо, но ужасающее количество заказного кода написано некомпетентно с точки зрения работы с базой данных. Вы когда-нибудь видели у себя ошибку «В данной транзакции уже происходили ошибки»? Если да — то заголовок статьи относится и к вам. Давайте под катом разберемся, наконец, что такое транзакции и как правильно с ними обращаться, работая с 1С.

Почему надо бить тревогу

Для начала, давайте разберемся, что же такое представляет собой ошибка «В данной транзакции уже происходили ошибки». Это, на самом деле, предельно простая штука: вы пытаетесь работать с базой данных внутри уже откаченной (отмененной) транзакции. Например, где-то был вызван метод ОтменитьТранзакцию, а вы пытаетесь ее зафиксировать.

Почему это плохо? Потому что данная ошибка ничего не говорит вам о том, где на самом деле случилась проблема. Когда в саппорт от пользователя приходит скриншот с таким текстом, а в особенности для серверного кода, с которым интерактивно не работает человек — это… Хотел написать «критичная ошибка», но подумал, что это buzzword, на который уже никто не обращает внимания…. Это задница. Это ошибка программирования. Это не случайный сбой. Это косяк, который надо немедленно переделывать. Потому что, когда у вас фоновые процессы сервера встанут ночью и компания начнет стремительно терять деньги, то «В данной транзакции уже происходили ошибки» это последнее, что вы захотите увидеть в диагностических логах.

Есть, конечно, вероятность, что технологический журнал сервера (он ведь у вас включен в продакшене, да?) как-то поможет диагностировать проблему, но я сейчас навскидку не могу придумать вариант — как именно в нем найти реальную причину указанной ошибки. А реальная причина одна — программист Вася получил исключение внутри транзакции и решил, что один раз — не карабас «подумаешь, ошибка, пойдем дальше».

Что такое транзакции в 1С

Неловко писать про азбучные истины, но, видимо, немножго придется. Транзакции в 1С — это то же самое, что транзакции в СУБД. Это не какие-то особенные «1С-ные» транзакции, это и есть транзакции в СУБД. Согласно общей идее транзакций, они могут либо выполниться целиком, либо не выполниться совсем. Все изменения в таблицах базы данных, выполненные внутри транзакции, могут быть разом отменены, как будто ничего не было.

Далее, нужно понимать, что в 1С не поддерживаются вложенные транзакции. Собственно говоря, они не поддерживаются не «в 1С», а вообще не поддерживаются. По-крайней мере, теми СУБД, с которыми умеет работать 1С. Вложенных транзакций, например, нет в MS SQL и Postgres. Каждый «вложенный» вызов НачатьТранзакцию просто увеличивает счетчик транзакций, а каждый вызов «ЗафиксироватьТранзакцию» — уменьшает этот счетчик. Данное поведение описано в множестве книжек и статей, но выводы из этого поведения, видимо, разобраны недостаточно. Строго говоря, в SQL есть т.н. SAVEPOINT, но 1С их не использует, да и вещь это достаточно специфичная.

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

На самом деле, нет. Мне совершенно не хочется дублировать примеры на английском только ради того, чтобы потешить любителей холиваров и священных войн.

Вы же наверняка пишете такой код, да? Приведенный пример кода содержит ошибки. Как минимум, три. Знаете какие? Про первую я скажу сразу, она связана с объектными блокировками и не имеет отношения непосредственно к транзакциям. Про вторую — чуть позже. Третья ошибка — это deadlock, который возникнет при параллельном исполнении этого кода, но это тема для отдельной статьи, ее рассматривать сейчас не будем, дабы не усложнять код. Ключевое слово для гугления: deadlock управляемые блокировки.

Обратите внимание, простой ведь код. Такого в ваших 1С-системах просто вагон. И он содержит сразу, как минимум, 3 ошибки. Задумайтесь на досуге, сколько ошибок есть в более сложных сценариях работы с транзакциями, написанных вашими программистами 1С 🙂

Объектные блокировки

Суть проблемы в том, что в указанном примере кода изменяется объект базы данных, но в другом сеансе может сидеть интерактивный пользователь (или соседний фоновый поток), который тоже будет менять этот объект. Здесь один из вас может получить ошибку «запись была изменена или удалена». Если это произойдет в интерактивном сеансе, то пользователь почешет репу, ругнется и попробует переоткрыть форму. Если это произойдет в фоновом потоке, то вам придется искать это в логах. А журнал регистрации, как вы знаете, медленный, а ELK-стек для журналов 1С у нас в отрасли настраивают единицы… (мы, к слову, входим в число тех, кто настраивает и другим помогает настраивать :))

Короче говоря, это досадная ошибка и лучше, чтобы ее не было. Поэтому, в стандартах разработки четко написано, что перед изменением объектов необходимо ставить на них объектную блокировку методом «ОбъектСправочника.Заблокировать()«. Тогда параллельный сеанс (который тоже должен так поступить) не сможет начать операцию изменения и получит ожидаемый, управляемый отказ.

А теперь про транзакции

С первой ошибкой разобрались, давайте перейдем ко второй.

Если не предусмотреть проверку исключения в этом методе, то исключение (например, весьма вероятное на методе «Записать()») выбросит вас из данного метода без завершения транзакции. Исключение из метода «Записать» может быть выброшено по самым разным причинам, например, сработают какие-то прикладные проверки в бизнес-логике, или возникнет упомянутая выше объектная блокировка. Так или иначе, вторая ошибка гласит: код, начавший транзакцию, не несет ответственность за ее завершение.

возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. image loader. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation фото. возникла ошибка неизвестный код транзакции receivenoticesendconfirmation-image loader. картинка возникла ошибка неизвестный код транзакции receivenoticesendconfirmation. картинка image loader. Данная ошибка возникает в Текущих делах ЭДО при нажатии "Отправить и получить" и свидетельствует о том, что в папке "Распаковать" имеются пакеты электронных документов, автоматическая распаковка которых не была произведена из-за того, что настройка получения электронных документов находится не в состоянии "Присоединен" или отсутствует вовсе.

Именно так я бы назвал эту проблему. В нашем статическом анализаторе кода 1С на базе SonarQube мы даже отдельно встроили такую диагностику. Сейчас я работаю над ее развитием, и фантазия программистов 1С, чей код попадает ко мне на анализ, порой приводит меня в шок и трепет…

Почему? Потому что выброшенное наверх исключение внутри транзакции в 90% случаев не даст эту транзакцию зафиксировать и приведет к ошибке. Следует понимать, что 1С автоматически откатывает незавершенную транзакцию только после возвращения из скриптового кода на уровень кода платформы. До тех пор, пока вы находитесь на уровне кода 1С, транзакция остается активной.

Поднимемся на уровень выше по стеку вызовов:

Смотрите, что получается. Наш проблемный метод вызывается откуда-то извне, выше по стеку. На уровне этого метода разработчик понятия не имеет — будут ли какие-то транзакции внутри метода ОченьПолезныйИВажныйКод или их не будет. А если будут — то будут ли они все завершены… Мы же все тут за мир и инкапсуляцию, верно? Автор метода «ВажныйКод» не должен думать про то, что именно происходит внутри вызываемого им метода. Того самого, в котором некорректно обрабатывается транзакция. В итоге, попытка поработать с базой данных после выброса исключения изнутри транзакции, с высокой вероятностью приведет к тому, что «В данной транзакции бла-бла…»

Размазывание транзакций по методам

Второе правило «транзакционно-безопасного» кода: счетчик ссылок транзакций в начале метода и в его конце должен иметь одно и то же значение. Нельзя начинать транзакцию в одном методе и завершать ее в другом. Из этого правила, наверное, можно найти исключения, но это будет какой-то низкоуровневый код, который пишут более компетентные люди. В общем случае так писать нельзя.

Выше — неприемлемый говнокод. Нельзя писать методы так, чтобы вызывающая сторона помнила и следила за возможными (или вероятными — как знать) транзакциями внутри других методов, которые она вызывает. Это нарушение инкапсуляции и разрастание спагетти-кода, который невозможно трассировать, сохраняя рассудок.

Особенно весело вспомнить, что реальный код намного больше синтетических примеров из 3-х строчек. Выискивать начинающиеся и завершающиеся транзакции по шести уровням вложенности — это прям мотивирует на задушевные беседы с авторами.

Пытаемся исправить код

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

Первый подход типичного 1С-ника

Обычно программисты 1С знают, что при записи может быть выдано исключение. А еще они боятся исключений, поэтому стараются их все перехватывать. Например, вот так:

Ну как, стало лучше, да? Ведь теперь, возможные ошибки записи обрабатываются и даже логируются. Исключения больше не возникнут при записи объекта. И в логе даже видно — на каком объекте, не поленился, вывел в сообщение ссылку вместо лаконичного «Ошибка записи справочника», как это часто любят писать вечно торопящиеся разработчики. Иными словами, налицо забота о пользователе и рост компетенций.

Однако, опытный 1С-ник здесь скажет, что нет, лучше не стало. По сути ничего не поменялось, а может даже стало и хуже. В методе «Записать()» платформа 1С сама начнет транзакцию записи, и эта транзакция будет уже вложенной по отношению к нашей. И если в момент работы с базой данных 1С свою транзакцию откатит (например, будет выдано исключение бизнес-логики), то наша транзакция верхнего уровня все равно будет помечена как «испорченная» и ее нельзя будет зафиксировать. В итоге этот код так и останется проблемным, и при попытке фиксации выдаст «уже происходили ошибки».

А теперь представьте, что речь идет не о маленьком методе, а о глубоком стеке вызовов, где в самом низу кто-то взял и «выпустил» начатую транзакцию из своего метода. Верхнеуровневые процедуры могут и понятия не иметь, что кто-то там внизу начинал транзакции. В итоге, весь код валится с невнятной ошибкой, которую расследовать невозможно в принципе.

Код, который начинает транзакцию, обязан завершить или откатить ее. Не взирая ни на какие исключения. Каждая ветка кода должна быть исследована на предмет выхода из метода без фиксации или отмены транзакции.

Методы работы с транзакциями в 1С

Не будет лишним напомнить, что вообще 1С предоставляет нам для работы с транзакциями. Это всем известные методы:

Первые 3 метода очевидны и делают то, что написано в их названии. Последний метод — возвращает Истину, если счетчик транзакций больше нуля.

И есть интересная особенность. Методы выхода из транзакции (Зафиксировать и Отменить) выбрасывают исключения, если счетчик транзакций равен нулю. То есть, если вызвать один из них вне транзакции, то возникнет ошибка.

Как правильно пользоваться этими методами? Очень просто: надо прочитать сформулированное выше правило: код, начавший транзакцию, должен нести ответственность за ее завершение.

Как же соблюсти это правило? Давайте попробуем:

Выше мы уже поняли, что метод ДелаемЧтоТо — потенциально опасен. Он может выдать какое-то исключение, и транзакция «вылезет» наружу из нашего метода. Окей, добавим обработчик возможного исключения:

Отлично, мы поймали возникающую ошибку, но что с ней делать? Записать сообщение в лог? Ну, может быть, если код логирования ошибок должен быть именно на этом уровне и ошибку мы тут ждем. А если нет? Если мы не ожидали тут никаких ошибок? Тогда мы должны просто передать это исключение выше, пусть с ними разбирается другой слой архитектуры. Делается это оператором «ВызватьИсключение» без аргументов. В этих ваших джава-сиплюсплюсах это делается точно так же оператором throw.

Так, стоп… Если мы просто прокидываем исключение дальше, то зачем тут вообще нужна Попытка? А вот зачем: правило заставляет нас обеспечить завершение начатой нами транзакции.

Теперь, вроде бы, красиво. Однако, мы ведь помним, что не доверяем коду ДелаемЧтоТо(). Вдруг там внутри его автор не читал этой статьи, и не умеет работать с транзакциями? Вдруг он там взял, да и вызвал метод ОтменитьТранзакцию или наоборот, зафиксировал ее? Нам очень важно, чтобы обработчик исключения не породил нового исключения, иначе исходная ошибка будет потеряна и расследование проблем станет невозможным. А мы помним, что методы Зафиксировать и Отменить могут выдать исключение, если транзакция не существует. Здесь-то и пригождается метод ТранзакцияАктивна.

Финальный вариант

Наконец, мы можем написать правильный, «транзакционно-безопасный» вариант кода. Вот он:

**UPD: в комментариях предложен более безопасный вариант, когда ЗафиксироватьТранзакцию расположен внутри блока Попытка. Здесь приведен именно этот вариант, ранее Фиксация располагалась после блока Попытка-Исключение.

Постойте, но ведь не только «ОтменитьТранзакцию» может выдавать ошибки. Почему же тогда «ЗафиксироватьТранзакцию» не обернут в такое же условие с «ТранзакцияАктивна»? Опять же, по тому же самому правилу: код, начавший транзакцию, должен нести ответственность за ее завершение. Наша транзакция необязательно самая первая, она может быть вложенной. На нашем уровне абстракции мы обязаны заботиться только о нашей транзакции. Все прочие должны быть нам неинтересны. Они чужие, мы не должны нести за них ответственность. Именно НЕ ДОЛЖНЫ. Нельзя предпринимать попыток выяснения реального уровня счетчика транзакций. Это опять нарушит инкапсуляцию и приведет к «размазыванию» логики управления транзакциями. Мы проверили активность только в обработчике исключения и только для того, чтобы убедиться, что наш обработчик не породит нового исключения, «прячущего» старое.

Чек-лист рефакторинга

Давайте рассмотрим несколько наиболее распространенных ситуаций, требующих вмешательства в код.

Паттерн:

Обернуть в «безопасную» конструкцию с Попыткой, Проверкой активности и пробросом исключения.

Паттерн:

Анализ и Рефакторинг. Автор не понимал, что делает. Начинать вложенные транзакции можно безопасно. Не нужно проверять условие, нужно просто начать вложенную транзакцию. Ниже по модулю он наверняка еще там извращается с их фиксацией. Это гарантированный геморрой.

Примерно похожий вариант:

аналогично: фиксация транзакции по условию — это странно. Почему тут условие? Что, кто-то иной мог уже зафиксировать эту транзакцию? Повод для разбирательства.

Паттерн:

Паттерн:

Данная транзакция уже не завершится в случае исключения. Нет смысла продолжать цикл. Код требуется переписать, сверяясь с исходной задачей. Дополнительно обеспечить более информативное сообщение об ошибке.

В заключение

Я, как вы уже, наверное, догадались, отношусь к людям, любящим платформу 1С и разработку на ней. К платформе, разумеется, есть претензии, особенно в среде Highload, но в общем и целом, она позволяет недорого и быстро разрабатывать очень качественные корпоративные приложения. Давая из коробки и ORM, и GUI, и веб-интерфейс, и Reporting, и много чего еще. В комментариях на Хабре обычно пишут всякое высокомерное, так вот, ребята — основная проблема 1С, как экосистемы — это не платформа и не вендор. Это слишком низкий порог вхождения, который позволяет попадать в отрасль людям, не понимающим, что такое компьютер, база данных, клиент-сервер, сеть и всякое такое. 1С сделала разработку корпоративных приложений слишком легкой. Я за 20 минут могу написать на ней учетную систему для закупок/продаж с гибкими отчетами и веб-клиентом. После этого, мне несложно подумать о себе, что и на больших масштабах можно писать примерно так же. Как-то там 1С сама все внутри сделает, не знаю как, но наверное сделает. Напишу-ка я «НачатьТранзакцию()».

И знаете — самое главное, что это прекрасно. Простота разработки в 1С позволяет моментально реализовывать бизнес-идеи и встраивать их в процессы компании. Потом всегда можно отрефакторить, главное понимать как. И если вдруг вам нужна помощь в аудите вашей «медленной 1С» — обращайтесь к специалистам по оптимизации. Она совсем не медленная.

Источник

Ошибка отправки push-уведомления из 1С на мобильное приложение 1С Android

Коллеги, прошу помощи.

С августа 2019 года перестали отправляться push-уведомления из 1С в мобильное приложение 1С (мобильная платформа 1С) на Andoid.
До этого момента всё отлично отправлялось.

Ошибка следующая :
» Ошибка при вызове метода контекста (Отправить): Отправка сообщения 1 через GCM завершилась ошибкой: Error=DeprecatedEndpoint «

Платформа 1С: 8.3.9.2170, 8.3.12.1567, 8.3.15.1534 (самая актуальная из 8.3);
Мобильная платформа 1С: 8.3.13.45, 8.3.15.59 (самая актуальная из мобильных).

Описание механизма (который работал больше года) :
1. Сторонние сервисы не используются.
2. Создан проект в firebase.google.com;
2.1 Получен номер проекта (как номер отправителя);
2.2 Получен ключ сервера (для отправки push-уведомлений);
3. В мобильном приложении 1С при каждом входе обновляется IDПодписчика.

Код отправки push-уведомления из основной базы :

Код получения IDПодписчика в мобильном приложении 1С :

В интернете обсуждений такой проблемы, связанной с 1С нет. Никто push-уведомления не использует что ли?
Есть что-то похожее на английских сайтах посвящённое разработке мобильных приложений на Андроид. Но там решения основанные на правках в самом коде приложений.

Я так понял это проблема/задача 1С? Т.е. в самой платформе нужно что-то изменить?

Просто странно, что даже на последних версиях платформы не решена проблема. И почему-то нет похожих вопросов в рунете по 1С.

Источник

Коды ошибок Visa/MasterCard/МИР

В данной статье собраны коды ошибок действующих банков-эквайеров.

Часто встречающиеся ошибки:

Код 05 – отказ эмитента без указания причины

Код 17 – отказать, отклонено пользователем карты

Код 19 – не пройдена авторизация (как правило, при непрохождении 3ds авторизации)

Код 41 – утерянная карта

Код 43 – украденная карта

Код 51 – недостаточно средств для проведения операции

Код 57 – недопустимый тип операции для данного типа карты (например, попытка оплаты в магазине по карте предназначенной только для снятия наличных)

Код 61 – превышение максимальной суммы операции или количества попыток для данной карты; превышен лимит на терминале продавца; недостаточно средств на счете продавца, в случае выплат (более точное описание смотрите ниже, исходя из обслуживающего банка)

Код 62 – заблокированная карта

Код 65 – превышение максимального количества операции для данной карты

Код 83 – ошибка сети (технические проблемы)

Код 91 – эмитент недоступен (технические проблемы на стороне банка-эмитента)

Код 96 – системная ошибка/невозможно связаться с банком, который выдал карту (требуется сверка с эквайером)

Полный список кодов ПАО « Промсвязьбанк » :

Result CodeDescriptionОписание
0ApprovedОперация прошла успешно
1Call your bankПозвоните в свой банк
3Invalid merchantНедействительный продавец
4Your card is restrictedОграничение в проведении операции на стороне эмитента
5Transaction declinedОперация отклонена без указания причины
12Invalid transactionНедействительная операция, возможно ошибки в параметрах запроса к платёжной системе
13Invalid amountНедопустимая сумма
14No such cardТакая карта не существует
15No such card/issuerНет такой карты / эмитента
20Invalid responseНеверный ответ
30Format errorОшибка в параметрах запроса к платёжной системе
41Lost cardКарта утеряна (статус установлен у эмитента)
43Stolen cardКарта украдена
51Not sufficient fundsНедостаточно средств
54Expired cardСрок действия карты истёк
55Incorrect PINНеверный PIN-код
57Not permitted to clientОперация не разрешена для клиента (как правило, о тказ приходит со стороны платёжной системы)
58Not permitted to merchantНе разрешено продавцу (заблокирован терминал)
61Exceeds amount limitСумма операции превысила допустимый лимит (также, возможен отказ от платёжной системы)
62Restricted cardЗапрещённая карта
63Security violationНарушение безопасности
65Exceeds frequency limitПревышен лимит
75PIN tries exceededПревышено количество попыток ввода PIN-кода
76Wrong PIN,tries exceededНеверный PIN-код, количество попыток превышено
82Time-out at issuerТайм-аут при соединении с эмитентом
83Transaction failedТранзакция неуспешна
86Unable to verify PINНевозможно проверить PIN-код
89Authentication failureОшибка аутентификации
91Issuer unavailableЭмитент недоступен
93Violation of lawОперация отклонена. Держателю необходимо обратиться в свой банк
95Reconcile errorВозникает, когда операция была уже проведена.
96System malfunctionСистемная ошибка \ Возможно ошибки в параметрах запроса к платёжной системе
-2Bad CGI requestНеверно сформирован запрос к платёжному шлюзу
-3No or Invalid response receivedПлатёжный шлюз вовремя не получил ответ. Статус операции при этом может быть успешным или неуспешным.
-4Server is not respondingСервер не отвечает
-5Connect failedСбой соединения
-8Error in card number fieldОшибка в поле номера карты
-9Error in card expiration date fieldВведена неверная дата срока действия карты
-10Error in amount fieldОшибка в поле суммы
-11Error in currency fieldОшибка в поле валюты
-12Error in merchant terminal fieldНекорректный запрос к платежному шлюзу
-17Access deniedОтказано в доступе (Возможно ошибка при формировании P_SIGN)
-18Error in CVC2 or CVC2 Description fieldsОшибка в поле CVC2
-19Authentication failedАутентификация прошла неуспешно (3d-secure), возможны другие причины.
-20Expired transactionВремя проведения операции превышает значение параметра TIMESTAMP
-21Duplicate transactionОтправлен повторный запрос с идентичными параметрами
70001Not sufficient fundsНедостаточно средств на счете.

Полный список кодов ПАО Банк «ФК Открытие»:

Result CodeDescriptionОписание
00ApprovedУспешная транзакция
01Refer to card issuerОбратитесь к эмитенту карты
02Refer to card issuer, special conditionОбратитесь к эмитенту карты, особое условие
03Invalid merchant or service providerНедействительный идентификатор продавца
04Pickup cardИзъять карту
05Do not honorТранзакция была отклонена эмитентом без объяснения причин
06ErrorЭмитент карты вернул ошибку без дополнительных объяснений
07Pickup card, special condition (other than lost/stolen card)Изъять карту, специальные условия
08Honor with identificationНе пройдена идентификация, проблема с идентификацией
09Request in progressВыполняется запрос
10Approved for partial amountОдобрено для частичной суммы
11Approved, VIP Approved, VIP programОдобрено для VIP, программа VIP
12Invalid transactionЗапрошенная транзакция не поддерживается или недействительна для представленного номера карты
13Invalid amountСумма превышает лимиты, установленные эмитентом для данного типа транзакции
14Invalid card (no such number)Эмитент указывает, что эта карта недействительна.
15No such issuerНомер эмитента карты недействителен
16Approved, update track 3Утверждено, обновить
17Customer cancellationОтмена клиентом
18Customer disputeОткрыт спор с клиентом
19Re-enter transactionКлиент должен повторно отправить транзакцию
20Invalid responseНеверный ответ
21No action takenНикаких действий не предпринимается. Эмитент отказался без других объяснений
22Suspected malfunctionПредполагаемая неисправность
23Unacceptable transaction feeНеприемлемая комиссия за транзакцию
24File update not supportedОбновление файла не поддерживается
25Unable to locate recordНевозможно найти запись
26Duplicate recordДублирующая запись
27File update edit errorОшибка редактирования обновления файла
28File update file lockedФайл/обновления файла заблокировано
29not usedне используется
30Format errorОшибка формата
31Bank not supportedБанк не поддерживается коммутатором
32Completed partiallyЗавершено частично
33Expired card, pick-upСрок действия карты истек
34Issuer suspects fraud, pick-up cardЭмитент карты подозревает мошенничество
35Contact acquirer, pick-upОбратиться к эмитенту карты
36Restricted card, pick-upОграничено эмитентом карты
37Call ECHO security, pick-upОбратитесь в службу безопасности
38PIN tries exceeded, pick-upКоличество попыток получения PIN-кода превышает лимиты эмитента
39No credit accountНет кредитного счета
40Function not supportedЗапрошенная функция не поддерживается
41Pickup card (lost card)Карта была утеряна
42No universal accountНет универсальной учетной записи
43Pickup card (stolen card)Карта была украдена
44No investment accountНет инвестиционного счета
4550 not usedне используется
51Not sufficient fundsНедостаточно средств на карте
52No checking accountНет текущего счета
53No savings accountНет сберегательного счета
54Expired cardСрок действия карты истек
55Incorrect PINНеправильный PIN-код держателя карты
56No card recordНет такой карты
57Transaction not permitted to cardholderОперация не разрешена держателю карты. Карта не разрешена для запрошенного типа транзакции.
58Transaction not permitted on terminalТранзакция не разрешена на терминале. Продавцу запрещен этот тип транзакции (заблокирован терминал; сработало ограничение и т.д. необходимо уточнять подробности у эквайера)
59Suspected fraudПредполагаемое мошенничество
60Contact ECHOСвязаться с службой безопасности
61Exceeds withdrawal limit
62Restricted cardКарта заблокирована
63Security violationНарушение безопасности. Карта заблокирована
64Original amount incorrectНеверная исходная сумма
65Activity count limit exceededПревышено допустимое количество ежедневных транзакций
66Call acquirer securityСвязаться со службой безопасности эквайера
67not usedне используется
68Response received too lateОтвет получен слишком поздно
6974 not usedне используется
75PIN tries exceededПревышено допустимое количество попыток ввода PIN-кода
76Invalid «to» accountНеверный счет. Дебетового счета не существует
77Invalid «from» accountНедействительный счет. Кредитный счет не существует
78Invalid account specified (general)Связанная учетная запись с номером карты недействительна или не существует
79Already reversedУже отменено
80Visa transactions: credit issuer unavailableОперации с Visa: эмитент недоступен
81PIN cryptographic error foundОбнаружена криптографическая ошибка PIN-кода
82Negative CAM, dCVV, iCVV, or CVV resultsНекорректный CAM, dCVV, iCVV или CVV
83Unable to verify PINНевозможно проверить PIN-код
84Invalid authorization life cycleПросроченная авторизация
85not usedне используется
86Cannot verify PINНевозможно проверить PIN-код
87Network UnavailableСеть недоступна
88Invalid CVC2Ошибочно введенный cvc2
89Ineligible to receive financial position informationНевозможно получить финансовую информацию
90Cut-off in progressОтключение в процессе
91Issuer or switch inoperativeБанк-эмитент недоступен
92Routing errorОшибка маршрутизации
93Violation of lawНарушение закона
94Duplicate transactionДублирующая транзакция
95Reconcile errorОшибка согласования/ошибка при расчетах с МПС/НСПК
96System malfunctionПроизошла системная ошибка
97not usedне используется
98Exceeds cash limitПревышен денежный лимит
-2Bad CGI requestЗапрос не прошел CGI-проверку
-3No or Invalid response receivedХост эквайрера (NS) не отвечает
-4Server is not respondingНет соединения с хостом эквайрера
-5Connect failedОшибка соединения с хостом эквайрера (NS) во время обработки транзакции
-6Configuration errorОшибка настройки модуля e-Gateway
-7Incorrect response from the acquirer hostНекорректный ответа хоста эквайрера (NS), например, отсутствуют
обязательные поля
-8Error in card number fieldОшибка в поле «Card number» запроса
-9Error in card expiration date fieldОшибка в поле «Card expiration date» запроса
-10Error in amount fieldОшибка в поле «Amount» запроса
-11Error in currency fieldОшибка в поле «Currency» запроса
-12Error in merchant terminal fieldОшибка в поле «Merchant ID» запроса
-13System errorIP-адрес источника транзакции (обычно IP торговца) не соответствует
ожидаемому
-14No connectionНет соединения с PIN-клавиатурой Интернет-терминала либо программа-агент
на компьютере/рабочей станции Интернет-терминала не запущена
-15Error in the «RRN» field of the requestОшибка в поле «RRN» запроса
-16Another transaction is in progress on the terminalНа терминале выполняется другая транзакция
-17The terminal is denied access to the e-Gateway moduleТерминалу отказано в доступе к модулю e-Gateway
-18Error in the «CVC2» or «CVC2 Description» field of the requestОшибка в поле «CVC2» или «CVC2 Description» запроса
-19Error in request for authentication information or authentication failedОшибка в запросе на аутентификационную информацию либо аутентификация неуспешна
-20Permissible time interval exceededПревышен допустимый временной интервал (по умолчанию – 1 час) между значением поля «Time Stamp» запроса и временем модуля e-Gateway
-21Transaction has already been completedТранзакция уже выполнена
-22Transaction contains invalid authentication informationТранзакция содержит ошибочную аутентификационную информацию
-23Error in transaction contextОшибка в контексте транзакции
-24Inconsistency in the context of a transactionНесоответствие в контексте транзакции
-25Transaction aborted by userТранзакция прервана пользователем
-26Invalid BIN of the cardНеверный BIN карты
-27Seller name errorОшибка в имени продавца
-28Error in additional dataОшибка в дополнительных данных
-29Error in authentication link (damaged or duplicated)Ошибка в ссылке аутентификации (повреждена или дублируется)
-30Transaction was rejected as fraudulentТранзакция отклонена как мошенническая
-31Transaction in progressТранзакция в процессе выполнения
-32Re-declined transactionПовторная отклоненная транзакция
-33client authentication in progressТранзакция в процессе аутентификации клиента с помощью авторизации случайной суммы или одноразового случайного кода
-34MasterCard Installment транзакция в процессе выбора пользователем способа оплаты
-35MasterCard Installment транзакция в процессе выбора пользователем способа оплаты была отклонена автоматически после превышения лимита времени на эту операцию
-36MasterCard Installment транзакция в процессе выбора пользователем способа оплаты была отклонена самим пользователем

Полный список кодов АО «Банк Русский Стандарт»:

Коды отказов платежных систем Visa, MasterCard, МИР (общее описание)

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *