Обмен документами в формате CommerceML по схеме поставщик-покупатель между 1С 7.7 <=> 7.7 (конфигурация «Торговля + Склад», ред. 9.2) и 1С 7.7 <=> 8.x (конфигурация «Управление торговлей, ред. 10.3»)

20.12.12

Учетные задачи - Оптовая торговля

Данная статья посвящена обмену документами в формате CommerceML по схеме поставщик-покупатель между конфигурациями «Торговля + склад, редакция 9.2» 1С 7.7 (далее ТиС) и «Управление торговлей, редакция 10.3» 1С 8.х (далее УТ 10.3).
Рассматривается выгрузка документов «Реализация ТМЦ», «Заказ поставщику» и, соответственно загрузка документов «Поступление ТМЦ» и «Заявка покупателя», сопоставление собственной номенклатуры – номенклатуре поставщиков на стороне покупателей и преобразование между форматами различных версий.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Файлы преобразования
.zip 3,67Kb
48
48 Скачать (1 SM) Купить за 1 850 руб.
Примеры выгрузок
.zip 10,98Kb
29
29 Скачать (1 SM) Купить за 1 850 руб.
Примеры преобразованных выгрузок
.zip 10,18Kb
17
17 Скачать (1 SM) Купить за 1 850 руб.

Для кого предназначена данная статья

Данная статья посвящена обмену документами в формате CommerceML по схеме поставщик-покупатель между конфигурациями «Торговля + склад, редакция 9.2» 1С 7.7 (далее ТиС) и «Управление торговлей, редакция 10.3» 1С 8.х (далее УТ 10.3).

Рассматривается выгрузка документов «Реализация ТМЦ», «Заказ поставщику» и, соответственно загрузка документов «Поступление ТМЦ» и «Заявка покупателя», сопоставление собственной номенклатуры – номенклатуре поставщиков на стороне покупателей и преобразование между форматами различных версий.

Материал также будет интересен для тех, кто пытался настроить обмен не только между разными версиями 1С, но и в рамках одинаковых версий.

Сразу оговорюсь про некоторые границы статьи и темы, которые она затрагивает:

  1. Приведенная информация не касается конфигурации «Управление торговлей, версия 11» ­– обмен данными в формате CommerceML в ней на момент написания статьи (декабрь 2012 года) отсутствует
  2. Не рассматривается продажа в валюте, отличной от российского рубля
  3. Не рассматривается ситуация пересчета коэффициентов номенклатуры, т.е. считается, что товары у поставщика и покупателя измеряются в одинаковых единицах
  4. При установке соответствия между номенклатурой поставщика и собственной – следует задавать только взаимно-однозначное соответствие. Т.е. если поставщик разделяет товары «USB-Flash диск 4Gb, зеленый» и «USB-Flash диск 4Gb, красный» − то и на стороне покупателя это тоже должны быть разные товары (ТиС 9.2) или разные пары товар-характеристика (для УТ 10.3 если ведется учет по характеристикам)
  5. Не рассматривается правильная загрузка реквизитов документа, связанных с налоговым учетом, а именно флагов «Учитывать НДС», «НДС в сумме». В стандартных обработках загрузки они устанавливаются автоматически в 1, при этом их значение в загружаемых файлах игнорируется
  6. В обработках отсутствует выгрузка и загрузка информации о государственных таможенных декларациях, странах происхождения и т.п.
  7. Все исправления вносимые в конфигурацию являются необходимыми для корректного обмена, но, возможно, недостаточными для правильной работы всех возможностей обработок. Например, обработка загрузки в «УТ 10.3» при создании номенклатуры некорректно воссоздает иерархию источника
  8. В рамках данной статьи рассматривается только обмен товарами в следующих вариантах:
    • Реализация (поставщика) становится поступлением (у покупателя) для
      • ТиС => ТиС
      • ТиС => УТ
    • Заказ поставщику (покупателя) становится заявкой (у поставщика)
      • ТиС => ТиС
      • УТ => ТиС
  9. Не рассматривается обмен между двумя конфигурациями УТ

Формат обмена «Поставщик»-«Покупатель». Как это работает.

В конфигурациях ТиС 9.2 и УТ 10.3 существует возможность обмениваться документами между поставщиком и покупателем, а именно автоматизировать процесс заказа и внесения поступлений товара в программу.

Сопоставление номенклатуры осуществляется на стороне покупателя на этапе загрузки документов от поставщика. Пример того, как это работает, показан далее.

Версия 7.77.7 от поставщика к покупателю

Подготовительная работа

