Как исправить правила конвертации

Обратился клиент с просьбой оказать помощь в 1С. Проблема: перестал работать обмен ут10.2 — бп 3.0. Ошибка указана выше. Обмен не работает, данные накапливаются, надо что-то делать.

Посмотрел конфигурацию БП3.0, действительно в ней нет данных «Перечисление.СтатусОплатыСчетаПокупателю.НеОплачен».

Т.е. главная задача убрать из правил это предопределенное свойство.

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

Обработка из конвертации данных «Выгрузка правил синхронизации.epf» в этой конфигурации не работает.

Как я и думал «добрые» разработчики 1с спрятали выгрузку правил обмена в файл вот тут:

В итоге сохранил их в файл zip.

В zip архиве у нас 3 файла

Причем при попытке загрузить их обратно в конфигурацию через кнопку «Загрузить правила» получил тут же ошибку «Неправильно указаны реквизиты шапки объекта «Валюты». Реквизит «ПараметрыПрописиНаРусском» не существует.«

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

Решил редактировать файлы блокнотом.

Итак исправляем ошибку «Неправильно указаны реквизиты шапки объекта «Валюты». Реквизит «ПараметрыПрописиНаРусском» не существует.«

Открываем блокнотом файл ExchangeRules.xml и ищем «ПараметрыПрописиНаРусском».

Видим, что правило очень хочет чтобы приемником тоже был «ПараметрыПрописиНаРусском», которого у нас нет. Поэтому этот фрагмент мы удаляем.

Пакуем наши 3 файла в zip и пытаемся загрузить — все грузится без ошибок.

При загрузке правил еще возникала ошибка «Конфликт блокировок при выполнении транзакции«.

Решил так. Выгнал всех, запустил конфигуратор. Из конфигуратора 1с-предприятие и сразу грузить правила. Ошибка не появлялась.

Теперь исправим ошибку «Предопределенное значение «Перечисление.СтатусОплатыСчетаПокупателю.НеОплачен» не найдено«.

В конвертации данных нашел что вот в этом месте возникает ошибка

Но править решил через любимый блокнот.

Вот это место, я его просто закомментировал.

Вначале пытался просто сделать Перечисление.СтатусОплатыСчета, но БП начало при обмене падать с ошибкой что нет метода установитьСтатусДокумента.

Сохранил изменения, загрузил эти 3 файла в архив zip

и загрузил в БП

После этого обмен заработал без ошибок.

Исправленные правила также необходимо загрузить в УТ10.3

p.s. Понял, что необходимо срочно начать изучение КД.

В этой статье речь пойдет о настройках универсального формата обмена и ошибках, которые возникают на начальном этапе настройки (этап №1). В конвертации данных 3.0 есть инструкция по настройке правил конвертации на примере. Однако не все пункты понятны и не везде дано подробное описание. Плюс ко всему в стандартных обработках и в самой программе возникают ошибки, о которых я и хочу рассказать в этой статье, а также предлагаю скачать доработанные мной обработки и расширение, чтобы без ошибок и потери драгоценного времени можно было настроить правила.

Обратимся к исходному примеру, который представлен в конвертации данных в начале работы.

С первым шагом (шаг 1) – все понятно. Нужно для каждой конфигурации, между которыми планируем настраивать обмен, выгрузить структуры информационных баз. С помощью обработки MD83Exp.epf, входящей в комплект поставки. На этом этапе останавливаться не будем, так как он подробно описан в программе. Однако в стандартной обработке MD83Exp.epf скрыты настройки обработки, в связи с этим не выгружаются регистры сведений. Я исправила этот момент, и Вы можете приобрести исправленную обработку. Ссылки в конце страницы.

Следующим действием (шаг 2) предлагается сделать экспорт xml-схемы формата обмена, из любой базы. В этом примере, который рассматривается в конфигурации Конвертация данных xml-схемы одинаковые у обеих баз, так что достаточно сделать экспорт из любой базы. Но в примере не говорится, что если все-таки конфигурации разнятся, то нужно выбрать похожие XDTO-пакеты в базах и экспортировать их. Версия определяется по цифрам, указанным у XDTO-пакета. Например: EnterpriseData_1_3_20 — версия формата 1.3.

Обратите внимание, что версию формата обмена нужно выбирать наиболее оптимальную. Например: в одной конфигурации версия формата последняя 1.6, а в другой конфигурации – 1.5. Следовательно, оптимальный формат будет 1.5.

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

экспорт xml-схемы

Далее в примере предлагается сделать загрузки в конвертацию данных (шаг 3 и шаг 4).

Сначала загружаем структуру информационных баз (по очереди) раздел «Конфигурации» — «Загрузка структуры конфигурации» флаг «В новую версию конфигурации».

Затем нужно загрузить xml-схему формата обмена. Формат данных – «Загрузка структуры формата», выбираем ранее выгруженные файлы с расширением «xsd». Выбираем только один файл. Раньше делали Множественный выбор с ExchangeMessage, но это было в старых версиях конфигурации. После загрузки обязательно проверьте структуру формата в разделе Формат данных – Дерево объектов формата – далее выбрать версию формата. Если структура заполнена – там есть документы, справочники, то все в порядке, можно продолжать настройки, иначе выгрузите новую версию и повторите всю процедуру сначала.

Загрузка структуры формата

Далее в примере (этап 2) предлагается создание конвертации с нуля, однако если у баз уже есть типовые правила обмена, которые достаточно доработать, то можно загрузить эти правила в конфигурацию и работать с ними.

Прежде чем выгружать правила конвертации нужно открыть общий модуль МенеджерОбменаЧерезУниверсальныйФормат. Если это Бухгалтерия Предприятия 3.0, то открываем МенеджерОбменаЧерезУниверсальныйФормат13. В открытом модуле переходим в меню Файл – Сохранить копию – сохраняем файл с любым именем (например — Модуль).

МенеджерОбменаЧерезУниверсальныйФормат

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

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

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

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

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

Загрузка правил синхронизации

Сложностей в загрузке нет никаких. Все интуитивно понятно, только в момент загрузки тоже возникает ошибка «Поле объекта не обнаружено». Здесь тоже придется либо вносить исправления в конфигурацию Конвертация данных, либо можно воспользоваться уже моим готовым решением. Я сделала расширение для Конвертации данных 3.0, подключив которое Вы решаете эту проблему. Приобрести расширение и две исправленные обработки, о которых я рассказывала вначале статьи, вы можете приобрести по ссылке ниже.

При загрузке появится сообщение «Обработчики предназначены для другой конвертации… Продолжить загрузку?» Нажимаем «Да».

После загрузки правил можно приступать к их редактированию.

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

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

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

Доработки проводились на конвертации данных 3.0(3.0.5.3). Ссылка на доработки.

Необходимо подправить правила обмена между конфигурациями «УТ» и «Розница».

Пытаюсь загрузить правила в конфигурацию «Конвертация данных 2.0» (версия 2.0.22.1) — ругается: «Ошибка формата файла обмена. Не возможности обработать узел: ПослеПолученияИнформацииОбУзлахОбмена

«.

Смотрю xml-файл правил, а там такие строки:

<ВерсияФормата>2.01</ВерсияФормата>

 <Наименование>РозничнаяТорговля типовая —> УправлениеТорговлей</Наименование>

 <ДатаВремяСоздания>2008-10-20T16:53:34</ДатаВремяСоздания>

 <Источник ВерсияПлатформы=»8.0″ ВерсияКонфигурации=»1.0.5.1″ СинонимКонфигурации=»Розница, редакция 1.0″>Розница</Источник>

 <Приемник ВерсияПлатформы=»8.0″ ВерсияКонфигурации=»10.3.6″ СинонимКонфигурации=»Управление торговлей, редакция 10.3″>УправлениеТорговлей</Приемник>

