Обмен без правил. От простого к сложному

Публикация № 972535

Разработка - Обмен данными 1С - Перенос данных из 1C8 в 1C8

Обмен синхронизация xdto web-service xml dom xsl

126
Пишем обмен с нуля, разбираемя с разными способами сериализации, учимся редактировать XML документы, создаем XDTO и Web service, осваиваем Script variant - English.

Введение

Обмен между конфигурациями с идентичными метаданными

Обмен между конфигурациями с различными метаданными

Обмен между конфигурациями с разными метаданными с использованием XDTO

Заключение


Введение

Обмен будет работать между двумя конфигурациями на платформе 1С. Он будет иметь следующую логику: из одной базы данных будут выгружаться элементы справочников и документа. Будем называть такую базу Trade (имя только для того, чтобы в дальнейшем различать конфигурации). Далее выгруженные данные будут загружаться в базу данных Accounting. Из Accounting в Trade будет загружаться только документ. Реализация такого обмена будет выполнена за 3 итерации, на каждой будет получен работоспособный обмен данными.  Конфигурации можно использовать в других решениях в качестве шаблона.

Обмен между конфигурациями с идентичными метаданными

Работа с метаданными

На первой итерации создадим обмен с отбором между идентичными конфигурациями. В качестве транспорта данных будем использовать файлы.

Создадим новую конфигурацию с именем Trade. В ней создадим роль FullRights, в которой включим флажок Назначать права для новых объектов.  Укажем эту роль в качестве основной роли в свойствах конфигурации.

Создадим справочники Companies, Counterparties, Products, в которых все оставим по умолчанию.

Создадим документ SupplierInvoice. Добавим реквизит Company с типом CatalogRef.Companies. Добавим реквизит Counterparty с типом CatalogRef.Counterparties. Добавим табличную часть Inventory с реквизитом Product, тип которого CatalogRef.Products и Quantity с типом Number.

Создадим план обмена с именем NoRull. Изменим длину кода на 40, длину наименования на 50 символов. В состав плана обмена включим справочники Counterparties, Products с включенной авторегистрацией. Для документа SupplierInvoice и справочника Companies отключим авторегистрацию.

Реализуем возможность регистрации данных с учетом отбора. Для этого у плана обмена добавим реквизит Company с типом CatalogRef.Companies. Для каждого узла обмена (узел обмена = элемент плана обмена) данные будут фильтроваться по указанной в узле организации. Создадим подписку на событие OnWrite (ПриЗаписи) для документа и обработчик подписки разместим в общем модуле с взведенным флагом Сервер (не будем учитывать Толстый клиент). 

 
 Сниппет обработчика подписки на событие при записи документа:

Функция ExchangeNodesByCompany модуля менеджера плана обмена возвращает массив узлов, организация которых совпадает с переданной в нее организацией. Далее для таких узлов регистрируется изменение документа по ссылке.  Создадим аналогичную подписку для справочника Companies.

Для реализуемого варианта обмена создание узлов плана обмена – ручная операция, поэтому в режиме Предприятие в плане обмена зададим код и наименование для текущего узла, а также создадим еще один узел с заполненой организацией. После этого создадим пару организаций, 1 контрагента, пару товаров, несколько приходных накладных.

Проверить объекты, которые зарегистированы к выгрузке, можно с помощью любой консоли запросов. В конструкторе запросов нажимаем на кнопку Отображать таблицы изменений и выбираем данные из нужной таблицы.

Создадим общую форму ExchangeManagement, с помощью которой будем выполнять обмен данными. Добавим реквизит формы ExchangeCatalog с типом Строка и реквизит ExchangeNode с типом ExchangePlanRef.NoRull. Создадим элементы формы для созданных реквизитов. Также добавим команду, которая будет запускать выполнение обмена. Форму разместим на начальной странице приложения.

Подготовительные работы на этом закончены. Перейдем к реализации алгоритмов обмена.

Кодирование

Алгоритм обмена условно можно разделить на следующие пункты:

Импорт данных

  • Чтение заголовков файла обмена
  • Удаление зарегистрированных объектов для отправителя
  • Чтение тела файла обмена
  • Фиксация факта обработки данных

Экспорт данных

  • Формирование заголовков файла обмена
  • Формирование тела файла обмена
  • Фиксация факта обработки данных

Данный функционал реализуется за несколько строк кода. В общем модуле создадим экспортную процедуру ExecuteExchange с входящими параметрами Directory и Node, в которые будем передавать значения реквизитов общей формы ExchangeManagement. Процедура ExecuteExchange в свою очередь будет вызывать  процедуры ImportData и ExportData с аналогичными входящими параметрами.

 
 Сниппет процедуры ImportData:

Функция GenerateFileName на основнии кодов узлов обмена формирует имя файла обмена с данными для импорта (пример - D:\обмен\от 01 для 02.xml). Ситуация с отсутствующим файлом возможна при первоначальной синхронизции данных. Если же файл существует, то читаем его заголовки, которые имеют следующий вид:

<v8msg:Header>
	<v8msg:ExchangePlan>NoRull</v8msg:ExchangePlan>
	<v8msg:To>01</v8msg:To>
	<v8msg:From>02</v8msg:From>
	<v8msg:MessageNo>13</v8msg:MessageNo>
	<v8msg:ReceivedNo>33</v8msg:ReceivedNo>
</v8msg:Header>

В заголовке содержится информация об имени плана обмена, кодах узлов и номерах сообщений. Наверное, каждый встречал ошибку при обмене, которая сообщает о том, что номер сообщения меньше или равен принятому. Поэтому для упрощения разрабатываемого алгоритма в метод  BeginRead (НачатьЧтение) вторым параметром передадим, что ожидаются данные только с номером сообщения больше принятого. Если заголовки были успешно прочитаны, то это означает, что узел-отправитель успешно принял данные и теперь для него можно удалить все зарегистрированные для выгрузки данные, но номер сообщения которых меньше или равен номеру полученного сообщения (это базовые основы работы планов обмена платформы 1С, подробное описание их работы выходит за рамки данной статьи). 

После этого читаем тело сообщения пока это возможно с помощью CanReadXML (ВозможностьЧтенияXML). Так как на данном этапе алгоритм предполагает обмен между конфигурациями с идентичными метаданными, то десериализация и сериализация прикладных объектов возможна с помощью ReadXML (ПрочитатьXML) и WriteXML (ЗаписатьXML) соответственно (методы обходят метаданные сериализуемого объекта и записывают/читают документ xml в точно таком же порядке). Для того, чтобы записываемый объект при обмене не регистрировался для выгрузки, в свойстве DataExchange (ОбменДанными) укажем узел плана обмена, от которого этот объект получен.

После того, как тело сообщения будет прочитано, вызовем метод EndRead (ЗакончитьЧтение), который увеличит номер принятого сообщения в узле обмена.

 
 Сниппет процедуры ExportData:

При выгрузке данных аналогично получим имя файла, в который будут записываться данные. Далее с помощью метода CreateMessageWriter (СоздатьЗаписьСообщения) создадим объект RecordOfMessage, с помощью которого можно будет записать сериализованные данные. Метод BeginWrite (НачатьЗапись) объекта RecordOfMessage, формирует заголовки сообщения и объявляет начало тела сообщения. Далее метод SelectChanges (ВыбратьИзменения)  вернет коллекцию ссылок на данные, которые подлежат выгрузке в узел-получатель (RecordOfMessage.Recipient). Далее обходим коллекцию, получаем выгружаемый объект и сериализуем его с помощью WriteXML (ЗаписатьXML).  Для корректного завершения процесса выгрузки вызовем метод EndWrite (ЗакончитьЗапись), который сформирует окончание тела сообщения и увеличит номер отправленного сообщения в узле обмена.

Запустим режим Предприятие, укажем каталог обмена, узел-получатель (для которого ранее заполняли организацию) и выполним обмен. Если все сделано правильно, то в каталоге обмена должен появиться документ xml (сообщение обмена), в котором будут данные из базы Trade

Теперь создадим новую конфигурацию и загрузим в нее ранее созданную конфигурацию Trade. Имя конфигурации зададим как Accounting (только для того, чтобы различать конфигурации). Удалим подписки на события, в плане обмена удалим реквизит Company, отключим авторегистрацию для справочников и включим для документа. Это позволит регистрировать изменения только для документа.

