<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Арсений Жарков</title><subtitle>1C programmer and scuba diver. Retail automation. From Krasnoyarsk, Siberia.</subtitle><author><name>Арсений Жарков</name></author><id>https://teletype.in/atom/arseniizharkov</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/arseniizharkov?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.au124.ru/?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=arseniizharkov"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/arseniizharkov?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-05-10T07:31:51.272Z</updated><entry><id>arseniizharkov:EyXtXclgUJE</id><link rel="alternate" type="text/html" href="https://teletype.au124.ru/EyXtXclgUJE?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=arseniizharkov"></link><title>Несколько мыслей про внедрение ТС Пиот (в виде модуля ЕСМ от ЕСП)</title><published>2026-02-16T05:31:18.688Z</published><updated>2026-02-16T05:31:18.688Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/93/d2/93d2744a-88c2-44a0-a5ac-e77a39f6384a.png"></media:thumbnail><category term="tspiot" label="tspiot"></category><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/85/1c/851c299f-375d-4771-b8f5-638d3b57646d.png&quot;&gt;Первое (и для меня сейчас важное) - можно ли в одном магазине (или одной сети) использовать один есм на несколько кассовых программ (не фискальных регистраторов).</summary><content type="html">
  &lt;p id=&quot;7PBs&quot;&gt;Первое (и для меня сейчас важное) - можно ли в одном магазине (или одной сети) использовать один есм на несколько кассовых программ (не фискальных регистраторов). &lt;/p&gt;
  &lt;p id=&quot;1OaB&quot;&gt;Я пишу это при условии использования пиот-а (есм) с фронтолом. Другое кассовое ПО я не применяю.&lt;/p&gt;
  &lt;p id=&quot;g21r&quot;&gt;Ответ на вопрос сразу  - да, можно. Покупаем одну лицензию на есм, ставим ее в магазине на одну из касс, открываем на ней порт 51401, в настройках модуля ставим режим удаленного подключения. &lt;/p&gt;
  &lt;figure id=&quot;XmoC&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d8/7b/d87b6798-e05e-4dd8-b8a2-0afe4c270b7d.png&quot; width=&quot;554&quot; /&gt;
    &lt;figcaption&gt;настройка есм&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ZoKL&quot;&gt;Схема будет получатся примерно такая:&lt;/p&gt;
  &lt;figure id=&quot;v7Y7&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/85/1c/851c299f-375d-4771-b8f5-638d3b57646d.png&quot; width=&quot;3858&quot; /&gt;
    &lt;figcaption&gt;общая схема подключения&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;jEC2&quot;&gt;Fmu-api - это моя реализация api фму от Атола. В этом месте вполне может быть и их продукт.&lt;/p&gt;
  &lt;p id=&quot;dekf&quot;&gt;Fptr - фискальный регистратор.&lt;/p&gt;
  &lt;p id=&quot;H8bR&quot;&gt;LM - локальный модуль&lt;/p&gt;
  &lt;p id=&quot;OqsG&quot;&gt;TrueSign - честный знак.&lt;/p&gt;
  &lt;p id=&quot;epAr&quot;&gt;Настройка адреса есм производится в настройке подключения ККТ (для этого версия фронтола должны быть от 6.28.0 и выше):&lt;/p&gt;
  &lt;figure id=&quot;HGgd&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/88/f8/88f8aafb-2f56-4e51-9b26-5715400f1196.png&quot; width=&quot;554&quot; /&gt;
    &lt;figcaption&gt;настройка ккт во фронтоле&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;MW10&quot;&gt;В этом случае запросы между фронтолом и честным знаком (через фму и есм) будут выглядеть так:&lt;/p&gt;
  &lt;figure id=&quot;vC15&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/72/c4/72c4e855-55ef-4aa5-a4a7-7bd9172b394c.png&quot; width=&quot;8191&quot; /&gt;
    &lt;figcaption&gt;в схеме запроса не учтен локальный модуль&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;8Hsm&quot;&gt;Какие риски? Только если пропадет из сети на POS1. В этом случае не получится проверить марку.&lt;br /&gt;fmuapi, в этом случае, обратится к локальному модулю напрямую.  Атоловский фму же, на текущий момент (16.02.2026), этого не умеет, но как я думаю в ближайшем релизе его этому трюку тоже научат.&lt;/p&gt;
  &lt;p id=&quot;3QII&quot;&gt;Юридически могут быть проблемы? Вообще нет обязанности ставить ТС Пиот именно на ту кассу по которой в итоге будет пробит чек. Нам важна только проверка через защищенный канал связи - вот именно для него мы и ставим ТС Пиот. Возможно дальше будут закручивать гайки, но пока такого требования нет, можно использовать такую схему.&lt;/p&gt;
  &lt;p id=&quot;LRJ7&quot;&gt;Остается понять насколько много касс могут одновременно подключаться к одной есм. Возможно бутылочным горлышком будет именно этот момент.&lt;/p&gt;
  &lt;p id=&quot;vfxS&quot;&gt;&lt;u&gt;И да остается проблема с несколькими ФР на одном рабочем месте - служба через которую работает фр не может оперативно переключатся между ними...&lt;/u&gt;&lt;/p&gt;
  &lt;p id=&quot;mZRQ&quot;&gt;Надеюсь мы с этим сможем справится, если не патчами от ЕСП, то как то еще...&lt;/p&gt;

