Научился чистить Zoho Books

К сожалению, у ZB есть лимиты в API:

  • Paid Organization — 2500 API calls/day and 100 API calls/minute
  • Free Organization — 1000 API calls/day and 100 API calls/minute

У меня объемы документов намного больше. Приходилось выгружать порядка 100.000 документов. Понятно, что у меня нет 40 дней, чтобы все это выгрузить, да и на один документ уходит не один вызов API. Даже платно нельзя получить такой сервис, что странно.

Кроме того, после выгрузки заказчик проверял документы и если его что-то не устраивало, просил удалить и загрузить заново.

Поэтому загрузка документов была переделана на загрузку из CSV-файлов, там можно загружать довольно большие объемы. Это я не автоматизировал, а сажал оператора, который грузил файлы.

А вот удаление — удалось автоматизировать через Selenium.

Просто выбирались все документы, по 25 штук и имитировалось нажатие кнопок удаления.

Причем нужно сначала удалять оплаты инвойсов, потом сами инвойсы. Оплаты биллов, потом сами биллы. Иначе не дает.

Вот как я это делал для разных документов:

Bill
Invoice
Payment Made
Payment Receive

Код выглядит примерно так:

А вот код нажатия кнопок подтверждения:

В свое время я искал эмулятор браузера и нашел лучший на данный момент вариант — Selenium!

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментариев 10

  1. bob:

    Писать на JaveScript-е ты не умеешь. Форматирование ужас.

    В API должны быть операции для bulk выгрузки. Где-то что-то ты упустил. Обход ограничения посредством фактически создания бота могут посчитать нарушением лицензии на использование Zoho. А могут и не посчитать… В общем, надейся что твоего клиента не забанят и не впаяют лишний счет.

    • это я уже слыхал. Ссылку на API я тебе привел. Найдешь — с меня 1к рублей премии. 😉
      А уметь в джава — это форматирование?
      Я думал — результат…

  2. naf2000:

    Мне кажется Гений ничего этого сам не писал

    • Тебе кажется

    • viwayib802:

      В целом, код написан нормально, используются await-ы для работы с асинхронностью, поиск элементов по Xpath где нужны сложные выборки, let-ы для инициализации переменных (хотя лучше использовать const, если не меняешь значение переменной, т.к. const-ы работают быстрее).

      Но потом среди нормально написанного кода начинаются вкропления адового пиздеца вида if (++i == 2), инициализации переменной вида i=0, вывод в дебаг через цикл с await. И тут мы узнаем фирменный стиль нашего гения.

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

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

  3. Денис:

    Каким образом запуск js из 1С выполняешь? через HTML или есть другой способ?

    • Я не запускаю JS из 1С. Я запускаю скрипт NODE JS. Он и запускает Selenium.

      • Денис:

        Ясно, спасибо. Способов напрямую связать selenium и 1С без промежуточных скриптов я так понимаю не существует?

        • Если вы про COM, как IE.Application, то нет.
          А так по идее можно через файлы управлять. Т.е. выставил файл с командой, джава его прочитала, выложила текст с текущим HTML сайта.
          Через одно место, но некий интерактив организовать можно.

Добавить комментарий для fixin Отменить ответ

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