v7: Из XML Расходная накладная #684502


#0 by mcwolf
Доброго времени суток! Уважаемые гуру подскажите чайнику =) Питаюсь сделать обработку в 1с 7.7 Торговля+Склад, но что-то не выходит до конца доделать опыта не хватает (не судите строго я только начал изучать) Обработка: //Ограничения на входящие файлы XML:                         //1) В первой строке обязателен заголовок XML вида <?xml version="1.0" encoding="windows-1251"?>    . и собственно сам XML: <?xml version="1.0" encoding="utf-8"?> <gw_srv_rsp> Получается есть теги <DAT>....</DAT> между этих тегов есть <P>...</P> но их может быть несколько но добавляет только первый. Как сделать так  чтоб расходная накладная создавалась со всеми позициями указаними в тегах <DAT>....</DAT>?
#1 by Тьма
Для начала было бы неплохо исправить некоторые ошибки 1. По условию Если  xml_Прочитать("</DAT>")=1 Тогда предполагается, что xml_Прочитать возвращает 0, если данный тег не найден в следующей строке. Однако 0 возвращается только в случае конца файла. 2. Делать цикл по условию на итератор (пока получить строку файла) и внутри цикла менять этот итератор (уже упомянутое условие) - дурной тон. У тебя каждая вторая строка в файле из-за этого не обрабатывается. 3. Ветвление с сообщением Сообщить ("Элемент с заданным наименованием не найден: " +Товар); не в том условии. Там 2 Если и по смыслу это счастье должно быть в первом. 4. Поиск по наименованию - это плохо. Там код в файле для этого есть. Разумеется, код не должен быть доступен пользователю для изменения. П.С. Лично я разбор этого файла со шлюза делаю так: После посылки АШТТП запроса получаю ответ в одну переменную и работаю с ней. В этой переменной ищу теги DAT и /DAT, выделяю таким образом один чек. Уже в этом чеке ищу строчку "P C=" (или можно так же выделять по очереди по тегу <Р> </Р>) и уже в нем ищу код, цену и количество. Там будут еще нюансы, связанные с возвратными чеками, отменой чека, скидками в чеке (если в Т400 не запрещены скидки, что стоит сделать). Возможно, будет еще много других нюансов, так как описания формата этого файлика в глаза не видел :)
#2 by mcwolf
Спасибо за столь обширный ответ. Я мало чего понял :))  но  понял что я еще очень далеко от истины =)
#3 by mcwolf
И еще вопросик есть компонента ecrT400.dll есть пример работы с 1С 8 Код проверен на версии ecrT400.dll — 1.0.4.515, 1С версии 8.2.16.362. Приведенный пример кода написан для управляемого приложения. Результат = «Ошибка соединения МИНИ Т400: «+КодОшибки; Аналогично запускаются и остальные команды, методом t400me. Может кто-то видел код для 7-ки?
#4 by Тьма
Я заметил, что ты не используешь 1с-ные функции работы со строками Найти и Сред. Может, с ними будет попроще? Что-то типа: Делаю все обычным АШТТП запросом, без ВК. Вот так продажи получаю. Правда, с четвертой версией шлюза этот код перестал работать, но меня пока устраивает третья :)
#5 by Тьма
+И да, ПреобразоватьСтрокуВУТФ8 можно заменить просто на сокрлп - там с кодировками некая шняга, в заголовке указан УТФ, а принимает файл только в АНСИ. Хотя если руками загружать на шлюз, нужен УТФ. :)
#6 by Тьма
Если сильно хочешь через ВК, то отличия для 7.7 невелики: ПодключитьВнешнююКомпоненту(«ecrmini.t400?); пишешь
#7 by mcwolf
Насколько я понял можно еще юзать ecrT400.dll и можно будет вытащить нужные данные со шлюза? Или есть другие способы чтения отчётов Мини Т400, потому что за день много продаж а вручную вбивать пипец как долго...
#8 by Тьма
Есть и другие. В есть пример ХТТП-запроса к шлюзу. Также этот метод описан в документации по ссылке . Кроме того, непосредственно в интерфейсе шлюза можно выгрузить ручками же хмл-файл с продажами или же эксель-файл с теми же данными - если работа с экселем по каким-то причинам представляется более предпочтительной.
#9 by mcwolf
Если тебе не сложно можешь показать как пользоваться твоими указаниями на моём примере?
#10 by mcwolf
Давно работаешь с мини т400? Как загружаешь товары обработкой?
#11 by mcwolf
Могу поделится обработкой :)
#12 by Тьма
Ну... а что неясно в ? По поводу твоего примера - надо заменить /////// это не вполне оптимально, но работать должно лучше. С февраля 2013. На шлюз третьей версии ХТТП-запросом, единственно что 1с не умеет посылать ХТТП-запросы размером более 500Кб, по подсказке с этого форума отправляю vbs-скриптом, который, впрочем, все равно создается и вызывается из 1С. На шлюз четвертой - формируется хмл и оператор ручками на шлюзе его грузит. Их есть у меня :)
#13 by mcwolf
Если сделать замену ка ты говоришь то на каждую позицию создается новая накладная, а нужно чтоб создавалась накладная согласно <DAT>...</DAT>, Если поставить "Если  xml_Прочитать("</DAT>")=1 Тогда" то года оно разбивает по <DAT>...</DAT> но считывает только первые <P> а остальные пропускает.
#14 by monsterZE
все не читал.. но в чем проблема? =) читаешь строки при <DAT> поднимаешь флаг нового документа пока не </DAT> пихаешь строки в документ по <p></p> вот тебе для примера.. что-то аналогичное только у меня собирается в тз и по колонкам тз_на_форме выводится нужное (чтоб прощее добавлять новое)     Состояние("Загрузка файла обмена ПП");                     Предупреждение("Ошибка в структуре файла обмена, текущее ПП пропущено",5);
#15 by Тьма
Убери из цикла и не будет на каждую строчку новый документ создавать
#16 by mcwolf
В принципе то оно так но теперь все записывается в одну накладную... а нужно чтоб на каждый <DAT> создавалась новая накладная.
#17 by mcwolf
Спасибо Вам за ответ но я вернусь к первому посту "не судите строго я только начал изучать"
#18 by mcwolf
Ах да и еще забыл записывает в одну накладную и все равно только первые позиции <P> остальные пропускает...
#19 by Тьма
Сейчас досмотрелся - это чудо юнисистемское пишет каждый чек в одну строчку. Ну а твой код из каждой строчки берет только один товар. Так что твоя процедурка xml_Прочитать этого не отработает и придется тебе писать два цикла - один по строкам, а второй по поиску в текущей строке открывающего и закрывающего тега <P>. Потом уже вырванную серединку можешь скормить своей процедуре. После нахождения первого закрывающего тега обрезаешь строку справа и ищешь в новой строке и т.д. пока все теги <P> не будут найдены. Смотри описание функция работы со строками Найти и Сред.
#20 by mcwolf
Будем читать...
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С