</content></entry><entry><id>arseniizharkov:fCS9SOhdDQK</id><link rel="alternate" type="text/html" href="https://teletype.au124.ru/fCS9SOhdDQK?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=arseniizharkov"></link><title>Использование скриптов драйвера ККТ Атол в xPos</title><published>2026-01-01T14:55:33.567Z</published><updated>2026-01-01T15:04:09.678Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/2d/58/2d58b053-378e-422b-9098-1900a4903457.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/ff/45/ff453ac2-6109-4e32-b615-0b790d4110d9.png&quot;&gt;Для начала - лично я не рекомендую использовать xPos в проде.</summary><content type="html">
  &lt;p id=&quot;mc1c&quot;&gt;Для начала - лично я не рекомендую использовать xPos в проде.&lt;/p&gt;
  &lt;p id=&quot;SUT1&quot;&gt;Тем более сейчас в одной лицензии и Frontol 6 и это недоразумение.&lt;/p&gt;
  &lt;p id=&quot;DXul&quot;&gt;Но если у вас linux, то возможности перейти на F6 нет.&lt;/p&gt;
  &lt;p id=&quot;ld8t&quot;&gt;Начнем. &lt;/p&gt;
  &lt;p id=&quot;yyJd&quot;&gt;xPos с ККТ общается командами. В отличии от F6, который в драйвер шлет json-задание. Именно это не дает нам &amp;quot;в лоб&amp;quot; использовать скрипты драйвера.&lt;/p&gt;
  &lt;p id=&quot;tZgR&quot;&gt;Но! xPos поддерживает подключение через 1С БПО. А оно, в свою очередь, работает уже через json задания!&lt;/p&gt;
  &lt;p id=&quot;PyXR&quot;&gt;Значит можно пользоваться!!!&lt;/p&gt;
  &lt;p id=&quot;agnL&quot;&gt;Для этого:&lt;/p&gt;
  &lt;p id=&quot;0W0b&quot;&gt;1. Подключаем ККТ через 1с БПО:&lt;/p&gt;
  &lt;figure id=&quot;uQsx&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/ff/45/ff453ac2-6109-4e32-b615-0b790d4110d9.png&quot; width=&quot;1280&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;EmQr&quot;&gt;2. Настраиваем переменную среды, в которой указываем каталог со скриптами (путь приведен для примера может быть любым - хоть папка яндекс диска):&lt;/p&gt;
  &lt;figure id=&quot;SuZB&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/eb/9e/eb9ead23-682f-4a86-b567-cb5009e162be.png&quot; width=&quot;1204&quot; /&gt;
    &lt;figcaption&gt;имя переменной строго DTO10_SCRIPTS_PATH&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;y897&quot;&gt;3. Немного модифицируем скрипт (например для продаж json_sell):&lt;/p&gt;
  &lt;pre id=&quot;pZ4k&quot; data-lang=&quot;javascript&quot;&gt;const receipt = require(&amp;#x27;fptr10_base_receipt&amp;#x27;);
const validator = require(&amp;#x27;fptr10_validators&amp;#x27;);

function validateTask(task) {
    return receipt.validate(task);
}

function execute(task) {

    var targetDay = new Date(&amp;#x27;2026-01-01&amp;#x27;); // &amp;lt;= yyyy-MM-dd
    var nowDay = new Date();

    if (nowDay &amp;gt; targetDay) {
        task = changeVat(task)
    }

    return receiptResult = receipt.executeReceipt(task);
}

function changeVat(task) {
    for (var i = 0; i &amp;lt; task.items.length; i++) {
        var item = task.items[i];

        if (item.type !== &amp;quot;position&amp;quot;)
            continue;

        if (validator.isMissing(item.tax))
            continue;

        if (item.tax.type === &amp;quot;vat20&amp;quot;) {
            item.tax.type = &amp;quot;vat22&amp;quot;;
            delete item.tax.sum;
        }

        if (item.tax.type === &amp;quot;vat120&amp;quot;) {
            item.tax.type = &amp;quot;vat122&amp;quot;;
            delete item.tax.sum;
        };
    }

    return task;
}&lt;/pre&gt;
  &lt;p id=&quot;nsWw&quot;&gt;Все:&lt;/p&gt;
  &lt;figure id=&quot;tbaZ&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/fe/48/fe489d39-4925-486a-b987-a0a020f70a80.png&quot; width=&quot;720&quot; /&gt;
  &lt;/figure&gt;

</content></entry><entry><id>arseniizharkov:cKdyQ5iapfj</id><link rel="alternate" type="text/html" href="https://teletype.au124.ru/cKdyQ5iapfj?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=arseniizharkov"></link><title>Новый год, новый НДС, СНО</title><published>2025-12-23T04:57:35.368Z</published><updated>2025-12-23T04:57:35.368Z</updated><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/10/3e/103e017a-2d83-4526-89d0-589a638aacb2.png&quot;&gt;Для кого это?</summary><content type="html">
  &lt;p id=&quot;DClk&quot;&gt;Для кого это?&lt;/p&gt;
  &lt;p id=&quot;QaaD&quot;&gt;Первые - для тех кто не хочет обновлять фронтол на версию поддерживающую новые ставки НДС (22/122).&lt;/p&gt;
  &lt;p id=&quot;qAHh&quot;&gt;Вторые - для тех кто в ночь с 31 на 1 хочет встретить с оливье и игристым, а не с кассой и учетной системой.&lt;/p&gt;
  &lt;p id=&quot;Ikur&quot;&gt;Третьи - кто не уверен, что в праздники хочет поймать какую то непонятную ошибку в, потенциально, сыром релизе Фронтола (на момент публикации это 28.0).&lt;/p&gt;
  &lt;p id=&quot;PtsV&quot;&gt;Вводные данные:&lt;/p&gt;
  &lt;p id=&quot;lLT3&quot;&gt;0. То что написано ниже - актуально для фискальных регистраторов Атол, работающих на 10 драйвере!!!!&lt;/p&gt;
  &lt;p id=&quot;0fMd&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;yY25&quot;&gt;- Прошиваем кассу на 5.17.0&lt;/p&gt;
  &lt;p id=&quot;BnbF&quot;&gt;- Устанавливаем драйвер ККМ с поддержкой ставки НДС 22-122% (это 10.10.8.0 или 10.10.8.20)&lt;/p&gt;
  &lt;p id=&quot;0BhK&quot;&gt;- Дальше нам нужно сделать небольшой скрипт для драйвера ККТ (даже 2 - для продажи и для возврата). Сами скрипты драйвера находятся в папке c:\Program files(x86)\Atol\Frontol6\bin\json_scripts&lt;/p&gt;
  &lt;figure id=&quot;RXdV&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/10/3e/103e017a-2d83-4526-89d0-589a638aacb2.png&quot; width=&quot;753&quot; /&gt;
    &lt;figcaption&gt;так папка выглядит по умолчанию&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Otd0&quot;&gt;- теперь сделаем простой скрипт для драйвера с подменой ставки НДС 20 на ставку НДС 22. Для этого вэ той папке создаем файл json_sell:&lt;/p&gt;
  &lt;pre id=&quot;xM1Y&quot; data-lang=&quot;javascript&quot;&gt;const receipt = require(&amp;#x27;fptr10_base_receipt&amp;#x27;);
const validator = require(&amp;#x27;fptr10_validators&amp;#x27;);

function validateTask(task) {
    return receipt.validate(task);
}

function execute(task) {

    var targetDay = new Date(&amp;#x27;2026-01-01&amp;#x27;); // &amp;lt;= yyyy-MM-dd
    var nowDay = new Date();

    if (nowDay &amp;gt; targetDay) {
        task = changeVat(task)
    }

    return receiptResult = receipt.executeReceipt(task);
}

function changeVat(task) {
    for (var i = 0; i &amp;lt; task.items.length; i++) {
        var item = task.items[i];

        if (item.type !== &amp;quot;position&amp;quot;)
            continue;

        if (validator.isMissing(item.tax))
            continue;

        if (item.tax.type === &amp;quot;vat20&amp;quot;)
            item.tax.type = &amp;quot;vat22&amp;quot;;

        if (item.tax.type === &amp;quot;vat120&amp;quot;)
            item.tax.type = &amp;quot;vat122&amp;quot;;
    }

    return task;
}&lt;/pre&gt;
  &lt;p id=&quot;uQcm&quot;&gt;- абсолютно аналогичный код будет у чека возврата прихода - json_sellReturn.&lt;/p&gt;
  &lt;p id=&quot;075I&quot;&gt;Таким образом два файла дадут вам автоматический переход на 22% НДС.&lt;/p&gt;
  &lt;p id=&quot;KN68&quot;&gt;Так же можно автоматически менять СНО (предварительно только нужно зарегистрировать кассу на нужную СНО).&lt;/p&gt;
  &lt;p id=&quot;6Pnt&quot;&gt;Добавим в скрипт переход на другу СНО с 1 января:&lt;/p&gt;
  &lt;pre id=&quot;ts3f&quot; data-lang=&quot;javascript&quot;&gt;const receipt = require(&amp;quot;fptr10_base_receipt&amp;quot;);
const validator = require(&amp;quot;fptr10_validators&amp;quot;);

function validateTask(task) {
    return receipt.validate(task);
}

function execute(task) {

    var targetDay = new Date(&amp;quot;2026-01-01&amp;quot;); // &amp;lt;= yyyy-MM-dd
    var nowDay = new Date();

    if (nowDay &amp;gt; targetDay) {
        task = changeVat(task);
        task = changeTaxStation(task);
    }

    return receiptResult = receipt.executeReceipt(task);
}

function changeVat(task) {
    for (var i = 0; i &amp;lt; task.items.length; i++) {
        var item = task.items[i];

        if (item.type !== &amp;quot;position&amp;quot;)
            continue;

        if (validator.isMissing(item.tax))
            continue;

        if (item.tax.type === &amp;quot;vat20&amp;quot;)
            item.tax.type = &amp;quot;vat22&amp;quot;;

        if (item.tax.type === &amp;quot;vat120&amp;quot;)
            item.tax.type = &amp;quot;vat122&amp;quot;;
    }

    return task;
}

function changeTaxStation(task) {
    var targetTaxStation = &amp;quot;usnIncomeOutcome&amp;quot;; // osn usnIncome usnIncomeOutcome esn patent 

    if (validator.isMissing(task.taxationType))
        return;

    task.taxationType = targetTaxStation;

    return task;
}&lt;/pre&gt;
  &lt;p id=&quot;iGq3&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;UV1H&quot;&gt;В общем - ничего сложного. И будет работать со всеми версиям фронтола (в том числе и &amp;quot;дотарифными&amp;quot;).&lt;/p&gt;

</content></entry></feed>