Имя: Пароль:
1C
1C 7.7
v7: Честный знак и вывод из оборота
0 ChMikle
 
17.03.23
10:50
Нужен образец файла с данными о выводе из оборота товаров группы молочная продукция в xml формате для дальнейшего экспорта в ЭДО лайт и отправки в ЧЗ.
Решили фасованные головки сыров резать на части и продавать кусками, я так понял в Чз необходимо отправлять данные о выбытии в случае разрыва упаковки и деления на части ?
1 АгентБезопасной Нацио
 
17.03.23
11:16
<?xml version="1.0" encoding="UTF-8"?>
<withdrawal version="8">
  <trade_participant_inn>7777777777</trade_participant_inn>
  <withdrawal_type>DESTRUCTION</withdrawal_type>
  <withdrawal_date>2022-01-13</withdrawal_date>
  <primary_document_type>DESTRUCTION_ACT</primary_document_type>
  <primary_document_number>123</primary_document_number>
  <primary_document_date>2022-01-13</primary_document_date>
  <fias_id>8cccc9d6-05cc-4c53-c45c-cc0c6c3c5c44</fias_id>
  <products_list>
  <product>
  <cis>00000000000000hx00'HY</cis>
  </product>
  </products_list>
</withdrawal>
2 ChMikle
 
17.03.23
11:44
(1) Это рабочий пример ?
3 ChMikle
 
17.03.23
11:54
там вроде как номенклатура , количество, цена и сумма должны указываться ?
4 АгентБезопасной Нацио
 
17.03.23
12:01
(2) это из "Описание True API Версия 284.0"
Мы не режем.
5 ChMikle
 
17.03.23
12:27
(4) мне надо загрузить файл из внешнего файла в эдо-лайт данные для вывода из оборота
6 АгентБезопасной Нацио
 
17.03.23
12:42
ну и грузи. правила формирования файлов единые.
7 big
 
17.03.23
12:58
Зайдите в личный кабинет, там куча документации и примеров. Загружать можно из xml, xls, csv
8 ChMikle
 
17.03.23
14:08
(7) Спасибо , мил человек, но конкретный рабочий файл-пример был бы более продуктивен :) для меня.
9 ChMikle
 
21.03.23
09:00
(1) Спасибо !
10 MWWRuza
 
гуру
21.03.23
10:57
Я из 7.7 через True API, HTTP запросом отправкой JSON сделал. Работает.
Но, у меня авторизация, получение токена и т.п. было ранее сделано, еще для сигарет... Поэтому, с молочкой, списанием через расфасовку, проблем не возникло.
Вот такой документ:

https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-486.jpg

В принципе, у меня предусмотрена и второй вариант, когда API по каким-то причинам не доступен - формирование файла для ручной загрузки в ЛК. Там как раз XML формируется.
11 ChMikle
 
21.03.23
12:01
QR-коды так же , отрезал лишние хвосты ?
12 MWWRuza
 
гуру
21.03.23
17:19
Хм... Ну, если посмотреть по дате документа, можно понять, когда я это делал... Уже и не помню.
Сейчас в модуле посмотрю, отпишу...
13 MWWRuza
 
гуру
21.03.23
17:21
Отправляю так:

    Пока ПолучитьСтроку() = 1 Цикл
        ТзТов.НоваяСтрока();
        КИЗ                                = СокрЛП(Марка);
        ТзТов.cis                        = КИЗ;
        ТзТов.product_cost                = ЦенаЕд * 100;
    КонецЦикла;
14 MWWRuza
 
гуру
21.03.23
17:28
А марка в таблице документа так:
            СзШК                    = РазобратьШК(СканШК);
            ТипШК                    = СзШК.Получить("ТипЕд");
            ЕАН                        = СзШК.Получить("ЕАН");
            GTIN                    = СзШК.Получить("GTIN");
            ВесЕдВМарке                = ПолучитьВес(СканШК);
            КИЗ                        = ПолучитьКИЗ(СканШК);

****
НовМарка    = КИЗ;
****
Марка         = НовМарка;

