Алгоритм загрузки документов через внешнюю обработку

Материал из razgovorov.ru
Перейти к: навигация, поиск

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

При нажатии кнопки "Загрузить в 1С" вызывается функция ФормаГлавноеОкно: ЗагрузитьВ1С

  • Получает список отмеченных записей текущего реестра.
  • Передает полученный список в функцию Документ_Шаблон: ЗагрузитьДокументыВ1С()
    • Перебирает список отмеченных записей
    • Для каждой записи вызывает функцию Раздел_[Название раздела = Полученные]_Шаблон: ПодготовитьСтруктуруДокумента()
      В зависимости от раздела вызывает один из методов формирования структуры пакета:
      1. ПодготовитьСтруктуруДокумента1С - на основании документов 1С
      2. РаботаСДокументами1С: ПодготовитьСтруктуруДокументаСБИС() - на основании пакета СБИС. При загрузке вызывается данная функция.
        Функция получает подробную информацию по каждому вложению пакета:
        • Для каждого вложения пакета получает xml, добавляет его в структуру пакета.
        • При наличии xslt по типу и версии вложения применяет его к полученному xml-файлу.
        • Сериализует вложение в Структуру, добавляет ее в структуру пакета.
        • Ищет связанные документы 1С по идентификатору пакета и вложения, добавляет их в структуру пакета.
    • Для каждого вложения из структуры пакета вызывает функцию РаботаСДокументами1С: ЗаполнитьДанныеДляЗагрузкиПоУмолчанию(), которая проверяет возможность загрузки (возвращает Истину если вложение можно загрузить) и определяет тип документа 1С создаваемый по умолчанию.
      • Проверяет наличие файла настроек для загрузки вложения.
      • Определяет тип документа 1С, в который будет загружаться вложение.
      • Ищет организацию из вложения в справочнике организаций.
      • Ищет контрагента из вложения в справочнике контрагентов.
      • Проверяет, вся ли номенклатура сопоставлена.
    • Если вложение можно загрузить, то получает из инишки вес данного вложения (по весу определяется порядок загрузки вложений)
    • Сортирует вложения с помощью функции РаботаСДокументами1С: УпорядочитьВложенияДляЗагрузки()
      Функция сортирует вложения по весу от минимального веса к максимальному (например, счет-фактура имеет максимальный вес и грузится последним, чтобы в нем можно было указать уже загруженные документы-основания). Возвращает упорядоченный массив вложений.
    • Для каждого вложения из упорядоченного пакета определяет форму для создания документа по типу документа 1С, в который будет загружаться вложение
    • Передает вложение в дальнейшую обработку в функцию Документ_[Тип загружаемого документа 1С]: СоздатьДокумент()
      Данную форму и функцию можно переопределить в обработке "ВнешниеФункции_Клиент.epf" для реализации своего алгоритма загрузки определенного типа документа.
      • Если никакой специфики загрузки для данного типа документа 1С нет, то передает обработку в форму Документ_Шаблон: СоздатьДокумент()
        • Вызывает функцию заполнения данных документа Документ_Шаблон: ЗаполнитьДанныеДокумента1С()
          • Вызывает функцию формирования структуры данных документа Документ_Шаблон: ЗаполнитьДаннымиСтруктурыФайлаСтруктуруДокумента()
            Функция перебирает узлы файла настроек для загрузки документа и заполняет данные в Структуре создаваемого документа в соответствии с инструкциями в файле настроек.
          • Вызывает функцию создания документа 1С по структуре данных Документ_Шаблон: СоздатьДокументИзСтруктуры()
            Функция перебирает поля структуры и записывает значения в одноименные реквизиты документа 1С.
          • Ищет пользовательскую форму для данного типа документа (Документ_[Тип загружаемого документа 1С]) с функцией ДопРасчетыПриЗагрузке(Документ1С) и при наличии вызывает ее. В данной функции обычно производятся какие-то расчеты, не связанные с загрузкой данных из файла, а связанные непосредственно с самим документом 1С. Например, при заведении документа в 1С вручную при выборе номенклатуры заполняются сразу несколько полей в строке табличной части (например, % скидки, производитель и т.д.). В функции ДопРасчетыПриЗагрузке можно перебрать строки загруженного документа и для каждой строки вызвать тот же обработчик, что вызывается при ручном вводе номенклатуры, таким образом заполнятся все данные, которые не были загружены из файла, но должны быть заполнены в документе.
        • Записывает статус и идентификаторы пакета и вложения для созданного документа.