В режиме Предприятие для текущего узла зададим код и наименования точно такие же, как в базе Trade для узла с заполненой организацией. Добавим еще один узел обмена с кодом и наименованием такими же как и в базе Trade для узла с незаполненой организацией.

Выполним обмен данными, указав каталог обмена и выбрав узел обмена, для которого будем выгружать данные (от которого получаем). Если все сделано правильно, то в базу Accounting загрузятся данные из Trade, а в каталоге обмена появится еще один документ xml. В нем будут только заголовки (Headers), в которых будет информация о номере успешно принятого сообщения. Если в Accounting записать документ SupplierInvoice и выполнить обмен, то благодоря тому, что при импорте данных чтение сообщения происходит в попытке/исключение, мы не увидим ошибки о том, что номер сообщения меньше или равен предыдущему, а в сообщении для Trade появится тело сообщения. 

Вот так за минут 20 можно создать простейшую систему обмена данными между решениями на платформе 1С. При желании практически весть код методов импорта и экспорта данных можно найти в СП. Но реализованный алгоритм имеет один большой недостаток, который рассмотрим далее.

Обмен между конфигурациями с различными метаданными

Работа с метаданными

На второй итерации реализуем алгоритм обмена данными между конфигурациями с разными метаданными. В качестве транспорта данных будем использовать файлы.

Откроем конфигурацию Trade в режиме Конфигуратор и в документе поменяем порядок реквизитов Company и Counterparty. Затем в режиме Предприятие зарегистрируем документ к выгрузке (достаточно перезаписать документ) и попробуем выполнить обмен. На этапе загрузки файла с данными в Accounting получим ошибку преобразования xml. Вернем порядок реквизитов в Trade, а в Accounting у документа удалим реквизит Company и справочник Companies поскольку в нем нет практического смысла, ведь в Accounting всегда только одна организация. Теперь если из Trade выгрузить документ или элемент справочника Companies, то при попытке загрузки такого файла в Accounting получим уже знакомую ошибку разбора xml. Таким образом мы нашли главный недостаток разработанного ранее алгоритма обмена – метаданные объектов, которые участвуют в обмене, должны быть полностью идентичны (в том числе и порядок реквизитов).

Для решения данной задачи будем использовать постобработку xml. После выгрузки из Trade в документе xml нужно удалить все, что связано с организацией и перед загрузкой в Trade в документе xml добавить организацию для документа. Используем два способа редактирования xml – преобразование документа по шаблону (XSLT) и объектную модель (DOM).

На общей форме управления обменом добавим возможность выбора типа обработки данных xml – DOM или XSLT.

Кодирование

Теперь выгрузим из Trade элемент справочника Companies и документ SupplierInvoice, а потом проанализируем получившийся документ xml. В документе xml нужно удалить два узла - DocumentObject.SupplierInvoice/Company и CatalogObject.Companies. Для начала используем XSLT. В качестве редактора таблицы XSL я использую онлайн инструмент. В итоге должна получиться следующая таблица XSL:

 
 XSLT для удаления тегов, связанных с Company

Сначала указываем, что будем использовать xsl преобразование и указываем имя пространства имен для того, чтобы преобразователь понимал что именно является инструкциями преобразования. Далее указываем, что на выходе ждем xml с определенной кодировкой и отформатированный отступами. Затем определяем "пространство", которое хотим преобразовать - в данном случае весь документ. (каждый узел со всеми его атрибутами).  И дальше копируем каждый узел. После этого также определяем "пространство" как реквизит Company документа SupplierInvoice и элемент справочника Companies, но в качестве операторов преобразования ничего не ипользуем, то есть просто удаляем такие узлы.

Сохраним полученную таблицу XSL как макет плана обмена в конфигурации Trade. После метода, который экспоритрует данные, добавим вызов метода, который преобразует сформированный документ xml.

 
 Сниппет функции TransformByXSLT

Используем объект платформы XSLTransform (ПреобразованиеXSL),  которому передадим XSL таблицу (переменная Instructions). Далее вызовем метод TransformFromFile (ПреобразоватьИзФайла) и в качестве параметра передадим путь к документу xml, который нужно преобразовать. На выходе получим преобразованный xml документ, который нужно записать под именем FileName. 

Реализуем такой же функционал с помощью объектной модели документа xml.

 
 Сниппет функции DomDocumentByFileName

Прежде всего получим DOM документ по имени файла (переменная Path)

 
 Сниппет процедуры TransformXMLByDOMAfterExport

Далее будем использовать XPath (язык запросов к xml). Необходимо найти узел CatalogObject.Companies, который находятся на любом уровне дерева, именно поэтому используем // в поиске. Если такой узел найден, то удаляем его как дочерний узел родительского узла. Аналогично поступим с узлами DocumentObject.SupplierInvoice/Company, которых может быть несколько в документе и именно поэтому удалять такие узлы будем в цикле. Затем обработанный DOM документ необходимо сохранить под именем исходного документа xml.

Обработанный любым из двух способов, документ xml будет успешно загружен в Accounting. Если Вы впервые сталкивваетесь с XSLT и XPath, то рекомендую этот ресурс для изучения.

Остается добавить организацию в документ xml перед загрузкой в Trade. Поскольку в Accounting данные всегда по одной организации, то ИД организации для подстановки в документы можно брать как ИД организации, которая указана в узле отправителе. Для этого разработаем новую таблицу XSL.

 
 XSLT для добавления тега Company в документ

Идея преобразования документа xml в следующем - определяем область, в которой будем что-либо менять - v8msg:Body/DocumentObject.SupplierInvoice/Posted (так как у узла Body есть префикс, то определим в заголовке документа пространство имен как xmlns:v8msg="http://v8.1c.ru/messages). Далее перебираем все узлы в этой области и к узлу Posted добавляем его текущее значение, а также узел  Company со значением $CompanyId ($CompanyId заменим через СтрЗаменить на Гуид организации узла обмена). Полученную таблицу используем по аналогии с экспортом данных и преобразованный документ xml сохраним.

Реализуем такой же функционал, но с помощью объектной модели документа xml.

 
 Сниппет функции TransformXMLByDOMBeforeImport

Выбираем все узлы DocumentObject.SupplierInvoice/Counterparty, которые находятся на любом уровне дерева. Обходим коллекцию таких узлов и добавляем новый узел DocumentObject.SupplierInvoice/Company для узла DocumentObject.SupplierInvoice, но перед DocumentObject.SupplierInvoice/Counterparty. Сохраняем обработанный DOM документ.

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

Обмен между конфигурациями с разными метаданными с использованием XDTO

Работа с метаданными

На третьей итерации переработаем созданный ранее алгоритм. Откажемся от пост обработки документов xml, а в качестве транспорта данных будем использовать http. Инциатором обмена будет всегда выступать один из его участников, то есть можно сказать, что будет Клиент (инициатор) и Сервер (обработчик запросов клиента). Поэтому в качестве Клиента будет выступать Accounting (зададим новое имя конфигурации Client), в роли Сервера будет Trade (новое имя конфигурации Server). При инициации обмена клиентом подготавливается сообщение обмена и вызывается метод веб сервиса сервера, который отвечает за импорт данных. Сообщение обмена обрабатывается сервером и клиент получает результат обработки. Если он успешен, то вызывается метод веб сервиса сервера, который отвечает за экспорт данных. На сервере подготавливается сообщение обмена и отправляется в качестве ответа клиенту. В свою очередь клиент обрабатывает полученное сообщение.

Тело сообщения (узел Body в документе xml) можно использовать как "контейнер" для передачи любой сериализуемой информации. В качестве "шаблона", по которому будем формировать тело, используем XDTO пакет.

В конфигурации Server создадим XDTO пакет с именем пространств имен http://norull.com (имя может быть любым, главное чтобы оно было уникально в рамках проекта). Структура пакета следующая:

  • Типы значений - все возможные типы значений, которые будут встречаться в рамках разрабатываемого пакета. Базовые типы всех значений из пространства имен http://www.w3.org/2001/XMLSchema (необязательно).
  • Тип Objects - "родительский контейнер", в который будут помещаться все сериализованные объекты.  
  • Object - список XDTO с типом Object
  • Тип Object - базовый тип для всех остальных сущностей (Counterparty, Product, SupplierInvoice)
    • Id - тип IdType
    • DeletinoMark - тип FlagType
  • Тип Counterparty - базовый тип Object
    • Description - тип DescriptionType
  • Тип Product - базовый тип Object 
    • Description - тип DescriptionType
    • SKU - тип DescriptionType
  • Тип SupplierInvoice - базовый тип Object
    • Number - тип NumberType
    • Date - тип DateTimeType   
    • Counterparty - тип IdType
    • Inventory - "родительский контейнер", в который будем помещать строки табличной части документа
      • InventoryItem - список XDTO
        • Product - тип IdType
        • Quantity - тип QuantityType 

 

 

 

Создадим веб сервис с именем пространств имен http://norull.com и созданным ранее XDTO пакетом. Имя файла публикации зададим как server.ws. Вэб сервис будет обслуживать две операции - импорт и экспорт данных. Обе операции не могут возвращать пустое значение и будут выполняться в транзацкии (соответствующие флажки в свойствах операции). Операция импорта будет иметь 3 входящих параметра - идентификатор узла инициаотора обмена (NodeId, тип IdType), наименование узла отправителя (NodeDescription, тип DescriptionType) и данные для загрузки (Data, тип String). Операция экспорта будет иметь 1 входящий параметр - идентификатор узла инициатора обмена. 

Кодирование

Из модуля веб сервиса вызовем функцию общего модуля, в которую передадим в качестве параметров - параметры метода вэб-сервиса.

 
 Сниппет процедуры импорта данных в Trade 

Функция FindCreateExchangeNodes модуля менеджера плана обмена проверяет наличие узла обмена с переданным ИД. Если такого нет, то создает его, а также инициализирует текущий узел обмена и устанавливает флаг NeedFullExchange в true. Таким образом в текущем варианте обмена нет необходимости вручную создавать узлы планов обмена. Далее если это новый обмен, то вызывается процедура ObjectsRegistrationForFullExchange, которая по определенной логике регистриует объекты для выгрузки. Затем из параметра Data получаем документ XML (сообщение обмена) и пробуем прочитать заголовки сообщения. Если их прочитать удалось, то удаляем зарегистрированные изменения для узла-отправителя. Далее читаем тело сообщения с помощью метода глобального контекста XDTOFactory.ReadXML (ФабрикаXDTO). Согласно созданному ранее XDTO пакету, все объекты XDTO будут находиться в "контейнере" Objects.Object, который может быть как списоком XDTO (если объектов больше 1) так и объектом XDTO (если объект в списке 1). Поэтому поместим все объекты XDTO в массив, с которым будем работать в дальнейшем. Так как в данном примере известно, что от клиента может прийти только документ, то при переборе массива объектов XDTO по имени объекта определяем тип текущего объекта и если это документ, то  вызываем метод FindCreateSupplierInvoice (сниппет метода далее). После перебора всех элементов массива заканчиваем чтение сообщения обмена и возвращаем ответ инициатору обмена.

 
 Сниппет метода FindCreateSupplierInvoice

Рассмотрим сниппет, который преобразует данные XDTO объекта в прикладной объект конфигурации (документ). Сначала пробуем получить ссылку на документ по ИД. Если ссылка существует, то получим объект от этой ссылки, в противном случае создадим новый документ и присвоим ему ссылку, которая пришла по обмену. Далее заполним атрибуты шапки и табличную часть документа, установим свойство Загрузка в истину и запишем документ с учетом пометки удаления. На этом алгоритм импорта данных готов. 

Реализуем алгоритм экспорта данных. Из модуля веб сервиса вызовем функцию общего модуля, в которую передадим в качестве параметра - параметр метода веб сервиса.

 
 Сниппет метода экспорта данных из Trade

Данный метод подготавливает список XDTO Objects.Object согласно зарегистрированным изменениям для узла обмена, ссылку на который находим по переданному коду узла. Затем с помощью XDTOFactory.WriteXML (ФабрикаXDTO.ЗаписатьXML) сериализуем подготовленный список и записываем его как тело сообщения. После завершаем запись сообщения обмена и упаковываем сообщение в строку Base64 формата. Отправляем ответ в формате json инициатору.

Реализуем алгоритм вызова веб сервиса со стороны клиента. Для этого в общей форме ExchangeManagement добавим команду, которая будет вызывать метод ExecuteExchange общего модуля, и реквизит формы, в котором будем указывать адрес опубликованной на веб сервере базы сервера.

 
 Сниппет метода ExecuteExchange

Сначала получаем WSPorxy веб сервиса. Далее процедуры экспорта и импорта данных практически такие же как и в Trade, с той разницей, что при экспорте данных вызывается метод веб сервиса ImportData (то есть клиент данные экспортирует, а сервер их импортирует), а при импорте данных вызывается метод веб сервиса ExportData (сервер данные экспоритрует, а клиент импортирует), а также фабрика xdto используется от объекта WSPorxy.

Заключение

Каждый из рассмотренных трех вариантов реализации синхронизации данных хорош для конктертной задачи. Но на практике, как правило, используется 3 вариант (обмен с мобильным устройством или сайтом). Приведенный алгоритм реализации вполне работоспособный, но есть ряд фич, которые могут быть добавлены:

  • Обработка сбоев
  • Асинхронный обмен
  • Кэширование
  • Коды доступа приложений (мобильные устройства)
  • Перенос данных регистров
  • Удаление объектов
  • Отложенное проведение документов
  • Коллизии при обмене
  • Передача и сжатие больших объемов данных

Если материал вызовет достаточный интерес в комьюнити, то сделаю продолжение по вышеозвученным фичам.

В архивах данной публикации можно найти конфигурации всех трех вариантов обмена со всеми формами и методами, код которых не был добавлен в данный материал по причине его объемности.

Третий вариант обмена доступен на github

126

Скачать файлы

Наименование Файл Версия Размер
Обмен между конфигурациями с идентичными метаданными
.zip 47,72Kb
15.01.19
2
.zip 47,72Kb 2 Скачать
Обмен между конфигурациями с различными метаданными
.zip 49,35Kb
15.01.19
2
.zip 49,35Kb 2 Скачать
Обмен между конфигурациями с разными метаданными с использованием XDTO
.zip 53,81Kb
16.01.19
3
.zip 53,81Kb 3 Скачать

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. Vladimir Litvinenko 16.01.19 14:45 Сейчас в теме
Проблема кодирования на английском в том, что правила языка сложнее соблюсти. ExchangePlans.NoRull например следовало бы назвать ExchangePlans.NoRules. Но код на английском действительно приятнее читается (субъективно).

По XSLT в приложении к 1С информации почти нет, а та что есть даёт мало разъяснений или отсылок к документации. Что и почему делается - непонятно. Кстати здесь тоже )) Поэтому продолжение было бы интересно почитать. Только с большим количеством разъяснений что и зачем сделано.

По XDTO тоже хороший пример. Постоянно наблюдаю как для веб-сервисов делают объекты исключительно со строковыми свойствами и укладывают в них невалидируемый JSON зачем-то )) Вместо того чтобы наоборот валидируемый XDTO-объект, если прямо очень нужно, во что-то упаковывать. Лучше уж тогда http-сервис делать. Вроде бы как и JSON можно автоматически валидировать, но не видел примеров для 1С. Было бы классно увидеть больше примеров с разъяснениями.

С другой стороны у Вас входящий пакет данных Data - это строка. То есть данные не валидируются автоматически на входе самим веб-сервисом. Почему бы не передавать непосредственно объект, а не строку, чтобы сохранить возможность автоматической валидации? Ведь всё равно для передачи по транспортному уровню данные сжимаются.

Вот еще например про правильный подход написано
Из модуля веб сервиса вызовем функцию общего модуля, в которую передадим в качестве параметров - параметры метода вэб-сервиса.

А почему так сделано Вы не сказали. Тоже ведь частая проблема в том, что разработчики всю логику в модуле самого веб-сервиса реализуют.

В общем объяснения примененных приемов надо больше, чтобы не выглядело как "я достаю из шляпы кролика" )) Подпишусь на случай если будет продолжение ))
KidMo; jif; eeeio; +3 Ответить
2. s_vidyakin 16.01.19 20:14 Сейчас в теме
(1)
Почему бы не передавать непосредственно объект, а не строку

у нас на проекте передается объект, но минус в том, что если передать кривой XML, клиент получит 500 ошибку с невнятным сообщением о несоответствии формата пакета. Для строки можно при парсинге выдать сообщение в красивом виде, если есть желание заморочиться, но мы переложили ответственность на клиента - не прислал данные в нормальном виде, сам виноват, читай документацию к формату обмена
4. fr13 624 17.01.19 04:37 Сейчас в теме
(1)
Проблема кодирования на английском в том, что правила языка сложнее соблюсти

Согласен, но лучше попробовать и ошибиться, чем не пробовать.

По XSLT в приложении к 1С информации почти нет

По XSLT придется писать самостоятльный материал и может даже не один. На ИС есть несколько статей на эту тему. Помню, что в одной из них хорошо расказанно про пространства имен например. Но, по факту, на практике, я чаще сталкиваюсь с XPath, нежели с XSL.

С другой стороны у Вас входящий пакет данных Data - это строка

Любой ОбъектXDTO имеет метод Проверить(). Поэтому проверку валидности можно выполнять на клиенте. А если передавать сам объект, то его не получится сжать.
Про XDTO и его создание можно тоже писать отдельный материал. Там очень много чего можно сделать и документации от 1С особо нет по этому вопросу.

частая проблема в том, что разработчики всю логику в модуле самого веб-сервиса реализуют

Так делаю потому что в каком-то из релизов отсутствовал синтакс-контроль модулей веб сервисов. Ну и так правильно делать с точки зрения архитектуры приложения (в мире Swift это можно назвать MVC, а здесь не знаю емкого определения. Может быть - стандарты 1С).

А в целом, спасибо за развернутый комментарий ))
15. Vladimir Litvinenko 17.01.19 12:47 Сейчас в теме
(4)
Тоже ведь частая проблема в том, что разработчики всю логику в модуле самого веб-сервиса реализуют. 


Так делаю потому что в каком-то из релизов отсутствовал синтакс-контроль модулей веб сервисов. Ну и так правильно делать с точки зрения архитектуры приложения


Есть еще одна причина, чтобы выносить методы в общие модули. Методы из модуля веб-сервиса нельзя вызвать из других модулей конфигурации, даже если методы модуля веб-сервиса объявлены как экспортные.

Это ведет к проблемам с отладкой и ограничивает переиспользвоание кода.

Кстати, если реализовывать в общем модуле не только логику работы, но и полностью дублировать методы веб-сервиса с их сигнатурами, то появляется интересная возможность как выполнять отладку без публикации веб-сервиса, так и работать с этими методами как с общими методами конфигурации.

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

Для случая отладки без публикации можно использовать код, который в режиме отладки вместо прокси веб-сервиса использует непосредственно общий модуль. Мне не раз помогал такой код, может быть и Вам пригодится :

    Если НЕ ОфлайнТестирование Тогда
        Попытка
            Определение = Новый WSОпределения(WDSL_URL);
            Прокси = Новый WSПрокси(Определение, ПространствоИменВебСервиса, ИмяВебСервиса, СпецификацияВерсииSoap);
            ИспользуемаяФабрика = Определение.ФабрикаXDTO;
        Исключение
            СообщениеОбОшибке = ОписаниеОшибки();
            ВызватьИсключение "Нет соединения с сервисом "+ИмяВебСервиса + " " + Строка(СообщениеОбОшибке);
        КонецПопытки;

    Иначе //офлайн тестирование без вызова веб-сервиса

        Выполнить("Прокси = ИмяОбщегоМодуляРеализующегоОперацииВебСервиса");
        ИспользуемаяФабрика = ФабрикаXDTO;

    КонецЕсли;

    ТипРТУ = ИспользуемаяФабрика.Тип(ПространствоИменТиповРТУ, ИмяТипаСтруктурыРТУ);
    ТипСтрокаРТУ = ИспользуемаяФабрика.Тип(ПространствоИменТиповРТУ, ИмяТипаСтруктурыСтрокиРТУ);
    СтруктураРТУ = ИспользуемаяФабрика.Создать(ТипРТУ);

    ЗаполнитьСтруктуруРТУПоСсылкеНаРТУ(ИспользуемаяФабрика, СтруктураРТУ, ТипСтрокаРТУ, СсылкаНаРТУ);
    СтруктураРТУ.Проверить();

    Если НЕ Прокси.CreateTransferOrderBasedOnRTU(СтруктураРТУ) Тогда
        ВызватьИсключение "На стороне ERP не удалось создать заказ на перемещение на основании РТУ "+Строка(СсылкаНаРТУ);
    КонецЕсли;

Показать


Если выполняем отладку или тест непосредственно из базы, то вместо прокси берем общий модуль, а затем код абсолютно одинаковый как для случая работы с веб сервисом , так и с общим модулем.
jif; fr13; +2 Ответить
18. fr13 624 17.01.19 13:17 Сейчас в теме
(15) Хороший пример, я регулярно так и делаю. Даже и не подумал, что это может быть не очевидно ))
jif; Vladimir Litvinenko; +2 Ответить
6. kuzyara 793 17.01.19 08:15 Сейчас в теме
(1)
Постоянно наблюдаю как для веб-сервисов делают объекты исключительно со строковыми свойствами и укладывают в них невалидируемый JSON зачем-то

А как решать проблему согласованного изменения формата, когда у баз разное технологическое окно?
Скрытый текст
8. fr13 624 17.01.19 09:02 Сейчас в теме
(6) Версия формата обмена может решить эту проблему
Vladimir Litvinenko; +1 Ответить
10. kuzyara 793 17.01.19 09:26 Сейчас в теме
(8)
Версия формата обмена может решить эту проблему

Дублировать веб-сервисы под каждую правку xdto-пакетов? Проходили) заходит только когда формат меняется очень-очень редко.
В активно допиливающихся обменах (каждый релиз) хранить версии в метаданных такое себе решение.
JSON толерантней в этом отношении, особенно когда участников несколько и нужно поддерживать обратную совместимость.
11. fr13 624 17.01.19 09:49 Сейчас в теме
(10) Зачем же дублировать веб сервисы. У веб сервиса добавляете входящий параметр - версия формата обмена. И по нему уже ориентируетесь какой пакет xdto использовать. И обратная совместимость вам гарантированна.
romashka_do; Vladimir Litvinenko; +2 Ответить
14. Vladimir Litvinenko 17.01.19 12:31 Сейчас в теме
(6)
json валидируется в Новый ЧтениеJSON

Под валидацией входящего XDTO объекта имел ввиду проверку на соответствие WSDL / XSD схеме. Либо автоматически веб-сервисом, либо методом Проверить() объекта XDTO.

Это проверка на то, соответствуют ли свойства объекта заданным типам, не передается ли массив объектов там где разрешен только один объект, соблюден ли порядок полей. В общем все те преимущества, что даёт типизация.

ЧтениеJSON ведь проверяет только правильно ли скобки, запятые и кавычки расставлены. А проверка на соответствие типам и "схеме" лежит на программисте. Но при этом вроде бы какие-то черновики-наброски для подобной валидации есть и для JSON. Но с примерами использования для 1С не встречался. Обычно либо в коде проверяются правильно ли данные переданы, либо вообще забивают на проверку и эксепшены уже в процессе обращения к полям вываливаются ))

Вот здесь информация о схеме для JSON, но похоже что еще в черновом варианте:

https://json-schema.org :
The current version is draft-07!
23. s_vidyakin 05.04.19 13:34 Сейчас в теме
(14) А зачем смешивать WSDL/XSD и JSON ? Это же 2 разных технологии - либо делаешь SOAP на XML и используешь XDTO, либо REST на гибком JSON и можно его формировать/проверять через свой модуль, а настройки полей и объектов хранить в справочнике, не вижу проблемы - передал структуру данных в функцию подготовки к отправке - она тебе выдала или готовый JSON или набор ошибок.
При получении так же - преобразовал текст json в структуру, прогнал через функцию по правилам, выдал "ОК" или ошибки.
Версии форматов удобно хранить, вместо копирования XDTO-пакетов

Сейчас столкнулся что в пакете все пустые строковые поля стали объектами XDTO, то ли при переходе на 13-ю платформу, то ли что...
Теперь нельзя полагаться на проверку поля на пустую строку после преобразования xml в объект - строковые поля не становятся строковыми, замечательно

В то время как весь мир переходит на GraphQL, 1Сники городят обмены на файликах и ковыряют SOAP из 2005 года...
25. Vladimir Litvinenko 1786 05.04.19 14:00 Сейчас в теме
(23)
Версии форматов удобно хранить, вместо копирования XDTO-пакетов

Копировать XDTO при работе с SOAP нет необходимости. Всё есть в WSDL геренерируемом на одной стороне - стороне поставщика интерфейса.

не вижу проблемы - передал структуру данных в функцию подготовки к отправке - она тебе выдала или готовый JSON или набор ошибок.
При получении так же - преобразовал текст json в структуру, прогнал через функцию по правилам, выдал "ОК" или ошибки.

Вот как раз в этом случае хранить правила проверки придётся как на стороне клиента, так и на стороне сервера. И чтобы узнать эти правила на этапе поддежки/доработки нужно будет читать код. Либо читать специально составленную документацию, которую обычно никто не составляет.

А зачем смешивать WSDL/XSD и JSON ?

Речь не шла о смешении XSD и JSON. Речь шла о том, что нет общепринятого аналога WSDL для JSON, поэтому в случае обмена каждый изобретает свои "велосипеды" для проверок на стороне клиента и сервера. А бывает вообще без проверок и документации обходятся, потому что причина отказа от документации и проверок та же что и причина выбора JSON вместо XDTO - скорость реализации и отказ от строгих универсальных правил. Это удобно когда два программиста отвечающие за клиент и за сервер рядом сидят или в чате могут перекидываться сообщениями. Но когда система усложняется, то желателен более строгий подход.

Хотя вот если поискать можно найти попытки прикрутить WSDL для REST )) https://www.ibm.com/developerworks/library/ws-restwsdl/index.html
22. Поручик 4328 25.03.19 11:33 Сейчас в теме
(1) Какая проблема с валидируемым JSON?

	ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи);
	ЗаписатьJSON(ЗаписьJSON, Значение, НастройкиСериализации, "ЗначениеВФорматJSON", МодульФункцииПреобразования;//

Или я что-то не понял?
3. Goleff74 152 16.01.19 22:52 Сейчас в теме
Интересно, до какой активности изменения обмениваемых данных планы обмена не создают проблем с блокировками?
5. fr13 624 17.01.19 04:39 Сейчас в теме
(3)Блокировки при обмене - проблема известная. Есть несколько решений. Одно из них от Филиппова Евгения, можете найти на ютубе.
7. HAMMER_59 186 17.01.19 08:57 Сейчас в теме
А почему текст на русском, коли такая тяга к английскому?
Описание статьи многообещающее, но разбирать код 1С на английском, крайне неудобно.
Perfolenta; s_vidyakin; Winstoncuk; pbabincev; pm74; anchovy; Xershi; +7 Ответить
9. fr13 624 17.01.19 09:06 Сейчас в теме
(7) Пару лет назад я тоже подумать и не мог, что придется писать код 1С на английском, но все меняется и на данный момент код на русском писать запрещено (в рамках моей работы).
Vladimir Litvinenko; eskor; CyberCerber; +3 Ответить
12. monkbest 103 17.01.19 12:05 Сейчас в теме
пересилил себя и прочел английский код
уверен, что если бы код был русский было бы 100500 комментов в стиле "УЖЕ БЫЛО!!!!"

а так в статье очень много нового и интересного, но не про обмен, а про англоязычный синтаксис :)
Perfolenta; RocKeR_13; +2 Ответить
26. Perfolenta 168 02.10.19 12:12 Сейчас в теме
(12)
пересилил себя и прочел английский код

а я не стал себя пересиливать, зачем оно мне надо... на русском код читаю бегло, почти "по диагонали", а тут надо вчитываться в каждое слово... смысла нет время тратить...
смысл есть только для тех, кто для заграницы пишет...
monkbest; +1 Ответить
13. RocKeR_13 688 17.01.19 12:23 Сейчас в теме
"Обмен без правил" - это от лукавого) По сути вы все равно анализируете структуры источника, приемника и определяете, по каким правилам вы будете формировать файл выгрузки и как его потом обрабатывать в приемнике, а XSLT - это и есть аналог правил обмена. Никогда, конечно, не доводилось работать с XSLT, поэтому трудно оценить, будет ли легче написать обмен между конфигурациями, особенно когда типы объектов источника и приемника не совпадают. Для обмена со сторонними системами всегда было достаточно нормальной XSD и использования XDTO
16. Vladimir Litvinenko 17.01.19 12:50 Сейчас в теме
(13)
Еще один сигнал автору, что нужно в следующих публикациях подробнее раскрыть тему XSLT, а мы большое спасибо скажем и звёздочку поставим ))
17. fr13 624 17.01.19 13:16 Сейчас в теме
(13), (16)
Основная идея этой публикации - не модификация xml с помощью xslt. Эта тема довольно обширна и к 1С не имеет прямого отношения. То есть эта технология используется везде и поэтому легко гуглится тот или иной вопрос.
Другое дело, что если не было опыта работы с ней, то это все может показаться сложным.
19. RocKeR_13 688 17.01.19 13:32 Сейчас в теме
(17) ну я и не говорил, что именно XSLT - это основная тема) В принципе обмен через web-сервис с использованием XDTO - это уже давно не ново. Собственно, в том числе и к этому шли 1Сники, разрабатывая универсальный формат обмена данными. Более того, если посмотреть БСП, то в ее составе найдете соответствующие web-сервисы: https://its.1c.ru/db/metod8dev#content:5852:hdoc
21. МимохожийОднако 127 22.01.19 07:47 Сейчас в теме
20. for_sale 782 17.01.19 16:38 Сейчас в теме
24. s_vidyakin 05.04.19 13:40 Сейчас в теме
(20) гугл выдает что Rull это "рулет" на норвежском
Оставьте свое сообщение

См. также

Отладка правил обмена КД2 для подсистемы БСП Обмен данными 41

Статья Программист Расширение (cfe) v8 1cv8.cf Абонемент ($m) Перенос данных из 1C8 в 1C8

Уже давно нельзя отлаживать правила обмена при помощи внешних файлов. Попробуем исправить это.

1 стартмани

27.05.2019    3532    4    fenixnow    5       

Выгрузка и загрузка данных XML с гибкими отборами 33

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Обмен через XML Перенос данных из 1C8 в 1C8

Обработка выгрузки и загрузки данных через XML между идентичными конфигурациями с возможностью установки произвольных отборов на выгружаемые объекты.

1 стартмани

07.04.2019    4007    103    sapervodichka    7       

Перенос данных КА 1.1 -> КА 2 19

Инструменты и обработки Программист Документ XML v8 КА1 КА2 Россия Абонемент ($m) Перенос данных из 1C8 в 1C8 Обмен через XML

Перенос данных КА 1.1 => КА 2 с помощью правил обмена данными в формате XML КД 2 (переносятся остатки, документы, справочная информация).

5 стартмани

20.03.2019    5301    103    gudogu    107       

Ручная выгрузка и загрузка данных через универсальный обмен данными с настройками (расширение, платформа 8.3+) 44

Инструменты и обработки Программист Архив с данными v8 Розница УНФ ERP2 БП3.0 УТ11 КА2 ЗУП3.x Абонемент ($m) Обработка документов Обработка справочников Обмен через XML Перенос данных из 1C8 в 1C8

Данное расширение (не требует изменения конфигураций) служит как надстройка для конфигураций, у которых обмен между базами происходит через универсальный формат (EnterpriseData), с использованием стандартных правил конвертации, которые уже есть в конфигурации. Интерфейс адаптирован для простых пользователей, сделан общий отбор по Организации для всех документов, имеется пару настроек для передачи в параметры конвертации, которые расположены в общем модуле конфигураций, а так же есть возможность выбора запуска - в фоне или в текущем сеансе. Теперь не нужно настраивать обмен между базами, для того чтоб просто перенести нужные документы. Подходит точно для УТ 11.4, БП 3.0.67, КА 2.4.5, Розница 2.2.9 (Обновление 1.2 от 02.03.2019)