Для загрузки-выгрузки нам понадобятся – на каждой стороне:

  1. 1С 7.7 конфигурация «Торговля и склад, редакция 9.2»
  2. Внешняя компонента V7Plus для работы с форматом XML
  3. Одинаковые краткие наименования единиц измерения в справочнике «ОКЕИ» с обоих сторон

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

Поставщик

У основной фирмы должен быть задан идентификатор – на вкладке «Прочие».

Необходимо также завести элемент справочника «Каталоги номенклатуры», указать владельца – основную фирму, от имени которой будут производиться продажи.

Каталог товаров на стороне поставщика

Покупатель

На стороне покупателя также необходимо создать элемент справочника «Каталоги номенклатуры» с тем же идентификатором, но с владельцем каталога равным контрагенту – поставщику. Идентификаторы каталогов должны совпадать.

Также необходимо у контрагента-поставщика задать такой же идентификатор, как у фирмы продавца в базе поставщика.

Каталог товаров на стороне покупателя

Выгрузка

Выгрузка документа «Реализация» происходит очень просто – достаточно нажать в форме документа на кнопку «Действия» и выбрать «Выгрузить (отправить по электронной почте)».

Выгрузка реализации

Загрузка

Рассмотрим загрузку поступления товара у клиента на типовой конфигурации «Торговля + Склад» 7.70.970.

Для загрузки документа выберем меню «Сервис» - «Обмен данными в формате CommerceML» - «Просмотр и загрузка документа». Выберем файл, выгруженный поставщиком.

Загрузка документа

Сопоставление номенклатуры

Следующий этап – сопоставление номенклатуры.

Для этого выбираем «Просмотр каталога товаров».

На вкладке Фильтры выберем «Только не идентифицированные».

Сопоставление номенклатуры, рис.1

Затем отключим иерархию и перейдем на закладку «Основная».

  • Колонка «Ид.» - код товара в базе поставщика
  • Колонка «Наименование» - наименование товара в базе поставщика

Для сопоставление товара делаем двойной клик на строке.

Сопоставление товаров, рис.2

Есть 2 варианта действий:

  1. создать новый товар (с повторением иерархии источника)
  2. выбрать для номенклатуры поставщика аналогичный товар в собственной базе.

После того, как часть или все товары будут сопоставлены, можно документ загрузить.

Загрузка для версии 8.x, а также выгрузка/загрузка заказа поставщику и заявки покупателя выглядит подобным образом.

Где почитать подробнее

Для 1С версии 7.7 подробнее об этом обмене можно почитать в официальном руководстве «Конфигурация Торговля+Склад, ред 9.2» в главе 7 – сервисные возможности. Также информация об этом обмене есть на дисках ИТС в разделе «Методическая поддержка 1С:Предприятия 7.7» / «Обмен данными в формате XML» / «Обмен коммерческой информацией в формате XML» / «Электронный обмен документами при проведении торговых операций».

По работе с этим форматом в 1С версии 8.1 не так много источников, и большинство из них описывает как с его помощью обновлять информацию на сайте. Однако краткое описание обмена есть в разделе ИТС «Методическая поддержка 1С:Предприятия 8» / «Разработчикам» / «Обмен данными, прикладные технологии» / «Обмен Поставщик-Покупатель».

Ложка дегтя

Однако так все должно работать в теории, но на практике все несколько иначе. Чтобы все работало как написано, необходимо внести изменения в конфигурацию. Начнем с конфигурации «Торговля + Склад, редакция 9.2»

«Торговля + Склад, ред. 9.2»

Исправление 1

При загрузке поступления товара некорректно загружается единица изменения, а именно поле «Единица» загружаемого документа «Поступление ТМЦ» для всех товаров заполняется одним и тем же значением.

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

Поэтому в обработке XMLЗагрузкаДокументовПоСхеме в функции Единица() необходимо в коде

Если СпрЕдиниц.НайтиПоРеквизиту("ОКЕИ",СпрКлассификаторЕдиниц.ТекущийЭлемент(), 1) = 0 Тогда 

поменять последний аргумент вызова функции с 1 на 0

Если СпрЕдиниц.НайтиПоРеквизиту("ОКЕИ",СпрКлассификаторЕдиниц.ТекущийЭлемент(), 0) = 0 Тогда 

Исправление 2

Если мы хотим выгрузить документ «Заказ поставщику», то при выгрузке мы должны выбрать каталог по которому идентифицировать товары. При этом, если какие-то товары из заказа не сопоставлены с товарами поставщика – то выгрузить документ будет невозможно.

