Отмена проведения и проведение документов при переносе данных с использованием конвертации данных.

12.10.13

Интеграция - Обмен между базами 1C

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

        Продолжить;

    КонецЕсли;

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

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

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

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

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

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

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

 



конвертация обмен перенос данных

См. также

SALE! 20%

Перенос данных из УПП 1.3 в ERP 2 / УТ 11 / КА 2. Переносятся документы, справочная информация и остатки

Обмен между базами 1C Платформа 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) в продаже с 2015 года, постоянно работаем над их развитием | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

45650 36520 руб.

04.08.2015    159675    363    267    

345

SALE! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 22572 руб.

12.06.2017    134930    722    291    

388

SALE! 20%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

34650 27720 руб.

15.04.2019    68414    178    138    

111

SALE! 20%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Воспользовались более 79 предприятий! | Предлагаем приобрести готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | В продаже с 2020г. | Оперативно обновляем правила до актуальных релизов 1С | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

43450 34760 руб.

03.12.2020    34168    80    58    

78

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.87.x) и УТ 11.5 (11.5.16.x).

28000 25200 руб.

23.07.2020    46288    196    64    

158

SALE! 10%

Перенос данных из БП 3.0 в УТ 11 / КА 2 / ERP 2. Переносятся начальные остатки, документы и справочники

Обмен между базами 1C Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

В продаже с 2014г. | Воспользовались более 122 предприятий! | Перенос данных из БП 3.0 в УТ 11 | из БП 3.0 в КА 2 | из БП 3.0 в ERP | Сэкономьте свое время - используйте готовое решение для перехода! | Постоянно работаем над развитием переноса данных | Обновляем на новые релизы 1С | Есть фильтр выгрузки по организациям | Переносятся начальные остатки на выбранную дату, документы за период времени и вся возможная справочная информация | Перенос сделан на технологии КД 2 (правила конвертации данных)

50722 45650 руб.

31.10.2014    231395    124    327    

296

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9207    9    8    

10

SALE! 10%

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.223.x) и БП 3.0 (3.0.149.x). Правила подходят для версии ПРОФ и КОРП.

28000 25200 руб.

15.12.2021    20244    132    38    

90
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. K_A_O 538 24.12.12 10:55 Сейчас в теме
Конечно же, такой подход имеет право на жизнь.
Однако в большинстве случаев достаточно параметра РежимЗаписи и установки флажка "Режим отладки" в обработке загрузки. В этом режиме загрузка прерываться не будет.
elga2012; +1 Ответить
36. Crazy Professor 24 12.07.19 15:13 Сейчас в теме
Все жду, когда кто-нибудь наконец рабочие процедуры "после загрузки данных" выложит, сам все время забываю и уже третий раз их придумываю заново.
Проблема функций в топике, в том, что они не умеют помечать на удаление проведенные документы и проводить помеченные на удаление. В таких случаях действия необходимо выполнять в два этапа.
Ну и, если честно, функции тяжело воспринимаются.

Мой вариант:

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

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

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

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

Если Не ПустаяСтрока(ТекстСообщенияОшибки) Тогда
    Сообщить("Ошибки: "+ Символы.ПС + ТекстСообщенияОшибки);
КонецЕсли;
Параметры.Удалить("ТаблицаДокументов");
Показать
dkonakov; BushNik; +2 Ответить
2. iov 406 24.12.12 12:07 Сейчас в теме
(0) в КД проведен - в ложь.
Если перегружаем все подряд - то дополнительный реквизит - проводить = истина.
после загрузки - проводим все что нужно через попытку что не провелось - сообщаем пользователю.
Вариант?
Fox-trot; +1 Ответить
3. ARL 313 24.12.12 12:46 Сейчас в теме
(2)Вариантов всегда масса :) Показан один из них, реализованный у меня лично. У меня регулярный перенос по плану обмена. Проводить все подряд - в моем случае не допустимо.
4. iov 406 24.12.12 12:55 Сейчас в теме
(3)тык у меня тоже не все подряд - а только то что проведено в основной ... Но именно через попытку - потому как даже режим записи= истина не гарантирует корректности проводок (а порой документ проведен/не проведен а движений есть/нет). Но не суть на больших объемах (много данных или много обменов или и то и другое) обмен приходится делать через такие хитрости и извраты.... Но как говорится ваше решение имеет право на жизнь. И оно пригодится в ряде решений других задач.
5. ARL 313 24.12.12 13:07 Сейчас в теме
(4) В примерах все проводится через попытку. Только оператор открывается перед ПолучитьОбъект(), т.к. мы можем пытаться манипулировать с ранее записанным объектом, а он может быть кем-нибудь заблокирован.
bananoed; +1 Ответить
6. iov 406 24.12.12 13:22 Сейчас в теме
(5) дааа есть такие гады... дай ткнуть в документ ... :)
7. fomix 33 11.01.13 12:34 Сейчас в теме
Возможно у автора описка в тексте публикации. Событие "После загрузки данных" выполняется самым последним после загрузки данных из файла обмена, когда файл уже закрыт и только один раз! А потому правильнее будет, если таблица значений создается в событии "Перед загрузкой данных", которое выполняется первым перед началом загрузки данных из файла и только один раз, после открытия файла для чтения. В данном обработчике как раз и могут быть инициализированы переменные, которые впоследствии предполагается использовать.
user811769; Fox-trot; Serg_2015; +3 Ответить
8. ARL 313 11.01.13 12:55 Сейчас в теме
(7)Точно, описался. Несколько раз проверял, а такую очевидную ляпу пропустил. Благодарю за замечание, исправляю.
9. fomix 33 16.01.13 17:29 Сейчас в теме
Еще ошибка в обоих фрагментах текста обработчика "После загрузки данных":
....
Попытка
.....
Исключение
ТекстОшибки = ТекстСообщенияОшибки + Строка(СтрокаТч.Ссылка) + " : "+ ОписаниеОшибки() + Символы.ПС;
КонецПопытки;

нужно исправить на:
ТекстСообщенияОшибки = ТекстСообщенияОшибки + Строка(СтрокаТч.Ссылка) + " : "+ ОписаниеОшибки() + Символы.ПС;
Designer1C; LexSeIch; +2 Ответить
10. ARL 313 17.01.13 00:15 Сейчас в теме
11. fomix 33 17.01.13 10:05 Сейчас в теме
Тут еще по теме всплыли мыслишки. Для проверки принадлежности загружаемого объекта к типу "Документ" заменить нижеприведенные конструкции в обработчиках «После загрузки объекта» конвертации:

>> Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Объект.Ссылка))
>> Лев(Строка(ТипЗнч(Объект)),8) = "Документ"

на более простую:
<< Если ИмяТипаОбъекта = "Документ" ...
12. ARL 313 17.01.13 15:25 Сейчас в теме
Так будет и проще, и правильней. Не обратил внимание на данный параметр обработчика в свое время. В "своем" обмене уже поменял.
14. wau8824ru 22 09.04.13 17:29 Сейчас в теме
(12) Помогите разобраться новичку,
В обработчике «Перед загрузкой данных» конвертации
В обработчике «После загрузки объекта» конвертации
В обработчике «После загрузки данных» конвертации
Это глобальные обработчики, которые находятся на закладке "Основная" Конвертации, и они будут отрабатывать только для тех объектов у которых ПКС ПометкаУдаления и Проведен заменены на параметры??? А если не заменять на параметры то все будет как обычно(без параметров)?
,
В общем глупый вопрос, все написано в описании, невнимательно прочитал... спасибо за копипаст... работает
sv_mikh; knigina; +2 Ответить
13. Manonegro 15.03.13 16:28 Сейчас в теме
У меня выдает ошибку:

Ошибка в глобальном обработчике события ПослеЗагрузкиОбъекта (конвертация)
Значение не является значением объектного типа (Получить)

Я, так понимаю, ПараметрыОбъекта = Неопределено.

Или свойства ПометкаУдаления и Проведен нужно передавать в параметр? Тогда для переноса из 7.7 не подходит, ибо в параметр переносить нельзя. Есть другой способ передать эти свойства? Например, через глобальные параметры?
15. LexSeIch 210 17.06.13 08:31 Сейчас в теме
Мир этому дому!
Автору плюс, fomix - то же плюс. Статья интересная - пока бегло прочитал - позже разберусь внимательней. Спасибо!
16. swimdog 765 07.11.13 12:03 Сейчас в теме
Пригодилось. Я делал похожий механизм, но проводил сразу после загрузки.
17. swimdog 765 07.11.13 12:11 Сейчас в теме
А зачем надо Проведен и ПометкаУдаления передавать через параметр? Почему нельзя просто Объект.Проведен и Объект.ПометкаУдаления?
И ПометкаУдаления снимается обработкой, наверное, в том случае, когда в обработке по загрузке установлен флажок "Объекты, выгруженные по ссылке, загружать без пометки на удаление".
18. ARL 313 07.11.13 23:15 Сейчас в теме
(17)
А зачем надо Проведен и ПометкаУдаления передавать через параметр? Почему нельзя просто Объект.Проведен