2 стартмани

19.01.2019    7083    80    hakerxp    8       

Выполнение запроса в другой базе 1С без com-соединения. HTTP-сервис 65

Инструменты и обработки Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Перенос данных из 1C8 в 1C8

Выполнение любого запроса с параметрами из одной базы 1С в другую. Используя HTTP-сервис. Посредством POST-запроса и JSON.

1 стартмани

30.11.2018    8284    16    John_d    19       

Пример получения данных из другой базы 1С через Web-сервис 99

Инструменты и обработки Программист Архив с данными v8 Россия Windows Абонемент ($m) Перенос данных из 1C8 в 1C8

В данной статье описан пример получения данных справочника из другой базы 1С через Web-сервис.

1 стартмани

11.11.2018    12136    13    flyDrag    28       

Способы оптимизации переносов данных 55

Статья Программист Нет файла v8 КД Абонемент ($m) Перенос данных из 1C8 в 1C8

Хочу рассказать вам про способы оптимизации разработки правил обмена в программе «Конвертация данных» второй редакции. Казалось бы, про эту программу и разработку в ней правил конвертации уже сказано все, что можно. Появились уже более современные и быстрые технологии. Почему же все еще она? Дело в том, что «Конвертация данных» второй редакции все еще актуальна для огромного круга задач. Она имеет очень широкую функциональность и позволяет реализовывать сложные алгоритмы. Годы идут, а люди продолжают ей пользоваться и у них возникает много вопросов по этой программе. Возможно, в будущем вы тоже будете заниматься такими проектами и столкнетесь с задачами, похожими на те, про которые я собираюсь рассказать. Мне хочется вам в этом помочь.

1 стартмани

02.08.2018    9599    93    primat    7       

Опыт проведения сложных переносов данных на 1С 166

Статья Программист Архив с данными v8 КД Абонемент ($m) Перенос данных из 1C8 в 1C8

В статье я расскажу про опыт сложных переносов на платформе 1С:Предприятие. Она будет адресована в первую очередь разработчикам 1С, которые уже имеют опыт использования методики «Конвертация данных» (как второй, так и третьей редакции) – я думаю, это большинство из нас. • Я расскажу про различные методики организации переносов данных. • Мы рассмотрим рекомендуемые способы оптимизации правил конвертации, которые позволят вам быстрее выполнять свои переносы. • Также мы разберем, какие могут возникнуть сложности в ходе переноса данных. • Я покажу сравнительный анализ по ряду параметров инструментов «Конвертация данных» второй редакции и третьей, которая вышла уже более года назад.

30.07.2018    21839    44    primat    12       

Конвертация данных 2.1. Как реквизит справочника конвертировать в регистр сведений? 18

Статья Программист Архив с данными v8 КД Россия Windows Абонемент ($m) Перенос данных из 1C8 в 1C8

В публикации рассмотрен пример конвертации реквизита справочника в регистр сведений.

2 стартмани

28.06.2018    8191    wowik    0       

Синхронизация (выгрузка) данных ЗУП 3.1 - БП 2.0, УПП 1.3 47

Инструменты и обработки Системный администратор Программист Бухгалтер Внешняя обработка (ert,epf) v8 v8::БУ v8::СПР БП2.0 ЗУП3.x Россия БУ Зарплата Управление персоналом (HRM) Абонемент ($m) Перенос данных из 1C8 в 1C8

Подобная выгрузка не была предусмотрена разработчиками 1С, поэтому и существует эта публикация. Поддерживается выгрузка оценочных обязательств и резервов отпусков. Непосредственная выгрузка в базу Бухгалтерии.

3 стартмани

22.03.2018    26664    516    diso    160       

Правила конвертации документов ЗУП 2.5 - ЗУП 3.1 44

Инструменты и обработки Системный администратор Программист Бухгалтер Документ XML v8 v8::СПР ЗУП2.5 ЗУП3.x Россия БУ Зарплата Абонемент ($m) Обмен через XML Перенос данных из 1C8 в 1C8

Правила конвертации документов ЗУП 2.5 - ЗУП 3.1. Позволяют вести параллельную работу в базах ЗУП редакций 2,5 и 3.1.

10 стартмани

06.03.2018    24245    123    kostya_whiskas    23       

Организация обмена с базой филиала (розничного магазина) в торговой сети через XML (универсальный обмен) 70

Статья Программист Архив с данными v8 КД УТ11 Розничная и сетевая торговля (FMCG) Розничная торговля Абонемент ($m) Обмен через XML Перенос данных из 1C8 в 1C8

В статье по шагам рассматривается создание обмена между центральной базой и базами филиалов на базе конфигурации УТ 11. Для решения поставленной задачи было решено не использовать РИБ, т.к. требуется односторонний обмен ограниченным набором данных, к тому же по определенным условиям. Обмен реализован на основе типовой синхронизации на основе универсального обмена в формате EnterpriseData. Данная публикация может быть полезна внедренцам, которые работают с торговыми сетями, в том числе по модели франчайзинга.

1 стартмани

26.02.2018    24837    13    Kutuzov    18       

[УТ 11][БП 3.0] Перенос данных из БП 3.0 в УТ 11 (начальное заполнение УТ 11 по данным БП 3.0) 32

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 БП3.0 УТ11 Россия УУ Windows Абонемент ($m) Перенос данных из 1C8 в 1C8

Перенос данных из БП 3.0 в Ут 11 для первоначального заполнения УТ данными из БП. 26.02.2019 Версия 2.8.5.5 БП 3.0.68.58.72 УТ 11.4.6.230 платформа 8.3.13.1690. Исправлен (по возможности) перенос остатков взаиморасчетов в части формирования типов расчетных документов и типа операции документов ВНО. Вопрос к знатокам УТ 11, остатки по субсчетам 76 счета (не 76.05 или 76.06) каким типом операции ввода остатков должны переноситься?

1 стартмани

29.01.2018    25958    371    Alex_E    122       

Проверка данных после неполного ("нового") переноса из ЗУП 2.5 в ЗУП 3.1 18

Отчеты и формы Бухгалтер Архив с данными v8 v8::СПР ЗУП3.x Россия БУ Зарплата Абонемент ($m) Бухгалтерский учет Перенос данных из 1C8 в 1C8

Описаны данные, которые необходимо проверить после неполного ("нового") переноса из ЗУП 2.5 в ЗУП 3.1. Описано, на что необходимо обратить внимание, где найти перенесенные данные, что НЕ переносится, где найти настройки.

1 стартмани

17.01.2018    15789    137    btydj    3       

Правила переноса документов из ЗУП 2.5 в ЗУП 3.1 33

Инструменты и обработки Программист Документ XML v8 v8::СПР ЗУП3.x Россия БУ Windows Зарплата Управление персоналом (HRM) Абонемент ($m) Обмен через XML Перенос данных из 1C8 в 1C8

Перенос документов из ЗУП 2.5 в ЗУП 3.1 - позволяет снизить объем работ при опытной эксплуатации ЗУП 3.1 параллельно с ЗУП 2.5.

1 стартмани

04.12.2017    23131    486    AntonH851    38       

Пример создания в КД 2.1 правил выгрузки данных регистра «Лицевые счета работников» из ЗУП 2.5 в справочник «Банковские счета» БП 3.0. Подробно, ясно и просто. 20

Статья Программист Архив с данными v8 КД Windows Абонемент ($m) Перенос данных из 1C8 в 1C8

Эту статью я написал для тех, кто хочет максимально быстро и эффективно научиться создавать правила выгрузки данных в конфигурации 1С Конвертация данных редакции 2.1. Разберем практическую несложную задачу создания правил выгрузки данных регистра «Лицевые счета работников организаций» ЗУП 2.5 в справочник «Банковские счета» БП КОРП 3.0. Поделюсь некоторыми эффективными приемами: ВыгрузкаПоПравилу(…), работа с глобальными параметрами конвертации и передача их с Источника в Приемник методом ПередатьОдинПараметрВПриемник(…), приемы ускорения и оптимизации конвертации данных. Кому эта статья покажется простой и/или захочется продолжения: рекомендую другую мою публикацию, в которой разобран более сложный пример : https://infostart.ru/public/695916/