Этот недостаток можно обойти – подобные товары на стороне покупателя можно выгружать с уникальным кодом, при этом у поставщика они будут загружаться как «не идентифицированные», но с названиями покупателя.

Однако, поскольку каталог товаров выгружается отдельно, а документ отдельно – надо чтобы идентификаторы товаров в каждой части выгрузки совпадали, иначе 1С при загрузке документа не сможет сопоставить товары и часть товаров будет с пустым наименованием.

Также, код товара, который мы выгружаем, не должен совпадать с кодом товара в базе поставщика, потому что в этом случае сопоставление по каталогу будет произведено автоматически и поставщик не заметит, как поставит в резерв совсем другой товар.

Для этого необходимо внести следующие изменения в обработку XMLВыгрузкаДокументовПоСхеме:

Добавить в начало текста модуля хэш-функцию вида

Функция Хэш(СтрокаХэш, hash=0, M = 31, TABLE_SIZE = 18446744073709551616)
   
//TABLE_SIZE = 18446744073709551615; 64 бита
    //M = 31; Умножитель
   
ДлинаСтроки = СтрДлина(СтрокаХэш);
    Для
к=1 по ДлинаСтроки Цикл
       
hash = M * hash + КодСимв(Сред(СтрокаХэш,к,1));
    КонецЦикла;
    Возврат
hash%TABLE_SIZE;
КонецФункции

Конечно, это наивный алгоритм подсчета хэша, но для выбранной задачи его вполне достаточно. Можно использовать и просто наименование, но могут возникнуть проблемы для длинных названий номенклатуры.

В коде функции ПолучитьИдТовараПоКаталогу() заменить строки

Если СпрАналоги.НайтиПоРеквизиту("Каталог", Каталог, 0) = 0 Тогда
    Предупреждение(
"Для товара " + Товар + " не задан аналог!");
    Возврат
"";
Иначе

на

Если СпрАналоги.НайтиПоРеквизиту("Каталог", Каталог, 0) = 0 Тогда
    Сообщить(
"Для товара " + Товар + " не задан аналог!");
    Возврат
Хэш(Товар.Наименование);
Иначе

«Управление торговлей, ред.  10.3»

В этой конфигурации с обменом в формате CommerceML все обстоит гораздо хуже.

Во-первых нельзя просто так загрузить документ от поставщика и при этом сразу сопоставить товары, так как по умолчанию при загрузке документа «Поступление ТМЦ» сделанные соответствия не записываются (для их сохранения в выгрузке должен присутствовать каталог) и при повторной загрузке вновь требуют сопоставления.

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

Исправление 1

Возможность загрузить документ, даже если не все позиции сопоставлены.

В обработке ЗагрузкаДанныхCommerceML → Формы → Форма

процедура «ВыполнитьЧтениеДанных» - закомментировать строку

ЭлементыФормы.КоманднаяПанельНижняя.Кнопки.СохранитьДанные.Доступность = РезультатТестирования;

процедура «ОбработкаОповещения» - закомментировать строку

ЭлементыФормы.КоманднаяПанельНижняя.Кнопки.СохранитьДанные.Доступность = НЕ ПриЗакрытииЕстьНесопоставленные;

Исправление 2

Следующее изменение позволяет не затирать все записи регистра сведений «Номенклатура контрагентов», а для каждой строки (не с точностью до контрагента, а с точностью до ключа контрагент-характеристика-номенклатура) в отдельности происходит перезапись данных.

ЗагрузкаДанныхCommerceML => Модуль объекта, в функции СохранитьКаталог()

Код

НаборЗаписей.Отбор.Контрагент.Установить(ИнформацияДокумента.Контрагент);
Для Каждого
СтрокаТаблицы Из СтрокиДокумента Цикл
   
ЗаписьРегистра = НаборЗаписей.Добавить();
   
ЗаписьРегистра.Контрагент = ИнформацияДокумента.Контрагент;
   
ЗаписьРегистра.Номенклатура = СтрокаТаблицы.Номенклатура;
   
ЗаписьРегистра.ХарактеристикаНоменклатуры =
       
СтрокаТаблицы.ХарактеристикаНоменклатуры;
   
ЗаписьРегистра.КодНоменклатурыКонтрагента = СтрокаТаблицы.Ид;
   
ЗаписьРегистра.НаименованиеНоменклатурыКонтрагента =
        ?(
ПустаяСтрока(СтрокаТаблицы.НаименованиеКраткое),
       
СтрокаТаблицы.Наименование,
       
СтрокаТаблицы.НаименованиеКраткое);
   
