Обмен опытом →  Расширение с загрузкой с сайта налоговой

0
Сафонов Вадим ( Санкт-Петербург)
08.11.2018 15:07

У меня, вроде, ваша. Работает нормально. После предыдущих комментариев присмотрелся сегодня - действительно есть "двоение". Только не на всех чеках. И ещё. Есть подозрение, что с самой обработкой это не связано. Так как раньше такого не наблюдалось. Что приводит к появлению двойников не понятно.

0
ЦБУ Первый БИТ (Москва, Москва)
08.11.2018 15:09

Допилю на днях эту фичу баг, вчера только нашел причину.

Исправленную версию с автозагрузкой выложу тут же. 

+1
ЦБУ Первый БИТ (Москва, Москва)
08.11.2018 16:10

Для начала давайте действительно примем тот факт, что версий данного расширения у нас две. 

1) "Типовая" версия, выложенная здесь её автором Астахов Петр (ООО ИК Каскад, Наро-Фоминск)

2) "НЕтиповая" версия - то же самое расширение, но доработанное мной для автоматической загрузки (делал исключительно для себя, но мне не жалко наносить добро и причинять справедливость этому миру  поделиться со всеми :-)).

 

Фича Косяк, приводящий к задвоению в следующем. Изначально в комментарий складывалась информация где параметр "ФД" так и записывался кирилицей. Позже (я заметил, что это изменилось где-то 24.04.2018) этот же самый параметр начал записываться в комментарий на латинице символом "i". В этом и суть ошибки. Обработка при загрузке списка чеков не может сопоставить существующий документ в БД (База Данных, если кто не в теме) с тем, что этот вот наш чек уже заведён и:

1) Типовая просто отображает пользователю, что вот на этот чек нужно завести документ (Шо?! Опять?!)

2) НЕтиповая при ручной загрузке делает также как и типовая, а при автоматической загрузке создаёт документ. При этом она создаёт его при КАЖДОЙ итерации (раз в 300 секунд) (Прямо таки восстание машин).

Исправляется это путём доработки запроса и его параметров, вот так сделал я (смотри комментарии //Ў):

        "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 2    
        |    Расход.Ссылка КАК Документ,
        |    Расход.Проведен Как Проведен    
        |ИЗ
        |    Документ.Расход КАК Расход
        |ГДЕ
        |   ВЫБОР 
        |       Когда Расход.СуммаОплаты > &СуммаРасхода 
        |           тогда Расход.СуммаОплаты - &СуммаРасхода 
        |       иначе &СуммаРасхода -  Расход.СуммаОплаты  
        |   КОНЕЦ < 1
        |    И НАЧАЛОПЕРИОДА(Расход.Дата, ДЕНЬ) = НАЧАЛОПЕРИОДА(&ДатаДокумента, ДЕНЬ)
        |    //УчитыватьКомментарий И (Расход.Комментарий ПОДОБНО &Комментарий    
        //Ў+
        |    //УчитыватьКомментарий ИЛИ Расход.Комментарий ПОДОБНО &Комментарий_2) 
        //Ў-
        |
        |УПОРЯДОЧИТЬ ПО
        |    ВЫБОР
        |        КОГДА &ДатаДокумента > Расход.Дата
        |            ТОГДА -РАЗНОСТЬДАТ(&ДатаДокумента, Расход.Дата, СЕКУНДА)
        |        ИНАЧЕ РАЗНОСТЬДАТ(&ДатаДокумента, Расход.Дата, СЕКУНДА)
        |    КОНЕЦ";
        
        Запрос.УстановитьПараметр("СуммаРасхода", СтрокаЧеков.СуммаДокумента);
        Запрос.УстановитьПараметр("ДатаДокумента", СтрокаЧеков.Дата);
        Запрос.УстановитьПараметр("Комментарий", "%ФД="+СтрокаЧеков.ФД+"%");    //БСА. Вставка
        Запрос.УстановитьПараметр("Комментарий_2", "%i="+СтрокаЧеков.ФД+"%");    //Ў+-

Данную ошибку в НЕтиповой версии исправил.

Также в свою версию добавил на закладку "Настройки" галочку "Автозагрузка" (т.к. выше многие жалуются на самоуправство программы, хе-хе-хе). По умолчанию (при открытии) она не установлена и автоматическая загрузка с созданием документов не будет производится. Если нужно, то ставим галочку руками и программа будет грузить и создавать всё автоматом (раз в 300 секунд).

Попозже если будет желание и время, то сделаю нормальную настройку расписания, пока - лень :-)

 