Меня смущает версия формата (2.01 — это что получается, правила созданы на базе «Конвертация данных» 2.0.1x.x ?) и версия платформы: 8.0.

Как такое может быть?

В статье описано, как добиться оптимальной записи с отменой проведения или проведением перенесенных документов  при написании правил обмена в системе Конвертации Данных (КД).

При переносе данных между базами часто возникает ситуация, когда движения документов переносить не требуется, а перенесенные документы следует проводить в базе-приёмнике. Например, в базе-источнике ведется управленческий учет, а в базе-приемнике  регламентированный.  Если при переносе не учитывать свойство «Проведен» документа, то можно получить в приемнике проведенные документы, у которых данные в движениях и в объекте не соответствуют друг другу.

 В правилах конвертации объектов (ПКО) в обработчике «Перед загрузкой» существуют параметры «РежимЗаписи» и «РежимПроведения», указание которых обеспечивает необходимый режим записи объекта, но в этом случае, запись происходит во время загрузки данных и если, по каким-то причинам, документ не запишется, загрузка данных будет прервана. Правильней записывать новые документы в конце загрузки, когда все перенесенные объекты уже будут в базе — приемнике.

Несколько основных моментов:

  1. Нам необходим параметр конвертации с типом «Таблица значений», куда можно будет записывать ссылки на документ и информацию о том, что с документом делать. Создать параметр на вкладке «Параметры» конвертации – не получится, но его спокойно можно создать программным способом. После использования наш параметр следует удалить, в противном случае при использовании управляемой формы обработки система будет выдавать сообщение об ошибке, т.к. управляемая форма не использует таблицу значений. Несмотря на сообщение об ошибке, обработка все действия выполнит, но нервировать пользователей подобными сообщениями не следует.
  2. Для анализа, новый это объект или существующий в обработке используется параметр ОбъектНайден.
  3. Для анализа состояния ранее записанного объекта в приемнике используем обращение к его ссылке (Объект.Ссылка).
  4. Для записи ссылки нового для приемника документа нам необходимо документ записать. Чтобы избежать повторной записи документа обработкой обмена следует выставить параметр ОбъектМодифицирован в значение Ложь.
  5. Обработка обмена данными при записи документа обнуляет перенесенную пометку удаления. Это необходимо учитывать.
  6.  Для решения стоящей задачи наиболее удобно использовать обработчики событий конвертации в целом. Но нам необходимо определить – объект  — это документ, и если документ – то проводится ли он. Для идентификации документа используем параметр обработчика ИмяТипаОбъекта.

I. Первый, более простой, случай: требуется оставлять в базе-приемнике документы непроведенными.

      Подразумевается, что пользователи в базе-приемнике проверят документы и потом их проведут. Если не переносить движения и просто указать в свойстве «Проведен»  — «Значение = Ложь», то можем получить при повторном переносе документы внешне не проведенные, но с движениями. К этому получим справедливое возмущение пользователей, которые не смогут понять результатов отчетов.

     Свойство «Проведен» необходимо исключить из переноса в каждом документе. Нам необходимо при выгрузке данных запоминать необходимые для отмены проведения документы и после загрузки данных записать их с режимом отмены проведения. Помимо ссылки на документ необходимо сохранять и информацию об его пометке удаления. Для получения информации о пометке удаления данное свойство каждого проводимого документа необходимо передавать в параметр, который назовем также, как и имя свойства — ПометкаУдаления. (Рис.1)

1. В обработчике «Перед загрузкой данных» конвертации создаем параметр с типом значений «Таблица значений».  В колонку «Действие» строкой будем записывать – что делать с документом: просто отменять проведение или еще проставлять пометку на удаление.

     ТаблицаДокументов = Новый ТаблицаЗначений;
     ТаблицаДокументов.Колонки.Добавить(«Ссылка»);
     ТаблицаДокументов.Колонки.Добавить(«Действие»);
     Параметры.Вставить(«ТаблицаДокументов»,ТаблицаДокументов);