ЗаписьРегистра.АртикулНоменклатурыКонтрагента =
       
СтрокаТаблицы.Артикул;
   
ЗаписьРегистра.ШтрихКодНоменклатурыКонтрагента =
       
СтрокаТаблицы.ШтрихКод;
   
ЗаписьРегистра.ЕдиницаНоменклатурыКонтрагента =
       
СтрокаТаблицы.БазоваяЕдиницаИзмерения;
КонецЦикла;
Попытка
   
НаборЗаписей.Записать(ИСТИНА);
Исключение
   
ОписаниеОшибкиЗаписи = ОписаниеОшибки();
   
#Если клиент тогда
   
Сообщить("При записи каталога товаров произошла ошибка: " +
       
Символы.ПС + ОписаниеОшибкиЗаписи, СтатусСообщения.Важное);
   
#КонецЕсли
   
Возврат ЛОЖЬ;
КонецПопытки;

заменить на

Для Каждого СтрокаТаблицы Из СтрокиДокумента Цикл
    Если НЕ
ЗначениеЗаполнено(СтрокаТаблицы.Номенклатура)Тогда
        Продолжить;
    КонецЕсли;
   
НаборЗаписей.Очистить();
   
НаборЗаписей.Отбор.Контрагент.Установить(ИнформацияДокумента.Контрагент);
   
НаборЗаписей.Отбор.Номенклатура.Установить(СтрокаТаблицы.Номенклатура);
   
НаборЗаписей.Отбор.ХарактеристикаНоменклатуры.Установить(
       
СтрокаТаблицы.ХарактеристикаНоменклатуры);
   
ЗаписьРегистра = НаборЗаписей.Добавить();
   
ЗаписьРегистра.Контрагент = ИнформацияДокумента.Контрагент;
   
ЗаписьРегистра.Номенклатура = СтрокаТаблицы.Номенклатура;
   
ЗаписьРегистра.ХарактеристикаНоменклатуры =
       
СтрокаТаблицы.ХарактеристикаНоменклатуры;
   
ЗаписьРегистра.КодНоменклатурыКонтрагента = СтрокаТаблицы.Ид;
   
ЗаписьРегистра.НаименованиеНоменклатурыКонтрагента =
        ?(
ПустаяСтрока(СтрокаТаблицы.НаименованиеКраткое),
       
СтрокаТаблицы.Наименование, СтрокаТаблицы.НаименованиеКраткое);
   
ЗаписьРегистра.АртикулНоменклатурыКонтрагента = СтрокаТаблицы.Артикул;
   
ЗаписьРегистра.ШтрихКодНоменклатурыКонтрагента = СтрокаТаблицы.ШтрихКод;
   
ЗаписьРегистра.ЕдиницаНоменклатурыКонтрагента =
       
СтрокаТаблицы.БазоваяЕдиницаИзмерения;
    Попытка
       
НаборЗаписей.Записать(ИСТИНА);
    Исключение
       
ОписаниеОшибкиЗаписи = ОписаниеОшибки();
       
#Если клиент тогда
       
Сообщить("При записи каталога товаров произошла ошибка: " + Символы.ПС +
           
ОписаниеОшибкиЗаписи, СтатусСообщения.Важное);
       
#КонецЕсли
       
Возврат ЛОЖЬ;
    КонецПопытки;
КонецЦикла;

Между строчками

Для Каждого СтрокаТаблицы Из СтрокиДокумента Цикл
  
Ключ = Строка(СтрокаТаблицы.Номенклатура.УникальныйИдентификатор()) + «…»

вставить

Если НЕ ЗначениеЗаполнено(СтрокаТаблицы.Номенклатура)Тогда
    Продолжить;
КонецЕсли;

Это изменение позволяет записывать не весь каталог.

В функции СохранитьДанные() заменить

Если НЕ ТестированиеДанных(СтрокаСообщенияПользователю) Тогда

на

Если НЕ ТестированиеДанных(СтрокаСообщенияПользователю, Ложь) Тогда

в функции ТестированиеДанных() заменить

Функция ТестированиеДанных(СтрокаСообщенияПользователю) Экспорт

на

Функция ТестированиеДанных(СтрокаСообщенияПользователю, ПроверятьНоменклатуру = Истина) Экспорт

и

ЕстьНеопределенныеТовары = ЕстьНеопределенныеТовары ИЛИ НЕ ЗначениеЗаполнено(СтрокаТаблицы.Номенклатура);

заменить на

Если ПроверятьНоменклатуру Тогда
   
ЕстьНеопределенныеТовары = ЕстьНеопределенныеТовары ИЛИ
        НЕ