Просто совет, а не руководство к действию: можно создать отдельный кошелёк для автозагрузки, например у меня - это кошелёк с названием "робот". Данный кошелек ставим в форме обработки загрузки (закладка "Загрузка чека" реквизит "Кошелек:") и именно на него она будет кидать всё сама - далее уже перебрасывать руками.

 

0
ЦБУ Первый БИТ (Москва, Москва)
08.11.2018 16:13

Что приводит к появлению двойников не понятно.

Причины двойников я описал в предыдущем своём сообщении. Если у вас в этот (условно) день два документа в БД с одинаковой суммой, то обработка не может понять какой из этих документов конкретно относится к текущему чеку и выдаёт пусто. Методы исправления также описал. В случае, когда в течении одной даты суммы всегда разные, то всё будет происходить нормально и штатно, т.е. не будет двоить.

+1
ЦБУ Первый БИТ (Москва, Москва)
08.11.2018 19:35

Найден ещё один баг в ответах сервера ФНС. Иногда в ответе дублируются данные по чеку. Проверял в приложении - один чек, делаю запрос из 1С и вижу в ответе дважды один и тот же чек. Странная фигня, но способ её победить нашел.

В 4й версии НЕтипового расширения исправил (АП_ЗагрузкаЧеков_НЕтиповая_Ўv4.cfe).

Чтобы исправить самостоятельно нужно добавить в процедуру ЗагрузитьСписокНаСервере():

    Инд = 0; //Ў+-
    Для Каждого Чек из СписокДокументов Цикл
        ПолныйЧек = Чек.document.receipt;
        //Ў+
        Если НЕ Инд = СписокДокументов.ВГраница() Тогда
            Если ПолныйЧек.dateTime = СписокДокументов[Инд + 1].document.receipt.dateTime //Дата и время равны до секунды 
                И ПолныйЧек.kktRegId = СписокДокументов[Инд + 1].document.receipt.kktRegId //Рег. номер кассы одинаковый
                И ПолныйЧек.totalSum = СписокДокументов[Инд + 1].document.receipt.totalSum //Итого в чеке одинаково
                И ПолныйЧек.userInn = СписокДокументов[Инд + 1].document.receipt.userInn Тогда //ИНН продавца одинаковый
                //это глючный ответ сервера ФНС, опять двоит данные.
                //т.к. следующий чек у нас 100% такой же, то текущий просто пропускаем
                Инд = Инд + 1;
                //не забыть еще в конце цикла установить повышение !!!-=<Инд>=-!!!
                Продолжить;
            КонецЕсли;
        КонецЕсли;
        //Ў-
        СтрокаЧеков = СписокЧеков.Добавить();
        СтрокаЧеков.Дата = ПолучитьДату(ПолныйЧек.dateTime);
        СтрокаЧеков.ИНН = СокрЛП(ПолныйЧек.userInn);    //БСА. Вставил СокрЛП
        Если ПолныйЧек.Свойство("user") Тогда
            СтрокаЧеков.Магазин = СокрЛП(ПолныйЧек.user);    //БСА. Вставил СокрЛП
        КонецЕсли;

ВАЖНО - не забываем добавлять увеличение переменной "Инд" в конце цикла.

Если у вас НЕтиповое расширение, то нужно еще не забыть сделать тоже самое в процедуре ЗагрузитьСписокНаСервереАвтоматически()

Если вам вообще всё лень, то качаем 4ю версию и устанавливаем её.

0
Сафонов Вадим ( Санкт-Петербург)
09.11.2018 19:27

Надеюсь эта информация будет полезна всем.
ФНС России сделала некоторые разъяснения по использованию электронных чеков.

1. ВАЖНО! Срок хранения кассового чека в электронной форме на сайте ФНС России, а также срок доступа к получению кассового чека через приложение "Проверка чеков" НЕ УСТАНОВЛЕН.
На практике это значит, что если вы понадеетесь на возможность скачать чек потом, чек можно не получить. Если есть возможность - лучше не затягивать.

2. Если кто не в курсе. Во многих магазинах сегодня можно получить копию чека на мобильный телефон (в СМС) или на e-mail, если вы попросили об этом заранее, ДО МОМЕНТА расчёта на кассе! Многие не пользуются этой возможностью, так как диктовать номер телефона кассиру - долго. Адрес эл. почты - взбесит всю очередь. Однако в приложении "Проверка чеков" есть меню "Моя визитная карточка" (самый верхний пункт). Там есть QR-коды, которые кассир может считать сканером. Во многих торговых сетях сканеры считывают уверенно.

3. ФНС также подтвердила, что на сайтах ОФД можно проверить, в том числе факт выдачи чека покупателю, правда не указала как именно.

4. Что касается порядка использования копии эл. чека, распечатанной на бытовом принтере для подачи обращения в Роспотребнадзор, например, в случае продажи некачественного товара, то это вопрос, пока в стадии изучения.

 

0
lybsik_bl
20.12.2018 1:41

До 14.12.2018 все чеки загружались через мобильное приложение https://itunes.apple.com/ru/app/%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0-%D0%BA%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE-%D1%87%D0%B5%D0%BA%D0%B0-%D0%B2-%D1%84%D0%BD%D1%81-%D1%80%D0%BE%D1%81%D1%81%D0%B8%D0%B8/id1169353005?mt=8

Неделю уже приложение скачивает данные чека, но номенклатуру не подгружает. Вышла из приложения - зайти не могу "Сервер не отвечает, проверьте соединение". У меня всё нормально соединением. Значит... И что делать?

Если начинаю вручную через внешнюю обработку загружать по ФП ФН ФД, то выдает ошибки (в скринах)

Что делать? Куда бежать, писать?

Столько чеков уже зависло - перед новым годом то столько трат(((

0
lybsik_bl
20.12.2018 1:45

 

 

Найден ещё один баг в ответах сервера ФНС. Иногда в ответе дублируются данные по чеку. Проверял в приложении - один чек, делаю запрос из 1С и вижу в ответе дважды один и тот же чек. Странная фигня, но способ её победить нашел.

В 4й версии НЕтипового расширения исправил (АП_ЗагрузкаЧеков_НЕтиповая_Ўv4.cfe).

Чтобы исправить самостоятельно нужно добавить в процедуру ЗагрузитьСписокНаСервере():

    Инд = 0; //Ў+-
   Для Каждого Чек из СписокДокументов Цикл
       ПолныйЧек = Чек.document.receipt;
       //Ў+
       Если НЕ Инд = СписокДокументов.ВГраница() Тогда
           Если ПолныйЧек.dateTime = СписокДокументов[Инд + 1].document.receipt.dateTime //Дата и время равны до секунды
               И ПолныйЧек.kktRegId = СписокДокументов[Инд + 1].document.receipt.kktRegId //Рег. номер кассы одинаковый
               И ПолныйЧек.totalSum = СписокДокументов[Инд + 1].document.receipt.totalSum //Итого в чеке одинаково
               И ПолныйЧек.userInn = СписокДокументов[Инд + 1].document.receipt.userInn Тогда //ИНН продавца одинаковый
               //это глючный ответ сервера ФНС, опять двоит данные.
               //т.к. следующий чек у нас 100% такой же, то текущий просто пропускаем
               Инд = Инд + 1;
               //не забыть еще в конце цикла установить повышение !!!-=<Инд>=-!!!
               Продолжить;
           КонецЕсли;
       КонецЕсли;
       //Ў-
       СтрокаЧеков = СписокЧеков.Добавить();
       СтрокаЧеков.Дата = ПолучитьДату(ПолныйЧек.dateTime);
       СтрокаЧеков.ИНН = СокрЛП(ПолныйЧек.userInn);    //БСА. Вставил СокрЛП
       Если ПолныйЧек.Свойство("user") Тогда
           СтрокаЧеков.Магазин = СокрЛП(ПолныйЧек.user);    //БСА. Вставил СокрЛП
       КонецЕсли;

ВАЖНО - не забываем добавлять увеличение переменной "Инд" в конце цикла.

Если у вас НЕтиповое расширение, то нужно еще не забыть сделать тоже самое в процедуре ЗагрузитьСписокНаСервереАвтоматически()

Если вам вообще всё лень, то качаем 4ю версию и устанавливаем её.

 

Эта обработка тоже не работает. Не входит в группу "файлы 1С". Когда выбираешь "Все файлы" - открывается билибирда какая то

0
lybsik_bl
20.12.2018 1:47

Релиз прилагаю

0
ЦБУ Первый БИТ (Москва, Москва)
20.12.2018 11:21

Так а вы чего творите то? :-)

Это не обработка, а расширение для конфигурации. Порядок его подключения описан в начале этой темы :-)

https://forum.1c.ru/money/topic/11348