2. В обработчике «После загрузки объекта» конвертации, определяем найден ли объект, является ли объект документом, проводится ли он, и если в приемнике он проведен, то только тогда помещаем ссылку на него в наш параметр ТаблицаДокументов.

    Если ОбъектНайден
        И ИмяТипаОбъекта = «Документ»
        И
Объект.Метаданные().Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить
        И Объект.Ссылка.Проведен Тогда
        
НоваяСтрока = Параметры.ТаблицаДокументов.Добавить();
        
НоваяСтрока.Ссылка = Объект.Ссылка;
        Если
ПараметрыОбъекта.Получить(«ПометкаУдаления») Тогда
            
НоваяСтрока.Действие = «Удаление»;
        Иначе
            
НоваяСтрока.Действие = «Отмена»;
        КонецЕсли;
    ИначеЕсли 
ПараметрыОбъекта <> Неопределено И Лев(Строка(ТипЗнч(Объект)),8) = «Документ»  Тогда
        
Объект.ПометкаУдаления = ПараметрыОбъекта.Получить(«ПометкаУдаления»); //Пометка удаления у новых объектов и непроведенных старых
    КонецЕсли;

3. В обработчике «После загрузки данных» конвертации отменяем проведение у записанных документов, проставляем при необходимости пометку на удаление и удаляем наш параметр. При желании отследить процесс удаления код обработчика может выглядеть так:

     ТекстСообщенияОтмены = «»;
     
ТекстСообщенияОшибки = «»;
     Для каждого
СтрокаТч Из Параметры.ТаблицаДокументов Цикл
         Попытка
             
ДокОбъект = СтрокаТч.Ссылка.ПолучитьОбъект();
             Если
СтрокаТч.Ссылка.Проведен Тогда
                 
ДокОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
             КонецЕсли;
             Если
СтрокаТч.Действие = «Удаление» Тогда
                 
ДокОбъект.ПометкаУдаления = Истина;
                 
ДокОбъект.Записать();
             КонецЕсли;
             
ТекстСообщенияОтмены = ТекстСообщенияОтмены + Строка(СтрокаТч.Ссылка) + Символы.ПС;
         Исключение
             ТекстСообщенияОшибки 
= ТекстСообщенияОшибки + Строка(СтрокаТч.Ссылка) + » : «+ ОписаниеОшибки() + Символы.ПС;
         КонецПопытки;
     КонецЦикла;

     Если Не ПустаяСтрока(ТекстСообщенияОтмены) Тогда
         
Сообщить(«Отменено проведение документов:» + Символы.ПС + ТекстСообщенияОтмены);
     КонецЕсли;
     Если Не
ПустаяСтрока(ТекстСообщенияОшибки) Тогда
         
Сообщить(«Ошибки при отмене проведения: «+ Символы.ПС + ТекстСообщенияОшибки);
     КонецЕсли;
     
Параметры.Удалить(«ТаблицаДокументов»);

II. Требуется обеспечить проведение документов в базе-приемнике при переносе.

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

1. «Перед загрузкой данных» Повторяем создание параметра конвертации, как в первом примере

ТаблицаДокументов = Новый ТаблицаЗначений;
ТаблицаДокументов.Колонки.Добавить(«Ссылка»);
ТаблицаДокументов.Колонки.Добавить(«Действие»);
Параметры.Вставить(«ТаблицаДокументов»,ТаблицаДокументов);

2. «После загрузки объекта»  После загрузки мы должны уже работать с объектами, которые еще не записаны в базе. Документы можно выделить по типу значения, а новый объект, перед внесением в таблицу параметра, необходимо предварительно записать. Не забываем установить параметр «ОбъектМодифицирован» в «Ложь». 

