23.05.2011, 18:36 | #1 |
Участник
|
Экспорт документа в XML
Подскажите есть ли простое решение проблемы, в такой ситуации:
У меня есть поставщик которого посадили недавно на AX2009, сам я работаю в 1С:Управление торговлей ред. 11 и динамикс видел только на картинках в интернете. А вносить руками кучу документов каждый раз уже надоедает и с растущими объемами и вовсе накладно. Захотелось этот процесс автоматизировать со стороны 1С. Начал просить у менеджера сделать мне экспорт накладной в XML(т.к. мне показалось что в таком продукте должен быть экспорт в XML) и прислать но как я понял он не знает как это сделать и тупо присылает мне каждый раз XLS файл ))) Гуру форума подскажите есть ли такая возможность, и как донести до менеджера поставщика как это сделать и прислать мне нужный файл? Заранее спасибо за помошь! |
|
23.05.2011, 19:17 | #2 |
Участник
|
Интеграция внешних приложений с Axapta
Коротко: Commerce Gateway - это отдельный модуль системы, который стоит отдельных денег. Ради одного документа, врядли кто-то будет с ним связываться. Просто хорошо попросите вашего поставщика, и я думаю, что ему не составит труда написать собственный экспорт документа в нужный вам формат. Я так понимаю, что это CommerceML? P.S.: На всякий случай напишу, что сам я знаком с этим по стольку по скольку. Так что если соврал, то кто-нибудь сейчас меня поправит. Последний раз редактировалось S.Kuskov; 23.05.2011 в 19:34. |
|
|
За это сообщение автора поблагодарили: mazzy (15). |
23.05.2011, 19:20 | #3 |
Участник
|
Не очень обширная статья, а для меня так и вовсе не понятная. Не значит ли это что некого базового механизма нету и чтобы сделать надо что то дорабатывать со стороны поставщика?
|
|
24.05.2011, 08:48 | #4 |
Участник
|
Порылся немного в существующих темах на форуме. Вот ещё что нашёл
Электронная накладная Сути дела это не меняет. Не Commerce Gateway, так AIF. Один фиг, одной большой кнопки на все случаи жизни не бывает. К тому же, не обижайтесь, но на одном 1C свет клином не сошёлся Отраслевые XML-стандарты в мире |
|
24.05.2011, 10:25 | #5 |
Участник
|
Ну в любом случае это говорит о том что менеджер сам этого не сделает ( и придется тащить данные из экселя. Я бы прочитал данные программно из любого стандарта
Я понимаю что на 1С свет клином не сошелся, но использовать другую систему я пока не собираюсь по многим причинам. Может в силу своей некомпетентности в вопросах динамикса, но как я понял получить аналог связки УТ+БП+ЗУП с двухсторонним обменом данными не получится сделать просто настройками придется покодить. Один из немаловажных факторов бухгалтера которые начинали работать еще с 7.5 и на предложение пересесть на какую нить систему отличную от 1С большинству проще написать заявление об увольнении чем переучиваться на новую систему. Так же сопровождение и поодержка: если в крупных городах с этим проблем нету то в регионах дороже выйдет. Вобщем пока я не сторонник этого приложения если в нем базового экспорта нету никуда о чем говорить дальше не знаю, и все надо самостоятельно программировать. В любом случае спасибо за помошь будем парсить xls |
|
24.05.2011, 10:55 | #6 |
Участник
|
Цитата:
Вот ещё нашёл ссылку в тему AIF: Проблема с использованием XSLT трансформации |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
24.05.2011, 11:57 | #7 |
Участник
|
погодите.
что-то все снова кинулись обсуждать технические аспекты хотелки. уверяю вас - технических проблем нет. AIF, запрограммировать OLE, и т.п. вопросы находятся на принципиальном уровне. на уровне концепции и на уровне администрирования. Цитата:
"Документ" - это пакет информации, которая сильно связана с остальной информацией в системе, которая верифицируется, которая имеет свой жизненный цикл. что значит "автоматизировать со стороны <любой-внешней-системы>"? это значит <любая-внешняя-система> должна: = корректно эмулировать правила, заложенные в <хост-систему> = корректно брать актуальную информацию из <хост-системы> = корректно обрабатывать возвращаемые из <хост-системы> сообщения Еще раз повторю: проблема не в технологиии, а на понятийном уровне. например, вы просите "сделать мне экспорт накладной в XML" а в Аксапте накладная является результатом обработки заказа. в ходе обработки заказа считывается информация из туевой хучи справочников, документов, остатков. в ходе обработки заказа выполняется туева хуча бизнес-правил. одновременно с созданием накладной создается туева хуча движений и проводок в других подсистемах аксапты поэтому, технически можно сформировать XML-файл для импорта накладной (который будет содержать и всю необходимую справочную информацию). но с информационной точки зрения скорее всего вы нарушите целостность данных в Аксапте ======================== Пояснение 1 на языке 1Сников по сути, вы спрашиваете как создавать проводки и движения по регистрам, вместо создания первичного документа. как вы понимаете в такой постановке корректно загрузить информацию в сложную конфу - предельно сложно. гораздо проще создавать таки первичный документ, а уже пусть сама 1С проводит так как нужно. так и в Аксапте - гораздо проще создать корректный заказ, чем корректную накладную, поскольку в Аксапте накладная - скорее движение по регистрам, нежели 1Совский первичный документ Посянение 2 на языке 1Сников 1С умеет обмениваться данными и конфигурацией при помощи XML-файлов. Но создать такой файл из внешней системы (даже из другой 1С) безумно сложно, поскольку внешняя система не знает о деталях хост-конфигурации. Поэтому в 7.7 подобный обмен был возможен только между идентичными конфигурациями, а в 8 обмен между разными конфигурациями настраивается чертовски трудоемко. ======================== помимо целостности, актуальности данных, корректной обработки возвращаемых сообщений.... есть еще один принципиальный момент, который надо решить при передаче данных из 1С в Аксапту. 1С позволяет изменять и перепроводить однажды проведенные документы. Аксапта запрещает изменять проведенные документы. как вы собираетесь "автоматизировать" в таких условиях - для меня загадка. ======================== в результате снова получаем тему в которой рассматриваются только технические аспекты, полностью игнорируются интересы заказчика. в которой делается "автоматизация" ради "автоматизации", ради фана программиста в которой трудоемкость решения выбранным способом ПРИНЦИПИАЛЬНО выше, чем даже трудоемкость ручного ввода ======================== поэтому. прежде чем рассуждать об AIF'ах, бизнес-коннекторах, таблицах и схемах взаимосвязей... сначала
после этого берите любой уже существующий на рынке платный инструмент интеграции AX-1C или программируйте в Аксапте. после того, как раберетесь на понятийном уровне - остальное уже является тривиальным делом. |
|
24.05.2011, 12:18 | #8 |
Участник
|
Цитата:
экспорт данных из таблицы в XML в аксапте конечно есть. вот пример выгрузки значений из шапки накладной. X++: static void Job65(Args _args) { CustInvoiceJour custInvoiceJour = CustInvoiceJour::findFromCustTrans('номер-накл',01\01\2011,'Клиент','Код операции'); ; info(custInvoiceJour.xml()); } но этот экспорт НЕ ДОСТУПЕН пользователю, поскольку для пользователя такой экспорт не несет никакого смысла. Поскольку с точки зрения пользователя данные - это не набор таблиц, это документ! (вы правильно ставите вопрос) НО! какие именно таблицы входят в документ, как связываются и какие правила действуют - сильно зависит от включенных конфигурационных ключей и от настроек. Рядовые пользователи обычно ничего об этом не знают. На языке 1Сников: пользователя 1с бесполезно спрашивать какие dh,dt,sc,ra,rg таблицы заполняются в результате его действий. Вопрос для пользователя 1С (и даже для некоторых программистов) будет абсолютно непонятен. поэтому: = вы спрашиваете в терминах, которые пользователь не понимает = вы ожидаете получить результаты, о которых пользователь не имеет представления = следовательно вы получаете ответ, который не имеет для вас никакого смысла. ========================= в Аксапте пользователям доступны выгрузки в предопределенных форматах (если на это конечно были даны права) например та же накладная может выгружаться в конкретном формате для загрузки в конкретную систему сбора налоговой отчетности в европе. эти конкретные форматы не предназначены для обратной загрузки в Аксапту ======================== поэтому не мучайте ваших пользователей. не задавайте им вопросы, которые они не понимают и не должны понимать. хотите структуру таблиц - забирайте. хотите значения из записи таблицы - забирайте. но сначала определитесь как вы будете обеспечивать корректность данных при импорте этих таблиц в Аксапту. учтите, что накладные только напрямую связаны с десятком таблиц. а косвенных связей будет несколько десятков. причем информация в разных таблицах должна подчиняться определенным правилам, чтобы быть целостной. |
|
24.05.2011, 12:32 | #9 |
Участник
|
Цитата:
Человек, который знает только одну систему, связку скорее всего не настроит и даже не запрограммирует. И технологические вопросы имеют мизерный вес в задаче "сделать двухсторонний обмен". |
|
24.05.2011, 14:24 | #10 |
Участник
|
Цитата:
по сути, вы спрашиваете как создавать проводки и движения по регистрам, вместо создания первичного документа.
как вы понимаете в такой постановке корректно загрузить информацию в сложную конфу - предельно сложно. гораздо проще создавать таки первичный документ, а уже пусть сама 1С проводит так как нужно. так и в Аксапте - гораздо проще создать корректный заказ, чем корректную накладную, поскольку в Аксапте накладная - скорее движение по регистрам, нежели 1Совский первичный документ Я готов принять XML файл со структурой любой сложности, это даже лучше когда товар файле выглядит не просто <НаименованиеТовара>Булочка </Наименование товара> а как описание объекта на который ссылается реквизит типа: <Номенклатура> <Наименование>Булочка</Наименование> <ЕдиницаИзмерения></ЕдиницаИзмерения> <Артикул>Ф1</Артикул> ..... <Реквизит_N></Реквизит_N> </Номенклатура> Естественно что вся информаци о нем мне не нужна, но то что мне необходимо я определю сам и достану из файла. Цитата:
1С умеет обмениваться данными и конфигурацией при помощи XML-файлов.
Но создать такой файл из внешней системы (даже из другой 1С) безумно сложно, поскольку внешняя система не знает о деталях хост-конфигурации. Поэтому в 7.7 подобный обмен был возможен только между идентичными конфигурациями, а в 8 обмен между разными конфигурациями настраивается чертовски трудоемко. В 7.7 был и есть обмен между разными конфигурациями например Бухгалтерия и ТИс и так же обмен делается через XML и это реализовано в типовых конфигурациях. Цитата:
помимо целостности, актуальности данных, корректной обработки возвращаемых сообщений....
есть еще один принципиальный момент, который надо решить при передаче данных из 1С в Аксапту. 1С позволяет изменять и перепроводить однажды проведенные документы. Аксапта запрещает изменять проведенные документы. как вы собираетесь "автоматизировать" в таких условиях - для меня загадка. По большому счету мне достаточно таблицы полученной выполнением запроса с колонками: Номенклатура, Артикул. ПолноеНаименованиеНоменклатуры, Цена, Количество, Сумма, Сумма НДС, Всего..это все. Ну в принципе еще можно номер накладной. Цитата:
пожалуйста, определите почему вы решили вклинится в накладную, а не в заказ
Вчера мне менеджер все таки выгрузил накладную XLS ввиде XML файла, но этот файл содержит в себе описание каждой пустой строки XLS документа, т.е. выгрузил мне описание не объекта а описание XLS файла Я понимаю что мы говорим на разных языках но эти языки чем то похожи, и я понял все о чем вы написали. Я просто пытался узнать есть ли типовые методы получить описание документа в виде XML файла, без дополнительного кодинга. Т.е. менеджер сделал накладную нажал на кнопку в шапке документа и сохранил эту накладную в XML файл, во всех Редакциях УТ(Управление торговлей) такое есть и выгружается в формате Commerce ML, и мне показалось что в таком продукте как динамикс не может такого не быть. Хотя бы какой нить из стандартов должен быть реализован без вмешательства программистов? |
|
24.05.2011, 15:28 | #11 |
Участник
|
Цитата:
что вы имеете в виду под "автоматизировать со стороны 1С"? я понял так, что вы хотите со стороны 1С создавать накладные в Аксапте. Тогда почему вы сейчас говорите "принять"? |
|
24.05.2011, 15:43 | #12 |
Ищущий знания...
|
на сколько я понял PLGroup хочет получать некий файл с накладной, который выгружается из аксапты, что бы потом на основании этого файла создать (провести) накладную в 1С.
а почему вы уперлись в XML? мне кажется достаточно просто попросить что бы Вам выгрузили строки накладной в эксель (вся необходимая информация для накладной в 1С там будет), и уже из экселя залить к себе в 1С накладную и радоваться жизни
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
24.05.2011, 17:53 | #13 |
Участник
|
Цитата:
Тогда: AIF. Поиск по форуму по ключевому слову "AIF" Поиск по тегу AIF например, Обмен данными с внешней системой пример кода здесь http://archive.msdn.microsoft.com/Pr...ownloadId=2861 X++: static void AifSample_CustomerService(Args _args) { /* All code used below is meant for illustration purposes only and not intended for use in production. The following disclaimer applied to all code used in this blog: Copyright (c) Microsoft Corporation. All rights reserved. THIS CODE IS MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE ENTIRE RISK OF THE USE OR THE RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE USER. USE AND REDISTRIBUTION OF THIS CODE, WITH OR WITHOUT MODIFICATION, IS HEREBY PERMITTED. */ /* This job demonstrates how to use AIF data objects to call an AIF service from X++. The CustCustomerService service class is used to call the CRUD + find service operations on customer data. The new service class delegates to the underlying Axd<Document> class for all operations. */ // TODO: Before creating a customer, make sure that the Number sequence for the reference Directory ID is setup at the following location: // Basic => Setup => Directory => Parameters => Number Sequences tab => Directory Id // TODO: The delete code has been commented out so that the created customer can actually be viewed from the CustTable form. Uncomment this code to test the delete functionality. CustCustomerService customerService; // Customer Service class CustCustomer customer; // Customer Document object CustCustomer customerRead; // Customer Document object CustCustomer_CustTable custTable; // CustTable data object CustCustomer_CustTable custTableRead; // CustTable data object AifEntityKeyList entityKeyList; // Entity key list AifEntityKeyList entityKeyListFind; // Entity key list AifQueryCriteria queryCriteria; AifCriteriaElement criteriaElement; AccountNum accountNum; ; // Create the service instance customerService = CustCustomerService::construct(); // Create the Customer document object customer = new CustCustomer(); customer.createCustTable(); // Create the CustTable list custTable = customer.parmCustTable().addNew(); // Add CustTable instance to CustTable list // Initialize the CustTable instance custTable.parmName("Cust01"); custTable.parmCustGroup("10"); custTable.parmCurrency("USD"); custTable.parmPartyType(DirPartyType::Organization); // Create Customer entityKeyList = customerService.create(customer); accountNum = entityKeyList.getEntityKey(1).parmKeyDataMap().lookup(fieldnum(CustTable, accountnum)); info(strfmt("Created customer: Account Number: %1.", accountNum)); // Read Customer using returned entity key customerRead = customerService.read(entityKeyList); custTableRead = customerRead.parmCustTable().get_Item(0); info(strfmt("Read customer: Account Number: %1, Name: %2.", custTableRead.parmAccountNum(), custTableRead.parmName())); // Update Customer custTableRead.parmName(custTableRead.parmName() + ": Updated Name"); customerService.update(entityKeyList, customerRead); info (strfmt("Updated Customer: Account Number: %1.", custTableRead.parmAccountNum())); // Call Read to check update customer = customerService.read(entityKeyList); custTable = customerRead.parmCustTable().get_Item(0); info(strfmt("Read updated customer: Account Number: %1, Name: %2.", custTable.parmAccountNum(), custTable.parmName())); // Call FindKeys to find entity keys of matching customer entity keys queryCriteria = new AifQueryCriteria(); criteriaElement = AifCriteriaElement::newCriteriaElement('CustTable', 'CustGroup', AifCriteriaOperator::Equal, '10'); queryCriteria.addCriteriaElement(criteriaElement); entityKeyListFind = customerService.findKeys(queryCriteria); info(strfmt("Find customer keys: Result count: %1", entityKeyListFind.getEntityKeyCount())); // Call Find to find matching customers queryCriteria = new AifQueryCriteria(); criteriaElement = AifCriteriaElement::newCriteriaElement('CustTable', 'CustGroup', AifCriteriaOperator::Equal, '10'); queryCriteria.addCriteriaElement(criteriaElement); customerRead = customerService.find(queryCriteria); info(strfmt("Find customer: Result count: %1", customerRead.existsCustTable()?customerRead.parmCustTable().get_Count():0)); info("TO DO: To test delete, uncomment delete code in the job."); // TODO: UNCOMMENT TO DELETE CUSTOMER /* // calling deleting customer customerService.delete(entityKeyList); info(strfmt("Deleted customer: Account Number: %1.", accountNum)); */ pause; } |
|
24.05.2011, 18:06 | #14 |
Участник
|
извините, работа.
продолжаю. соответственно для выгрузки "накладной" будет совсем простой код X++: static void AifSample_CustInvoice(Args _args) { AifQueryCriteria queryCriteria; AifCriteriaElement criteriaElement; SalesSalesInvoice SalesSalesInvoice; SalesSalesInvoiceService SalesSalesInvoiceService; ; // Create the service instance SalesSalesInvoiceService = SalesSalesInvoiceService::construct(); // Call FindKeys to find entity keys of matching customer entity keys queryCriteria = new AifQueryCriteria(); criteriaElement = AifCriteriaElement::newCriteriaElement('CustInvoiceJour', 'InvoiceId', AifCriteriaOperator::Equal, '00549_042'); queryCriteria.addCriteriaElement(criteriaElement); SalesSalesInvoice = SalesSalesInvoiceService.find(queryCriteria); info(SalesSalesInvoice.serialize()); } |
|
24.05.2011, 18:25 | #15 |
Участник
|
Я думаю, в том, что в аксапте экспорт накладной в XML файл можно запрограммировать, никто и не сомневался. Вопрос в том как этого добиться, используя стандартный функционал
Последний раз редактировалось S.Kuskov; 24.05.2011 в 18:31. |
|
24.05.2011, 18:59 | #16 |
Участник
|
стандартный функционал чего? 1Са? Аксапты?
я ж в коде вызывал только стандартный функционал аксапты. у меня такое ощущение что я тормоз. может вы хотите сказать: как пользователь может кнопочками получить XML-файл накладной? встречный вопрос: а нафига это пользователю? откуда ползьователь может понять какой именно xml-файл надо выгружать? я ж выше распинался, что есть некие фиксированные форматы для налоговых, для всяких статистик... пользователю понятно - выгрузить в евростат, выгрузить в таском, выгрузить в контур. такие кнопочки есть. но пользователю абсолютно непонятно что будет означать кнопочка "выгрузить все поля накладной". все - это какие все? и что потом делать пользователю с этими выгруженными всеми полями? и что будет с безопасностью? поэтому у пользователя нет таких кнопочек. и слава богу. аминь. не надо требовать от пользователей того, чего они не понимают. есть фреймворки для программиста, которые позволяют выгружать данные (программист должен знать что потом с делать с выгруженными данными) есть веб-сервисы для программиста, основанные на этих фреймворках, которые позволяют выполнять CRU-операции (CRUD - пока не у всех объектов). программист же должен обеспечить безопасность работы с данными. ================= в общем, я чего-то в вопросе не понимаю. не понимаю начиная с первого поста со слов "автоматизировать со стороны 1С" что это значит? не понимаю и последнего поста - что значит "экспорт накладной в XML файл ... используя стандартный функционал"? |
|
24.05.2011, 19:43 | #17 |
Участник
|
Цитата:
На накладой есть кнопка "Печать". Пользователь её жмёт и получает печатный документ Нет кнопки "Сохранить в XML". Пользователь не может получить тот же самый документ, в электронном виде. Почему нет? Наверное, потому что никому не нужна такая полуручная автоматизация. Если автоматизировать процесс обмена документами, то тогда уже автоматизировать его полностью, а это значит нужно исключать и такое звено цепи, как пользователь, нажимающий кнопку "Сохранить в XML" |
|
24.05.2011, 20:04 | #18 |
Участник
|
Цитата:
Сообщение от mazzy
Принять?! тогда я вообще перестал что-либо понимать.
что вы имеете в виду под "автоматизировать со стороны 1С"? я понял так, что вы хотите со стороны 1С создавать накладные в Аксапте. Тогда почему вы сейчас говорите "принять"? Цитата:
Сообщение от lev
на сколько я понял PLGroup хочет получать некий файл с накладной, который выгружается из аксапты, что бы потом на основании этого файла создать (провести) накладную в 1С.
а почему вы уперлись в XML? мне кажется достаточно просто попросить что бы Вам выгрузили строки накладной в эксель (вся необходимая информация для накладной в 1С там будет), и уже из экселя залить к себе в 1С накладную и радоваться жизни Так же к минусам отношу то что одно поле может содержаться в нескольких ячейках, и гипотетически может меняться начало табличной части(номер строки) и номера значимых для меня колонок, чего в XML , быть не должно. Цитата:
Сообщение от mazzy
может вы хотите сказать: как пользователь может кнопочками получить XML-файл накладной?
встречный вопрос: а нафига это пользователю? откуда ползьователь может понять какой именно xml-файл надо выгружать? Пользователю не надо задумываться "зачем"? Дядя программист реализовал такую возможность, а дядя клиент попросил такой файлик, все просто. P.S. Есть процесс:мввод накладной в базу руками. Что такое автоматизация этого процесса? Уменьшение времени затрачиваемого на ввод данных! Каким образом? Автоматической загрузкой! Каким образом? Используя некие файлы: XML, XLS, DBF. предпочтительно для меня XML, если нет такой возможности то буду тянуть из заказа сохраненного в эксель проверять строки на статус отгружено и так далее кучу проверок и прочей деятельности ) От поставщика мне больше никаких данных не надо, а данные от меня(оплата за товары) они грузят в 1С и далее как то сдруживают с аксаптой ..это меня уже не касается ) |
|
24.05.2011, 20:04 | #19 |
Banned
|
Почему вы все говорите, что кнопки нет? А как же Send electroniclly > Original/Copy?
Можно и автоматизировать, чтобы AIF сам сохранял при разноске. |
|
|
За это сообщение автора поблагодарили: mazzy (2), S.Kuskov (2). |
24.05.2011, 20:15 | #20 |
Участник
|
Цитата:
Почему нет? Наверное, потому что никому не нужна такая полуручная автоматизация. Если автоматизировать процесс обмена документами, то тогда уже автоматизировать его полностью, а это значит нужно исключать и такое звено цепи, как пользователь, нажимающий кнопку "Сохранить в XML"
У меня у поставщика туева хуча товаров...и чтобы мне сделать счет покупателю мне нужно вносить товары в свою учетку руками..мониторить дубли товаров(т.к. не только я вношу туда их). А можно загрузить каталог от поставщика и не мучаться. Не надо всем выгружать, только тем кому может это облегчить ввод информации. Какой то жалкий 1С реализовал такую возможность, а такой гигант как Microsoft нет. Да, возможно майкрософт считает это ненужным но многие так не считают и предпочитают по возможности загружать накладные не руками(если в накладной по 1000 позиций 1/3 из которых новые позиции сколкьо времени уйдет на занесение руками? Час..не меньше!) Причем в теме были озвучены стандарты XML, но не один из стандартов не был реализован в аксапте. что вам удобнее со стороны аксапты делать? Читать данные из EXCEL или читать данные из XML или пусть пользователь долбит накладную в 1000 строк руками? |
|