ЗначениеЗаполнено(СтрокаТаблицы.Номенклатура);
КонецЕсли;

и в тексте

ЕстьНеопределенныеЕдиницы = ЕстьНеопределенныеЕдиницы ИЛИ
   
ЗначениеНеОпределено(СтрокаТаблицы.БазоваяЕдиницаИзмерения);
ЕстьНеопределенныеТовары = ЕстьНеопределенныеТовары ИЛИ
    НЕ
ЗначениеЗаполнено(СтрокаТаблицы.Номенклатура);
ЕстьНеопределенныеКачестваТовара = ЕстьНеопределенныеКачестваТовара ИЛИ
   
ЗначениеНеПустаяСтрока(СтрокаТаблицы.Качество);

Закомментировать вторую строку

ЕстьНеопределенныеЕдиницы = ЕстьНеопределенныеЕдиницы ИЛИ
   
ЗначениеНеОпределено(СтрокаТаблицы.БазоваяЕдиницаИзмерения);
// ЕстьНеопределенныеТовары = ЕстьНеопределенныеТовары ИЛИ НЕ ЗначениеЗаполнено(СтрокаТаблицы.Номенклатура);
ЕстьНеопределенныеКачестваТовара = ЕстьНеопределенныеКачестваТовара ИЛИ
   
ЗначениеНеПустаяСтрока(СтрокаТаблицы.Качество);

Этими изменениями мы отключили проверку на несопоставленную номенклатуру и добавили возможность загружать документ с такой номенклатурой. В этом случае у нас заполнятся все колонки (сумма, количество и т.п.), кроме колонок «Номенклатура», «Характеристика номенклатуры», «Единица» и т.п. 

Форматы обмена CommerceML, взаимодействие 7.7 и 8.x

Если для взаимодействия двух 1С версий 7.7 никаких преобразований не требуется, то, в версии 8.x используется другая версия формата CommerceML, которая не совместима с предыдущей.

Поскольку оба формата являются подмножествами XML, то для преобразования между ними можно использовать преобразования XSLT.

Реализация 7.7 => Поступление 8.x

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

  • Корневой XML-элемент – «КоммерческаяИнформация»
    В нее входят:
  • Каталог
    • Атрибут «Идентификатор» – идентификатор каталога из 1С
    • Атрибут «Наименование» – наименование каталога из 1С
    • Атрибут «Владелец» – идентификатор фирмы-владельца каталога
    • Атрибут «Единица» - единица для товаров каталога по умолчанию
    • Список групп – элементы «Группа»
      • Атрибут «Идентификатор» – собственный формат идентификатора (вида «ID__B___0___0___84___0___0___________24_____») для группы (вручную не задается – внутреннее представление 1С, не требует вмешательства)
      • Атрибут «ИдентификаторВКаталоге» - код группы в справочнике «Номенклатура»
      • Атрибут «Наименование» - наименование в справочнике 1С
      • Атрибут «Родитель» - идентификатор родительской группы в формате идентификатора группы (вида «ID__B___0___0___84___0___0___________24_____»)
  • Список товаров – элементы «Товар»
    • Атрибут «Идентификатор» – собственный формат идентификатора (вида «ID__B___0___0___84___0___0___________24_____») для товара
    • Атрибут «ИдентификаторВКаталоге» - код товара в справочнике «Номенклатура»
    • Атрибут «Наименование» - наименование в справочнике 1С
    • Атрибут «Родитель» - идентификатор родительской группы в формате идентификатора группы (вида «ID__B___0___0___84___0___0___________24_____»)
    • Атрибут «Единица» - краткое наименование единицы измерения товара
    • Документ - элемент
      • Атрибут «Дата» - дата документа вида "2012-12-21"
      • Атрибут «Номер» - номер документа
      • Атрибут «Время» - время документа вида «ЧЧ:ММ:СС»
      • Атрибут «Комментарий» - комментарий документа
      • Атрибут «ХозОпреация» - для реализации – «Sale»
      • Атрибут «Сумма» - сумма документа
      • Атрибут «Валюта» - краткое наименование валюты
      • Атрибут «Курс» - курс валюты документа
      • Атрибут «Кратность» - кратность валюты документа
      • Атрибут «СрокПлатежа» - значение реквизита документа «Оплата до» вида "2012-12-21"
      • Элемент «ПредприятиеВДокументе»
        • Атрибут «Контрагент» -идентификатор фирмы-продавца или контрагента-покупателя в 1С. Контрагент с таким идентификатором должен присутствовать в разделе «Контрагенты»
        • Атрибут «Роль» – Saler - продацец или Buyer – покупатель
  • Элемент «СуммаНалога», для НДС имеет вид (в данном примере ставка равна 0, так как это сумма НДС по документу): <СуммаНалога "AVT" Ставка="0" Сумма="3430.27" ВключенВСумму="1"/>
  • Элементы «ТоварнаяПозиция»
    • Атрибут «Каталог» - Идентификатор каталога
    • Атрибут «Товар» - код товара в справочнике номенклатура
    • Атрибут «Единица» - краткое наименование единицы измерения товара
    • Атрибут «Количество» - количество
    • Атрибут «Цена» - цена
    • Атрибут «Сумма» - сумма
    • Атрибут «Описание» - комментарий коменклатуры
    • Элемент «Сумма налога» вида <СуммаНалога "AVT" Ставка="18" Сумма="60.12" ВключенВСумму="1"/>
  • Элемент «Контрагент»
    • Атрибут «Идентификатор» - идентификатор фирмы/контрагента в 1С
    • Атрибут «Наименование» - официальное наименование в 1С
    • Атрибут «ОтображаемоеНаименование» - краткое наименование в 1С
    • Атрибут «Адрес» - адрес

Для того, чтобы этот документ загрузить в 1С 8.x необходимо преобразовать его к виду:

  • Корневой элемент «КоммерческаяИнформация»
  • Вложенный элемент «Документ»
    • Элемент «Номер» - копия атрибута «Номер» из не преобразованного файла
    • Элемент «Дата» - копия атрибута «Номер» из не преобразованного файла
    • Элемент «ХозОперация» - «Отпуск товара» для поступления
    • Элемент «Роль» - «Продавец»
    • Элемент «Валюта» - валюта документа (без точки – различные классификаторы валют в разных версиях 1С)
    • Элемент «Сумма» - сумма документа
    • Элемент «СрокПлатежа»
    • Элемент «Контрагенты»
      • Элемент – «Контрагент»
        • Элемент «Ид» - не используется, но должен быть уникальным. В приведенном примере копируется идентификатор контрагента из 7-ки.
        • Элемент «Наименование» - наименование контрагента
        • Элементы «ИНН» и «КПП» - по ним будет производится поиск контрагента
        • Элемент «Роль» - «Продавец» или «Покупатель»
  • Элемент «Время» - время документа
  • Элемент «Налоги»
  • Элемент «Товары» - табличная часть документа
    • Элементы «Товар»
      • Элемент «Ид» - код номенклатуры контрагента по регистру сведений. По нему идет поиск.
      • Элемент «ИдКлассификатора» - идентификатор классификатора товаров
      • Элемент «Наименование» - наименование товара
      • Элемент «БазоваяЕдиница» - краткое наименование базовой единицы измерения
      • Элемент «Группы»
        • Элемент «Ид» - идентификатор группы-родителя (по классификатору, в примере – код в 7-ке)
        • Элемент «ЦенаЗаЕдиницу»
        • Элемент «Количество»
        • Элемент «Сумма»
        • Элемент «Единица»
        • Элемент «Коэффициент»
        • Элемент «Налоги»
        • Элемент «Ставки налогов»
        • Элемент «ЗначениеРеквизитов»
        • Элемент «Комментарий»
  • Вложенный элемент «Классификатор» - это иерархия номенклатуры
    • Элемент «Ид» - идентификатор классификатора
    • Элемент «Наименование» - наименование классификатора
    • Элемент «Владелец»
      • Элемент «Ид» - идентификатор владельца классификатора – копируем из выгрузки 7-ки
      • Элемент «Наименование»
      • Элементы «ИНН» и «КПП»
  • Элемент «Группы»
    • Элемент «Группа»
      • Элемент «Ид» - код группы в справочнике номенклатуры 1С 7.7
      • Элемент «Наименование»
      • Элемент «Группы» - вложенные группы, аналогично элементу «Группы»
      • Вложенный элемент «Каталог» - это еще одна часть выгрузки – именно при сопоставлении каталога задаются соответствия между номенклатурой поставщика и собственной номенклатурой.
        • Элемент «Ид» - идентификатор каталога (берем из выгрузки из 1С 7.7)
        • Элемент «ИдКлассификатора» - идентификатор классификатора
        • Элемент «Владелец» - аналогично классификатору
        • Элемент «Товары»
          • Элемент «Товар»
            • Элемент «Ид» - код товара в базе 1С 7.7
            • Элемент «ИдКлассификатора» » - идентификатор классификатора
            • Элемент «Наименование»
            • Элемент «БазоваяЕдиница»
            • Элемент «Группы»
              • Элемент «Ид» - код группы-родителя в базе 1С 7.7
              • Элемент «СтавкиНалогов»
              • Элемент «ЗначенияРеквизитов»

Обратное преобразование в значительной части копирует преобразование из 7.7 в 8.x с точностью до наоборот. Единственное важное отличие – как определить на стороне поставщика по «Ид» товара – сопоставлен ли он на стороне покупателя и чей код числится в графе «Ид»? При выгрузке из УТ 10.3 для товаров, которые сопоставлены по регистру сведений «Номенклатура контрагентов» у товаров внутри элемента «Документ» идентификаторы будут начинаться со знака «*».

Для преобразования можно использовать любые процессоры XSLT, поддерживающие спецификацию 1.0, например xalan (Java) или Microsoft XSL Processor.

К статье прикреплены файлы для преобразования «Реализации» из 7.7 в «Поступление» в 8.x – Sale77to8x.xslt и «Заказа поставщику» из 8.x в «заявку покупателя» 7.7 – Order8xto77.xslt.

В файле Sale77to8x.xslt задаются 5 переменных, которые нужны для загрузки в 1С 8.x и которые отсутствуют в спецификации выгрузки из версии 7.7:

  • client_inn − ИНН покупателя
  • client_kpp − КПП покупателя
  • firm_inn − ИНН поставщика
  • firm_kpp − КПП поставщика
  • firm_vat − НДС в сумме - 1 или сверху – 0

В файле Order8xto77.xslt задаются следующие переменные, которые нужны для загрузки в 1С 7.7 и которые отсутствуют в спецификации выгрузки из версии 8.x:

  • supplier_GUID  – идентификатор поставщика
  • catalog_GUID  – идентификатор каталога поставщика

Я для преобразования использовал небольшую программу-переходник, написанную на C#, привожу пример кода по преобразованию XSLT. На вход преобразованию можно передавать параметры из кода, тогда в файлах XSLT надо поменять переменныена параметры.

Пример использования XSLT на языке C#

//Создаем объект для преобразования XML
var transform = new XslCompiledTransform();
//Загружаем правила из файла
transform.Load("имя файла преобразования");
//Заполняем список параметров для файла преобразования
var transformParams = new XsltArgumentList();
transformParams.AddParam("Параметр", "", "Значение параметра");
//Создаем класс-writer для записи результата в файл
var writer = XmlWriter.Create("имя выходного файла", xml_writer_settings);
//Задаем параметры для объекта, который будет осуществлять запись в XML
var xml_writer_settings = new XmlWriterSettings(){
    Encoding = Encoding.UTF8, //кодировка UTF-8
    Indent = true,              //отступы делать и делать их табуляцией
    IndentChars = "\t"
};
//Собственно преобразовываем
transform.Transform("имя выходного файла", transformParams, writer);
writer.Close();

Дополнительная информация

См. также

Оптовая торговля Розничная торговля ККМ ЭДО и ОФД Обмен с ГосИС Системный администратор Программист Оперативный учет 7.7 Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Россия Платные (руб)

Поддерживаются новые ставки НДС 5% и 7% для УСН при продаже через ККТ. Подключение фискального регистратора к 1С 7.7 в режиме онлайн-кассы в соответствии с 54-ФЗ. Поддержка актуальных версий драйверов ККТ: ДТО 10 и ДТО 8 для Атол, 4.15, 5.16 для Штрих-М. Поддержка розничной продажи маркированной продукции (алкоголь, табак, обувь, лекарства, шины, одежда, белье, парфюмерия, молочная продукция, вода и пр.).

2000 руб.

28.03.2017    483356    4529    3518    

2471

Перенос данных 1C Программист Бухгалтер Платформа 1С v8.3 Оперативный учет 7.7 1С:Торговля и склад 7.7 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет Управленческий учет Платные (руб)

Переносится из типовой конфигурации «Торговля и Склад», реакции 9.2 платформы «1С:Предприятие 7.7» в типовую конфигурацию «Бухгалтерия предприятия», редакции 3.0 платформы «1С: Предприятие 8.3» следующие документы и их операции (с соблюдением всех соответствующих проводок): Поступления товаров и услуг (в т.ч. комиссия), Реализации товаров и услуг (в т.ч. комиссия), ПКО и РКО, выписки банка, счета фактуры (выданные и полученный), Возвраты от покупателей и поставщику, Заявка Покупателя, Инвентаризация и другие (всего 28 видов документов, смотрите описание, приложенное к обработке)