1 стартмани

17.11.2017    24381    12    RailMen    1       

1С:Конвертация данных 2.0. Анализ состава выгруженных данных из базы источника до загрузки в базу-приемник 30

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 КД БП3.0 ЗУП3.x Россия Windows Абонемент ($m) Перенос данных из 1C8 в 1C8 Перенос данных из 1С7.7 в 1C8.X

Обработка анализирует файл выгрузки данных конвертации и формирует дерево выгруженных объектов по категориям с возможностью просмотра выгруженных реквизитов (свойств). Идеально подходит для анализа выгруженных данных при переходе на ЗУП 3.1 или Бухгалтерия 3.0 с ранних версий.

1 стартмани

16.11.2017    10408    77    leosoft    4       

Механизмы и транспорт обмена данными. Пример создания в КД 2.1 правил обмена данными ЗУП 2.5 -> БП 3.0. Выгрузка ведомостей и банковских счетов. Передача параметров обмена из Источника в Приемник. ВыгрузитьПоПравилу(). ПередатьОдинПараметрВПриемник(). 37

Статья Программист Документ XML v8 ЗУП2.5 КД БП3.0 Абонемент ($m) Обмен через XML Перенос данных из 1C8 в 1C8

В статье рассказываю: 1) о механизмах и транспорте обмена данными, где одной из сторон обмена выступает конфигурация на базе 1С, и о том, какой транспорт и в каких случаях лучше использовать 2) о решении задачи выгрузки данных документа «Зарплата к выплате организаций» (с выгрузкой банковский счетов физ лиц документа) из ЗУП 2.5.123.1 (далее Источник) в БП КОРП 3.0.52.39 (далее Приемник) путем создания правил обмена данными с использованием конфигурации «Конвертация данных» (далее просто КД) ред. 2.1.8.2. для (далее ЗкВО) 3) о тестирование полученных правил обмена данными.

1 стартмани

03.11.2017    20553    7    RailMen    5       

Перенос данных УПП/КА в ЕРП и КА2, что таит этот чудный процесс 20

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 КА1 УПП1 ERP2 КА2 Россия Абонемент ($m) Перенос данных из 1C8 в 1C8

По итогам нескольких переносов УПП/КА в ЕРП и КА появилась данная статья. Не так счастлив этот процесс и его результаты.

1 стартмани

20.09.2017    17728    56    Константин С.    16       

Синхронизация данных по правилам КД2.0 112

Инструменты и обработки Системный администратор Программист Бизнес-аналитик Бухгалтер Внешняя обработка (ert,epf) v8 1cv8.cf Windows Абонемент ($m) Перенос данных из 1C8 в 1C8

Новый инструмент для сравнения и загрузки данных, сочетающий в себе: гибкость запросов (используются для сопоставления объектов); наглядный вывод отличий; удобный отбор загружаемых данных; возможность пообъектной синхронизации двух баз по правилам КД2 с помощью вызова обработки "Универсальный обмен XML" в базе-источнике через COM-соединение.

1 стартмани

27.08.2017    16167    105    vikad    30       

Правила обмена ЗУП 3.1 - БП 2.0 и ЗУП 3.1 - УПП 1.3 (отражение, ведомости и справочники) 97

Инструменты и обработки Программист Документ XML v8 v8::БУ v8::СПР БП2.0 БП3.0 ЗУП3.x Россия БУ Зарплата Управление персоналом (HRM) Абонемент ($m) Перенос данных из 1C8 в 1C8 Обмен через XML

Правила обмена для выгрузки документов "Отражение зарплаты в бухучете", "Ведомость в банк", "Ведомость в кассу", справочников "Сотрудники" и "Физические лица"

1 стартмани

01.08.2017    60142    1476    forseil    191       

Перенос справочников и документов из УТ 10.3 в БП 3.0 7

Инструменты и обработки Программист Бухгалтер Внешняя обработка (ert,epf) v8 УТ10 БП3.0 Россия БУ НУ УУ Абонемент ($m) Перенос данных из 1C8 в 1C8

Синхронизация справочников и документов из Управление торговлей 10.3 в Бухгалтерию предприятия 3.0. Обработка не затрагивает штатный механизм. Подключение и перенос документов происходит посредством OLE. Без ввода начальных остатков.

10 стартмани

25.07.2017    14205    9    2casp    5       

«Горыныч - то НЕ НАСТОЯЩИЙ!» … или О Конвертации Данных ред.3 (КД 3) и обменах в универсальном формате Enterprise Data… доступным русско-народным языком 58

Инструменты и обработки Программист Архив с данными v8 КД Абонемент ($m) Внешние источники данных Обмен через XML Перенос данных из 1C8 в 1C8

Тем, кто хочет быстро разобраться с темой инструмента Конвертация данных 3.0 и технологией обмена по новому формату 1С, активно применяемому во всех новых конфигурациях от 1С на БСП, расширяющем возможности интеграции, пакет полезных материалов.

1 стартмани

13.06.2017    14026    135    Davlad_A    16       

Обмен данными между программами "1С: Бухгалтерия предприятия" редакция 2.0 и "1С: Зарплата и управление персоналом" редакция 3.1 20

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::БУ БП2.0 Россия БУ Зарплата Управление персоналом (HRM) Абонемент ($m) Перенос данных из 1C8 в 1C8

В связи с отсутствием типовых правил обмена между конфигурациями БП 2.0 и ЗУП 3.1 (3.0) предлагается действующее решение в виде внешней обработки. Алгоритм построен на прямом подключении из базы БП к базе ЗУП. Для переноса данных используется COM-соединение с обработкой COM-объектов базы источника на стороне базы приемника.. Используется односторонний обмен - данные из ЗУП переносятся в БП.

1 стартмани

17.04.2017    20475    236    ivanovmi    36       

Правила обмена ЗУП 3.1(3.1.2.140) - УПП 1.3(1.3.88.2) - документа "Отражение зарплаты в регламентированном учете". Добавлено правило Отражения ERP20->БП30. ***Добавлено правило для ЗУП 3.1.5 и старше с использованием дополнительных реквизитов. 21

Инструменты и обработки Программист Архив с данными v8 УПП1 ЗУП3.x Россия БУ Зарплата Абонемент ($m) Перенос данных из 1C8 в 1C8

Правила обмена для производственных предприятий, где зарплата отдельной программой ЗУП 3.1 (для оперативного поддержания актуальности релиза), а управленческий и регламентированный учет ведется в УПП 1.3.

1 стартмани

24.03.2017    19337    213    bulas    44       

Соответствия объектов обмена 7

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 КА1 Россия Абонемент ($m) Распределенная БД (УРИБ, УРБД) Перенос данных из 1C8 в 1C8

Обработка позволяет проверять, исправлять ошибки, добавлять и удалять соответствия объектов в обменах данными между конфигурациями на основе «Комплексной автоматизации 1.1» или похожими конфигурациям. Подходит для обменов с использованием регистра сведений «СоответствиеОбъектовДляОбмена».

2 стартмани

26.08.2016    14742    3    xxxelaaa    0       

Перенос объектов по OLE из идентичной конфигурации 27

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 1cv8.cf Россия Абонемент ($m) Перенос данных из 1C8 в 1C8

Перенос по OLE справочников, документов и пользователей из базы источника с идентичной конфигурацией без использования правил обмена, поиск по реквизитам, замена ГУИД, сохранение настроек в файл

1 стартмани

10.07.2016    11305    113    slava_1c    8       

Перенос данных из ЗУП 2.5 в ЗУП 3.1 45

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::СПР ЗУП2.5 ЗУП3.x БУ Windows Зарплата Управление персоналом (HRM) Абонемент ($m) Перенос данных из 1C8 в 1C8

Данная обработка предназначена для переноса некоторых данных из ЗУП 2.5 в ЗУП 3.1 через COM-соединения. Обработка была написана потому, что типовые правила переноса не предоставляют возможности переносить данные по отдельности, а некоторые данные не переносят вовсе. Тестировалась на версии 3.1.9.159 (8.3.12.1790).