Там где звездочки - куча всяких проверок и т. п., это "на вкус и цвет" :-)

В глобальном модуле у меня функция, сделана давно, еще когда только с ЕГАИС начинал работать потом, допиливал по чуть-чуть:

// Функция РазобратьШК(ШК) Экспорт - Возвращает тип отсканированного ШтрихКода
// 1     - EAN(13 или 8)    обычный ШК товара
// 2     - DataMatrix         пачки сигарет
// 3     - DataMatrix         блока сигарет
// 4     - PDF-417             алкоголь, старая марка
// 5     - DataMatrix         алкоголь,новая марка
// 6     - DataMatrix        алкоголь, старая марка, "маленький квадратик"
// 7    - DataMatrix         прочей упаковки сигарет
// 8    - Сокращенный код маркировки прочих товаров, в том числе молока
// МРЦ    - максимальная розничная цена сигарет
// Тип  - тип старой марки
// Сер    - серия старой марки
// Ном    - номер старой марки  
Функция РазобратьШК(Знач ШК) Экспорт
    СЗ            = СоздатьОбъект("СписокЗначений");
    СтрШК        = СокрЛП(ШК);
    Если СтрДлина(СтрШК) <= 13 Тогда
        СЗ.ДобавитьЗначение(1,         "ТипЕд");
        СЗ.ДобавитьЗначение(СтрШК,     "ЕАН");
        СЗ.ДобавитьЗначение(0);
    ИначеЕсли (СтрДлина(СтрШК) <= 29) И (СтрДлина(СтрШК) >= 21) Тогда
        СЗ.ДобавитьЗначение(2,         "ТипЕд");
        ВыдЕАН    = СокрЛП(Число(Лев(ШК, 14)));
        СЗ.ДобавитьЗначение(ВыдЕАН, "ЕАН");
        Если СтрДлина(СтрШК) >= 25 Тогда
            МРЦ    = ВернутьМРЦ(Сред(СокрЛП(СтрШК), 22, 4));    
        Иначе    
            МРЦ    = 0;    
        КонецЕсли;
        СЗ.ДобавитьЗначение(МРЦ, "МРЦ");
    ИначеЕсли СтрДлина(СтрШК) = 68 Тогда
        СЗ.ДобавитьЗначение(4,         "ТипЕд");
        СЗ.ДобавитьЗначение(СтрШК,     "ЕАН");
        СЗ.ДобавитьЗначение(0);
    ИначеЕсли СтрДлина(СтрШК) = 150 Тогда    
        СЗ.ДобавитьЗначение(5,         "ТипЕд");
        СЗ.ДобавитьЗначение(СтрШК,     "ЕАН");
        СЗ.ДобавитьЗначение(0);
    ИначеЕсли (СтрДлина(СтрШК) > 30) И (СтрДлина(СтрШК) < 68) Тогда    
        Если Сред(СтрШК,4,1)     = "-" Тогда
            Тип    = Лев(СтрШК,3);
            СтрТипа = "";
            СзТиповМарок    = ЗаполнитьСписокТиповМарок();
            Поз    = СзТиповМарок.НайтиЗначение(Число(Тип));            
            Если Поз     = 0 Тогда
                Предупреждение("Тип марки не найден!");
            Иначе
                СзТиповМарок.ПолучитьЗначение(Поз,СтрТипа);
            КонецЕсли;            
            Если Найти(СтрТипа,"ФСМ. ") > 0 Тогда
                ДлинаНомераМарки=9;
            Иначе
                ДлинаНомераМарки=8
            КонецЕсли;
             СЗ.ДобавитьЗначение(6, "ТипЕд");
            СЗ.ДобавитьЗначение(СтрШК);
            СЗ.ДобавитьЗначение(0);
            СЗ.ДобавитьЗначение(Лев(ШК,3), СокрЛП(СтрТипа));
            СЗ.ДобавитьЗначение(Сред(ШК,Найти(ШК,"-") + 1,3));
            СЗ.ДобавитьЗначение(Сред(ШК,Найти(ШК,"-") + 4,ДлинаНомераМарки));
        Иначе
            СтрШК                = СтрЗаменить(СтрШК, "(", "");
            СтрШК                = СтрЗаменить(СтрШК, ")", "");
            Если Лев(СтрШК, 2)     = "01"  Тогда
                Если Найти(СтрШК, Симв(29)) > 0 Тогда               // Марка полная, со сканера
                    СЗ.ДобавитьЗначение(7,         "ТипЕд");
                    GTIN        = Сред(СтрШК, 3, 14);    
                    ШК            = СокрЛП(Число(Сред(СтрШК, 3, 14)));
                    СЗ.ДобавитьЗначение(ШК,     "ЕАН");
                    СЗ.ДобавитьЗначение(GTIN,     "GTIN");
                    СЗ.ДобавитьЗначение(0,         "МРЦ");
                Иначе    
                    Если  Найти(СтрШК, "8005") = 0 Тогда
                        // Упаковка, отличная от блока
                        ШК    = СокрЛП(Число(Сред(СтрШК, 3, 14)));
                        МРЦ = 0;
                        СЗ.ДобавитьЗначение(7,         "ТипЕд");
                        СЗ.ДобавитьЗначение(ШК,     "ЕАН");
                        СЗ.ДобавитьЗначение(МРЦ,     "МРЦ");
                        СЗ.ДобавитьЗначение(ПривестиШкБлокаКВидуУПД(СтрШК), "ШКУПД");
                    ИначеЕсли Найти(СтрШК, "8005") >= 25 Тогда
                        ШК    = СокрЛП(Число(Сред(СтрШК, 3, 14)));
                        МРЦ = ВычислитьМРЦ_Блока(СтрШК);
                        СЗ.ДобавитьЗначение(3,         "ТипЕд");
                        СЗ.ДобавитьЗначение(ШК,     "ЕАН");
                        СЗ.ДобавитьЗначение(МРЦ,     "МРЦ");
                        СЗ.ДобавитьЗначение(ПривестиШкБлокаКВидуУПД(СтрШК), "ШКУПД");    
                    КонецЕсли;
                КонецЕсли;    
            КонецЕсли;  
        КонецЕсли;
    ИначеЕсли (СтрДлина(СтрШК) >= 19) И (СтрДлина(СтрШК) < 21) Тогда // Молочка и другой товар сокращенные
        ШК    = СокрЛП(Число(Сред(СтрШК, 3, 14)));
        СЗ.ДобавитьЗначение(8,                                 "ТипЕд");
        СЗ.ДобавитьЗначение(ШК,                             "ЕАН");
        СЗ.ДобавитьЗначение(0,                                 "МРЦ");
        СЗ.ДобавитьЗначение(ПривестиШкБлокаКВидуУПД(СтрШК), "ШКУПД");        
    КонецЕсли;    
    Возврат СЗ;
КонецФункции
// КонецФункци РазобратьШК(ШК
15 MWWRuza
 
гуру
21.03.23
17:29
СканШК - это ШтрихКод марки, как во внешнее событие со сканера прилетел.
16 MWWRuza
 
гуру
21.03.23
17:41
Да, кстати... В дополнение.
Хранить полный код марки в 1с77, в том виде, как он прилетает со сканера - нельзя, она этого не умеет.
Или хранить обрезанный код, до первого GS1, или менять этот симвод на что-то "допустимое".
Иначе при первом ТиИ, 1с удалит эти ШК, так как GS1 не является допустимым символом в полях DBF с точки зрения ТиИ 1с77 :-)
17 Злопчинский
 
22.03.23
00:42
да нормально в 77 это как-то victuan хранит
18 MWWRuza
 
гуру
22.03.23
10:21
Да как он хранит...
Скорее всего, перед записью подменяет символ GS1 на (29), или что-то подобное, а где используется сохраненная в справочнике марка - в строке заменяет эту сохраненную последовательность на Симв(29)...
Увидит - если не так, поправит.
Потому как, непечатные символы при первом же ТиИ будут безжалостно порезаны.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.