13188 руб.

30.06.2014    65931    109    107    

117

Перенос данных 1C Программист Платформа 1С v7.7 Платформа 1С v8.3 1С:Торговля и склад 7.7 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Обработка позволяет выгружать данные из ТиС 7.7 в конфигурации 8.3 для сдачи отчетности, для переноса данных при переходе на 8.3, для организации обмена внутри компании при использовании разных версий 1С в структурных подразделениях или формирования отгрузочных накладных для клиентов.

6000 руб.

18.05.2020    24051    70    39    

43

Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Обмен с ГосИС Программист Бухгалтер Оперативный учет 7.7 Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 1С:Упрощенное налогообложение 7.7 Сельское хозяйство и рыболовство Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Пищевая промышленность Россия Бухгалтерский учет Управленческий учет Платные (руб)

Полностью автоматизированный обмен между конфигурациями 1С 7.7 и ФГИС Меркурий через Ветис.API для всех видов деятельности (Опт, Розница, Производство). Для организации обмена с ФГИС Меркурий требуется минимальная доработка конфигураций (поддерживается "из коробки" 1С: "Торговля и склад ред. 9.2", 1С: "Комплексная ред. 4.5", 1С: "Бухгалтерия 7.7", 1С: "УСН 7.7", 1С Предприниматель, другие конфигурации по заказу, включая нетиповые и самописные). Модуль разработан таким образом, чтобы минимизировать затраты по внедрению в произвольную конфигурацию на базе 1С 7.7. Вы можете БЕСПЛАТНО скачать демо-версию без ограничения по функционалу и опробовать решение в полном объеме перед покупкой. В данном программном продукте реализованы все технические требования Россельхознадзора по обмену в формате 2.0 и 2.1. Решение прошло опытную эксплуатацию и тестирование на крупных объектах всех видов деятельности: Производство, Опт, Розница.

10000 руб.

21.11.2018    54296    157    105    

71

Оптовая торговля Обмен с ГосИС Программист Бухгалтер Платформа 1С v7.7 1C77 Сельское хозяйство и рыболовство Оптовая торговля, дистрибуция, логистика Пищевая промышленность Бухгалтерский учет Платные (руб)

В обработке реализован полный цикл работы с ГИС Меркурий из 1С на платфоме 7.70.027 (поддерживается конфигурация "Торговля и Склад") через Ветис.API: реализованы процедуры обмена с подсистемами заявок и справочников Ветис.API в формате 2.0.

5040 руб.

03.07.2018    37858    80    29    

61

Оптовая торговля Розничная торговля Обмен с ГосИС Бухгалтер Оперативный учет 7.7 1С:Торговля и склад 7.7 Бухгалтерский учет Акцизы Платные (руб)

Дорогие друзья! Предлагаю Вашему вниманию обработку, предназначенную для обмена данными из Вашей учетной системы с ЕГАИС, через универсальный транспортный модуль (УТМ). В обработке реализован весь функционал обмена: - загрузка справочных данных по контрагентам, производителям, импортерам алкогольной продукции; - загрузка справочных данных по номенклатуре алкогольной продукции; - загрузка остатков; - помощник сопоставления справочных данных и запись их в базу данных; - загрузка приходных ТТН и справок Б от поставщиков, отправка по ним актов всех типов, создание по ним приходных документов; - выгрузка расходных ТТН покупателям; - управление Марками и ведение Регистра 3; Обработку возможно использовать автономно, не внося изменений в Вашу Учетную систему. Код открыт.

6000 руб.

13.11.2015    127225    172    2529    

233

Перенос данных 1C Программист Платформа 1С v7.7 Платформа 1С v8.3 Платформа 1C v8.2 1С:Управление торговлей 10 1С:Комплексная 7.7 Россия Управленческий учет Платные (руб)

Начните вести учет в УТ 10.3! Перенесите все свои данные в УТ 10.3 в любом месяце года и продолжите вести учет! Программа перенесёт любое количество баз с документами и остатками в больших количествах. Обработка выгрузки выполнит проверку исходных данных и сформирует отчет о найденных ошибках в справочниках и документах. Партии переносятся с себестоимостью. Штрихкоды номенклатуры загружаются. Цена переносится. Автор консультирует.

8400 руб.

17.03.2021    16133    5    13    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. potap@f58.ru 25.06.15 10:37 Сейчас в теме
Спасибо! Пригодилось!
2. zaliznyj 26.10.15 01:45 Сейчас в теме
Супер очень благодарен за подсказку переделал свою конфигурацию работает отлично
Оставьте свое сообщение