1 стартмани

26.05.2016    31445    674    yojeeg    64       

Выгрузка/загрузка данных в формате JSON v 1.0.5 56

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 1cv8.cf Windows Абонемент ($m) Распределенная БД (УРИБ, УРБД) Перенос данных из 1C8 в 1C8

Обработка предназначена для обмена данными между схожими конфигурациями в формате JSON. Этот формат обладает рядом существенных преимуществ по сравнению с xml и прочими популярными форматами. В отличие от существующих аналогов, обработка не использует никаких дополнительных библиотек. (де)Сериализация всех объектов происходит средствами встроенного языка и методов ЗаписатьJSON() и ПрочитатьJSON(). Работает на платформе версии не ниже 8.3.6.

3 стартмани

27.01.2016    35591    303    kser87    39       

[COM] Перенос данных через COMConnector 79

Инструменты и обработки Системный администратор Программист Бухгалтер Внешняя обработка (ert,epf) v8 1cv8.cf Россия Windows Абонемент ($m) Перенос данных из 1C8 в 1C8

Обработка обмена между двумя информационными базами схожей (не обязательно совпадающей) структуры. Изначально была заточена под бухгалтерию предприятия, сейчас используется для для обменов через COM любых конфигураций с режимом запуска "Управляемое приложение". Ближайший аналог - выгрузка-загрузка XML, но здесь нет промежуточных файлов выгрузки/загрузки, и обмен не прекращается в случае, когда состав реквизитов источника и приёмника различен!!! 27.09.2019 Версия 5.2.3.2 Исправлены исправленыц замеченные ошибки (версия от мая 19 года)

2 стартмани

23.11.2015    40491    595    Alex_E    167       

Интерфейс сопоставления объектов для обмена (для типового регистра СоответствиеОбъектовДляОбмена) 22

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 КА1 БП2.0 ЗУП2.5 УТ10 УПП1 Windows Абонемент ($m) Инструментарий разработчика Универсальные обработки Перенос данных из 1C8 в 1C8

Вы внедряете обмен данными между двумя типовыми или основанными на типовых БД и вам необходим инструмент, чтобы сопоставить между собой справочники этих конфигураций? Вы хотите навести порядок в обмене данными, потому что вам надоело вылавливать дублирующиеся объекты? Вам очень хочется перепоручить сопоставление объектов обменивающихся баз пользователям, но нет подходящего и понятного пользователям интерфейса? Тогда вам нужна именно эта обработка!

4 стартмани

11.11.2015    29366    221    catsam    8       

Штатный перенос данных ЗУП 2.5 -> ЗУП 3.0 в режиме отладки 22

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 ЗУП2.5 ЗУП3.x Windows Зарплата Управление персоналом (HRM) Абонемент ($m) Обмен через XML Перенос данных из 1C8 в 1C8

Штатный переход ЗУП 2.5 -> ЗУП 3.0 завершается при наличии ошибок в конвертации данных. Если механизм немного подправить, то можно обойти это ограничение. Назовем это режимом отладки. В итоге получим внешнюю обработку которая осуществит переход и просто сообщит о наличии ошибок конвертации данных.

1 стартмани

24.09.2015    18954    67    duhh    4       

Управление изменениями в планах обмена (Управляемое приложение) v 1.0 6

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 1cv8.cf Windows Абонемент ($m) Распределенная БД (УРИБ, УРБД) Внешние источники данных Перенос данных из 1C8 в 1C8

Простая в использовании и наглядная обработка для регистрации изменений или отмены регистрации в планах обмена используя гибкие возможности отбора СКД.

2 стартмани

15.08.2015    24436    46    kser87    3       

Перенос документов УТ 10.3 - УТ 11.1 19

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::ОУ УТ10 УТ11 Россия УУ Windows Банковские операции Оптовая торговля Учет ТМЦ Абонемент ($m) Перенос данных из 1C8 в 1C8

Обработка переноса документов за любой период из УТ 10.3 (Управление торговлей 10.3) в УТ 11. Осуществляет перенос следующих документов: - Заказ покупателя - Поступление товаров и услуг - Реализация товаров и услуг - Перемещение товаров - Платежные поручения входящие - Платежные поручения исходящие - Отчеты о розничных продажах - Счета фактуры выданные - Счета фактуры полученные - Приходные кассовые ордера

5 стартмани

06.05.2015    32046    350    asdfgcom    68       

Перенос объектов 1С 255

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Windows Абонемент ($m) Перенос данных из 1C8 в 1C8

Простой и наглядный перенос объектов между любыми базами 1С 8 с предварительным анализом на возможные различия в данных (через файл, через интернет, через буфер обмена). Интерактивная настройка правил обмена на стороне источника и получателя. В обработке есть удобный обзор по подсистемам, поиск и обработка данных по заданному фильтру. Сравнение объектов, поиск ссылок. Конструктор кода по созданию объектов, написание скриптов и отладка мини-функций в УФ. Отключение/включение регламентных заданий. Регистрация/снятие с регистрации объектов в планах обмена. И многое другое.

1 стартмани

16.03.2015    77824    1980    moolex    189       

Правила переноса остатков и справочников из БП 2.0 в БП 3.0 20

Инструменты и обработки no Документ XML v8 БП2.0 БП3.0 Windows Абонемент ($m) Перенос данных из 1C8 в 1C8

Правила конвертации справочников и остатков по бух. счетам, между БП 2.0 и БП 3.0

3 стартмани

22.01.2015    23490    273    Alexez    31       

Перенос данных из Бухгалтерии 2.0 в Бухгалтерию 3.0 15

Инструменты и обработки Системный администратор Программист Документ XML v8 БП2.0 БП3.0 Россия БУ Windows Абонемент ($m) Обмен через XML Перенос данных из 1C8 в 1C8

Перенос данных и остатков с Бухгалтерии 2.0 в Бухгалтерию 3.0 с помощью универсального обмена данными XML.

1 стартмани

30.12.2014    38642    308    sergeyzhuravlev    8       

Выгрузка данных из УТ 10.3 в БП 3.0 (своими руками) 34

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 УТ10 БП3.0 Россия Windows Абонемент ($m) Перенос данных из 1C8 в 1C8

Старая добрая, позабытая многими выгрузка из УТ 10.3 в БП 1.6. Ее еще можно оживить, и она послужит на благо всем желающим, всем уставшим от автоматических обменов.

3 стартмани

30.10.2014    33230    309    TESL    40       

Универсальная выгрузка/загрузка данных для отличающихся конфигураций (JSON, Такси+ОФ) 411

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Перенос данных из 1C8 в 1C8 Универсальные обработки Распределенная БД (УРИБ, УРБД)

Простой перенос через JSON данных между двумя базами 1С (документов, справочников, ПВХ, ПВР, счетов). Аналогична произвольной выгрузке в типовой "Выгрузка/загрузка XML", но может использоваться для отличающихся конфигураций. Подходит для любых пар баз с любым интерфейсом (управляемый + обычный). Без настроек. Не требует идентичности конфигураций и платформ. При переносе типы данных сопоставляются по наименованиям метаданных, объекты и ссылки по UID.

1 стартмани

22.10.2014    189732    4177    ekaruk    174       

Инструкция по интеграции «1С:Управление производственным предприятием» с «1С:Документооборот» 29

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 УПП1 ДО Windows Абонемент ($m) Перенос данных из 1C8 в 1C8

В данной публикации описано как сделать, чтобы было возможным настроить интеграцию «1С:Управление производственным предприятием» и «1С:Документооборот»

1 стартмани

13.08.2014    36271    77    simich    18       

Правила обмена данными "УТ" (10.3.37.5) -> "БП 3.0" 3.0.44.124) через "Универсальный обмен данными в формате XML" 22

Инструменты и обработки Системный администратор Программист Документ XML v8 УТ10 БП3.0 Windows Абонемент ($m) Обмен через XML Перенос данных из 1C8 в 1C8

Правила обмена данными "УТ" (10.3.37.5) -> "БП 3.0" 3.0.44.124) через "Универсальный обмен данными в формате XML" через обработку "Универсальный обмен данными в формате XML".

1 стартмани

21.07.2014    30473    534    PavelZnaikin    60