|
Требуется обработать файл XML Enterprise Data (выгрузка из Мой склад) чем лучше? | ☑ | ||
---|---|---|---|---|
0
Гений 1С
гуру
18.05.22
✎
08:20
|
По сути там последовательно объекты выгружены.
Я вот думаю, может использовать чтениеXML, но каждый отдельный объект разбирать уже через DOM? Ну или через таблицу значений, как вариант (я делал такой разбор). Что скажете? По сути задачи там нужно некоторые поля поменять (номер документа например в зависимости от организации) и формат сумм. Т.е. разобрать все объекты в структуры, обработать, потом собрать обратно. Делали такое? Есть код? |
|||
1
Asmody
18.05.22
✎
09:26
|
обязательно это делать в 1С?
|
|||
2
Kassern
18.05.22
✎
09:31
|
(0) "Делали такое?" - такими извращениями не страдал. Нахрена это 5ое колесо? Почему нельзя сразу выгрузить с правильными данными? Окей, если нет возможности повлиять на источник, то зачем в приемнике файл редактировать, перезаписывать, чтобы потом 3ий приемник его скушал, через вашу прокладку?))
|
|||
3
Kassern
18.05.22
✎
09:31
|
Прокладочное мышление какое-то у гени)
|
|||
4
Asmody
18.05.22
✎
09:38
|
(2) ETL на коленке - он такое
|
|||
5
Kassern
18.05.22
✎
09:42
|
(4) 1с для этого не лучший инструмент
|
|||
6
Asmody
18.05.22
✎
09:46
|
(5) см (1) :)
|
|||
7
Asmody
18.05.22
✎
09:47
|
Геня, вот тебе инструмент подходящий http://xmlstar.sourceforge.net/doc/UG/xmlstarlet-ug.html#idm47077139602800
|
|||
8
Гений 1С
гуру
18.05.22
✎
11:41
|
(2) там грузится из Мой склад в БП3 во фреше. Если ты когда-нибудь "любил" фреш, то должен понимать, что это такое. ;-)
Внешнюю обработку там проще доработать, чем расширение. На копии базы. (5) В смысле не лучший? 1С как раз и кушает XML. Можно в принципе и в чистом DOM заюзать, но он же собака все в память грузит, а объемы там могут быть большие. |
|||
9
Гений 1С
гуру
18.05.22
✎
11:42
|
(7) нет, спасибо, я считаю Лисп и XSLT убогой отрыжкой кризиса IT
|
|||
10
Asmody
18.05.22
✎
11:55
|
Лисп был задолго до нас и нас всех переживёт. Это корневая концепция, как бы ты к ней не относился.
|
|||
11
Kassern
18.05.22
✎
12:02
|
(8) Не получается писать код по стандартам фреша, поэтому для вас лучше написать велосипед "сбоку"?)
|
|||
12
Конструктор1С
18.05.22
✎
12:05
|
Опять хениальные костылины, опирающиеся на лень и нежелание разбираться
|
|||
13
Конструктор1С
18.05.22
✎
12:08
|
(3) костыле-велосипедное
|
|||
14
Гений 1С
гуру
18.05.22
✎
12:58
|
(11) получается, но есть такой принцип - разработки под фреш это *3 цена разработки. Клиенту дорого обойдется.
|
|||
15
Kassern
18.05.22
✎
13:00
|
(14) а клиент в курсе, что за костыль вы ему хотите пихнуть? Он понимает, что появится еще одно звено, которое нужно будет администрировать, следить и т.д.? Понимает ли, что инструкций никаких не будет и новый программист возьмет *3 цены чтобы разобраться, почему обмен перестал работать и еще столько же, чтобы его доработать уже нормально?
|
|||
16
Kassern
18.05.22
✎
13:00
|
Или просто сказали, я могу сделать за дорого, а могу сделать по проще, "чтобы работало"?)
|
|||
17
Kassern
18.05.22
✎
13:01
|
Или может вашему клиенту, проще найти разраба, который часто решает задачи с фрешем и у него это будет стоить на *3?
|
|||
18
Kassern
18.05.22
✎
13:01
|
"не *3"
|
|||
19
Kassern
18.05.22
✎
13:02
|
Надеюсь клиент понимает, что *3 - это оплата за ваше обучение работы с фрешем)
|
|||
20
Выпрь
18.05.22
✎
13:16
|
(19) а когда научишься можно и х5 брать
|
|||
21
Конструктор1С
18.05.22
✎
13:19
|
(14) >>разработки под фреш это *3 цена разработки.
Только в твоём случае. Нужно же сделать всё по стандартам, о которых ты ни в зуб ногой |
|||
22
Конструктор1С
18.05.22
✎
13:23
|
(15) нет, конечно. У Г1Са в клиентах только ларьки. А у ларьков нет компетенций, чтобы проверять за Г1Сом. Были бы компетенции, его погнали бы сцаными тряпками
|
|||
23
Гений 1С
гуру
18.05.22
✎
13:30
|
(21) практически всегда. 2-3 раза, т.к. нужны итерации с поддержкой.
|
|||
24
Гений 1С
гуру
18.05.22
✎
13:31
|
Кто-нибудь бросьте код, как в строку собрать весь текст XML от стартового тега <Объект> до конечного </Объект>
|
|||
25
Гений 1С
гуру
18.05.22
✎
13:32
|
тогда я просто в массив строк закину. Каждый из объектов по очереди разберу в DOM, определю список организаций и уже для кждого документа в зависимости от организации назначу номер.
|
|||
26
Конструктор1С
18.05.22
✎
13:38
|
(23) о-да! Потребуется целых 5 минут для составления заявки через сайт. Жуть какие итерации. А то что ты не в состоянии сделать нормально, чтобы с первого раза пройти аудит расширения/обработки, так это вообще не проблема заказчика. Твоё рукожопство он не должен оплачивать
|
|||
27
Гений 1С
гуру
18.05.22
✎
14:38
|
(26) ну пусть оплатит твоё рукожопство, мне все равно. Раз меня подрядили - я работаю. Вот тебя почему то не выбрали. ;-)
|
|||
28
Конструктор1С
18.05.22
✎
15:04
|
(27) тебя подрядили по доверчивости и наивности. Они-то думали что ты полноценный специалист
|
|||
29
Гений 1С
гуру
18.05.22
✎
15:08
|
(28) не завидуй. Тебя то вот не нашли, такого компетентного и правильного. ;-)
|
|||
30
MaxS
18.05.22
✎
15:47
|
Enterprise Data - это же xdto. Зачем DOM? Зачем свой велосипед изобретать?
|
|||
31
Гений 1С
гуру
18.05.22
✎
15:51
|
(30) готов выслушать твои предложения.
В общем, отрыл свою старую обработку: http://fixin.com.ru/articles/down_xml_inout/article.htm И переписал так, чтобы юзать на клиенте. В массив 1С нормально грузится, так что два прохода делать не буду файла. Вот код если кому понадобится.
|
|||
32
MaxS
18.05.22
✎
16:13
|
(31) Ладно читать, но если записывать не через XDTO, легко нарушить структуру и при загрузке можно получить ошибку, если файл обрабатывается посредством XDTO. Если что, я предупредил. ;)
Примеры кода искать по ФабрикаXDTO.Создать и ФабрикаXDTO.ПрочитатьXML |
|||
33
Выпрь
18.05.22
✎
16:22
|
(32) но по факту такого при загрузке нет
|
|||
34
vierzehn
18.05.22
✎
16:36
|
(31) Статья, восхваляющая очередной самодельный костыль инвалида умственного труда, уже готова?
|
|||
35
Гений 1С
гуру
18.05.22
✎
16:42
|
(32) да ладно? Это как надо умудриться изнасиловать XML, чтобы нарушить стркутуру?
|
|||
36
MaxS
18.05.22
✎
16:49
|
(33) (35) Если работает, хорошо. Как долго - вопрос.
Достаточно тип значения изменить, например, длину строки увеличить или число символов после запятой в сумме. Либо забыть добавить какой-нибудь обязательный реквизит. |
|||
37
Гений 1С
гуру
18.05.22
✎
16:58
|
(36) и как это повлияет на XML? Я же 1:1 копирую, только кое-что поправляя (все боди и атрибуты загружаю как строки, не конвертирую в числа-булевы). От таких преобразований ничего не поменяется, к тому же это устойчиывый формат, Enterprise Data.
|
|||
38
vierzehn
18.05.22
✎
17:02
|
(35) Потерять пространство имен. Ваш К.О.
|
|||
39
Гений 1С
гуру
18.05.22
✎
17:03
|
(38) где именно? пространство имен разве не читается через ЧтениеXML, ггг?
|
|||
40
vierzehn
18.05.22
✎
17:18
|
(39) Прогыгырамист, ты сначала задаешь вопрос как испортить запись, и тут же переcкакиваешь на чтение. У тебя со здоровьем все в порядке, тараканы в голове не беспокоят?
|
|||
41
vierzehn
18.05.22
✎
17:21
|
Хотя зря я, конечно, в объяснения ввязался... Это надо спускатся до уровня гыгы, струйка слюны и палец в носу. Вот гыгыгы уже началось.
|
|||
42
Гений 1С
гуру
18.05.22
✎
17:46
|
(40) ну раз нет аргументов, прекратим бесполезную дискуссию
|
|||
43
MaxS
18.05.22
✎
17:58
|
Если одна база во фреше и считаем, что недоступна для доработок, а другая доступна для установки своего расширения, то (0) не требуется обрабатывать XML. Это делается либо при выгрузке либо при загрузке данных в базе, доступной для доработки.
|
|||
44
Гений 1С
гуру
18.05.22
✎
18:09
|
(43) Та, что ты назвал другая, на самом деле первая (она является источником данных). И эта первая база, мой друг - Мой Склад.
Попутного ветра в одно место тебе с написанием для него расширения, гггг.... |
|||
45
Гений 1С
гуру
18.05.22
✎
18:11
|
Хотя по чесноку можно было и расширение написать, но это менее надежно, 1с же постоянно код тусует, модули меняет.
Обработка будет железобетонно работать. Ну и на инфостат ее можно, потому что проблемы с выгрузкой из Мой склад у многих клиентов - там забили на качество выгрузки (ведь Мой Склад куплен 1С, как вы знаете) Ее можно даже в 1С:Деньгах запускать, минуя поддержку Фреша. ;-) |
|||
46
MaxS
18.05.22
✎
18:30
|
(45)
>1с же постоянно код тусует, модули меняет. >там забили на качество выгрузки Как-то не сходится. В вашей обработке есть обращения к разным модулям? Почему они должны появиться если сделать корректировку тех же данных в расширении? Собственно зачем топик создан? Для самого себя? Ответы как делать правильно даны. Остальное на Ваше усмотрение. (41) Согласен ;) |
|||
47
Гений 1С
гуру
18.05.22
✎
20:20
|
(46)
расширение перекрывает как миниум модуль МенеджерОбменаЧерезУниверсальныйФормат13. Обработка не использует общих модулей, это вещь в себе Я искал готовый разбор XML. Но пришлось самому. Кстати, о красоте кода:
И ищо:
|
|||
48
ДедМорроз
19.05.22
✎
00:17
|
Как можно испортить файл,если писать его правильно ?
Пространство имен,естественно,в заголовке,ну и не забывать префиксы у атрибутов и элементов. Понятно,что если писать как текст,то можно нарваться,например,на символ меньше в строке и т.п.,но тогда просто получится не совсем валидный xml. |
|||
49
Гений 1С
гуру
19.05.22
✎
08:47
|
(48) если разобрать по чтению ХМЛ, а собрать через запись ХМЛ, сохранив порядок тегов и атрибутов, все будет как часы, вы правы коллега. А вот Макс-С паранойю разводит. Я кстати прогрузил обработанный файл на 26 мб, все корректно прогрузилось.
Вот строки из протокола забавные: Укорочен номер: З-mohd_12180 до: hd_12180. Документ: Документ.ЗаказКлиента Укорочен номер: 000000736 до: 00000736. Документ: Документ.ЗаказПоставщику Укорочен номер: Сл000000714 до: 00000714. Документ: Документ.ПоступлениеТоваровУслуг Изменено значение тега: СуммаВозврата с: 64872.2399 на: 64872.24 Изменено значение тега: СуммаВозврата с: 429999.9987 на: 430000.00 |
|||
50
MaxS
19.05.22
✎
09:25
|
(47) >расширение перекрывает как миниум модуль МенеджерОбменаЧерезУниверсальныйФормат13.
>1с же постоянно код тусует, модули меняет. Формат 1.3 появился в 2017-м году, сейчас формат 1.10 на дворе, а 1С до сих пор не поменяла модуль и не перетусовала код. Как так? ;) В отличие от модулей, структура xdto и xml файла сильно поменялась. Увеличилась вложенность в структуре данных. (49) Это для тех, кто через цать лет будет читать данный топик, что так делать не рекомендуется. О то какой-нибудь новичок примет это за инструкцию к действию. Потом он станет гуру и выпустит библиотеку проктолога для работы с данными через энное место. ;) |
|||
51
Гений 1С
гуру
19.05.22
✎
21:02
|
(50) хахаха... Сам себя гуру не назовешь, никто не назовет? Да, Максик? Завидую твоему самомнению. Но факт остается фактом - 1С тусует модули часто, поэтому расширения устаревают быстрее, чем обработчики файлов обмена.
|
|||
52
Волшебник
модератор
19.05.22
✎
21:06
|
(51) Тусует, значит так надо.
|
|||
53
Гений 1С
гуру
19.05.22
✎
21:16
|
(52) нет. это лишнее. В Navision такого беспредела нет
|
|||
54
ДедМорроз
19.05.22
✎
22:33
|
На самом деле,в кпждом модуле у 1с есть программный интерфейс,а есть служебный программный интерфейс (не говоря уж о внутренних функциях).
Так вот,программный интерфейс тасуют редко и даже,если это делают,то оставляют старые функции для совместимости. Служебный программный интерфейс - это внутреннее дело 1с и про него никто и ничего не обещал - вот они и ездит туда-сюда с каждым шагом реализации. Опять же,некоторые вещи упрощают и стандартизуют - в результате также получпем переезды и переименования,но тут никуда не денешься. |
|||
55
MaxS
20.05.22
✎
07:28
|
(51) Взаимно. кто бы говорил. Глядя на ник. С тобой всё понятно. )
Что будет делать новоиспеченный 1С-ник, читая статьи "гения". Если встанет аналогичная задача при прямом соединении между базами. Где обработкой искать xml файл? Таблицу значений с данными посредством расширения обработать проще, прежде чем она попадёт в этот файл. Процедуры обмена (ПОД, ПКО и т.п.) не меняются с момента их появления, лет 8 уже. |
|||
56
Гипервизор
20.05.22
✎
07:39
|
(49) Касательно сферической в вакууме операции чтения и записи xml.
Была как-то задача "получить 100% исходный xml с заменой пары атрибутов". И оказалось, что ЗаписатьОбъявлениеXML() теряет директиву standalone. Поэтому пришлось написать так: ЗаписатьБезОбработки("<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>" + Символы.ВК + Символы.ПС). Без использования ВК + ПС к исходной кодировке UTF-8 добавлялся маркер BOM. Ну и конец строки в файле менялся с исходного Windows (CRLF). |
|||
57
Гений 1С
гуру
20.05.22
✎
07:40
|
(55) Боже мой, ну когда ты уже прочитаешь, что источником даныных является МойСклад... гггг...
(56) Да, с BOM у 1С знатные приколы. |
|||
58
MaxS
20.05.22
✎
08:53
|
(57) Преобразование xml ведётся обработкой 1С? Почему там же недоступна установка расширения 1С?
Дело в том, что xdto придумали чтобы не работать с xml напрямую. Поэтому прямое изменение xml в данной задаче - это крайний случай, если недоступны другие варианты. Поэтому пытаюсь подсказать, что существуют другие варианты. Возможна обработка данных как до помещения в xml, так и после извлечения данных из xml. И если какой-нибудь гений (а лучше квалифицированный специалист, который всего лишь знает БСП) исследует этот вариант и покажет часть кода, то... я им воспользуюсь, если пригодится. :-P |
|||
59
Выпрь
20.05.22
✎
08:54
|
(58) до нельзя, а после дорого
|
|||
60
Гений 1С
гуру
20.05.22
✎
10:06
|
(58) еще раз.
источник - мой склад. приемник - фреш. обработкой можно обработать хоть в 1С-деньгах. Но пользователь - бух, он будет в своей локальной бухне обрабатывать, чтобы фреш не мучать. (59) не в бровь а в глаз, решения на фреш *3 в ценнике |
|||
61
rsv
20.05.22
✎
10:58
|
(0) да хоть обычным текстовым парсером. Это же текст.
|
|||
62
rsv
20.05.22
✎
10:58
|
Быстрее дело пойдет
|
|||
63
ДедМорроз
20.05.22
✎
11:05
|
(56) BOM это же пробельные символы
Правильный парсер должен их игнорировать между тагами,как и в начале. И переводы строки тоже. То,что между тагами пишется текст,и потом он теряет форматирование - это не проблема xml,а проблема тех,кто его туда пихает. |
|||
64
Гений 1С
гуру
20.05.22
✎
11:57
|
(63) Гладко на бумаге, дык вот не все парсеры умеют игнорить (камень в огород тру-веб-программистов), вот тебе случай из практики: https://geniy1s.ru/json-bez-bom-kodirovki/
|
|||
65
ДедМорроз
20.05.22
✎
12:17
|
Очень плохо относится к BOM php,так как он однобайтовый,и они принципиально считают его мусорным символом.
В принципе,я их в чем-то поддерживаю,так как конкретную кодировку через BOM не задать,а что-то кроме utf-8 мало используется (особенно UTF-16le) Кроме того,в родных однобайтовых кодировках символы BOM имеют вполне конкретное значение,и их нельзя игнорировать. Опять же,классический json содержит только символы в диапазоне 0-127,переводя остальные в последовательности \x## или \u#### |
|||
66
ДедМорроз
20.05.22
✎
12:18
|
Ну и,как бы, json часть протокола http,а там сейчас utf-8 стандарт и никаких BOM нету.
|
|||
67
Конструктор1С
20.05.22
✎
13:57
|
(51) >>1С тусует модули часто
Тут снова дело в тебе. Не читаешь документацию и не умеешь программировать |
|||
68
Гений 1С
гуру
20.05.22
✎
14:22
|
(67) у насильника всегда жертва виновата, это да.
|
|||
69
lodger
20.05.22
✎
14:24
|
(68) на входе на завод все должны ознакомиться с ТБ и не совать хер куда попало.
а ты подписался за вход и бегаешь суешь где тебе понравится. потом завод виноват, ага. |
|||
70
Конструктор1С
20.05.22
✎
14:26
|
(68) как бы ты на той же Java работал? Там к одному проекту могут быть подключены десятки фреймворков, и все от разных вендоров, каждый кто во что горазд. В подушку рыдал бы?
|
|||
71
Kassern
20.05.22
✎
14:30
|
(68) у вас прям такие отношения с 1с?) Ужес какой, теперь понятно почему вы так к ней относитесь, не легко вам пришлось
|
|||
72
Гений 1С
гуру
20.05.22
✎
14:38
|
(70) я сторонник принципа KISS
|
|||
73
Выпрь
20.05.22
✎
14:41
|
(70) ага, а потом решают один фреймворк обновить и проект валится ибо все модули перетосавали.
В JS это кстати сплошь и рядом |
|||
74
Конструктор1С
20.05.22
✎
14:44
|
(71) ты сторонник велосипедно-костылёвого программирования
|
|||
75
Конструктор1С
20.05.22
✎
14:50
|
(73) не валятся, только у Г1Сов боль и проблема подружить свой код с чужим. Структурные паттерны проектирования уже почти 30 лет назад решили проблемы взаимодействия с чужим и разным кодом
|
|||
76
Конструктор1С
20.05.22
✎
14:51
|
||||
77
Выпрь
20.05.22
✎
15:02
|
(75) очень валятся
Я пока React.Mista писал - раз 5 наверно полностью модули менялись |
|||
78
ДедМорроз
20.05.22
✎
17:53
|
(75) если разработчики заинтересованы в совместимости,то не валятся.
А если что-то существенно поменяли,то валятся. Опять же,обновляются же не от нечего делать,а чтобы получить новый функционал,но при этом,часто теряется старый. |
|||
79
Выпрь
20.05.22
✎
19:46
|
(78) меняется ибо поняли, что старый код полное г... А нужно вот так. А потом по новой
|
|||
80
Гений 1С
гуру
21.05.22
✎
09:53
|
(79) видишь ли, если старый код полное г, то и новый обычно получается полным Г. и это бесконечное колесо ганотьбы. Получается, нужно когда-то делать текущий код конфеткой, тогда и дальше ломать и строить с нуля не придется.
|
|||
81
Гений 1С
гуру
14.07.22
✎
16:32
|
Чем все закончилось, написал тут: Работа с XML ничего нового не появилось?
|
|||
82
6awkup_true
14.07.22
✎
16:52
|
слишком понятный код. надо больше защиты
&НаКлиенте Процедура ОбработатьФайл(Команда) Ч = Новый ЧтениеXML(); Ч.ОткрытьФайл(ВИФ); КИ= Ч.КодировкаИсточника; С= Р(Ч); Ч.Закрыть(); Ф = Новый Файл(ВИФ); РИФ= Ф.Путь + Ф.ИмяБезРасширения + "_res" + Ф.Расширение; З = Новый ЗаписьXML; З.ОткрытьФайл(РИФ, КИ); З.ЗО(); СОБР(З, С); З.Закрыть(); КонецПроцедуры |
|||
83
Kassern
14.07.22
✎
17:13
|
(82) З.ЗО(); - это как?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |