Алгоритм загрузки документов через внешнюю обработку — различия между версиями
Строка 1: | Строка 1: | ||
Статья описывает алгоритм работы внешней обработки СБИС после нажатия кнопки "Загрузить в 1С" в одном из реестров раздела Полученные. Заголовки разделов содержат название формы и название функции. Уровень вложенности раздела говорит о том, что текущая функция вызывается из функции, расположенной на уровень выше. | Статья описывает алгоритм работы внешней обработки СБИС после нажатия кнопки "Загрузить в 1С" в одном из реестров раздела Полученные. Заголовки разделов содержат название формы и название функции. Уровень вложенности раздела говорит о том, что текущая функция вызывается из функции, расположенной на уровень выше. | ||
− | ФормаГлавноеОкно: ЗагрузитьВ1С | + | '''ФормаГлавноеОкно: ЗагрузитьВ1С''' |
* Получает список отмеченных записей текущего реестра. | * Получает список отмеченных записей текущего реестра. | ||
− | * Документ_Шаблон: ЗагрузитьДокументыВ1С | + | * '''Документ_Шаблон: ЗагрузитьДокументыВ1С''' |
** Перебирает список отмеченных записей | ** Перебирает список отмеченных записей | ||
− | ** Для каждой записи вызывает функцию | + | ** Для каждой записи вызывает функцию '''Раздел_[Название раздела = Полученные]_Шаблон: ПодготовитьСтруктуруДокумента()''' |
*** В зависимости от раздела вызывает метод формирующий структуру пакета: | *** В зависимости от раздела вызывает метод формирующий структуру пакета: | ||
− | # ПодготовитьСтруктуруДокумента1С - на основании документов 1С | + | ***# ПодготовитьСтруктуруДокумента1С - на основании документов 1С |
− | # | + | ***# '''РаботаСДокументами1С: ПодготовитьСтруктуруДокументаСБИС()''' - на основании XML файлов (при загрузке вызывается данная функция) |
− | Получает подробную информацию по каждому вложению. | + | ***: Получает подробную информацию по каждому вложению. |
**** Для каждого вложения пакета получает xml, добавляет его в структуру вложения. | **** Для каждого вложения пакета получает xml, добавляет его в структуру вложения. | ||
**** При наличии xslt по типу и версии вложения применяет его к полученному xml-файлу. | **** При наличии xslt по типу и версии вложения применяет его к полученному xml-файлу. | ||
**** Сериализует вложение в Структуру, добавляет ее в структуру пакета. | **** Сериализует вложение в Структуру, добавляет ее в структуру пакета. | ||
**** Ищет связанные документы 1С по идентификатору пакета и вложения, добавляет их в структуру пакета. | **** Ищет связанные документы 1С по идентификатору пакета и вложения, добавляет их в структуру пакета. | ||
− | ** Для каждого вложения из структуры пакета проверяет возможность загрузки и определяет тип документа 1С создаваемый по умолчанию | + | ** Для каждого вложения из структуры пакета проверяет возможность загрузки и определяет тип документа 1С создаваемый по умолчанию '''РаботаСДокументами1С: ЗаполнитьДанныеДляЗагрузкиПоУмолчанию()''', возвращает Истину если вложение можно загрузить. |
+ | *** Проверяет наличие файла настроек для загрузки вложения. | ||
+ | *** Определяет тип документа 1С, в который будет загружаться вложение. | ||
+ | *** Ищет организацию из вложения в справочнике организаций. | ||
+ | *** Ищет контрагента из вложения в справочнике контрагентов. | ||
+ | *** Проверяет, вся ли номенклатура сопоставлена. | ||
** Если вложение можно загрузить, то получаем из инишки вес данного вложения (по весу определяется порядок загрузки вложений) | ** Если вложение можно загрузить, то получаем из инишки вес данного вложения (по весу определяется порядок загрузки вложений) | ||
− | ** Сортирует вложения по весу | + | ** Сортирует вложения по весу '''РаботаСДокументами1С: УпорядочитьВложенияДляЗагрузки()''' |
+ | *** Сортирует вложения по весу от минимального веса к максимальному (фактура имеет максимальный вес и грузится последней). Возвращает упорядоченный массив вложений. | ||
** Для каждого вложения из упорядоченного пакета определяет форму для создания документа по типу документа 1С, в который будет загружаться вложение | ** Для каждого вложения из упорядоченного пакета определяет форму для создания документа по типу документа 1С, в который будет загружаться вложение | ||
− | ** Передает вложение в дальнейшую обработку | + | ** Передает вложение в дальнейшую обработку '''Документ_[Тип загружаемого документа 1С]: СоздатьДокумент()''' |
− | + | **:Данную форму и функцию можно переопределить в обработке "ВнешниеФункции_Клиент.epf" для реализации своего алгоритма загрузки определенного типа документа. | |
− | + | *** Если никакой специфики загрузки для данного типа документа 1С нет, то передает обработку в форму '''Документ_Шаблон: СоздатьДокумент()''' | |
− | + | **** Вызывает функцию заполнения данных документа '''Документ_Шаблон: ЗаполнитьДанныеДокумента1С()''' | |
− | + | ***** Вызывает функцию формирования структуры данных документа '''Документ_Шаблон: ЗаполнитьДаннымиСтруктурыФайлаСтруктуруДокумента()''' | |
− | + | ****** Перебирает узлы файла настроек для загрузки документа и заполняет данные в Структуре создаваемого документа. | |
− | + | ***** Вызывает функцию создания документа 1С по структуре данных '''Документ_Шаблон: СоздатьДокументИзСтруктуры()''' | |
− | + | ****** Перебирает поля структуры и записывает значения в одноименные реквизиты документа 1С. | |
− | + | ***** Ищет пользовательскую форму для данного типа документа (Документ_[Тип загружаемого документа 1С]) с функцией ДопРасчетыПриЗагрузке(Документ1С) и при наличии вызывает ее. В данной функции обычно производятся какие-то расчеты, не связанные с загрузкой данных из файла, а связанные непосредственно с самим документом 1С. Например, при заведении документа в 1С вручную при выборе номенклатуры заполняются сразу несколько полей в строке табличной части (например, % скидки, производитель и т.д.). В функции ДопРасчетыПриЗагрузке можно перебрать строки загруженного документа и для каждой строки вызвать тот же обработчик, что вызывается при ручном вводе номенклатуры, таким образом заполнятся все данные, которые не были загружены из файла, но должны быть заполнены в документе. | |
− | + | **** Записывает статус и идентификаторы пакета и вложения для созданного документа. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Версия 15:23, 28 августа 2015
Статья описывает алгоритм работы внешней обработки СБИС после нажатия кнопки "Загрузить в 1С" в одном из реестров раздела Полученные. Заголовки разделов содержат название формы и название функции. Уровень вложенности раздела говорит о том, что текущая функция вызывается из функции, расположенной на уровень выше.
ФормаГлавноеОкно: ЗагрузитьВ1С
- Получает список отмеченных записей текущего реестра.
- Документ_Шаблон: ЗагрузитьДокументыВ1С
- Перебирает список отмеченных записей
- Для каждой записи вызывает функцию Раздел_[Название раздела = Полученные]_Шаблон: ПодготовитьСтруктуруДокумента()
- В зависимости от раздела вызывает метод формирующий структуру пакета:
- ПодготовитьСтруктуруДокумента1С - на основании документов 1С
- РаботаСДокументами1С: ПодготовитьСтруктуруДокументаСБИС() - на основании XML файлов (при загрузке вызывается данная функция)
- Получает подробную информацию по каждому вложению.
- Для каждого вложения пакета получает xml, добавляет его в структуру вложения.
- При наличии xslt по типу и версии вложения применяет его к полученному xml-файлу.
- Сериализует вложение в Структуру, добавляет ее в структуру пакета.
- Ищет связанные документы 1С по идентификатору пакета и вложения, добавляет их в структуру пакета.
- В зависимости от раздела вызывает метод формирующий структуру пакета:
- Для каждого вложения из структуры пакета проверяет возможность загрузки и определяет тип документа 1С создаваемый по умолчанию РаботаСДокументами1С: ЗаполнитьДанныеДляЗагрузкиПоУмолчанию(), возвращает Истину если вложение можно загрузить.
- Проверяет наличие файла настроек для загрузки вложения.
- Определяет тип документа 1С, в который будет загружаться вложение.
- Ищет организацию из вложения в справочнике организаций.
- Ищет контрагента из вложения в справочнике контрагентов.
- Проверяет, вся ли номенклатура сопоставлена.
- Если вложение можно загрузить, то получаем из инишки вес данного вложения (по весу определяется порядок загрузки вложений)
- Сортирует вложения по весу РаботаСДокументами1С: УпорядочитьВложенияДляЗагрузки()
- Сортирует вложения по весу от минимального веса к максимальному (фактура имеет максимальный вес и грузится последней). Возвращает упорядоченный массив вложений.
- Для каждого вложения из упорядоченного пакета определяет форму для создания документа по типу документа 1С, в который будет загружаться вложение
- Передает вложение в дальнейшую обработку Документ_[Тип загружаемого документа 1С]: СоздатьДокумент()
- Данную форму и функцию можно переопределить в обработке "ВнешниеФункции_Клиент.epf" для реализации своего алгоритма загрузки определенного типа документа.
- Если никакой специфики загрузки для данного типа документа 1С нет, то передает обработку в форму Документ_Шаблон: СоздатьДокумент()
- Вызывает функцию заполнения данных документа Документ_Шаблон: ЗаполнитьДанныеДокумента1С()
- Вызывает функцию формирования структуры данных документа Документ_Шаблон: ЗаполнитьДаннымиСтруктурыФайлаСтруктуруДокумента()
- Перебирает узлы файла настроек для загрузки документа и заполняет данные в Структуре создаваемого документа.
- Вызывает функцию создания документа 1С по структуре данных Документ_Шаблон: СоздатьДокументИзСтруктуры()
- Перебирает поля структуры и записывает значения в одноименные реквизиты документа 1С.
- Ищет пользовательскую форму для данного типа документа (Документ_[Тип загружаемого документа 1С]) с функцией ДопРасчетыПриЗагрузке(Документ1С) и при наличии вызывает ее. В данной функции обычно производятся какие-то расчеты, не связанные с загрузкой данных из файла, а связанные непосредственно с самим документом 1С. Например, при заведении документа в 1С вручную при выборе номенклатуры заполняются сразу несколько полей в строке табличной части (например, % скидки, производитель и т.д.). В функции ДопРасчетыПриЗагрузке можно перебрать строки загруженного документа и для каждой строки вызвать тот же обработчик, что вызывается при ручном вводе номенклатуры, таким образом заполнятся все данные, которые не были загружены из файла, но должны быть заполнены в документе.
- Вызывает функцию формирования структуры данных документа Документ_Шаблон: ЗаполнитьДаннымиСтруктурыФайлаСтруктуруДокумента()
- Записывает статус и идентификаторы пакета и вложения для созданного документа.
- Вызывает функцию заполнения данных документа Документ_Шаблон: ЗаполнитьДанныеДокумента1С()