Через параметр передавать логичней, т.к. пометки появятся у документов только после проведения - отмены проведения в базе приемника.
Пример: вы передали свойство "Проведен" при обмене. Но при проведении - документ не провелся, а свойство - осталось. Получим проведенный документ без движений.
когда в обработке по загрузке установлен флажок "Объекты, выгруженные по ссылке, загружать без пометки на удаление"

Надо пробовать. Вроде как написано - для объектов по ссылке, а не напрямую.
Я заметил,к примеру, что при загрузке обработкой в управляемой форме - проблем с пометкой не возникало.
А к статье надо относиться как примеру методики работы с конвертацией, а использовать или нет - это уже в каждом конкретном случае надо определять.
19. knigina 15.11.13 23:25 Сейчас в теме
Моя тема. Как новичок, которому приходилось довольствоваться штатным обменом УТ 10.3-БП 3.0, не знала как подступить к переносу без проведения документов. Спасибо автору. И отдельное спасибо от меня 88wau24ru за правильно заданный (для меня!) вопрос...и ответ. В результате что-то у меня даже получилось. Буду разбираться дальше.
20. RSConsulting 166 17.02.15 07:59 Сейчас в теме
Ругается на строку "Если ПараметрыОбъекта.Получить("Проведен") Тогда".
Ошибка: "Значение не является значением объектного типа (Получить)"
Версия конвертации 2.1.8.1
22. ARL 313 18.02.15 10:34 Сейчас в теме
(20) Вы пропустили момент
В этом случае необходимо помимо пометки удаления передавать значение свойства «Проведен» в параметр «Проведен» и данный параметр анализировать в обработчике «После загрузки объекта» (Рис.2).
(21) Заработало, но некорректно. Возможно, что в новой базе документ не проведется, а свойство "Проведен" останется. Получим проведенный документ без движений. Пользователи скажут "спасибо".
26. kida1 146 24.11.16 20:11 Сейчас в теме
Автору Спасибо!
хорошо бы добавить снятие с проведения
(22) Добавьте в исключение в «После загрузки данных» не просто ТекстОшибки, а снятие с проведения

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

21. RSConsulting 166 17.02.15 08:16 Сейчас в теме
Заменил код в обработчике После загрузки объекта на

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

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

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

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


Заработало!
Batman; SP2000; DennyPhilord; AlexLM; ДимокШ; Designer1C; eldarik; maksa2005; Dunda; +9 Ответить
34. DennyPhilord 65 22.02.19 18:27 Сейчас в теме
(21) Почему-то оригинальный вариант глючил, а этот взлетел.
23. damirxan 23.03.15 10:37 Сейчас в теме
Все работает.
Спасибо за решение по проведению документов через Параметр.
24. KliMich 25.03.16 19:19 Сейчас в теме
Спасибо! Переносил через КД из ПУБ 7.7 в БП 3.0.

Только при переносе из 1с 7.7 "передача данных в параметр" не работают....
Сделал как в посте 21. RSConsulting - все сработало!
25. Nik777x 16.08.16 09:42 Сейчас в теме
Спасибо, пригодилось. Автору респект.
27. le_ 237 03.07.17 13:50 Сейчас в теме
Покажите, плз, как параметры объекта передаются из источника (Проведение/Удаление/Отмена).
28. ARL 313 03.07.17 23:01 Сейчас в теме
(27) Открыть форму свойства, выбрать переключатель "Передавать данные в параметр" и ввести название параметра в поле ввода "Параметр". На рисунках именно это показано.
29. le_ 237 04.07.17 09:18 Сейчас в теме
(28) Спасибо! Рисунки-то я не посмотрел... А нельзя ли как-то глобальные параметры создать для всех документов?..
30. romku 10 23.08.17 13:28 Сейчас в теме
А почему не переносить реквизиты проведен и пометка удаления, а потом уже после записи документа в приемник, не проводить его или наоборот удалять движения? Т.е. анализировать реквизиты у уже записанного в приемник документа.
В обработчике после загрузки написать примерно так:

Если Объект.Проведен Тогда
	попытка
   		Объект.Записать(РежимЗаписиДокумента.Проведение);
	исключение
			
	конецпопытки
иначе
	попытка
		Объект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
	исключение
	КонецПопытки	
КонецЕсли;
Показать
31. ARL 313 23.08.17 20:28 Сейчас в теме
(30) Если в базе-приемнике документ не проведется, то получится проведенный документ без движений. И в случае с пометкой на удаление - может появиться помеченный на удаление документ, но с движениями, сформированными ранее.
32. romku 10 24.08.17 09:19 Сейчас в теме
(31) ну это можно обработать в исключении, сбросить эти реквизиты.
33. ARL 313 24.08.17 20:48 Сейчас в теме
(32) Вы указали на частный случай, а случаи разные бывают :) при переносе. Пример: при загрузке документов обработка прекращает работать по ошибке. Правила оказались недоработанными для какого-то редкого сочетания реквизитов. Все перенесенные до ошибки документы оказываются "проведенными" и без движений.
35. acanta 22.02.19 18:31 Сейчас в теме
+Добавляем в конфигурацию конвертация данных кнопочку, которая все эти процедуры добавляет и параметры переставляет для текущего объекта метаданных.
37. GorI 03.03.23 15:48 Сейчас в теме
Дополню:
В обработчике «После загрузки объекта» конвертации перед записью объекта лучше предварительно установить:
Объект.ОбменДанными.Загрузка = Истина;

Я столкнулся с ситуацией, когда загружаются документы, у которых неуникальный номер (в базу-источник они попали по другому обмену в том же режиме).
При загрузке с допроведением такого документа словил ошибку контроля уникальности номера, в результате чего обмен встал.
Если после загрузки объекта записать его в режиме ОбменДанными.Загрузка = Истина, то ошибки не будет, т.к. новый документ запишется без проверки, а при последующей записи с проведением (отменой проведения) существующего документа контроль уникальности не выполняется.
38. GorI 03.03.23 16:39 Сейчас в теме
А вообще всё делается гораздо проще:
В ПКО документа, который требуется провести после загрузки, в событии "После загрузки" пишем следующий код:
Если НЕ ЗначениеЗаполнено(Ссылка) Тогда
        //запись нужна в режиме загрузка = Истина, чтобы не было ошибок проверки и обмен не вставал
	Объект.ОбменДанными.Загрузка = Истина;
	Объект.Записать(РежимЗаписиДокумента.Запись);
	Если Объект.Проведен Тогда
                //стандартная процедура обработки конвертации
		ДобавитьОбъектДляОтложенногоПроведения(Объект.Ссылка, Объект.Дата, Новый Структура());
	КонецЕсли;
ИначеЕсли НЕ Объект.Проведен и Ссылка.Проведен Тогда
	Объект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
Иначе
	ДобавитьОбъектДляОтложенногоПроведения(Ссылка, Объект.Дата, Новый Структура());
КонецЕсли;
Показать


Этот вариант лучше тем, что диагностика проведения будет не теряться неизвестно где (т.к. Сообщить(), выполняемая на сервере ничего никуда не покажет), а будет сохраняться в "Предупреждения синхронизации данных" с типом "Непроведенный документ".
39. Wefast 17.04.23 13:36 Сейчас в теме
(38) ругается, что нет такой процедуры "ДобавитьОбъектДляОтложенногоПроведения"
41. usershmuser 12.03.24 15:37 Сейчас в теме
(38) Спасибо, ориентировался на твой код. Переношу документы тупо как есть из БП в БП, прилетают с пометкой проведения, но без проводок, решил еще проще в том же ПКО документа в событии "После загрузки":
Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
            
    Объект.Записать(РежимЗаписиДокумента.Запись);
    Если Объект.Проведен Тогда
       Объект.Записать(РежимЗаписиДокумента.Проведение);
	КонецЕсли;
КонецЕсли;
Показать

Тупо перекидывает документы и проведенные проводит, не проведенные не трогает, а на помеченные на удаление перед выгрузкой отказ.
42. GorI 13.03.24 16:12 Сейчас в теме
(41) Я немного другую задачу решал. Мой обмен построен на планах обмена и документы складываются в очередь отложенного проведения, проводки формируются уже при отложенном проведении в целевой базе, а не переносятся из базы-источника
40. GorI 18.04.23 15:13 Сейчас в теме
(39) может используется другая версия обработки, не знаю. Поищите в типовой БП например или в БСП. Я сейчас не у компа, к сожалению.
Вы обмениваетесь через планы обмена, сделанные на БСП какой версии? Или может вы пользуетесь внешней обработкой?
Оставьте свое сообщение