Если ИмяТипаОбъекта = «Документ»
   
И Объект.Метаданные().Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить Тогда

    Если Не ОбъектНайден  Тогда
       
Объект.Записать();
       
ОбъектМодифицирован = Ложь;
    КонецЕсли;

    НоваяСтрока Параметры.ТаблицаДокументов.Добавить();
   
НоваяСтрока.Ссылка = Объект.Ссылка;

    Если ПараметрыОбъекта.Получить(«Проведен»)  Тогда
       
НоваяСтрока.Действие = «Проведение»;
    ИначеЕсли
ПараметрыОбъекта.Получить(«ПометкаУдаления»)  Тогда
       
НоваяСтрока.Действие = «Удаление»;
    Иначе
       
НоваяСтрока.Действие = «Отмена»;
    КонецЕсли;
КонецЕсли;

3. «После загрузки данных» После загрузки мы должны пропустить запись документа, если он не проведен в базе-источнике и в базе приемника. Также необходимо проследить за пометкой удаления.

ТекстСообщенияЗаписи = «»;
ТекстСообщенияОшибки = «»;

Для каждого СтрокаТч Из Параметры.ТаблицаДокументов Цикл


    Если
СтрокаТч.Действие = «Отмена»  И Не СтрокаТч.Ссылка.Проведен Тогда
        Если
СтрокаТч.Ссылка.ПометкаУдаления Тогда  //Для снятия пометки удаления
           
Попытка
               
ДокОбъект = СтрокаТч.Ссылка.ПолучитьОбъект();
               
ДокОбъект.ПометкаУдаления = Ложь;
               
ДокОбъект.Записать();
            Исключение
            КонецПопытки;
        КонецЕсли;

        Продолжить;

    КонецЕсли;

    Если СтрокаТч.Действие = «Проведение» Тогда
       
РежимЗаписи = РежимЗаписиДокумента.Проведение;
    Иначе
       
РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения;
    КонецЕсли;

    Попытка
        ДокОбъект = СтрокаТч.Ссылка.ПолучитьОбъект();
        Если (
СтрокаТч.Действие <> «Удаление» Или  СтрокаТч.Ссылка.Проведен) Тогда
           
ДокОбъект.Записать(РежимЗаписи);
           
ТекстСообщенияЗаписи = ТекстСообщенияЗаписи +?(РежимЗаписи = РежимЗаписиДокумента.Проведение,
           
«Проведен «,«Отменено проведение «)
            +
Строка(СтрокаТч.Ссылка) + Символы.ПС;
        КонецЕсли;

        Если СтрокаТч.Действие = «Удаление» Тогда
           
ДокОбъект.ПометкаУдаления = Истина;
           
ДокОбъект.Записать();
        ИначеЕсли
СтрокаТч.Ссылка.ПометкаУдаления Тогда
           
ДокОбъект.ПометкаУдаления = Ложь;
           
ДокОбъект.Записать();
        КонецЕсли;
    Исключение    

    ТекстСообщенияОшибки = ТекстСообщенияОшибки Строка(СтрокаТч.Ссылка)+ » : «+ОписаниеОшибки()+ Символы.ПС;

    КонецПопытки;
КонецЦикла;

Если Не ПустаяСтрока(ТекстСообщенияЗаписи) Тогда
   
Сообщить(ТекстСообщенияЗаписи);
КонецЕсли;

Если Не ПустаяСтрока(ТекстСообщенияОшибки) Тогда
   
Сообщить(«Ошибки при отмене проведения: «+ Символы.ПС + ТекстСообщенияОшибки);
КонецЕсли;
Параметры.Удалить(«ТаблицаДокументов»);

Понравилась статья? Поделить с друзьями:
  • Как найти свою кошку в деревне
  • Как найти эффекты для фото в инстаграм
  • Как исправить вино когда оно стало как уксус
  • Как найти количество целых чисел функции
  • Как написать на сайт найти человека