Импорт документов из других программ или конфигураций

Универсальная функция поиска документа по маске GUID и создание нового документа при неудаче

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

// ищет или создает новый документ вида Доки по заданному универсальному идентификатору УИД
// Доки — вид документа
// Блок1_8 — 1 группа УИД из 8 цифр (строка или число)
// Блок2_4 — 2 группа УИД из 4 цифр (строка или число)
// Блок3_4 — 3 группа УИД из 4 цифр (строка или число)
// Блок4_4 — 4 группа УИД из 4 цифр (строка или число)
// Блок5_12 — 5 группа УИД          (дата)
// возвращает ДокументОбъект

Функция GUID(Доки,Блок1_8=0,Блок2_4=0,Блок3_4=0,Блок4_4=0,Блок5_12=’00010101000000′) Экспорт
// GUID = «nnnnnnnn-KKKK-LLLL-XXXX-ГГММДДЧЧММСС»
ИД = (Формат(Число(Блок1_8),»ЧЦ=8; ЧН=; ЧВН=1; ЧГ=»)+»-«+Формат(Число(Блок2_4),»ЧЦ=4; ЧН=; ЧВН=1; ЧГ=»)
        +»-«+Формат (Число(Блок3_4),»ЧЦ=4; ЧН=; ЧВН=1; ЧГ=»)+»-«+Формат(Число(Блок4_4),»ЧЦ=4; ЧН=; ЧВН=1; ЧГ=»)
        +»-«+Формат(Блок5_12,»ДФ=»»гММддЧЧммсс»»»));  ИД1 = Новый УникальныйИдентификатор(ИД);

Ссылка = Доки.ПолучитьСсылку(ИД1);
СсылкаОбъект = Ссылка.ПолучитьОбъект();  

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

Возврат СсылкаОбъект;

КонецФункции // GUID()

пример вызова:

// GUID = «НомерДок-КодКонтрагента-2549-{0000}-ДатаДок»
// Док — импортируемый документ из другой программы (конфигурации)

Накладная = GUID(Документы.РеализацияТоваровУслуг,Сред(Док.НомерДок,2,8),Док.Контрагент.Код,2549,0,Док.ДатаДок);

3 Comments

  1. Irina1309

    Особенно хорошо при повторных загрузках документов, т.к. не порождает «грязь» в базе

    Reply
  2. Sergoninfostarru

    >надо проверять на предыдущие загрузки и удалять ранее загруженные документы.

    С такими действиями лучше не рисковать !!! Хорошо, что в коде я не нашел процедуру удаления объектов и создание по-новой. Для создания новых объектов очень нужная процедура, а вот для уже созданных может быть очень много изменений: от пометки на удаление до полного изменения всей информации. Встречал в своей практике метод резервирования номера документа — заносили только контрагента. Остальная информация приходила после обслуживания клиента. А не раз использовали зарезервированные номера под совсем других контрагентов.

    Еще не совсем ясно, как быть с удаленными документами, которые присутствуют в базе, в которую импортируются данные ?

    Reply
  3. inv7

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

    PS

    Закон Мерфи: Сделайте программу, которой сможет пользоваться каждый дурак, и только дурак захочет ею пользоваться.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *