﻿{
 Библиотека функций электронного документаоборота
 http://base.consultant.ru/cons/cgi/online.cgi?req=doc;base=LAW;n=130494;fld=134;dst=100022,0;rnd=0.09201298048719764

 Автор: Сергей Н.
 изм. Оксана, 15.01.15. Добавлены ф-и загрузки торг-12,  актов
}

ПЕРЕМ СТРОКА: ТовКатегорияСопост
ПЕРЕМ ЧИСЛО: ТовКатегорияИд
ПЕРЕМ СТРОКА: ТовГруппаСопост// юра добавил
ПЕРЕМ СТРОКА:ТовСопостЕденица //юра добавил

ПЕРЕМ ФИЛЬТР(с_товары): ФильтрПоШтрихКоду
ПЕРЕМ ФИЛЬТР(с_товары): ФильтрПоАртикулу
ПЕРЕМ ФИЛЬТР(с_товары): ФильтрПоНазванию
ПЕРЕМ СТРОКА: РежимСопост
ПЕРЕМ СТРОКА: ЗаголовокВыбораТовара
ПЕРЕМ СТРОКА: ТовКодСкан
ПЕРЕМ ЛОГИКА: СопостСканированием


//доб. Оксана, 11.2020, для экспорта в журнал эдо_сообщения
ПЕРЕМ СТРОКА: ЭДОДокументыПуть[]
ПЕРЕМ СТРОКА: ЭДОДокументыОснование[]
ПЕРЕМ СТРОКА: ЭДОДокументыДанные[]

//Выбор файла электронных СФ / 08.10.2012 / Сергей Н.
ФУНКЦИЯ ЛОГИКА: ВыборФайлаХМЛЭДО (ПЕРЕМ СТРОКА: файл)
  в_файл = ВЫБОР_ФАЙЛА(файл,"Выберите файл", "Файлы электронных СФ","xml")
  РЕЗУЛЬТАТ = в_файл <> ""
  ЕСЛИ РЕЗУЛЬТАТ ТО
    файл = в_файл
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

//Выбор директории для сохранения электронных СФ / 09.10.2012 / Сергей Н.
ФУНКЦИЯ ЛОГИКА: ВыборДиректорииХМЛЭДО (ПЕРЕМ СТРОКА: дир)
  в_дир = ВЫБОР_ДИР(дир)
  РЕЗУЛЬТАТ = в_дир <> ""
  ЕСЛИ РЕЗУЛЬТАТ ТО
    дир = в_дир
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ДИАЛОГ НастройкаВыгрукиЭДО(ПЕРЕМ СТРОКА: имя_файла)
ЗАКЛАДКА Функции СЧФ, СЧФДОП, ДОП
  Если оплатили позже даты сф:                             *$настр_упд_не_выводить_опл_после_сф (["Считать, что нет оплаты", "Данные о платеже писать"]):45
  Если оплаты не было:                                     *$настр_упд_писать_опл_не (["Писать оплата не произведена", "Ничего не писать", "Писать №        от       "]):45
  Тип платежного документа (пп, по, ро):                   *$настр_упд_тип_плат_док (["Не скрывать", "Скрывать"]):45
  Адрес грузоотпр/получателя:                              *$настр_упд_груз_пол_отпр_тип_адреса (["Юридический", "Фактический"]):45
  Отображать грузоотправителя:                             *$настр_упд_груз_отпр_он_же (["Если он указан отдельно", "Всегда"]):45
  В наименовании продавца указывать:                       *$настр_упд_вариант (["Полное+сокращенное наименование", "Только сокращенное наименование - всегда", "Только полное наименование - всегда"]):45
  Если в сч-ф нет ТМЦ, а только услуги:                    *$настр_упд_груз_отпр_получ_прочерк (["В качестве грузоотпр/получателя ставить прочерки", "Выводить грузоотпр/получателя"]):45
  Количество:                                              *$настр_упд_кол(["В упаковках", "Базовое"]):45
  В качестве кода товара:                                  *$настр_упд_вывод_кода_товара (["Выводить код товара", "Выводить артикул", "Ничего не выводить"]):45
  Графу с массой груза (нетто):                            *$настр_упд_вывод_массы_нетто (["Не заполнять", "Выводить из расчета кол-ва (кг)", "Выводить из расчета кол-ва (тонны)"]):45
  Подписи:                                                 *~?настр_упд_подписи_сф ("c_common","ВыбодПодписи"):42
ЗАКЛАДКА Документ о передаче товаров
  Адрес грузоотпр/получателя:                              *$настр_дпт_груз_пол_отпр_тип_адреса (["Юридический", "Фактический"]):45
  Выводить в составе документа:                            *$настр_дпт_режим_вывода (["Только ТМЦ", "Все"]):45
  Выводить банковские реквизиты поставщика и плательщика:  *$настр_дпт_пост_плат_банк_рекв (["Да", "Нет"]):45
  Выводить банковские реквизиты грузоотпр. и грузополуч.:  *$настр_дпт_груз_пол_отпр_банк_рекв (["Да", "Нет"]):45
  Количество:                                              *$настр_дпт_кол(["В упаковках", "Базовое"]):45
  В качестве кода товара:                                  *$настр_дпт_вывод_кода_товара (["Выводить код товара", "Выводить артикул", "Ничего не выводить"]):45
  Подписи:                                                 *~?настр_дпт_подписи ("c_common","ВыбодПодписи"):42
ИЗМЕНЕНИЕ
  ДОСТУП([настр_упд_подписи_сф, настр_дпт_подписи], НЕ ВКЛ_ПОДПИСИ) //Настройка подписи не доступна, если подписи указываются в операции / 20.02.2020, Сергей Н.
ВЫЧИСЛИТЬ
  // Добавил настройки для старых форматов / 21.02.2019, Сергей Н.
  {Диалог с настройками выгрузки УПД в рамках ЭДО}
  //УПД
  настр_упд_не_выводить_опл_после_сф = ПРОФИЛЬ["Если оплатили позже даты сф", 1] //ДА
  настр_упд_писать_опл_не = ПРОФИЛЬ["Если оплаты не было", 1]
  настр_упд_тип_плат_док = ПРОФИЛЬ["Тип платежного документа (пп, по, ро)", 1] //ДА
  настр_упд_груз_пол_отпр_тип_адреса = ПРОФИЛЬ["Адрес грузоотпр/получателя", 2]
  настр_упд_груз_отпр_он_же = ПРОФИЛЬ["Отображать грузоотправителя", 1]
  настр_упд_вариант = ПРОФИЛЬ["В наименовании продавца указывать", 1]
  настр_упд_груз_отпр_получ_прочерк = ПРОФИЛЬ["Если в сч-ф нет ТМЦ, а только услуги", 1]
  настр_упд_кол = ПРОФИЛЬ["Количество", 2]
  настр_упд_вывод_кода_товара = ПРОФИЛЬ["В качестве кода товара", 1]
  настр_упд_вывод_массы_нетто = ПРОФИЛЬ["Графу с массой груза (нетто)", 1]  //21.02.2019, Сергей Н. / Доб. выгрузку массы нетто
  настр_упд_подписи_сф = ПРОФИЛЬ["Подписи", ""]

  ///ДПТ
  настр_дпт_груз_пол_отпр_тип_адреса = ПРОФИЛЬ["Адрес грузоотпр/получателя (дпт)", 2]
  настр_дпт_режим_вывода = ПРОФИЛЬ["Выводить в составе документа (дпт)", 2]
  настр_дпт_пост_плат_банк_рекв = ПРОФИЛЬ["Выводить банковские реквизиты поставщика и плательщика (дпт)", 2]
  настр_дпт_груз_пол_отпр_банк_рекв = ПРОФИЛЬ["Выводить банковские реквизиты грузоотпр. и грузополуч. (дпт)", 2]
  настр_дпт_кол = ПРОФИЛЬ["Количество (дпт)", 2]
  настр_дпт_вывод_кода_товара = ПРОФИЛЬ["В качестве кода товара (дпт)", 1]
  настр_дпт_подписи = ПРОФИЛЬ["Подписи (дпт)", ""]
ВВЕСТИ
  //УПД
  ПРОФИЛЬ["Если оплатили позже даты сф"] = настр_упд_не_выводить_опл_после_сф //ДА
  ПРОФИЛЬ["Если оплаты не было"] = настр_упд_писать_опл_не
  ПРОФИЛЬ["Тип платежного документа (пп, по, ро)"] = настр_упд_тип_плат_док //ДА
  ПРОФИЛЬ["Адрес грузоотпр/получателя"] = настр_упд_груз_пол_отпр_тип_адреса
  ПРОФИЛЬ["Отображать грузоотправителя"] = настр_упд_груз_отпр_он_же
  ПРОФИЛЬ["В наименовании продавца указывать"] = настр_упд_вариант
  ПРОФИЛЬ["Если в сч-ф нет ТМЦ, а только услуги"] = настр_упд_груз_отпр_получ_прочерк
  ПРОФИЛЬ["Количество"] = настр_упд_кол
  ПРОФИЛЬ["В качестве кода товара"] = настр_упд_вывод_кода_товара
  ПРОФИЛЬ["Графу с массой груза (нетто)"] = настр_упд_вывод_массы_нетто
  ПРОФИЛЬ["Подписи"] = настр_упд_подписи_сф

  ///ДПТ
  ПРОФИЛЬ["Адрес грузоотпр/получателя (дпт)"] = настр_дпт_груз_пол_отпр_тип_адреса = ПРОФИЛЬ["Адрес грузоотпр/получателя (дпт)", 2]
  ПРОФИЛЬ["Выводить в составе документа (дпт)"] = настр_дпт_режим_вывода
  ПРОФИЛЬ["Выводить банковские реквизиты поставщика и плательщика (дпт)"] = настр_дпт_пост_плат_банк_рекв
  ПРОФИЛЬ["Выводить банковские реквизиты грузоотпр. и грузополуч. (дпт)"] = настр_дпт_груз_пол_отпр_банк_рекв
  ПРОФИЛЬ["Количество (дпт)", 2] = настр_дпт_кол
  ПРОФИЛЬ["В качестве кода товара (дпт)"] = настр_дпт_вывод_кода_товара
  ПРОФИЛЬ["Подписи (дпт)", ""] = настр_дпт_подписи
КОНЕЦ_ДИАЛОГА

//21.02.2019, Сергей Н. / Доб. ТовТНВЭД
ПЕРЕМ СТРОКА: ТовОКЕИ!, ТовНаимен!,  ТовТНВЭД!, УчЭДОИдОтпр, ПостНаимен, ПостАдрес, ПостИНН, ПостКПП, ПостПодпДолжн, ПостПодпФИО
ПЕРЕМ СТРОКА: УчЭДОИдПол
ПЕРЕМ СТРОКА: ПостАдресФИАС
ПЕРЕМ СТРОКА: ДокНомер, ДокДата, ДокВремя, ТовКолво!, ТовСуммаСНДС!, ТовСуммаНДС!, ГтдНомер!, КодСтраны!
//Доб. 16.04.2018 / Сергей Н. / УПД с какой функцией загружается (СЧФ, СЧФДОП, ДОП)
ПЕРЕМ СТРОКА: УПДФункция
ПЕРЕМ ЛОГИКА: ПостЮл
ПЕРЕМ СТРОКА: ТовНаимЕдИзм! //Названия единиц измерения из файла / 22.05.2020, Сергей Н.
ПЕРЕМ СТРОКА: ЭДОИдФайл     //Ид загружаемого файла / 22.05.2020, Сергей Н.

//ТОРГ-12
ПЕРЕМ СТРОКА: ТовСуммаБезНДС!, ТовЦена!, ПоставщикИНН, ГрузОтпрИНН, ГрузПолучИНН, ПлательщикИНН, ТовКолвоВУп!, ТовКолвоУп!,
              ТовАртикул!, ТовСтавкаНДС!, ДокОснование, УчЭДОИд, ТовНакНом, ТовНакДата, МаркиВУпак!

//Акт вып. работ
ПЕРЕМ СТРОКА: АктНомер, АктДата

ПЕРЕМ СТРОКА: ТовИдентТрансУпак!
ПЕРЕМ СТРОКА: ТовНомУпак!
ПЕРЕМ СТРОКА: ТовКИЗ!
ПЕРЕМ СТРОКА: ТовШтрихКодМарки!

//Данные о прослеживаемом товаре / 07.06.2021, Сергей Н.
ПЕРЕМ ЛОГИКА: ТовПрослеж!
ПЕРЕМ СТРОКА: ТовПрослежРНПТ!
ПЕРЕМ СТРОКА: ТовПрослежОКЕИ!
ПЕРЕМ СТРОКА: ТовПрослежНаимЕдИзм!
ПЕРЕМ СТРОКА: ТовПрослежКолво!

ПЕРЕМ СТРОКА: ДокОтгрузкиНомер
ПЕРЕМ ДАТА: ДокОтгрузкиДата

//для данных вын. в отдельные функции
ПЕРЕМ СТРОКА: УчастникОКПО, УчастникНаименов, УчастникИНН, УчастникКПП, УчастникФам, УчастникИмя,
              УчастникОтч, УчастникАдресТекст
ПЕРЕМ СТРОКА: УчастникАдресФИАС

ПЕРЕМ СТРОКА: УчастникТел
ПЕРЕМ СТРОКА: УчастникЭлПочта
ПЕРЕМ СТРОКА: УчастникБанкНазвание
ПЕРЕМ СТРОКА: УчастникБанкБИК
ПЕРЕМ СТРОКА: УчастникРасчСчет
ПЕРЕМ СТРОКА: УчастникКорСчет
ПЕРЕМ СТРОКА: УчастникСтруктПодр
ПЕРЕМ СТРОКА: ПостОКПО
ПЕРЕМ СТРОКА: ПостТел
ПЕРЕМ СТРОКА: ПостЭлПочта
ПЕРЕМ МНОЖЕСТВО: ТовКатегория!
ПЕРЕМ СТРОКА: ЭДОЭкспортОшибки!
ПЕРЕМ СТРОКА: ЭДОИмпортОшибки!
ПЕРЕМ ЛОГИКА: УчастникЮрЛицо
ПЕРЕМ ЛОГИКА: ПостЮрЛицо

ПЕРЕМ СТРОКА: ФайлИд
ПЕРЕМ СТРОКА: ФайлГУИД
ПЕРЕМ СТРОКА: ФайлВерсФорм
ПЕРЕМ ДАТА: ФайлДатаСоздания
ПЕРЕМ ВРЕМЯ: ФайлВремяСоздания

ПЕРЕМ СТРОКА: ПостОператорНазвание
ПЕРЕМ СТРОКА: ПостОператорИНН
ПЕРЕМ СТРОКА: ПостОператорИд

ПЕРЕМ СТРОКА: ТовКод!
ПЕРЕМ СТРОКА: ТовУпаковка!
ПЕРЕМ СТРОКА: ДокВалютаКод
ПЕРЕМ СТРОКА: ДокВалютаНазв
ПЕРЕМ ЧИСЛО: ДокКурс
ПЕРЕМ СТРОКА: УчастникГосРегИП, УчастникИныеСведФЛ
ПЕРЕМ ЛОГИКА: ЭДОТОИмпорт!, ЭДОДЦУИмпорт! //Созданые операции
ПЕРЕМ ЧИСЛО: ЭДОНашиФирмы!
ПЕРЕМ ЛОГИКА: НеЗапрашиватьСопост
ПЕРЕМ СТРОКА: ДокИнфо
ПЕРЕМ СТРОКА: ЭДОЭкспортПостКод
ПЕРЕМ СТРОКА: ЭДОЭкспортПокупКод
ПЕРЕМ ЧИСЛО: ТовУпаковкаИд!
ПЕРЕМ ЛОГИКА: ЭДОСозданиеТС     //2020.12.08 Иван. Доб.

//Загрузка в б_тмц данных торг-12, сф
ФУНКЦИЯ ЛОГИКА: ЗагрузкаДанныхДокБТМЦ (ЧИСЛО: вид_документа; СТРОКА: код_склада_стр; СТРОКА: гуид_документ = "")
 {вид_документа - какой документ загружается:
                   1 - СФ;
                   2 - ТОРГ-12;
                   3 - Акт;
                   4 - УПД.
   код_склада_стр - На какой склад делать поступление}
  ИСПОЛЬЗОВАТЬ("xml", "B_otch", "c_common", "c_units", с_товары, с_клиенты, б_тмц, б_тмц_доп, б_тмц_оплаты)
  РЕЗУЛЬТАТ = НЕТ

  //Загрузка ЕИ / 22.05.2020, Сергей Н.
  ЗагрузкаДанныхДокЕИ(тов_еи)

  //--- КАТЕГОРИИ ТМЦ ---
  //считываем счет для каждой категории товаров
  //21.02.2019, Сергей Н. / Определение категории ТМЦ. т.к., например, с типом товТовар, могут быть разные категории, а нам нужна именно категория Товар.
  ЦИКЛ ПО ЖУРНАЛУ с_товары_категории кат (вкл = ДА И товар_услуга ИЗ [товУслуга, товПраво, товТовар])
    //полученная услуга
    ЕСЛИ кат.товар_услуга = товУслуга И кат.название = "Полученная услуга" ТО
      кат_тмц!товУслуга = кат.ид
      счет_тмц!кат.ид = кат.счет
    КОНЕЦ_ЕСЛИ
    //право
    ЕСЛИ кат.товар_услуга = товПраво И кат.название = "Право" ТО
      кат_тмц!товПраво = кат.ид
      счет_тмц!кат.ид = кат.счет
    КОНЕЦ_ЕСЛИ
    //товар
    ЕСЛИ кат.товар_услуга = товТовар И кат.название = "Товар" ТО
      кат_тмц!товТовар = кат.ид
      счет_тмц!кат.ид = кат.счет
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЦИКЛА

  //--- ТМЦ ---
  //проходимся по всем считанным товарам

  ЦИКЛ ДЛЯ (и_тов ИЗ ТовНаимен)
    тов ЭТО с_товары
    //Ид категории товара из файла. Нужно для вывода в окне сопоставления  / Сергей Н., 15.12.2020
    ТовКатегорияИд = ?(вид_документа = 3, кат_тмц!товУслуга,
                     ?(вид_документа = 4, кат_тмц!ТовКатегория!и_тов, кат_тмц!товТовар))
    //если тавар нет в справочнике, то добавляем его
    //ЕСЛИ НЕ тов.НАЙТИ(название = ТовНаимен!и_тов И !товар_услуга = тов_категория) ТО
    ЕСЛИ НЕ тов.НайтиТовар(и_тов) ТО
      тов.ДобавитьТовар(и_тов, вид_документа, тов_еи!и_тов, кат_тмц)
    ИНАЧЕ
      с_товары_категории.НАЙТИ(ид = тов.группа_ид)
      счет_тмц!с_товары_категории.ид = с_товары_категории.счет
    КОНЕЦ_ЕСЛИ
    тов_ид!и_тов = тов.код
  КОНЕЦ_ЦИКЛА
  //Получаем упаковки для товаров: массив ТовУпаковкаИд  / Сергей Н., 07.12.2020
  ПолучитьУпаковки(тов_ид)

  проверяем_договор = НЕТ
  //счет поставщика
  поставщик ЭТО с_клиенты
  поставщик.ПолучитьПоставщика

  //===== ОПЕРАЦИЯ ОПРИХОДОВАНИЕ =====
  бтмц ЭТО б_тмц
  //Создаем операцию оприходования
  ВЫБРАТЬ б_тмц_виды бтмц_пост (б_тмц_виды.код = "пост")
  бтмц.операция_ид = бтмц_пост.ид
  бтмц.ПередДиалогом(ДА)
  //Наполняем операцию содержимым

  //дату накладной пока = номеру и дате СФ  ????
  //Изм. 13.06.2017 / Сергей Н. / Для Упд также как и для СФ номер и дату ьерем из одного массива
  //бтмц.ном_накл = ?(вид_документа ИЗ [1, 4], ДокНомер, ?(вид_документа = 2, ТовНакНом, АктНомер)) //номер накладной
  //бтмц.дата = ЗНАЧ(?(вид_документа ИЗ [1, 4], ДокДата, ?(вид_документа = 2, ТовНакДата, АктДата)), ДАТА)
  //номер и дата СФ
  //бтмц.номер_сф =  ?(вид_документа ИЗ [1, 4], ДокНомер, "")
  //бтмц.дата_сф = ?(вид_документа ИЗ [1, 4], ЗНАЧ(ДокДата, ДАТА), ПУСТО)

  //Доб. 16.04.2018 / Сергей Н. / Номер и дата накладной, номер и дата СФ загружаются в отдельной функции
  ЗагрузкаДанныхДокНомерДата(вид_документа, бтмц_ном_накл, бтмц_дата, бтмц_номер_сф, бтмц_дата_сф)
  //Номер и дата накладной
  бтмц.ном_накл = бтмц_ном_накл
  //Должно быть бтмц.дата = бтмц_дата. Но если дата пустая, то в ф-ии НаИзменение_счет выскакивает ошибка из-за пустой даты.
  бтмц.дата = ?(бтмц_дата = ПУСТО, бтмц_дата_сф, бтмц_дата)
  //Номер и дата СФ
  бтмц.номер_сф = бтмц_номер_сф
  //Дата СФ определяется в ф-ии выше (подставляется для СЧФ, СЧФДОП) / 28.06.2019, Сергей Н.
  бтмц.дата_сф = бтмц_дата_сф
  бтмц.основание = ДокОснование

  бтмц.валюта_ид = ПолучитьВалюту
  бтмц.курс_расч = ДокКурс
  бтмц.Проверка_курс_расч

  //наша фирма
  ЕСЛИ гуид_документ <> "" ТО
    бтмц.фирма = ЭДОНашиФирмы!гуид_документ
  КОНЕЦ_ЕСЛИ

  дата_документа =  ЗНАЧ(ДокДата, ДАТА)
  //Счет контрагента по умолчанию / 22.10.2019, Сергей Н.
  счет_контр = ?(КлиентПрочий(поставщик.код), СЧЕТ_КОНТР, СЧЕТ_ПОСТ)
  //Фильтр для договора / 22.10.2019, Сергей Н.
  ф_дог = с_договора.ФИЛЬТР(код_клиента = поставщик.код И
                            (дата_нач = ПУСТО ИЛИ дата_нач <= дата_документа) И
                            (дата_кон = ПУСТО ИЛИ дата_кон >= дата_документа))

  //проверяем есть ли договор с контрагентом и аналитика по договору
  проверяем_договор = ЕСТЬ_АНАЛИТИКА(счет_контр, с_договора) И ЕДИНСТВЕННО(ф_дог)

  ЕСЛИ проверяем_договор ТО
    с_договора.НАЙТИ(ф_дог)
    //формируем счет поставщика
    РАБОЧИЕ_ОБЪЕКТЫ(поставщик, с_договора)
  ИНАЧЕ
    РАБОЧИЕ_ОБЪЕКТЫ(поставщик)
  КОНЕЦ_ЕСЛИ

  бтмц.счет1 = КОД_СЧЕТА(?(КлиентПрочий(поставщик.код), СЧЕТ_КОНТР, СЧЕТ_ПОСТ))

  ЕСЛИ ЕСТЬ_СУБСЧ(бтмц.счет1) ИЛИ ЕСТЬ_АНАЛИТИКА(бтмц.счет1) ТО
    ЕСЛИ НЕ ЗапросСчета(бтмц.счет1, "Выберите счет контрагента " + поставщик.название) ТО
      ОТМЕНИТЬ
      СТОП_ВСЕ
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЕСЛИ

  //склад - запрашивается в диалоге
  склад ЭТО с_склады
  склад.НАЙТИ(код = код_склада_стр) //находим склад / нужно для аналитики счетов товаров
  бтмц.аналитика2_ид = склад.код
  бтмц.Проверка_аналитика2_ид

  //грузополучатель и грузоотправитель - не используем ПОЧЕМУ?

  гр ЭТО с_клиенты
  ЕСЛИ вид_документа = 2 ТО  //только для торг-12 пока    ИЛИ ПО КОДУ ЭДО?
    ЕСЛИ ГрузОтпрИНН <> "" И гр.НАЙТИ(инн = ГрузОтпрИНН) ТО
      бтмц.грузоотправитель_код = гр.код
    КОНЕЦ_ЕСЛИ
    ЕСЛИ ГрузПолучИНН <> "" И гр.НАЙТИ(инн = ГрузПолучИНН) ТО
      бтмц.грузополучатель_код = гр.код
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЕСЛИ

  //вид учета ндс - в том числе НДС
  бтмц.ндс = ндсВТомЧисле

  //состав операции (товары)
  ЦИКЛ ДЛЯ (и_тов ИЗ ТовНаимен)
    бтмц_доп ЭТО б_тмц_доп
    бтмц_доп.ЗАП_ОСНОВНАЯ(бтмц)

    тов ЭТО с_товары
    тов.НАЙТИ(код = тов_ид!и_тов)   //Оксана
    РАБОЧИЕ_ОБЪЕКТЫ(склад, тов)
    //счет по умолчанию (у каждой категории товаров свой счет)
    счет_товара = счет_тмц!тов.группа_ид //гр_счет
    //формируем счет товара
    //если есть аналитика по складам и товарам
    бтмц_доп.счет = ?(ЕСТЬ_АНАЛИТИКА(счет_товара, с_склады) И ЕСТЬ_АНАЛИТИКА(счет_товара, с_товары), КОД_СЧЕТА(счет_товара:склад:тов),
                    //если есть аналитика только по товарам
                    ?(ЕСТЬ_АНАЛИТИКА(счет_товара, с_товары), КОД_СЧЕТА(счет_товара:тов), счет_товара))
    бтмц_доп.НаИзменение_счет

    //количественно-суммовые данные
    бтмц_доп.кол = ЗНАЧ(ТовКолво!и_тов)//кол_тов
    ЕСЛИ ВКЛ_УПАКОВКИ И НЕ_ПУСТО(ТовУпаковкаИд!и_тов, 0) <> 0  ТО
      бтмц_доп.кол = ЗНАЧ(ТовКолвоУп!и_тов) * ЗНАЧ(ТовКолвоВУп!и_тов)
      бтмц_доп.упаковка_ид = ТовУпаковкаИд!и_тов
      бтмц_доп.кол_упак = ЗНАЧ(ТовКолвоУп!и_тов)
    КОНЕЦ_ЕСЛИ
    бтмц_доп.сумма = ЗНАЧ(ТовСуммаСНДС!и_тов)//стоим_тов_с_нал
    бтмц_доп.НаИзменение_сумма //будет расчитана цена за единицу без ндс
    //бтмц_доп.цена = ДЕЛ(бтмц_доп.сумма, бтмц_доп.кол, 0)
    бтмц_доп.сумма_ндс = ЗНАЧ(ТовСуммаНДС!и_тов)//сум_ндс

    ЕСЛИ вид_документа = 2 ТО //НАДО ЛИ?
      бтмц_доп.цена = ЗНАЧ(ТовЦена!и_тов)
      бтмц_доп.сумма_без_ндс = ЗНАЧ(ТовСуммаБезНДС!и_тов)
    КОНЕЦ_ЕСЛИ

    //Для обычного (не прослеживаемого товара) будет всегда добавляться одна строка (как и раньше) / 07.06.2021, Сергей Н.
    ЕСЛИ НЕ ТовПрослеж!и_тов ТО
      //Если используем ГТД и если ГТД есть в файле, то добавляет ГТД / 17.03.2021, Сергей Н.
      ЕСЛИ ВКЛ_ГТД И ГтдНомер!и_тов <> "" И КодСтраны!и_тов <> "" ТО
        //Добавляем номер гтд и страну к товару в составе операции  / 22.05.2020, Сергей Н.
        с_страны.НАЙТИ(код = КодСтраны!и_тов)
        бтмц_доп.гтд_ид = ТМЦДопДобавитьГТД(бтмц.дата, бтмц_доп.счет, ГтдНомер!и_тов, с_страны.название, НЕТ)
      КОНЕЦ_ЕСЛИ
      бтмц.ЗАП_ДЕТАЛЬ(бтмц_доп)
    ИНАЧЕ
      //Если товар прослеживаемый, то для каждого номера партии товара добавляем в состав операции отдельную строку со своим количеством
      ЦИКЛ ДЛЯ (и_прослеж ИЗ ТовПрослежРНПТ, и_тов + РР + "*")
        бтмц_доп_прослеж ЭТО б_тмц_доп
        бтмц_доп_прослеж = бтмц_доп  //еи - полагаем что ие прослеживаемого товара совпадает с еи самого товара
        бтмц_доп_прослеж.кол = ЗНАЧ(ТовПрослежКолво!и_прослеж)
        бтмц_доп_прослеж.НаИзменение_кол
        ЕСЛИ ВКЛ_ГТД И ТовПрослежРНПТ!и_прослеж <> "" И КодСтраны!и_тов <> "" ТО
          с_страны.НАЙТИ(код = КодСтраны!и_тов)
          бтмц_доп_прослеж.гтд_ид = ТМЦДопДобавитьГТД(бтмц.дата, бтмц_доп_прослеж.счет, ТовПрослежРНПТ!и_прослеж, с_страны.название, ДА)
        КОНЕЦ_ЕСЛИ
        бтмц.ЗАП_ДЕТАЛЬ(бтмц_доп_прослеж)
      КОНЕЦ_ЦИКЛА
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЦИКЛА

  //Дабавляем операцию в журнал ДЦУ
  бтмц.ПередЗаписью
  ПОПЫТКА
    бтмц.ДОБАВИТЬ!!(НЕТ)
    бтмц.ПРОВЕСТИ
    бтмц.ПослеЗаписи
    ЭДОДЦУИмпорт!бтмц.ид = ДА
    бтмц.ЭДОЗаписатьСвязь(гуид_документ)
    ПОДТВЕРДИТЬ
    РЕЗУЛЬТАТ = ДА
  ИСКЛЮЧЕНИЕ
    ЭДООшибкаИмпорта("Не удалось создать операцию оприходования №" + бтмц.ном_накл + " от " + СТР(бтмц.дата) + "//" + ОШИБКА)
  КОНЕЦ_ПОПЫТКИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЖУРНАЛ(б_тмц) ЭДОЗаписатьСвязь(СТРОКА: гуид_документ)
  //Формируем связь загруженного поступления с документом ЭДО
  //вызывать после записи документа
  //сообщ ЭТО эдо_сообщения  <- 16.08.2021 С.Г. выдавало предупреждение, не давало собрать обновление
  ЕСЛИ гуид_документ <> "" И ИЗ_ЖУРНАЛА(тс_операции, б_тмц, эдо_сообщения{сообщ}) = 3 И
       //По гуид_документ находим документ и у него указываем связь с операцией.
       //Связь в сообщение формируется автоматически на основе свизи в документах.
       //Поэтому искать документ дополнительно по гуид_сообщения не нужно / 10.08.2021, Сергей Н.
       эдо_документы.НАЙТИ(/*гуид_сообщения = сообщ.гуид_сообщения И*/ гуид_документ = :гуид_документ) ТО
    эдо_документы.идлинк_дцу = СВОЕ.ид
    эдо_документы.ЗАПИСАТЬ!!
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЖУРНАЛ(тс_операции) ЭДОЗаписатьСвязь(СТРОКА: гуид_документ)
  //Формируем связь загруженного поступления с документом ЭДО
  //вызывать после записи документа
  //сообщ ЭТО эдо_сообщения <- 16.08.2021 С.Г. выдавало предупреждение, не давало собрать обновление
  ЕСЛИ гуид_документ <> "" И ИЗ_ЖУРНАЛА(тс_операции, б_тмц, эдо_сообщения{сообщ}) = 3 И
       //По гуид_документ находим документ и у него указываем связь с операцией.
       //Связь в сообщение формируется автоматически на основе свизи в документах
       //Поэтому искать документ дополнительно по гуид_сообщения не нужно / 10.08.2021, Сергей Н.
       эдо_документы.НАЙТИ(/*гуид_сообщения = сообщ.гуид_сообщения И*/ гуид_документ = :гуид_документ) ТО
    эдо_документы.идлинк_жто = СВОЕ.ид
    эдо_документы.ЗАПИСАТЬ!!
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЗагрузкаДанныхДокЕИ(ПЕРЕМ СТРОКА: тов_еи!)
  /*Поиск единиц измерения, существующих в базе, или добавление новых
  тов_еи - результирующий массив с единицами измерения, для подстановки в товары.

  Для разных форматов могут быть разные условия на поиск ЕИ.
  Например, в УПД, если ЕИ нет в справчнике ОКЕИ, то код океи = "0000", в этом случае ЕИ
  нужно искать по названию.
  22.05.2020 / Сергей Н.
  */
  ИСПОЛЬЗОВАТЬ("c_units")
  //Для УПД

  это_упд = ЭДОИдФайл = "ON_SCHFDOPPR_*_*_*_*;ON_NSCHFDOPPR_*_*_*_*;ON_NSCHFDOPPRMARK_*_*_*_*;ON_NSCHFDOPPRPROS_*_*_*_*"
  ЗаполнитьМассивОКЕИ()
 // это_упд =ДА

  ЦИКЛ ПО ЖУРНАЛУ с_единицы еи
    еи_по_океи!еи.код_океи = еи.название //для поиска по коду ОКЕИ
    еи_по_назв!еи.название = еи.название //для поиска по названию
  КОНЕЦ_ЦИКЛА

  //Проходимся по всем считанным из файла выгрузки ед.измерения
  ЦИКЛ ДЛЯ (и_еи ИЗ ТовОКЕИ)
    //При загрузке УПД, если кода ОКЕИ нет, то ищем ЕИ по названию
    //"" - значит код ОКЕИ не указан, но может быть указано название ЕИ
    //"0000" - у ЕИ нет в классификаторе подходящего кода ОКЕИ, в этом случае обязательно должно быть указано название ЕИ
    ЕСЛИ это_упд И ТовОКЕИ!и_еи ИЗ ["", "0000"] ТО
      //Если в файле указано название, то ищем ЕИ по названию
      ЕСЛИ ТовНаимЕдИзм!и_еи <> "" И НЕ ТовНаимЕдИзм!и_еи ИЗ еи_по_назв ТО
        с_единицы.название = ТовНаимЕдИзм!и_еи
        с_единицы.ДОБАВИТЬ!!(НЕТ)
        еи_по_назв!с_единицы.название = с_единицы.название
      КОНЕЦ_ЕСЛИ
      ПРОДОЛЖИТЬ
    КОНЕЦ_ЕСЛИ

    //Если в файле указан код ОКЕИ, то ищем его в программе
    ЕСЛИ НЕ ТовОКЕИ!и_еи ИЗ еи_по_океи ТО
      //ищем еи с данным кодом в массиве ОКЕИ
      ЦИКЛ ДЛЯ (и_океи ИЗ МассивОКЕИ, ТовОКЕИ!и_еи + "|*")
        //заполняем название и код единицы измерения
        с_единицы.название = СЛОВО!(3, МассивОКЕИ!и_океи, "|")
        с_единицы.код_океи = СЛОВО!(1, МассивОКЕИ!и_океи, "|")
        с_единицы.ДОБАВИТЬ!!(НЕТ)
        //обновляем массив
        еи_по_океи!с_единицы.код_океи = с_единицы.название
      КОНЕЦ_ЦИКЛА
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЦИКЛА

  //Итоговый массив с единицами измерения, для подстановки в товары
  ЦИКЛ ДЛЯ (и_еи ИЗ ТовОКЕИ)
    ЕСЛИ это_упд ТО
      тов_еи!и_еи = ?(ТовОКЕИ!и_еи ИЗ ["", "0000"], еи_по_назв!ТовНаимЕдИзм!и_еи, еи_по_океи!ТовОКЕИ!и_еи)
    ИНАЧЕ
      тов_еи!и_еи = еи_по_океи!ТовОКЕИ!и_еи
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЦИКЛА
КОНЕЦ_ФУНКЦИИ


ФУНКЦИЯ ЖУРНАЛ(с_товары) ЛОГИКА: НайтиТовар(СТРОКА: и_тов)
  РЕЗУЛЬТАТ = НЕТ
  /*выбор = ИЗ_ЖУРНАЛА(тс_операции, б_тмц, эдо_сообщения)
  //Сначала определяем, сопоставлялся этот товар вручную или нет. Товар в составе ищем по названию.
  //Если товар был сопоставлен вручную, то используем указанный код товара
  ЕСЛИ выбор = 3 И
       ВЫБРАТЬ эдо_документы_доп.код_товара код_товара (эдо_документы_доп.гуид_сообщения = :эдо_сообщения.гуид_сообщения И эдо_документы_доп.название = ТовНаимен!и_тов) И
       СВОЕ.НАЙТИ(код = код_товара) ТО
    ВЫХОД(ДА)
  КОНЕЦ_ЕСЛИ*/

  //Автоматическое сопотавление
  порядок!1 = "код_поставщика"  //код поставщика, искать в с_товары_названия
  порядок!2 = "штрих_код"
  порядок!3 = "артикул"
  порядок!4 = "название"

  ЦИКЛ ДЛЯ (и_шк ИЗ ТовШтрихКодМарки, и_тов + РР + "*" + РР + "*")
    штрих_коды!ТовШтрихКодМарки!и_шк = ДА
  КОНЕЦ_ЦИКЛА

  ФильтрПоШтрихКоду.СБРОС
  ФильтрПоАртикулу.СБРОС
  ФильтрПоНазванию.СБРОС

  нашли_всего = 0
  РежимСопост = ""
  ЕСЛИ НЕ РЕЗУЛЬТАТ ТО
    //Переделан поиск товаров / 12.03.2021 / Сергей Н.
    ЦИКЛ ДЛЯ(и = 1, ВСЕГОМ(порядок))

      ЕСЛИ порядок!и = "код_поставщика" И ТовКод!и_тов <> "" ТО
        ЕСЛИ ВЫБРАТЬ с_товары.код код_товара (с_товары_названия.название = ТовКод!и_тов) ТО
          нашли_всего = 1 //Считаем что нашли только один товар
        КОНЕЦ_ЕСЛИ

      ИНАЧЕ_ЕСЛИ порядок!и = "штрих_код" И ВСЕГОМ(штрих_коды) > 0 ТО
        //Если существует только одна запись с этим фильтром, то определяем код_товара / 01.07.2021, Сергей Н.
        ЕСЛИ ЕстьТоварСШтрихКодом(штрих_коды, нашли_всего) И нашли_всего = 1 ТО
          ВЫБРАТЬ с_товары.код код_товара (ФильтрПоШтрихКоду)
        КОНЕЦ_ЕСЛИ

      ИНАЧЕ_ЕСЛИ порядок!и = "артикул" И ТовАртикул!и_тов <> "" ТО
        ФильтрПоАртикулу = с_товары.ФИЛЬТР(с_товары.артикул = ТовАртикул!и_тов)
        ЕСЛИ ВЫБРАТЬ ВСЕГО(с_товары.код) нашли_всего (ФильтрПоАртикулу) И нашли_всего = 1 ТО
          ВЫБРАТЬ с_товары.код код_товара (ФильтрПоАртикулу)
        КОНЕЦ_ЕСЛИ

      ИНАЧЕ_ЕСЛИ порядок!и = "название" И ТовНаимен!и_тов <> "" ТО
        ФильтрПоНазванию = с_товары.ФИЛЬТР(с_товары.название = ТовНаимен!и_тов)
        ЕСЛИ ВЫБРАТЬ ВСЕГО(с_товары.код) нашли_всего (ФильтрПоНазванию) И нашли_всего = 1 ТО
          ВЫБРАТЬ с_товары.код код_товара (ФильтрПоНазванию)

        КОНЕЦ_ЕСЛИ
      КОНЕЦ_ЕСЛИ

      //Если нашли один или несоклкьо товаров
      ЕСЛИ нашли_всего > 0 ТО
        ЕСЛИ нашли_всего = 1 ТО  //Если нашли только один товар, то будем использоать его, без ручного сопоставления
          НАЙТИ(код = код_товара)
          ВЫХОД(ДА) //как только нашли только один товар, то используем его и выходим
        ИНАЧЕ  //Если нашли несколько товаров, то нужно будет вручную сопоставить. Запоминаем по какому полю нашли товар
          РежимСопост = порядок!и
        КОНЕЦ_ЕСЛИ
        СТОП //как только товаров нашли по одному из полей, то выходим из цикла поиска
      КОНЕЦ_ЕСЛИ
    КОНЕЦ_ЦИКЛА
  КОНЕЦ_ЕСЛИ

  //Сопоставляем товар вручную в двух случаях:
  //1 - если ничего не нашли.
  //2 - если нашли сразу несколько товаров - нужно вручную выбрать какой именно
  ЕСЛИ НЕ РЕЗУЛЬТАТ ТО
    РЕЗУЛЬТАТ = СопоставитьТовар(и_тов)
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЛОГИКА: ВыборТовара (ПЕРЕМ СТРОКА: код_товара)
  /*Выод окна выбора товаров при ручном сопоставлении / 12.03.2021 / Сергей Н.*/
  ЕСЛИ РежимСопост = "" ТО //Показываем все товары
    РЕЗУЛЬТАТ = ЖУРНАЛ_ВЫБРАТЬ(с_товары, ДА, ЗаголовокВыбораТовара)
  ИНАЧЕ_ЕСЛИ РежимСопост = "штрих_код" ТО //Если по штрих-коду нашли несколько товаров, показываем только их
    РЕЗУЛЬТАТ = ЖУРНАЛ_ВЫБРАТЬ(с_товары, ФильтрПоШтрихКоду, ЗаголовокВыбораТовара)
  ИНАЧЕ_ЕСЛИ РежимСопост = "артикул" ТО //Если по артикулу нашли несколько товаров, показываем только их
    РЕЗУЛЬТАТ = ЖУРНАЛ_ВЫБРАТЬ(с_товары, ФильтрПоАртикулу, ЗаголовокВыбораТовара)
  ИНАЧЕ //Если по названию нашли несколько товаров, показываем только их
    РЕЗУЛЬТАТ = ЖУРНАЛ_ВЫБРАТЬ(с_товары, ФильтрПоНазванию, ЗаголовокВыбораТовара)
  КОНЕЦ_ЕСЛИ
  ЕСЛИ РЕЗУЛЬТАТ ТО
    код_товара = с_товары.код
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЖУРНАЛ (с_товары) ЛОГИКА: ДобавитьШтрихКод (СТРОКА: и_тов)
  РЕЗУЛЬТАТ = НЕТ
  ЦИКЛ ДЛЯ (и ИЗ ТовШтрихКодМарки, и_тов + РР + "*" + РР + "*")
    штрих_код = ТовШтрихКодМарки!и
    ЕСЛИ штрих_код <> "" И НЕ с_штрих_коды.НАЙТИ(с_штрих_коды.название = штрих_код И с_штрих_коды.идлинк = СВОЕ.код) ТО
      штрих ЭТО с_штрих_коды
      штрих.название = штрих_код
      штрих.идлинк = код
      ПОПЫТКА
        штрих.ДОБАВИТЬ!!(НЕТ)
      ИСКЛЮЧЕНИЕ
        с_товары_категории.НАЙТИ(с_товары_категории.ид = группа_ид)
        ЕСЛИ с_товары_категории.неуникальные_штрихкоды ТО
          штрих.дубликат = код
          штрих.ДОБАВИТЬ!!(НЕТ)
        КОНЕЦ_ЕСЛИ
      КОНЕЦ_ПОПЫТКИ
      ЕСЛИ штрих_код_ид = ПУСТО ТО
        штрих_код_ид = штрих.ид
        РЕЗУЛЬТАТ = ДА
      КОНЕЦ_ЕСЛИ
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЦИКЛА
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЖУРНАЛ(с_товары) ДобавитьТовар(СТРОКА: и_тов; ЧИСЛО: вид_документа; СТРОКА: единица_стр; ПЕРЕМ ЧИСЛО: кат_тмц!)
  //задаем название
  название = ТовНаимен!и_тов
  артикул = ТовАртикул!и_тов
  тнвэд_код = ТовТНВЭД!и_тов
  //21.02.2019, Сергей Н. / Для акта (3) - это услуга, для УПД (4) - то, что указано в файле выгрузки, для СФ и ТОРГ-12 - это товар.
  группа_ид = ?(вид_документа = 3, кат_тмц!товУслуга,
              ?(вид_документа = 4, кат_тмц!ТовКатегория!и_тов, кат_тмц!товТовар))
  //Если категорию сопоставили вручную, то используем ее / Сергей Н., 15.12.2020
  ЕСЛИ ЗНАЧ(ТовКатегорияСопост) <> 0 ТО
    группа_ид = ЗНАЧ(ТовКатегорияСопост)
  КОНЕЦ_ЕСЛИ
  // юра добавил в группу
  ЕСЛИ ЗНАЧ(ТовГруппаСопост) <> 0 ТО
   родитель= ТовГруппаСопост
  КОНЕЦ_ЕСЛИ
  //Формируем код
  НаИзменение_название
  ЕСЛИ вид_документа = 4 ТО
    ставка_ндс = ?(ТовСтавкаНДС!и_тов ИЗ ["18%", "20%"], ставСтандартный,
                     ?(ТовСтавкаНДС!и_тов = "10%", ставЛьготный,
                     ?(ТовСтавкаНДС!и_тов = "0%", ставНоль, ставБез)))
  КОНЕЦ_ЕСЛИ
  ЕСЛИ единица_стр<>"" ТО
   единицы = единица_стр  //было изначально
  ИНАЧЕ
   единицы= ТовСопостЕденица   // юра замени на жестко
  КОНЕЦ_ЕСЛИ
  //единицы = единица_стр      -юра убрал
  //добавляем товар в справочник ТМЦ
  ДОБАВИТЬ!!(НЕТ)
  ЕСЛИ ДобавитьШтрихКод(и_тов) ТО
    ЗАПИСАТЬ!!
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ


ФУНКЦИЯ ЧИСЛО: ПолучитьВалюту
  ИСПОЛЬЗОВАТЬ("c_waluty")
  РЕЗУЛЬТАТ = БАЗОВАЯ_ВАЛЮТА
  ЕСЛИ ДокВалютаКод <> "" ТО
    //Ищем существующую валюту
    ЦИКЛ ПО ЖУРНАЛУ с_валюты вал
      валюта_есть!ЧисловойКодОКВ(вал.ид_стр) = вал.ид
    КОНЕЦ_ЦИКЛА
    ЕСЛИ ДокВалютаКод ИЗ валюта_есть ТО
      РЕЗУЛЬТАТ = валюта_есть!ДокВалютаКод
    //Если валюта не найдена, то добавим новую
    //Добавлять будем только валюту с корректным кодом ОКВ
    ИНАЧЕ
      код_окв_стр = СтроковыйКодОКВ(ДокВалютаКод)
      ЕСЛИ код_окв_стр <> "" ТО
        вал ЭТО с_валюты
        вал.ид_стр = код_окв_стр
        вал.НаИзменение_ид_стр
        вал.название = ДокВалютаНазв
        вал.ДОБАВИТЬ!!(НЕТ)
        РЕЗУЛЬТАТ = вал.ид
      ИНАЧЕ
        ЭДООшибкаИмпорта("Не удалось добавить валюту """ + ДокВалютаНазв + """.//Неизвестный код по ОКВ """ + ДокВалютаКод + """")
      КОНЕЦ_ЕСЛИ
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

//Загрузка в тс_операции данных торг-12, сф, акт
//Оксана, 15.01.15
ФУНКЦИЯ ЛОГИКА: ЗагрузкаДанныхДокТсОперации (ЧИСЛО: вид_документа; СТРОКА: код_склада_стр; СТРОКА: гуид_документ = "")
  {вид_документа - какой документ загружается:
                   1 - СФ;
                   2 - ТОРГ-12;
                   3 - Акт;
                   4 - УПД.
   код_склада_стр - На какой склад делать поступление}
  ИСПОЛЬЗОВАТЬ( "B_otch", "c_common", "c_units", с_товары, с_клиенты, тс_операции, тс_операции_доп)
  РЕЗУЛЬТАТ = НЕТ

  //Загрузка ЕИ / 22.05.2020, Сергей Н.
  ЗагрузкаДанныхДокЕИ(тов_еи)

  //--- КАТЕГОРИИ ТМЦ ---
  //21.02.2019, Сергей Н. / Определение категории ТМЦ. т.к., например, с типом товТовар, могут быть разные категории, а нам нужна именно категория Товар.
  ЦИКЛ ПО ЖУРНАЛУ с_товары_категории кат (вкл = ДА И товар_услуга ИЗ [товУслуга, товПраво, товТовар])
    //полученная услуга
    ЕСЛИ кат.товар_услуга = товУслуга И кат.название = "Полученная услуга" ТО
      кат_тмц!товУслуга = кат.ид
    КОНЕЦ_ЕСЛИ
    //право
    ЕСЛИ кат.товар_услуга = товПраво И кат.название = "Право" ТО
      кат_тмц!товПраво = кат.ид
    КОНЕЦ_ЕСЛИ
    //товар
    ЕСЛИ кат.товар_услуга = товТовар И кат.название = "Товар" ТО
      кат_тмц!товТовар = кат.ид
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЦИКЛА

  //--- ТМЦ ---
  //проходимся по всем считанным товарам
  ЦИКЛ ДЛЯ (и_тов ИЗ ТовНаимен)
    тов ЭТО с_товары
    //Ид категории товара из файла. Нужно для вывода в окне сопоставления / Сергей Н., 15.12.2020
    ТовКатегорияИд = ?(вид_документа = 3, кат_тмц!товУслуга,
                     ?(вид_документа = 4, кат_тмц!ТовКатегория!и_тов, кат_тмц!товТовар))
    //если тавар нет в справочнике, то добавляем его
    //ЕСЛИ НЕ тов.НАЙТИ(название = ТовНаимен!и_тов) ТО
    ЕСЛИ НЕ тов.НайтиТовар(и_тов) ТО
      тов.ДобавитьТовар(и_тов, вид_документа, тов_еи!и_тов, кат_тмц)
    КОНЕЦ_ЕСЛИ
    тов_ид!и_тов = тов.код
  КОНЕЦ_ЦИКЛА
  //Получаем упаковки для товаров: массив ТовУпаковкаИд  / Сергей Н., 07.12.2020
  ПолучитьУпаковки(тов_ид)

  //создаем операцию поступления, заполняем поля
  опц ЭТО тс_операции
  тс_виды_то.НАЙТИ(ид_стр = "поступление")
  опц.вид_то_ид = тс_виды_то.ид
  опц.ПередДиалогом(ДА)

  //Доб. 10.04.2018 / Сергей Н. / Номер и дата накладной, номер и дата СФ загружаются в отдельной функции
  ЗагрузкаДанныхДокНомерДата(вид_документа, опц_ном_накл, опц_дата, опц_ном_сф, опц_дата_сф)
  опц.ном_накл = опц_ном_накл
  опц.ном_сф = опц_ном_сф
  опц.дата = опц_дата
  опц.дата_сф = опц_дата_сф

  //наша фирма
  ЕСЛИ гуид_документ <> "" ТО
    опц.фирма = ЭДОНашиФирмы!гуид_документ
  КОНЕЦ_ЕСЛИ

  опц.ид = ПУСТО
  опц.дата_счета = ЗНАЧ(ДокДата, ДАТА)
  опц.тип = счетНакл
  опц.статус_ид = ПУСТО
  опц.статус_название = ""
  опц.основание = ДокОснование
  опц.касса_ид = ПУСТО
  поставщик ЭТО с_клиенты
  поставщик.ПолучитьПоставщика
  опц.код_клиента = поставщик.код

  //склад - запрашивается в диалоге
  склад ЭТО с_склады
  склад.НАЙТИ(код = код_склада_стр)
  опц.код_склада = склад.код

  //грузоотправитель и грузополучатель
  гр ЭТО с_клиенты
  ЕСЛИ вид_документа = 2 ТО  //только для торг-12
    ЕСЛИ гр.НАЙТИ(инн = ГрузОтпрИНН) ТО
      опц.грузоотправитель_код = гр.код
    КОНЕЦ_ЕСЛИ
    ЕСЛИ гр.НАЙТИ(инн = ГрузПолучИНН) ТО
      опц.грузополучатель_код = гр.код
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЕСЛИ


  опц.ндс = ндсВТомЧисле //КАК БЫТЬ?
  опц.валюта_ид = ПолучитьВалюту
  опц.курс_расч = ДокКурс
  опц.ПересчетКурсов


  //состав операции (товары)
  ЦИКЛ ДЛЯ (и_тов ИЗ ТовНаимен)
    опц_доп ЭТО тс_операции_доп
    опц_доп.ЗАП_ОСНОВНАЯ(опц)
    тов ЭТО с_товары
    тов.НАЙТИ(код = тов_ид!и_тов)
    опц_доп.код_товара = тов.код
    опц_доп.кол = ЗНАЧ(ТовКолво!и_тов)
    //Если упаковки включены / Сергей Н., 07.12.2020
    ЕСЛИ ВКЛ_УПАКОВКИ И НЕ_ПУСТО(ТовУпаковкаИд!и_тов, 0) <> 0 ТО
      опц_доп.кол = ЗНАЧ(ТовКолвоУп!и_тов) * ЗНАЧ(ТовКолвоВУп!и_тов)
      опц_доп.упаковка_ид = ТовУпаковкаИд!и_тов
      опц_доп.кол_упак = ЗНАЧ(ТовКолвоУп!и_тов)
    КОНЕЦ_ЕСЛИ
    опц_доп.сумма = ЗНАЧ(ТовСуммаСНДС!и_тов)
    цена = ДЕЛ(ЗНАЧ(ТовСуммаСНДС!и_тов), ЗНАЧ(ТовКолво!и_тов), 0)
    опц_доп.цена = ОКРУГЛЕНИЕ(цена, 2)
    опц_доп.ставка_ндс = ?(ЗНАЧ(ТовСтавкаНДС!и_тов) ИЗ [18, 20], ставСтандартный,  //21.02.2019, Сергей Н. / Для НДС 20%
                         ?(ЗНАЧ(ТовСтавкаНДС!и_тов)= 10, ставЛьготный ,
                         ?(ЗНАЧ(ТовСтавкаНДС!и_тов)= 0, ставНоль, ставБез)))
    опц_доп.ПриВыборе_розн_наценка //Авто. расчет розн. наценки при поступлении / 12.05.2020, Сергей Н.
    опц_доп.идлинк = опц.ид

    //Для обычного (не прослеживаемого товара) будет всегда добавляться одна строка (как и раньше) / 07.06.2021, Сергей Н.
    ЕСЛИ НЕ ТовПрослеж!и_тов ТО
      опц_доп.ПриВыборе_розн_наценка //Авто. расчет розн. наценки при поступлении / 12.05.2020, Сергей Н.
      //Если используем ГТД и если ГТД есть в файле, то добавляет ГТД / 17.03.2021, Сергей Н.
      ЕСЛИ ВКЛ_ГТД И ГтдНомер!и_тов <> "" И КодСтраны!и_тов <> "" ТО
        //Добавляем номер гтд и страну к товару в составе операции / 22.05.2020, Сергей Н.
        с_страны.НАЙТИ(код = КодСтраны!и_тов)
        опц_доп.гтд_ид = ДобавитьГТД(опц.дата, тов.код, ГтдНомер!и_тов, с_страны.название, НЕТ)
      КОНЕЦ_ЕСЛИ

      опц.ЗАП_ДЕТАЛЬ(опц_доп)

      //2020.12.04 Иван. Доб.
      //Марки загружаются только для непрослеживаемых товаров / 07.06.2021, Сергей Н.
      опц.ЗаписьВДетМарок(и_тов, опц_доп.код_товара, опц_доп.ид)
    ИНАЧЕ
      //Если товар прослеживаемый, то для каждого номера партии товара добавляем в состав операции отдельную строку со своим количеством
      ЦИКЛ ДЛЯ (и_прослеж ИЗ ТовПрослежРНПТ, и_тов + РР + "*")
        опц_доп_прослеж ЭТО тс_операции_доп
        опц_доп_прослеж = опц_доп  //еи - полагаем что ие прослеживаемого товара совпадает с еи самого товара
        опц_доп_прослеж.кол = ЗНАЧ(ТовПрослежКолво!и_прослеж)
        опц_доп_прослеж.цена = ОКРУГЛЕНИЕ(цена, 2) //цена едницы товара в одной партии уже получена ранее.
        опц_доп_прослеж.НаИзменение_вес //для рассчета суммы
        опц_доп_прослеж.ПриВыборе_розн_наценка //для рассчета наценки

        ЕСЛИ ВКЛ_ГТД И ТовПрослежРНПТ!и_прослеж <> "" И КодСтраны!и_тов <> "" ТО
          с_страны.НАЙТИ(код = КодСтраны!и_тов)
          опц_доп_прослеж.гтд_ид = ДобавитьГТД(опц.дата, тов.код, ТовПрослежРНПТ!и_прослеж, с_страны.название, ДА)
        КОНЕЦ_ЕСЛИ

        опц.ЗАП_ДЕТАЛЬ(опц_доп_прослеж)
      КОНЕЦ_ЦИКЛА
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЦИКЛА

  //Дабавляем операцию в журнал тс_операции
  опц.ПередЗаписью

  ПОПЫТКА
    опц.ДОБАВИТЬ!!(НЕТ)
    опц.ПРОВЕСТИ
    опц.ПослеЗаписи(НЕТ)
    ЭДОТОИмпорт!опц.ид = ДА
    опц.ЭДОЗаписатьСвязь(гуид_документ)
    ПОДТВЕРДИТЬ
    РЕЗУЛЬТАТ = ДА
  ИСКЛЮЧЕНИЕ
    ЭДООшибкаИмпорта("Не удалось создать операцию поступления №" + опц.ном_накл + " от " + СТР(опц.дата) + "//" + ОШИБКА)
  КОНЕЦ_ПОПЫТКИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЖУРНАЛ(тс_операции) ЗаписьВДетМарок(СТРОКА: и_тов, код_тов; ЧИСЛО: доп_ид)
  //2020.12.04 Иван. Доб.
  ИСПОЛЬЗОВАТЬ("Ts_mark")

  ЦИКЛ ДЛЯ (инд_м1 ИЗ ТовНомУпак, и_тов +РР+ "*")
    марк_упак = ТовНомУпак!инд_м1
    СВОЕ.МаркаТСЗаписьДет(код_тов, "", марк_упак, "", доп_ид)

    //2021.08.09 Иван. Доб. Убираем ;, который не работает в фильтрах. #25449
    марк_инд = ЗАМ(марк_упак, ";", "")

    ЦИКЛ ДЛЯ (инд_м2 ИЗ МаркиВУпак, и_тов +РР+ "*" +РР+ марк_инд +РР+ "*")
      марк2 = МаркиВУпак!инд_м2
      СВОЕ.МаркаТСЗаписьДет(код_тов, марк_упак, марк2, "", доп_ид)
    КОНЕЦ_ЦИКЛА
  КОНЕЦ_ЦИКЛА

  ЦИКЛ ДЛЯ (инд_м1 ИЗ ТовКИЗ, и_тов +РР+ "*")
    СВОЕ.МаркаТСЗаписьДет(код_тов, "", ТовКИЗ!инд_м1, "", доп_ид)
  КОНЕЦ_ЦИКЛА
КОНЕЦ_ФУНКЦИИ

//юрий длбавил в диалог - `Группа  *~ТовГруппаСопост("", "ВыборКатегорииГруппы", выбСписок):38   и `Ед-ца Изм  *~ТовСопостЕденица("", "СправочникЕдениц", выбСписок):36
ДИАЛОГ ЖУРНАЛ(с_товары) СопоставитьТовар(СТРОКА: и_тов)
  Сопоставление товара от поставщика с товаром в базе
 <Сведение о товаре от поставщика:>
  Код        #тов_пост_код:36
  Название   #тов_пост_название:90:0:2

  Штрих-код  #тов_пост_шк:90
  Артикул    #тов_пост_артикул:36

  *$вариант(["Добавить новый товар без сопоставления               ", "Сопоставить с существующим товаром"], выбРадиоГор, "Как поступить с этим товаром:")
``Категория  *~ТовКатегорияСопост("", "ВыборКатегорииТовара", выбСписок):38
`Группа  *~ТовГруппаСопост("", "ВыборКатегорииГруппы", выбСписок):38
`Ед-ца Изм если не определиться  *~ТовСопостЕденица("", "СправочникЕдениц", выбСписок):36
  $НеЗапрашиватьСопост("Не выводить для других товаров")
`<Сведение о товаре в базе:>
  Код        *~тов_код("", "ВыборТовара"):10      #~Сканировать штрих-код("","СканироватьШтрихКод")
  Название   #тов_название:90:0:2

  Штрих-код  #тов_шк:90
  Артикул    #тов_артикул:36
ИЗМЕНЕНИЕ
  //Подставляем код товара, найденного при сканировании ШК / 16.03.2021, Сергей Н.
  ЕСЛИ вариант = 2 И СопостСканированием ТО
    тов_код = ТовКодСкан
    СопостСканированием = НЕТ
  КОНЕЦ_ЕСЛИ
  ЕСЛИ ИЗМЕНЕНА(вариант) И вариант = 1 ТО
    тов_код = ""
  КОНЕЦ_ЕСЛИ
  ЕСЛИ вариант = 2 И тов_код <> "" И с_товары.НАЙТИ(код = тов_код) ТО
    тов_название = с_товары.название
    тов_шк = ПолучитьШтрихКоды(тов_код, штрих_коды)
    тов_артикул = с_товары.артикул
  ИНАЧЕ
    тов_название = ""
    тов_шк = ""
    тов_артикул = ""
  КОНЕЦ_ЕСЛИ
  ЕСЛИ ИЗМЕНЕНА(вариант) И вариант = 2 ТО
    НеЗапрашиватьСопост = НЕТ
  КОНЕЦ_ЕСЛИ
  ДОСТУП(НеЗапрашиватьСопост, вариант = 1)
  ДОСТУП([тов_код, тов_название, тов_шк, тов_артикул], вариант = 2)
  ДОСТУП(~"Сканировать штрих-код", вариант = 2)
  ДОСТУП(ТовКатегорияСопост, вариант = 1)
  ДОСТУП(ТовГруппаСопост, вариант = 1)      //юрий добавил
  ДОСТУП(ТовСопостЕденица, вариант = 1)     //юрий добавил
ПРОВЕРКА
  РЕЗУЛЬТАТ = ДА
  //При сопоставлении с существующим товаров проверяем чтобы товар был обязательно указан / 16.03.2021, Сергей Н.
  ЕСЛИ вариант = 2 И тов_код = "" ТО
    СООБЩЕНИЕ("Выбран вариант <""Сопоставить с существующим товаром"">, но товар для сопоставления не указан. //Укажите товар для сопоставления или выберите вариант ""Добавить новый товар без сопоставления"".")
    ФОКУС(тов_код)
    РЕЗУЛЬТАТ = НЕТ
  КОНЕЦ_ЕСЛИ
ВЫЧИСЛИТЬ
  /*РежимСопост - по какому параметру был найден товар
    РежимСопост = "" - товар не найден.
    РежимСопост = "штрих-код" - товар найден по штрих-коду, и таких товаров несколько.
    Поэтому нужно вручную сопоставить товар с нужным*/
  РЕЗУЛЬТАТ = НЕТ
  ЕСЛИ НеЗапрашиватьСопост ТО ВЫХОД КОНЕЦ_ЕСЛИ
  вариант = 1
  тов_пост_название = ТовНаимен!и_тов
  тов_пост_код = ТовКод!и_тов
  ЦИКЛ ДЛЯ (и_шк ИЗ ТовШтрихКодМарки, и_тов + РР + "*" + РР + "*")
    штрих_коды_пост!ТовШтрихКодМарки!и_шк = ТовШтрихКодМарки!и_шк
  КОНЕЦ_ЦИКЛА
  тов_пост_шк = СУММАМ(штрих_коды_пост, "*", "; ")
  тов_пост_артикул = ТовАртикул!и_тов

  //Получаем категорию товара из файла поставщика / Сергей Н., 15.12.2020
  тов_пост_категория = ТовКатегорияИд
  ТовКатегорияСопост = СТР(тов_пост_категория)

  //Формирование заголовка окна выбора товара / 12.03.2021 / Сергей Н.
  заголовок = "Выберите ТМЦ или услугу"
  ЗаголовокВыбораТовара = ?(РежимСопост = "штрих_код", заголовок + " (Отфильтровано по штрих-коду: " + тов_пост_шк + ")",
                          ?(РежимСопост = "артикул",   заголовок + " (Отфильтровано по артикулу: " + тов_пост_артикул + ")",
                          ?(РежимСопост = "название",  заголовок + " (Отфильтровано по названию: " + тов_пост_название + ")",
                                                       заголовок + " для сопоставления с """ + тов_пост_название + """")))
ВВЕСТИ
  РЕЗУЛЬТАТ = СВОЕ.НАЙТИ(код = тов_код)
  ЕСЛИ РЕЗУЛЬТАТ ТО
    //Добавление новых штрих-кодов в карточку сопоставленного товара.
    //Если от поставщика есть штрих-код и у сопоставленного товара в базе тоже есть какие-то штрих-коды,
    //то нужно определить каких штрих-кодов еще нет у товара в базе. Эти штрих-кодв добавим в карточку и выведем предупреждение.
    //Если у соппоставленного товара еще нет штрих-кодов, то спросим про добавление штрих-кодов в карточку. / 12.03.2021 / Сергей Н.
    ЕСЛИ вариант = 2 И тов_пост_шк <> "" ТО
      //штрих-коды, которых еще нет в карточке сопоставленного товара
      ЦИКЛ ДЛЯ (шк ИЗ штрих_коды_пост)
        ЕСЛИ НЕ шк ИЗ штрих_коды ТО
          штрих_коды_нов!шк = шк
        КОНЕЦ_ЕСЛИ
      КОНЕЦ_ЦИКЛА
      //Если есть новые штрих-коды
      ЕСЛИ ВСЕГОМ(штрих_коды_нов) > 0 ТО
        //Если у сопоставленного товара уже есть свои штрих-коды, то добавляем новые штрих-коды о тпоставщика молча или
        //Если у сопоставленного товара нет своих штрих-кодов, то выводим запрос на добавление новых штрих-кодов от поставщика
        ЕСЛИ тов_шк <> "" ИЛИ
            (тов_шк = "" И ВОПРОС("Добавить в карточку сопоставленного товара <" + СВОЕ.название + "> штрих-коды <" + СУММАМ(штрих_коды_нов, "*", ", ") + "> от поставщика?", ДА)) ТО
          ЕСЛИ СВОЕ.ДобавитьШтрихКод(и_тов) ТО
            СВОЕ.ЗАПИСАТЬ!!
          КОНЕЦ_ЕСЛИ
          //Если у сопоставленного товара уже есть свои штрих-коды, то после доабвления новых штрих-кодов от поставщика сообщаем об этом
          ЕСЛИ тов_шк <> "" ТО СООБЩЕНИЕ("В карточку сопоставленного товара <" + СВОЕ.название + "> были добавлены штрих-коды <" + СУММАМ(штрих_коды_нов, "*", ", ") + "> от поставщика", типИнформация) КОНЕЦ_ЕСЛИ
        КОНЕЦ_ЕСЛИ
      КОНЕЦ_ЕСЛИ
    КОНЕЦ_ЕСЛИ

    //Запоминаем связь между кодом поставщика и кодом в базе.
    ЕСЛИ тов_пост_код <> "" ТО
      ЗаписатьСопоставление(тов_код, тов_пост_код)
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ДИАЛОГА

ФУНКЦИЯ ЗаписатьСопоставление(СТРОКА: тов_код, тов_пост_код)
  ЕСЛИ НЕ с_товары_названия.НАЙТИ(название = тов_код) ТО
    с_товары_названия.идлинк = тов_код
    с_товары_названия.название = тов_пост_код
    с_товары_названия.ЗАПИСАТЬ!!
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЖУРНАЛ(с_клиенты) ПолучитьПоставщика
  ЕСЛИ НЕ СВОЕ.НайтиПоставщика ТО
    //если поставщика с данным кодом эдо нет в справочнике, то добавляем его
    СВОЕ.название = ПостНаимен//наим_прод
    ЕСЛИ ПостАдресФИАС = "" ТО
      СВОЕ.адрес = ПостАдрес//адрес_прод
    ИНАЧЕ
      СВОЕ.адрес = ПостАдрес
      СВОЕ.адрес_скрыт = ПостАдресФИАС
    КОНЕЦ_ЕСЛИ
    СВОЕ.НаИзменение_название //формируем код
    СВОЕ.инн = ПостИНН//инн_прод
    СВОЕ.кпп = ПостКПП//кпп_прод
    СВОЕ.юр_физ = ?(ПостЮрЛицо, юрЮр, юрФиз)
    СВОЕ.должность = ПостПодпДолжн//должн_подписант  //должность подписанта
    СВОЕ.руководитель = ПостПодпФИО//подписант_фио //фио подписанта
    СВОЕ.ДОБАВИТЬ!!(НЕТ)
    СВОЕ.ДобавитьИдПоставщика
    соп ЭТО с_клиенты_в_группе
    соп.код_клиента = СВОЕ.код
    соп.вид_клиента = клПост
    соп.ДОБАВИТЬ!!(НЕТ)
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЖУРНАЛ(с_клиенты) ДобавитьИдПоставщика
  участник ЭТО эдо_участники
  участник.код_клиента = код
  участник.код_опер_эдо = ПолучитьОператора
  участник.идентиф_участника = УчЭДОИдОтпр
  участник.обмен_включен = ДА
  участник.ЗАПИСАТЬ!!
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ СТРОКА: ПолучитьОператора
  ДЛЯ эдо_операторы
    ЕСЛИ НЕ НАЙТИ(код = ПостОператорИд) ТО
      код = ПостОператорИд
      название = ПостОператорНазвание
      инн = ПостОператорИНН
      ЗАПИСАТЬ!!
    КОНЕЦ_ЕСЛИ
    РЕЗУЛЬТАТ = код
  КОНЕЦ_ДЛЯ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЖУРНАЛ(с_клиенты) ЛОГИКА: НайтиПоставщика
  РЕЗУЛЬТАТ = НЕТ
  ЕСЛИ НайтиПоставщикаПоИд ТО
    РЕЗУЛЬТАТ = ДА
  ИНАЧЕ_ЕСЛИ (ПостИНН <> "" И ПостКПП <> "" И СВОЕ.НАЙТИ(инн = ПостИНН И кпп = ПостКПП)) ИЛИ
             (ПостИНН <> "" И ПостКПП = ""  И СВОЕ.НАЙТИ(инн = ПостИНН)) ТО
    ДобавитьИдПоставщика
    РЕЗУЛЬТАТ = ДА
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЖУРНАЛ(с_клиенты) ЛОГИКА: НайтиПоставщикаПоИд
  уч ЭТО эдо_участники
  РЕЗУЛЬТАТ = УчЭДОИдОтпр <> "" И уч.НАЙТИ(идентиф_участника = УчЭДОИдОтпр) И НАЙТИ(код = уч.код_клиента)
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ХМЛИмпортУПДСвУчДокОбор
  //=== СвУчДокОбор - Сведения об участниках ЭДО ===
  //находим общее кол-во тегов СвУчДокОбор, д.б.
  свед_уч_эдо = ХМЛ_ВыбратьПодч("СвУчДокОбор")
  //переходим на этот тег
  ХМЛ_ПерейтиПодч(свед_уч_эдо)
  //и считываем свойства этого тега
  //В базе идентификаторы участников будут храниться в верхнем регистре / 08.04.2021, Сергей Н.
  УчЭДОИдОтпр = ЗАГЛ(ХМЛ_ПолучитьАтрибутПодч("ИдОтпр"))  //Идентификатор отправителя (поставщика)
  УчЭДОИдПол = ЗАГЛ(ХМЛ_ПолучитьАтрибутПодч("ИдПол"))    //Идентификатор получателя (в качестве получателя должна быть наша фирма)

  ХМЛИмпортОператор
КОНЕЦ_ФУНКЦИИ


ФУНКЦИЯ ЛОГИКА: ПроверитьМыПокупатель(ЛОГИКА: вывести_сообщение = НЕТ)
  РЕЗУЛЬТАТ = ДА
  //По идентификатору получателя находим нашу фирму
  ЕСЛИ НЕ ВЫБРАТЬ с_клиенты мы, эдо_участники участник (мы.ип_фирма_ид <> ПУСТО И участник.идентиф_участника = УчЭДОИдПол, ДА) ТО
    ошибка = "В документе" + ?(ДокИнфо = "", " ", " " + ДокИнфо + "//") + "покупатель не является нашей фирмой."
    ЕСЛИ вывести_сообщение ТО
      ЕСЛИ ИЗ_ЖУРНАЛА(тс_операции, б_тмц, эдо_сообщения) = 3 ТО //Если документ загружаться в журнал ЭДО, то не наш документ не загружаем (там нет такой возможности)
        СООБЩЕНИЕ(ошибка + " Документ не загружен.", типОшибка)
        РЕЗУЛЬТАТ = НЕТ
      ИНАЧЕ
        РЕЗУЛЬТАТ = ВОПРОС(ошибка + " Продолжить?")
      КОНЕЦ_ЕСЛИ
    ИНАЧЕ
      ЭДООшибкаИмпорта(ошибка + " Документ не загружен.")
      РЕЗУЛЬТАТ = НЕТ
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ХМЛИмпортДОУСвУчДокОбор
  //=== СвУчДокОбор - Сведения об участниках ЭДО ===
  свед_уч_эдо = ХМЛ_ВыбратьПодч("СвУчДокОбор")
  //переходим на этот тег
  ХМЛ_ПерейтиПодч(свед_уч_эдо)
  //и считываем свойства этого тега
  //В базе идентификаторы участников будут храниться в верхнем регистре / 08.04.2021, Сергей Н.
  УчЭДОИдОтпр = ЗАГЛ(ХМЛ_ПолучитьАтрибутПодч("ИдОтпр"))  //Идентификатор отправителя (поставщика)
  УчЭДОИдПол = ЗАГЛ(ХМЛ_ПолучитьАтрибутПодч("ИдПол"))    //Идентификатор получателя (в качестве получателя должна быть наша фирма)

  ХМЛИмпортОператор
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ХМЛИмпортДПТСвУчДокОбор
  //=== СвУчДокОбор - Сведения об участниках ЭДО ===
  свед_уч_эдо = ХМЛ_ВыбратьПодч("СвУчДокОбор")
  //переходим на этот тег
  ХМЛ_ПерейтиПодч(свед_уч_эдо)
  //и считываем свойства этого тега
  //В базе идентификаторы участников будут храниться в верхнем регистре / 08.04.2021, Сергей Н.
  УчЭДОИдОтпр = ЗАГЛ(ХМЛ_ПолучитьАтрибутПодч("ИдОтпр"))  //Идентификатор отправителя (поставщика)
  УчЭДОИдПол = ЗАГЛ(ХМЛ_ПолучитьАтрибутПодч("ИдПол"))    //Идентификатор получателя (в качестве получателя должна быть наша фирма)

  ХМЛИмпортОператор
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЛОГИКА: ЗагрузкаУПД(СТРОКА: содержимое_файла; ЛОГИКА: вывести_сообщение = НЕТ)
  ИСПОЛЬЗОВАТЬ("xml", "B_otch", "c_common", "c_units", с_товары, с_клиенты, б_тмц, б_тмц_доп, б_тмц_оплаты, "Edo")

  РЕЗУЛЬТАТ = НЕТ
  //21.02.2019, Сергей Н. / Доб. ТовАртикул, ТовТНВЭД
  ОБНУЛИТЬ(ТовНаимен, ТовАртикул, ТовТНВЭД, ТовОКЕИ, ТовНаимЕдИзм, ТовКолво,  ТовСуммаСНДС, ТовСуммаНДС, КодСтраны, ГтдНомер, ТовКатегория,
           ТовИдентТрансУпак, ТовНомУпак, ТовКИЗ, ТовШтрихКодМарки, ТовКод, МаркиВУпак, ТовУпаковкаИд,
           ТовПрослеж, ТовПрослежРНПТ, ТовПрослежОКЕИ, ТовПрослежНаимЕдИзм, ТовПрослежКолво)
  ПостПодпДолжн = "" ПостПодпФИО = ""  ПостИНН = "" ПостНаимен = "" ПостАдрес = "" ПостКПП = "" ПостОКПО = ""
  ПостОКПО = "" ПостТел = "" ПостЭлПочта = "" ДокОснование = ""
  ДокДата = "" ДокНомер = ""
  //Доб. 17.04.2018 / Сергей Н. / обнуляем переменную в которой содржится функция загружаемого УПД (СЧФ, СЧФДОП, ДОП)
  УПДФункция = ""

  ХМЛ_ИзСтроки(содержимое_файла)

  ХМЛИмпортУПДСвУчДокОбор
  ЕСЛИ НЕ ПроверитьМыПокупатель(вывести_сообщение) ТО
    ВЫХОД
  КОНЕЦ_ЕСЛИ


  //=== Документ ===
  документ = ХМЛ_ВыбратьПодч("Документ")
  ХМЛ_ПерейтиПодч(документ)
  кнд = ХМЛ_ПолучитьАтрибутПодч("КНД")  //КНД

  //Доб. 16.04.2018 / Сергей Н. / Функция загружаемого УПД (СЧФ, СЧФДОП, ДОП)
  УПДФункция = ХМЛ_ПолучитьАтрибутПодч("Функция")

  //21.02.2019, Сергей Н. / Для версии 5.01 (997) для кнд = 1115131
  ЕСЛИ НЕ кнд ИЗ ["1115125", "1115131"] ТО
    //СообщениеОшибкаИмпорта("Неверный код формы по КНД. Загрузка остановлена", вывести_сообщение)
    ЭДООшибкаИмпорта("Ошибка загрузки документа" + ?(ДокИнфо = "", "", " " + ДокИнфо) + ".//Указан неверный код формы по КНД. Документ не загружен")
    ВЫХОД
  ИНАЧЕ
    //21.02.2019, Сергей Н. / Для кнд 1115125 (приказ 155) используется формат 5.01 (часть 995)
    //                        Для кнд 1115131 (приказ 820) используется формат 5.01 (часть 997)
    //версия формата нужна для отдельной загрузки тегов этого формата
    версия_формата = ?(кнд = "1115125", "5.02.995", "5.01.997")
  КОНЕЦ_ЕСЛИ

  //Дата и время создания файла обмена продавцом
  ФайлДатаСоздания = ЗНАЧ(ХМЛ_ПолучитьАтрибутПодч("ДатаИнфПр"), ДАТА)
  ФайлВремяСоздания = ЗНАЧ(ХМЛ_ПолучитьАтрибутПодч("ВремИнфПр"), ВРЕМЯ)

  //--- СвСчФакт - сведения о СФ ---
  свед_сф = ХМЛ_ВыбратьПодч("Документ/СвСчФакт")
  ХМЛ_ПерейтиПодч(свед_сф)
  ДокНомер = ХМЛ_ПолучитьАтрибутПодч("НомерСчФ") //номер сф
  ДокДата =  ХМЛ_ПолучитьАтрибутПодч("ДатаСчФ")  //дата сф
  ЕСЛИ ДокДата = "" ТО
    //СообщениеОшибкаИмпорта("Не указана дата документа! Загрузка остановлена", вывести_сообщение)
    ЭДООшибкаИмпорта("Ошибка загрузки документа" + ?(ДокИнфо = "", "", " " + ДокИнфо) + ".//Не указана дата документа! Документ не загружен")
    ВЫХОД
  КОНЕЦ_ЕСЛИ

  код_окв !=  ХМЛ_ПолучитьАтрибутПодч("КодОКВ")   //код валюты по ОКВ   НомИспрСчФ

  //--- ИспрСчФ - исправление СФ (необ.)---
  //если есть тег ИспрСчФ, то считываем номер и дату исправления СФ
  //Убрано. Нигде не используется / 22.04.2020, Сергей Н.
  /*ЕСЛИ ХМЛ_ВыбратьПодч("Документ/СвСчФакт/ИспрСчФ") > 0 ТО    //НИГДЕ НЕ ИСПОЛЬЗУЕТСЯ. ЗАЧЕМ?
    ХМЛ_ПерейтиПодч(1)
    номер_исправ_сф != ХМЛ_ПолучитьАтрибутПодч("НомИспрСчФ")
    дата_исправ_сф != ХМЛ_ПолучитьАтрибутПодч("ДатаИспрСчФ")
  ИНАЧЕ
    номер_исправ_сф != ""
    дата_исправ_сф != ""
  КОНЕЦ_ЕСЛИ*/

  //СвПрод - сведения о продавце
  сост_элемент = "Документ/СвСчФакт/СвПрод"
  ЕСЛИ ХМЛ_ВыбратьПодч(сост_элемент) > 0  ТО
    СведенияОбУчастникеЭДОЗагрузкаУПД(сост_элемент)
    ПостНаимен = УчастникНаименов
    ПостИНН = УчастникИНН
    ПостКПП = УчастникКПП
    ПостАдресФИАС = УчастникАдресФИАС
    ПостАдрес = УчастникАдресТекст
    ПостОКПО = УчастникОКПО
    ПостТел = УчастникТел
    ПостЭлПочта = УчастникЭлПочта
    ПостЮрЛицо = УчастникЮрЛицо
  КОНЕЦ_ЕСЛИ

  //ГрузОт - сведения о грузоотправителе
  сост_элемент = "Документ/СвСчФакт/ГрузОт"
  ЕСЛИ ХМЛ_ВыбратьПодч(сост_элемент) > 0  ТО
    ХМЛ_ПерейтиПодч(1)
    //пытаемся считать сведения о грузоотправителе, если успешно, то
    ЕСЛИ ХМЛ_ВыбратьПодч(сост_элемент + "/ГрузОтпр") > 0 ТО
      СведенияОбУчастникеЭДОЗагрузкаУПД(сост_элемент + "/ГрузОтпр")
      ГрузОтпрИНН = УчастникИНН
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЕСЛИ

  //ГрузПолуч - сведения о грузополучателе
  сост_элемент = "Документ/СвСчФакт/ГрузПолуч"
  ЕСЛИ ХМЛ_ВыбратьПодч(сост_элемент) > 0  ТО
    СведенияОбУчастникеЭДОЗагрузкаУПД(сост_элемент)
    ГрузПолучИНН = УчастникИНН
  КОНЕЦ_ЕСЛИ
  //--- конец СвСчФакт - сведения о СФ ---


  //--- ТаблСчФакт - табличная часть СФ

  //СведТов - сведения о товаре
  свед_тов_тег = "Документ/ТаблСчФакт/СведТов"
  свед_тов = ХМЛ_ВыбратьПодч(свед_тов_тег)
  //считываем сведения о товаре
  ЦИКЛ ДЛЯ (и_св_тов = 1, свед_тов)
    //выбираем вновь тег со сведениями о товаре
    ХМЛ_ВыбратьПодч(свед_тов_тег)
    ХМЛ_ПерейтиПодч(и_св_тов)

    //считываем атрибуты этого товара
    ТовНаимен!и_св_тов = ХМЛ_ПолучитьАтрибутПодч("НаимТов")  //наименование товара
    ТовОКЕИ!и_св_тов = ?(ХМЛ_ЕстьАтрибутПодч("ОКЕИ_Тов"), ХМЛ_ПолучитьАтрибутПодч("ОКЕИ_Тов"), "")  //код ед. измерения товара (необ.)
    ТовКолво!и_св_тов = ?(ХМЛ_ЕстьАтрибутПодч("КолТов"), ХМЛ_ПолучитьАтрибутПодч("КолТов"), "")  //кол-во товара (необ.)
    ТовЦена!и_св_тов = ?(ХМЛ_ЕстьАтрибутПодч("ЦенаТов"), ХМЛ_ПолучитьАтрибутПодч("ЦенаТов"), "")  //цена (необ.)
    ТовСтавкаНДС!и_св_тов = ХМЛ_ПолучитьАтрибутПодч("НалСт") //ставка ндс
    ТовСуммаБезНДС!и_св_тов =?(ХМЛ_ЕстьАтрибутПодч("СтТовБезНДС"), ХМЛ_ПолучитьАтрибутПодч("СтТовБезНДС"), "")
    ТовСуммаСНДС!и_св_тов = ХМЛ_ПолучитьАтрибутПодч("СтТовУчНал")  //стоимость товара с налогом


    //считываем другие теги этого товара
    //переходим на тег Акциз - акциз, и считываем его атрибут
    /*ХМЛ_ВыбратьПодч(свед_тов + "/Акциз")
    ХМЛ_ПерейтиПодч(и_св_тов)
    акциз!и_св_тов = ХМЛ_ПолучитьПодч("СумАкциз") //сумма акциза */

    //переходим на тег НалСт - налоговая ставка, и считываем его атрибуты
    //ХМЛ_ВыбратьПодч("Документ/ТаблСчФакт/СведТов/НалСт")
    //ХМЛ_ПерейтиПодч(и_св_тов)
    // нал_ставка!и_св_тов = ХМЛ_ПолучитьАтрибутПодч("НалСтВел")    //налоговая ставака
    // тип_нал_ставка!и_св_тов = ХМЛ_ПолучитьАтрибутПодч("НалСтТип")//тип налоговой ставки

    //переходим на тег СумНал - сумма налога, и считываем его атрибуты
    //ХМЛ_ВыбратьПодч(свед_тов + "/СумНал")
    //ХМЛ_ПерейтиПодч(и_св_тов)
    //Поправил считывание суммы НДС / 27.06.2019, Сергей Н.
    ЕСЛИ ХМЛ_ВыбратьПодчПодч("СумНал") > 0 ТО
      ХМЛ_ПерейтиПодчПодч(1)
      ТовСуммаНДС!и_св_тов = ХМЛ_ПолучитьПодчПодч("СумНал") //сумма налога НДС
      //ОТЛАДКА(ТовНаимен!и_св_тов, ТовСуммаНДС!и_св_тов)
    КОНЕЦ_ЕСЛИ
    //Код страны и номер ГТД
    //ХМЛ_ВыбратьПодч(свед_тов + "/СвТД")
    //ХМЛ_ПерейтиПодч(и_св_тов)
    //Поправлена загрузка / 22.05.2020, Сергей Н.
    ЕСЛИ ХМЛ_ВыбратьПодчПодч("СвТД") > 0 ТО
      ХМЛ_ПерейтиПодчПодч(1)
      ЕСЛИ ХМЛ_ЕстьАтрибутПодчПодч("КодПроисх") И ХМЛ_ЕстьАтрибутПодчПодч("НомерТД") ТО
        КодСтраны!и_св_тов = ХМЛ_ПолучитьАтрибутПодчПодч("КодПроисх") //код страны происхождения НомерТД
        ГтдНомер!и_св_тов = ХМЛ_ПолучитьАтрибутПодчПодч("НомерТД") //номер ГТД
      КОНЕЦ_ЕСЛИ
    КОНЕЦ_ЕСЛИ
    //Дополнительные сведения о товаре
    //Поправлена загрузка / 22.05.2020, Сергей Н.
    ЕСЛИ ХМЛ_ВыбратьПодчПодч("ДопСведТов") > 0  ТО
      ХМЛ_ПерейтиПодчПодч(1)
      тов_категория = ?(ХМЛ_ЕстьАтрибутПодчПодч("ПрТовРаб"), ХМЛ_ПолучитьАтрибутПодчПодч("ПрТовРаб"), "") //Доб. проверка наличия / 22.04.2020, Сергей Н.//1 - имущество;2 - работа;3 - услуга;4 - имущественные права;5 - иное
      ТовКатегория!и_св_тов = ?(тов_категория ИЗ ["2", "3"], товУслуга,
                              ?(тов_категория = "4", товПраво, товТовар))
      //Название ЕИ / 22.05.2020, Сергей Н.
      ТовНаимЕдИзм!и_св_тов = ?(ХМЛ_ЕстьАтрибутПодчПодч("НаимЕдИзм"), ХМЛ_ПолучитьАтрибутПодчПодч("НаимЕдИзм"), "")
      //21.02.2019, Сергей Н. / Для версии 5.01 (997)
      ЕСЛИ версия_формата = "5.01.997" ТО
       ТовАртикул!и_св_тов = ?(ХМЛ_ЕстьАтрибутПодчПодч("АртикулТов"), ХМЛ_ПолучитьАтрибутПодчПодч("АртикулТов"), "")  //Артикул
       ТовТНВЭД!и_св_тов = ?(ХМЛ_ЕстьАтрибутПодчПодч("КодВидТов"), ХМЛ_ПолучитьАтрибутПодчПодч("КодВидТов"), "") //Код вида товара (код ТНВЭД)
      КОНЕЦ_ЕСЛИ

      ТовКод!и_св_тов = ?(ХМЛ_ЕстьАтрибутПодчПодч("КодТов"), ХМЛ_ПолучитьАтрибутПодчПодч("КодТов"), "")

      ХМЛИмпортУПДНомСредИдентТов(и_св_тов)

      //2020.12.04 Иван. Доб. Загрузка марок баз.единиц по маркам упаковок
      //Доб. запрос на продложение, если нет подключения к ЧЗ. Если отказать, то марки, шк пачек и паковки (для сигарет) не загрузятся / 06.08.2021, Сергей Н.
      ЕСЛИ НЕ ЭДОЭтоУпаковка(и_св_тов) И
           НЕ ВОПРОС("Не удалось получить данные по маркам из ""Честного знака"", они загружены не будут. Продолжить загрузку документа?") ТО
        ВЫХОД(НЕТ)
      КОНЕЦ_ЕСЛИ

      ХМЛИмпортУПДСведПрослеж(и_св_тов) //Загрузка сведений о прослеживаемости / 07.06.2021, Сергей Н.

    //Если в фале обмена отсутствуют доп. сведения о товаре, то признак товара (категорию товара) определить невозможно,
    //поэтому при отсутствии таких сведений будем пологать, что это Товар / 27.06.2019, Сергей Н.
    ИНАЧЕ
      ТовКатегория!и_св_тов = товТовар
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЦИКЛА

  //ВсегоОпл - реквизиты строки Всего к оплате
 /* всего_опл = ХМЛ_ВыбратьПодч("Документ/ТаблСчФакт/ВсегоОпл")
  ХМЛ_ПерейтиПодч(всего_опл)
  //стоимость товаров всего - без ндс (необ.)
  стоим_всего_без_ндс != ?(ХМЛ_ЕстьАтрибутПодч("СтТовБезНДСВсего"), ХМЛ_ПолучитьАтрибутПодч("СтТовБезНДСВсего"), "")
  //стоимость товаров всего - с ндс
  стоим_всего_с_ндс != ХМЛ_ПолучитьАтрибутПодч("СтТовУчНалВсего") */
  //--- конец ТаблСчФакт - табличная часть СФ

  //---- Содержание факта хозяйственной жизни 3 - сведения о факте отгрузки товаров (выполнения работ), передачи имущественных прав (о предъявлении оказанных услуг)
  //Доб. 05.07.2017 / Сергей Н. / Загрузка основания отгрузки если есть
  //Изм. 27.07.2017 / Сергей Н. / Переделал загрузку оснований, их может быть несколько. Загружаем их через ","
  основание_отгрузки = ХМЛ_ВыбратьПодч("Документ/СвПродПер/СвПер/ОснПер")
  ЦИКЛ ДЛЯ (и_осн_отг = 1, основание_отгрузки)
    //выбираем вновь тег со сведениями о основании
    //ХМЛ_ВыбратьПодч("Документ/СвПродПер/СвПер/ОснПер")
    ХМЛ_ПерейтиПодч(и_осн_отг)
    док_осн_наименование != ?(ХМЛ_ЕстьАтрибутПодч("НаимОсн"), ХМЛ_ПолучитьАтрибутПодч("НаимОсн"), "")//Наименование документа - основания
    //Изм. 27.07.2017 / Сергей Н. / Если оснвание отсутствует, то в файле присутствует слово Отсутствует. В этом случае такое основание пропускаем
    //21.02.2019, Сергей Н. / В версии 5.01. (997) текст "Без документа-основания"
    док_осн = ""
    ЕСЛИ НЕ док_осн_наименование ИЗ ["Отсутствует", "Без документа-основания"] ТО
      док_осн_номер != ?(ХМЛ_ЕстьАтрибутПодч("НомОсн"), ХМЛ_ПолучитьАтрибутПодч("НомОсн"), "")//Номер документа - основания
      док_осн_дата != ?(ХМЛ_ЕстьАтрибутПодч("ДатаОсн"), ХМЛ_ПолучитьАтрибутПодч("ДатаОсн"), "")//Дата документа - основания
      док_осн = док_осн_наименование + " " + ?(док_осн_номер <> "", "№" + док_осн_номер, "") + ?(док_осн_дата <> "", " от " + док_осн_дата,  "")// + " " + док_осн_досвед
    КОНЕЦ_ЕСЛИ
    док_осн_досвед != ?(ХМЛ_ЕстьАтрибутПодч("ДопСвОсн"), ХМЛ_ПолучитьАтрибутПодч("ДопСвОсн"), "")//Дополнительные сведения
    ДокОснование += УБР_ПРОБ(док_осн) + " " + док_осн_досвед + ?(и_осн_отг <> основание_отгрузки, ", ", "") //Изм. 27.07.2017 / Сергей Н. / Основания перечисляем через ","
  КОНЕЦ_ЦИКЛА

  //--- Подписант - сведения о лице, подписывающем документ в эл.виде
  //Подписант Физическое лицо
  ЕСЛИ ХМЛ_ВыбратьПодч("Документ/Подписант/ФЛ") > 0 ТО
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч("Документ/Подписант/ФЛ"))
    //инн_подписант != ХМЛ_ПолучитьАтрибутПодч("ИННФЛ")       //ИНН ИП (физ.лица)
    //свид_подписант != ХМЛ_ПолучитьАтрибутПодч("СвГосРегИП") //реквизиты свидетельства о гос.регистрации ИП
    ПостПодпДолжн = "" //для физ.лица нет
    //будем в дальнейшем считывать фамилию физ.лица
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч("Документ/Подписант/ИП/ФИО"))
  //Подписант ИП
  ИНАЧЕ_ЕСЛИ ХМЛ_ВыбратьПодч("Документ/Подписант/ИП") > 0 ТО
    //подписант_юл = ХМЛ_ВыбратьПодч("Документ/Подписант/ИП")
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч("Документ/Подписант/ИП"))
    //инн_подписант != ХМЛ_ПолучитьАтрибутПодч("ИННЮЛ")   //ИНН организации (юр.лица)
    ПостПодпДолжн = "" //должность подписанта
    //свид_подписант != "" //для юр.лица нет
    //будем в дальнейшем считывать фамилию юр.лица
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч("Документ/Подписант/ИП/ФИО")  )
  //Подписан юр. лицо
  ИНАЧЕ_ЕСЛИ ХМЛ_ВыбратьПодч("Документ/Подписант/ЮЛ") > 0 ТО
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч("Документ/Подписант/ЮЛ") )
    //инн_подписант != ХМЛ_ПолучитьАтрибутПодч("ИННЮЛ")   //ИНН организации (юр.лица)
    ПостПодпДолжн = ?(ХМЛ_ЕстьАтрибутПодч("Должн"), ХМЛ_ПолучитьАтрибутПодч("Должн"), "") //должность подписанта
    //свид_подписант != "" //для юр.лица нет
    //будем в дальнейшем считывать фамилию юр.лица
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч("Документ/Подписант/ЮЛ/ФИО") )
  КОНЕЦ_ЕСЛИ

  //считываем фио подписанта (юр.лиза или физ.лица)
  подписант_фам = ХМЛ_ПолучитьАтрибутПодч("Фамилия")          //Фамилия подписанта
  подписант_имя = ХМЛ_ПолучитьАтрибутПодч("Имя")              //Имя подписанта
  подписант_отч = ?(ХМЛ_ЕстьАтрибутПодч("Отчество"), ХМЛ_ПолучитьАтрибутПодч("Отчество"), "") //Отчетсов подписанта (необ.)
  ПостПодпФИО = подписант_фам + " " + подписант_имя + " " + подписант_отч //фио подписанта
  //--- конец Подписант - сведения о лице, подписывающем документ в эл.виде
  //=== Документ ===

  ЗакрытьФайлХМЛ
  //КОНЕЦ ЗАГРУЗКИ----------------
  РЕЗУЛЬТАТ = ДА
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ХМЛИмпортУПДНомСредИдентТов(ЧИСЛО: и_св_тов)
  ИСПОЛЬЗОВАТЬ("c_common")
  ид_товара_тег = "ДопСведТов/НомСредИдентТов"
  ЦИКЛ ДЛЯ (и_ид_тов = 1, ХМЛ_ВыбратьПодчПодч(ид_товара_тег))
    ХМЛ_ВыбратьПодчПодч(ид_товара_тег)
    ХМЛ_ПерейтиПодчПодч(и_ид_тов)
    ТовИдентТрансУпак[и_св_тов, и_ид_тов] = ?(ХМЛ_ЕстьАтрибутПодчПодч("ИдентТрансУпак"), ХМЛ_ПолучитьАтрибутПодчПодч("ИдентТрансУпак"), "")
    ЦИКЛ ДЛЯ (и_упак = 1, ХМЛ_ВыбратьПодчПодчПодч("НомУпак"))
      ХМЛ_ПерейтиПодчПодчПодч(и_упак)
      ТовНомУпак[и_св_тов, и_ид_тов, и_упак] = ХМЛ_СчитатьПодчПодчПодч
      ЕСЛИ ПроверкаРазборМарки(ДА, ТовНомУпак[и_св_тов, и_ид_тов, и_упак], штрих_код, тмп, тмп) ТО
        ТовШтрихКодМарки[и_св_тов, и_ид_тов, и_упак] = штрих_код
      КОНЕЦ_ЕСЛИ
    КОНЕЦ_ЦИКЛА
    ЦИКЛ ДЛЯ (и_киз = 1, ХМЛ_ВыбратьПодчПодчПодч("КИЗ"))
      ХМЛ_ПерейтиПодчПодчПодч(и_киз)
      ТовКИЗ[и_св_тов, и_ид_тов, и_киз] = ХМЛ_СчитатьПодчПодчПодч
      //Загрузка ШК из КИЗ / Сергей Н., 15.12.2020
      ЕСЛИ ПроверкаРазборМарки(ДА, ТовКИЗ[и_св_тов, и_ид_тов, и_киз], штрих_код, тмп, тмп) ТО
        ТовШтрихКодМарки[и_св_тов, и_ид_тов, и_киз] = штрих_код
      КОНЕЦ_ЕСЛИ
    КОНЕЦ_ЦИКЛА
  КОНЕЦ_ЦИКЛА
КОНЕЦ_ФУНКЦИИ


ФУНКЦИЯ СведенияОбУчастникеЭДОЗагрузкаУПД (СТРОКА: состав_элемента)
  {Загурзка сведений об участниках. Необходимо для загрузки УПД
  состав_элемента - элемент, который будем разбирать:
                     Продавец:         Документ/СвСчФакт/СвПрод
                     Грузоотправитель: Документ/СвСчФакт/ГрузОт/ГрузОтпр
                     Грузополучатель:  Документ/СвСчФакт/ГрузПолуч
                     Покупатель:       Документ/СвСчФакт/СвПокуп
  }
  УчастникНаименов = ""
  УчастникИНН = ""
  УчастникКПП = ""
  УчастникОКПО = ""
  УчастникТел = ""
  УчастникЭлПочта = ""
  УчастникЮрЛицо = ДА

  ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента))

  УчастникОКПО != ?(ХМЛ_ЕстьАтрибутПодч("ОКПО"),  ХМЛ_ПолучитьАтрибутПодч("ОКПО"), "")  //Код в общероссийском классификаторе предприятий и организаций
  УчастникСтруктПодр != ?(ХМЛ_ЕстьАтрибутПодч("СтруктПодр"),  ХМЛ_ПолучитьАтрибутПодч("СтруктПодр"), "")  //Структурное подразделение

  //Идентификационные сведения
  ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв") > 0 ТО
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв"))
    участник_ип = ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвИП")     //Сведения об ИП
    участник_юл = ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвЮЛУч")   //Сведения о юр. лице
    участник_физ = ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвФЛУчастФХЖ") //Сведения о физ. лице
    участник_ин = ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвЮЛНеУч") //Сведения об иностранном лице

    //если юр.лицо
    ЕСЛИ участник_юл > 0 ТО
      ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвЮЛУч"))
      УчастникНаименов != ?(ХМЛ_ЕстьАтрибутПодч("НаимОрг"), ХМЛ_ПолучитьАтрибутПодч("НаимОрг"), "") //Наименование
      УчастникИНН != ?(ХМЛ_ЕстьАтрибутПодч("ИННЮЛ"),  ХМЛ_ПолучитьАтрибутПодч("ИННЮЛ"), "")  //ИНН
      УчастникКПП != ?(ХМЛ_ЕстьАтрибутПодч("КПП"),  ХМЛ_ПолучитьАтрибутПодч("КПП"), "")  //КПП
    //если ИП
    ИНАЧЕ_ЕСЛИ участник_ип  > 0 ТО
      ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвИП"))
      УчастникИНН != ?(ХМЛ_ЕстьАтрибутПодч("ИННФЛ"),  ХМЛ_ПолучитьАтрибутПодч("ИННФЛ"), "")  //ИНН
      ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвИП/ФИО"))  //Фамилия, имя, отчество
      УчастникФам != ?(ХМЛ_ЕстьАтрибутПодч("Фамилия"),  ХМЛ_ПолучитьАтрибутПодч("Фамилия"), "")
      УчастникИмя != ?(ХМЛ_ЕстьАтрибутПодч("Имя"),  ХМЛ_ПолучитьАтрибутПодч("Имя"), "")
      УчастникОтч != ?(ХМЛ_ЕстьАтрибутПодч("Отчество"), ХМЛ_ПолучитьАтрибутПодч("Отчество"), "")
      УчастникНаименов != УчастникФам + " " + УчастникИмя + " " + УчастникОтч
    //если физическое лицо
    ИНАЧЕ_ЕСЛИ участник_физ > 0 ТО
      ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвФЛУчастФХЖ"))
      УчастникИНН != ?(ХМЛ_ЕстьАтрибутПодч("ИННФЛ"),  ХМЛ_ПолучитьАтрибутПодч("ИННФЛ"), "")  //ИНН
      ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвФЛУчастФХЖ/ФИО"))  //Фамилия, имя, отчество
      УчастникФам != ?(ХМЛ_ЕстьАтрибутПодч("Фамилия"),  ХМЛ_ПолучитьАтрибутПодч("Фамилия"), "")
      УчастникИмя != ?(ХМЛ_ЕстьАтрибутПодч("Имя"),  ХМЛ_ПолучитьАтрибутПодч("Имя"), "")
      УчастникОтч != ?(ХМЛ_ЕстьАтрибутПодч("Отчество"), ХМЛ_ПолучитьАтрибутПодч("Отчество"), "")
      УчастникНаименов != УчастникФам + " " + УчастникИмя + " " + УчастникОтч
      УчастникЮрЛицо = НЕТ
    //если иностранное лицо
    ИНАЧЕ_ЕСЛИ участник_ин > 0 ТО
      ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвЮЛНеУч"))
      УчастникНаименов != ?(ХМЛ_ЕстьАтрибутПодч("НаимОрг"), ХМЛ_ПолучитьАтрибутПодч("НаимОрг"), "")  //Наименование
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЕСЛИ

  //Адрес
  ХМЛИмпортУПДАдрес(состав_элемента)

  //Контактные сведения
  ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/Контакт") > 0 ТО //Контактные сведения, Состав элемента представлен в табл. 7.22 (табл. 7.20 Акты)
     ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/Контакт"))
     УчастникТел != ?(ХМЛ_ЕстьАтрибутПодч("Тлф"), ХМЛ_ПолучитьАтрибутПодч("Тлф"), "") //Номер контактного телефона
     УчастникЭлПочта != ?(ХМЛ_ЕстьАтрибутПодч("ЭлПочта"), ХМЛ_ПолучитьАтрибутПодч("ЭлПочта"), "") //Эл. почта
  КОНЕЦ_ЕСЛИ //ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/Контакт") > 0 ТО

  //Банковские реквизиты
  ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/БанкРекв") > 0 ТО
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/БанкРекв"))
    УчастникРасчСчет != ?(ХМЛ_ЕстьАтрибутПодч("НомерСчета"), ХМЛ_ПолучитьАтрибутПодч("НомерСчета"), "") //Номер банковского счета
    ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/БанкРекв/СвБанк") > 0 ТО //Сведения о банке
      ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/БанкРекв/СвБанк"))
      УчастникБанкНазвание !=  ?(ХМЛ_ЕстьАтрибутПодч("НаимБанк"), ХМЛ_ПолучитьАтрибутПодч("НаимБанк"), "") //Наименование банка
      УчастникБанкБИК != ?(ХМЛ_ЕстьАтрибутПодч("БИК"), ХМЛ_ПолучитьАтрибутПодч("БИК"), "")//Банковский идентификационный код (БИК) в соответствии со "Справочником БИК РФ"
      УчастникКорСчет != ?(ХМЛ_ЕстьАтрибутПодч("КорСчет"), ХМЛ_ПолучитьАтрибутПодч("КорСчет"), "")
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ СведенияОбУчастникеЭДОЗагрузкаДПТ (СТРОКА: состав_элемента)
  //"Документ/СвДокПТПрКроме/СвДокПТПр/СодФХЖ1/Продавец"

  УчастникНаименов = ""
  УчастникИНН = ""
  УчастникКПП = ""
  УчастникОКПО = ""
  УчастникТел = ""
  УчастникЭлПочта = ""
  УчастникЮрЛицо = ДА

  ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента))

  УчастникОКПО != ?(ХМЛ_ЕстьАтрибутПодч("ОКПО"),  ХМЛ_ПолучитьАтрибутПодч("ОКПО"), "")  //Код в общероссийском классификаторе предприятий и организаций
  УчастникСтруктПодр != ?(ХМЛ_ЕстьАтрибутПодч("СтруктПодр"),  ХМЛ_ПолучитьАтрибутПодч("СтруктПодр"), "")  //Структурное подразделение

  //Идентификационные сведения
  ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв") > 0 ТО
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв"))
    участник_ип = ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвИП")       //Сведения об ИП
    участник_юл = ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвОрг/СвЮЛ") //Сведения о юр. лице
    участник_физ = ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвФЛ")        //Сведения о физ. лице
    участник_ин = ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвОр/ИнОрг") //Сведения об иностранном лице

    //если юр.лицо
    ЕСЛИ участник_юл > 0 ТО
      ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвОрг/СвЮЛ"))
      УчастникНаименов != ?(ХМЛ_ЕстьАтрибутПодч("НаимОрг"), ХМЛ_ПолучитьАтрибутПодч("НаимОрг"), "")
      УчастникИНН != ?(ХМЛ_ЕстьАтрибутПодч("ИННЮЛ"),  ХМЛ_ПолучитьАтрибутПодч("ИННЮЛ"), "")
      УчастникКПП != ?(ХМЛ_ЕстьАтрибутПодч("КПП"),  ХМЛ_ПолучитьАтрибутПодч("КПП"), "")
    //если ИП
    ИНАЧЕ_ЕСЛИ участник_ип  > 0 ТО
      ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвИП"))
      УчастникИНН != ?(ХМЛ_ЕстьАтрибутПодч("ИННФЛ"),  ХМЛ_ПолучитьАтрибутПодч("ИННФЛ"), "")  //ИНН
      ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвИП/ФИО"))  //Фамилия, имя, отчество
      УчастникФам != ?(ХМЛ_ЕстьАтрибутПодч("Фамилия"),  ХМЛ_ПолучитьАтрибутПодч("Фамилия"), "")
      УчастникИмя != ?(ХМЛ_ЕстьАтрибутПодч("Имя"),  ХМЛ_ПолучитьАтрибутПодч("Имя"), "")
      УчастникОтч != ?(ХМЛ_ЕстьАтрибутПодч("Отчество"), ХМЛ_ПолучитьАтрибутПодч("Отчество"), "")
      УчастникНаименов != УчастникФам + " " + УчастникИмя + " " + УчастникОтч
    //если физическое лицо
    ИНАЧЕ_ЕСЛИ участник_физ > 0 ТО
      ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвФЛ"))
      УчастникИНН != ?(ХМЛ_ЕстьАтрибутПодч("ИННФЛ"),  ХМЛ_ПолучитьАтрибутПодч("ИННФЛ"), "")  //ИНН
      ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвФЛ/ФИО"))  //Фамилия, имя, отчество
      УчастникФам != ?(ХМЛ_ЕстьАтрибутПодч("Фамилия"),  ХМЛ_ПолучитьАтрибутПодч("Фамилия"), "")
      УчастникИмя != ?(ХМЛ_ЕстьАтрибутПодч("Имя"),  ХМЛ_ПолучитьАтрибутПодч("Имя"), "")
      УчастникОтч != ?(ХМЛ_ЕстьАтрибутПодч("Отчество"), ХМЛ_ПолучитьАтрибутПодч("Отчество"), "")
      УчастникНаименов != УчастникФам + " " + УчастникИмя + " " + УчастникОтч
      УчастникЮрЛицо = НЕТ
    //если иностранное лицо
    ИНАЧЕ_ЕСЛИ участник_ин > 0 ТО
      ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвОр/ИнОрг"))
      УчастникНаименов != ?(ХМЛ_ЕстьАтрибутПодч("НаимОрг"), ХМЛ_ПолучитьАтрибутПодч("НаимОрг"), "")  //Наименование
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЕСЛИ

  //Адрес
  ХМЛИмпортДПТАдрес(состав_элемента)

  //Контактные сведения
  ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/Контакт") > 0 ТО //Контактные сведения, Состав элемента представлен в табл. 7.22 (табл. 7.20 Акты)
     ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/Контакт"))
     УчастникТел != ?(ХМЛ_ЕстьАтрибутПодч("Тлф"), ХМЛ_ПолучитьАтрибутПодч("Тлф"), "") //Номер контактного телефона
     УчастникЭлПочта != ?(ХМЛ_ЕстьАтрибутПодч("ЭлПочта"), ХМЛ_ПолучитьАтрибутПодч("ЭлПочта"), "") //Эл. почта
  КОНЕЦ_ЕСЛИ //ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/Контакт") > 0 ТО

  //Банковские реквизиты
  ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/БанкРекв") > 0 ТО
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/БанкРекв"))
    УчастникРасчСчет != ?(ХМЛ_ЕстьАтрибутПодч("НомерСчета"), ХМЛ_ПолучитьАтрибутПодч("НомерСчета"), "") //Номер банковского счета
    ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/БанкРекв/СвБанк") > 0 ТО //Сведения о банке
      ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/БанкРекв/СвБанк"))
      УчастникБанкНазвание !=  ?(ХМЛ_ЕстьАтрибутПодч("НаимБанк"), ХМЛ_ПолучитьАтрибутПодч("НаимБанк"), "") //Наименование банка
      УчастникБанкБИК != ?(ХМЛ_ЕстьАтрибутПодч("БИК"), ХМЛ_ПолучитьАтрибутПодч("БИК"), "")//Банковский идентификационный код (БИК) в соответствии со "Справочником БИК РФ"
      УчастникКорСчет != ?(ХМЛ_ЕстьАтрибутПодч("КорСчет"), ХМЛ_ПолучитьАтрибутПодч("КорСчет"), "")
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ


ФУНКЦИЯ ХМЛИмпортУПДАдрес(СТРОКА: состав_элемента)
  ИСПОЛЬЗОВАТЬ("c_common")
  УчастникАдресТекст = ""
  УчастникАдресФИАС = ""
  ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/Адрес") > 0 ТО
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/Адрес"))
    //Адрес местонахождения в Российской Федерации
    ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/Адрес/АдрРФ") > 0 ТО //Адрес местонахождения в Российской Федерации
      //регионы
      ЦИКЛ ПО с_регионы регион
        регион_назв!регион.код = регион.название
      КОНЕЦ_ЦИКЛА
      ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/Адрес/АдрРФ"))

      индекс      = ?(ХМЛ_ЕстьАтрибутПодч("Индекс"), ХМЛ_ПолучитьАтрибутПодч("Индекс"), "")
      код_региона = ?(ХМЛ_ЕстьАтрибутПодч("КодРегион"), ХМЛ_ПолучитьАтрибутПодч("КодРегион"), "")
      район       = ?(ХМЛ_ЕстьАтрибутПодч("Район"), ХМЛ_ПолучитьАтрибутПодч("Район"), "")
      город       = ?(ХМЛ_ЕстьАтрибутПодч("Город"), ХМЛ_ПолучитьАтрибутПодч("Город"), "")
      нас_пункт   = ?(ХМЛ_ЕстьАтрибутПодч("НаселПункт"), ХМЛ_ПолучитьАтрибутПодч("НаселПункт"), "")
      улица       = ?(ХМЛ_ЕстьАтрибутПодч("Улица"), ХМЛ_ПолучитьАтрибутПодч("Улица"), "")
      дом         = ?(ХМЛ_ЕстьАтрибутПодч("Дом"), ХМЛ_ПолучитьАтрибутПодч("Дом"), "")
      корпус      = ?(ХМЛ_ЕстьАтрибутПодч("Корпус"), ХМЛ_ПолучитьАтрибутПодч("Корпус"), "")
      корпус      = ЗАМ(корпус, "корп.", "")
      квартира    = ?(ХМЛ_ЕстьАтрибутПодч("Кварт"), ХМЛ_ПолучитьАтрибутПодч("Кварт"), "")

      УчастникАдресФИАС = код_региона + "," +
                          регион_назв!код_региона + "," +
                          район + "," +
                          город + "," +
                          нас_пункт + "," +
                          улица + "," +
                          дом + "," +
                          корпус + "," +
                          квартира + "," +
                          индекс
      УчастникАдресТекст = АдресПредприятияОтчетностиСтрокой(УчастникАдресФИАС)

    //Информация об адресе (как в РФ так и за пределами РФ)
    ИНАЧЕ_ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/Адрес/АдрИнф") > 0 ТО
      ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/Адрес/АдрИнф"))
      код_страны = ?(ХМЛ_ЕстьАтрибутПодч("КодСтр"), ХМЛ_ПолучитьАтрибутПодч("КодСтр"), "")
      адрес =  ?(ХМЛ_ЕстьАтрибутПодч("АдрТекст"), ХМЛ_ПолучитьАтрибутПодч("АдрТекст"), "")
      УчастникАдресТекст = ?(код_страны = "", "", код_страны + ", ") + адрес
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ХМЛИмпортДПТАдрес(СТРОКА: состав_элемента)
  ИСПОЛЬЗОВАТЬ("c_common")
  УчастникАдресТекст = ""
  УчастникАдресФИАС = ""
  ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/Адрес") > 0 ТО
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/Адрес"))
    //Адрес местонахождения в Российской Федерации
    ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/Адрес/АдрРФ") > 0 ТО //Адрес местонахождения в Российской Федерации
      //регионы
      ЦИКЛ ПО с_регионы регион
        регион_назв!регион.код = регион.название
      КОНЕЦ_ЦИКЛА
      ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/Адрес/АдрРФ"))

      индекс      = ?(ХМЛ_ЕстьАтрибутПодч("Индекс"), ХМЛ_ПолучитьАтрибутПодч("Индекс"), "")
      код_региона = ?(ХМЛ_ЕстьАтрибутПодч("КодРегион"), ХМЛ_ПолучитьАтрибутПодч("КодРегион"), "")
      район       = ?(ХМЛ_ЕстьАтрибутПодч("Район"), ХМЛ_ПолучитьАтрибутПодч("Район"), "")
      город       = ?(ХМЛ_ЕстьАтрибутПодч("Город"), ХМЛ_ПолучитьАтрибутПодч("Город"), "")
      нас_пункт   = ?(ХМЛ_ЕстьАтрибутПодч("НаселПункт"), ХМЛ_ПолучитьАтрибутПодч("НаселПункт"), "")
      улица       = ?(ХМЛ_ЕстьАтрибутПодч("Улица"), ХМЛ_ПолучитьАтрибутПодч("Улица"), "")
      дом         = ?(ХМЛ_ЕстьАтрибутПодч("Дом"), ХМЛ_ПолучитьАтрибутПодч("Дом"), "")
      корпус      = ?(ХМЛ_ЕстьАтрибутПодч("Корпус"), ХМЛ_ПолучитьАтрибутПодч("Корпус"), "")
      корпус      = ЗАМ(корпус, "корп.", "")
      квартира    = ?(ХМЛ_ЕстьАтрибутПодч("Кварт"), ХМЛ_ПолучитьАтрибутПодч("Кварт"), "")

      УчастникАдресФИАС = код_региона + "," +
                          регион_назв!код_региона + "," +
                          район + "," +
                          город + "," +
                          нас_пункт + "," +
                          улица + "," +
                          дом + "," +
                          корпус + "," +
                          квартира + "," +
                          индекс
      УчастникАдресТекст = АдресПредприятияОтчетностиСтрокой(УчастникАдресФИАС)

    //Информация об адресе (как в РФ так и за пределами РФ)
    ИНАЧЕ_ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/Адрес/АдрИнф") > 0 ТО
      ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/Адрес/АдрИнф"))
      код_страны = ?(ХМЛ_ЕстьАтрибутПодч("КодСтр"), ХМЛ_ПолучитьАтрибутПодч("КодСтр"), "")
      адрес =  ?(ХМЛ_ЕстьАтрибутПодч("АдрТекст"), ХМЛ_ПолучитьАтрибутПодч("АдрТекст"), "")
      УчастникАдресТекст = ?(код_страны = "", "", код_страны + ", ") + адрес
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ХМЛИмпортДОУАдрес(СТРОКА: состав_элемента)
  ИСПОЛЬЗОВАТЬ("c_common")
  УчастникАдресТекст = ""
  УчастникАдресФИАС = ""
  ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/Адрес") > 0 ТО
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/Адрес"))
    //Адрес местонахождения в Российской Федерации
    ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/Адрес/АдрРФ") > 0 ТО //Адрес местонахождения в Российской Федерации
      //регионы
      ЦИКЛ ПО с_регионы регион
        регион_назв!регион.код = регион.название
      КОНЕЦ_ЦИКЛА
      ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч(состав_элемента + "/Адрес/АдрРФ"))

      индекс      = ?(ХМЛ_ЕстьАтрибутПодч("Индекс"), ХМЛ_ПолучитьАтрибутПодч("Индекс"), "")
      код_региона = ?(ХМЛ_ЕстьАтрибутПодч("КодРегион"), ХМЛ_ПолучитьАтрибутПодч("КодРегион"), "")
      район       = ?(ХМЛ_ЕстьАтрибутПодч("Район"), ХМЛ_ПолучитьАтрибутПодч("Район"), "")
      город       = ?(ХМЛ_ЕстьАтрибутПодч("Город"), ХМЛ_ПолучитьАтрибутПодч("Город"), "")
      нас_пункт   = ?(ХМЛ_ЕстьАтрибутПодч("НаселПункт"), ХМЛ_ПолучитьАтрибутПодч("НаселПункт"), "")
      улица       = ?(ХМЛ_ЕстьАтрибутПодч("Улица"), ХМЛ_ПолучитьАтрибутПодч("Улица"), "")
      дом         = ?(ХМЛ_ЕстьАтрибутПодч("Дом"), ХМЛ_ПолучитьАтрибутПодч("Дом"), "")
      корпус      = ?(ХМЛ_ЕстьАтрибутПодч("Корпус"), ХМЛ_ПолучитьАтрибутПодч("Корпус"), "")
      корпус      = ЗАМ(корпус, "корп.", "")
      квартира    = ?(ХМЛ_ЕстьАтрибутПодч("Кварт"), ХМЛ_ПолучитьАтрибутПодч("Кварт"), "")

      УчастникАдресФИАС = код_региона + "," +
                          регион_назв!код_региона + "," +
                          район + "," +
                          город + "," +
                          нас_пункт + "," +
                          улица + "," +
                          дом + "," +
                          корпус + "," +
                          квартира + "," +
                          индекс
      УчастникАдресТекст = АдресПредприятияОтчетностиСтрокой(УчастникАдресФИАС)

    //Информация об адресе (за пределами РФ)
    ИНАЧЕ_ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/Адрес/АдрИно") > 0 ТО
      ХМЛ_ПерейтиПодч(1)
      код_страны = ?(ХМЛ_ЕстьАтрибутПодч("КодСтр"), ХМЛ_ПолучитьАтрибутПодч("КодСтр"), "")
      адрес = ?(ХМЛ_ЕстьАтрибутПодч("АдрТекст"), ХМЛ_ПолучитьАтрибутПодч("АдрТекст"), "")
      УчастникАдресТекст = ?(код_страны = "", "", код_страны + ", ") + адрес
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЭДООшибкаЭкспорта(СТРОКА: стр)
  {Формирование массива ошибок ЭДО}
  НомерОшибкиЭкспорта++
  ЭДОЭкспортОшибки!НомерОшибкиЭкспорта = стр
КОНЕЦ_ФУНКЦИИ


ФУНКЦИЯ ЭДООшибкаИмпорта(СТРОКА: стр)
  {Формирование массива ошибок ЭДО}
  НомерОшибкиИмпорта++
  ЭДОИмпортОшибки!НомерОшибкиИмпорта = стр
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ВыборПостИд
  ВыборИдУчастника(ДА)
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ВыборПокупИд
  ВыборИдУчастника(НЕТ)
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ВыборИдУчастника(ЛОГИКА: это_наша_фирма)
  код_клиента = ?(это_наша_фирма, ЭДОЭкспортПостКод, ЭДОЭкспортПокупКод)
  ЦИКЛ ПО эдо_операторы опер, эдо_участники уч (код_клиента = :код_клиента)
    СОРТИРОВАТЬ(опер.название)
    уч_ид!уч.идентиф_участника = опер.название
  КОНЕЦ_ЦИКЛА
  ВВЕСТИ_ЗНАЧЕНИЕ("", уч_ид)
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ  ХМЛЭкспортОператор
   ВЫБРАТЬ эдо_операторы оп, эдо_участники (идентиф_участника = УчЭДОИдОтпр)
   ЗаписатьСтроку("СвОЭДОтпр НаимОрг =" + """" + ХМЛ_ЗаменитьСпецсимволы(оп.название) + """" +
                           " ИННЮЛ=" + """" + оп.инн + """" +
                           " ИдЭДО=" + """" + оп.код + """", "")
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ СТРОКА: ВыгрузкаУПД(СТРОКА: дир_файла, функция_упд, версия_формата)
  {
   Выгрузка в формате 5.01, часть 995. ПРИКАЗ от 24 марта 2016 г. N ММВ-7-15/155@
   Период действия: с 07.05.2016 по 31.12.2019
   Документы с датой до 01.01.2020 по этому формату будут приниматься налоговой по 31.12.2022

   Выгрузка в формате 5.01, часть 997. Приказ ФНС от 19.12.2018 № ММВ-7-15/820@
   Период действия: с 02.02.2019 до ...
   Для документов с датой от 02.02.2019

   дир_файла   - Директория сохранения файла выгрузки.
   функция_упд - Функция приказа. Может принимать следубщие значения:
                   СЧФ    - это СФ;
                   СЧФДОП - это СФ + накл (акт). Аналог УПД со статусом 1;
                   ДОП    - это накл (акт). Аналог УПД со статусом 2;
   версия_формата - Версия формата файла выгрузки. Может принимать значения:
                      5.01.995, с 19.07.2019 используется версия 5.02.995 согласно редакции этого формата;
                      5.01.997;
  }

  ИСПОЛЬЗОВАТЬ("c_blank_output", "c_common", "B_eksport", "xml")
  ПЕРЕМ СТРОКА: ошибки!, номер_сф_в, платежка, страна_код_в!
  ПЕРЕМ ДАТА: дата_сф_в
 // ПЕРЕМ ЛОГИКА: счет_фактура_на_аванс

  РЕЗУЛЬТАТ = ""
  //обнуляем все общие массивы
  ОБНУЛИТЬ(НомерПП, Наименование, Артикул, КодТовара, БазЕд, КолУпаковок, КодОКЕИ, ВидУпаковки, КолВУпаковке, КолУпаковок,
           Вес, ЦенаБезНДС, СтоимостьСНДС, Ставка, Кол, СтоимостьБезНДС, СуммаНДС, НомерГТД, Страна, ЭДОЭкспортОшибки)

  //=== РАСЧЕТНАЯ ЧАСТЬ ===
  опц ЭТО тс_операции
  тмц ЭТО б_тмц

  выбор = ИЗ_ЖУРНАЛА(опц, тмц)
  ЕСЛИ выбор = 0 ТО
    СООБЩЕНИЕ("Выберите операцию")
    ВЫХОД
  КОНЕЦ_ЕСЛИ

  //счет_фактура_на_аванс = НЕТ

  не_выводить_опл_после_сф = ПРОФИЛЬ["Если оплатили позже даты сф", 1] = 1 //ДА
  писать_опл_не = ПРОФИЛЬ["Если оплаты не было", 1]
  тип_плат_док = ПРОФИЛЬ["Тип платежного документа (пп, по, ро)", 1] = 1 //ДА
  ГрузПолОтпрТипАдреса = ПРОФИЛЬ["Адрес грузоотпр/получателя", 2]
  ГрузОтпрОнЖе = ПРОФИЛЬ["Отображать грузоотправителя", 1]
  //В качестве кода товара выводить
  вывод_кода_товара = ПРОФИЛЬ["В качестве кода товара", 1]
  //Вывод массы нетто / 21.02.2019, Сергей Н. /
  вывод_массы_нетто = ПРОФИЛЬ["Графу с массой груза (нетто)", 1]

  /*Указываем, что нужно переопределить настройки в функции ВыводКолонок..., указав свои. / 21.04.2021, Сергей Н.
  //Например, указали свое значение типа количества ТипКолва, и чтобы ф-ия ВыводКолонок их не обнулила, указыавем что мы их переопределили.*/
  НастройкиВывода!"настройки_переопределить" = ДА

  ТипКолва = ПРОФИЛЬ["Количество", 2]

  //если подписи не разрешено указывать в операциях, то используем подписи из настроек выгрузки / 20.02.2020, Сергей Н.
  ЕСЛИ НЕ ВКЛ_ПОДПИСИ ТО
    ИспользоватьПодписи = ПРОФИЛЬ["Подписи", ""]
  КОНЕЦ_ЕСЛИ

  ДобавлениеВДетализацию = 0 //Чтобы в новых файлах номер пп для товаров начинался заново

  НастройкиВывода!"не_гтд_россия" = ДА
  НастройкиВывода!"грузо_банк" = НЕТ
  НастройкиВывода!"грузо_инн_кпп" = НЕТ
  НастройкиВывода!"или_уполномоченное" = ДА
  НастройкиВывода!"грузо_кпп" = ДА  //По аналогии с бланком УПД / 28.04.2021, Сергей Н.

  //Изм. 27.12.2018 / Сергей Н. / Выгружаем УПД в файл без группировки, по аналогии с печатным бланком УПД. (напрмиер, один бланк СФ может выводиться на несколько накладных с одним номером и датой СФ. Для УПД такого нет)
  ф_опц = тс_операции.ФИЛЬТР(ид = опц.ид)
  ф_тмц = б_тмц.ФИЛЬТР(ид = тмц.ид)

  платежка = ""

  ЕСЛИ выбор = 1 ТО
    номер_сф = опц.ном_сф
    дата_сф = опц.дата_сф
    ЦИКЛ ПО ЖУРНАЛУ тс_операции! опц2
      (ф_опц И тс_операции.ид <> опц.ид)
      платежка += ?(платежка = "", "", ", ") + опц2.ПлатежкаИзТовОпераций(не_выводить_опл_после_сф)
    КОНЕЦ_ЦИКЛА
    платежка += ?(платежка = "", "", ", ") + опц.ПлатежкаИзТовОпераций(не_выводить_опл_после_сф)
  КОНЕЦ_ЕСЛИ

  // Вывод из ДЦУ
  ЕСЛИ выбор = 2/*3*/ ТО
    номер_сф = тмц.номер_сф
    дата_сф = тмц.дата_сф
    ЦИКЛ ПО ЖУРНАЛУ б_тмц! тмц2
      (ф_тмц И б_тмц.ид <> тмц.ид)
      платежка += ?(платежка = "", "", ", ") + тмц2.ПлатежкаИзТМЦ(не_выводить_опл_после_сф)
    КОНЕЦ_ЦИКЛА
    платежка += ?(платежка = "", "", ", ") + тмц.ПлатежкаИзТМЦ(не_выводить_опл_после_сф)
  КОНЕЦ_ЕСЛИ

  вариант = ПРОФИЛЬ["В наименовании продавца указывать", 1]

  ВыводитьПолноеНазвание = вариант ИЗ [1, 3]
  ВыводитьСокращенноеНазвание = вариант ИЗ [1, 2]

  ЕСЛИ писать_опл_не = 1 И платежка = "" ТО
    платежка = "На дату выписки оплата не произведена"
  КОНЕЦ_ЕСЛИ
  ЕСЛИ писать_опл_не = 3 И платежка = "" ТО
    платежка = "№                  от"
  КОНЕЦ_ЕСЛИ

  // Скрываем пп, по, ро
  ЕСЛИ НЕ тип_плат_док ТО
    платежка = ЗАМ(ЗАМ(ЗАМ(ЗАМ(ЗАМ(ЗАМ(платежка, "по", "№"), "п/о", "№"), "п\о", "№"), "пп", "№"), "п/п", "№"), "п\п", "№")
    платежка = ЗАМ(ЗАМ(ЗАМ(платежка, "ро", "№"), "р/о", "№"), "р\о", "№")
  КОНЕЦ_ЕСЛИ

  // Вывод из ЖТО
  ЕСЛИ выбор = 1 ТО
    ЦИКЛ ПО ЖУРНАЛУ тс_операции! опц2
      (ф_опц И тс_операции.ид <> опц.ид)
      опц2.ВыводКолонокИзТовОпераций(1, 1, ДА)
    КОНЕЦ_ЦИКЛА
    опц.ВыводКолонокИзТовОпераций(1, 1, ДА) // после цикла спецом, чтобы реквизиты были уж точно какие нада (грузоотправитель к примеру)
    опц.ЭДОПолучитьМарки //Формирование массива с марками для состава операции
    дата_накл = опц.дата
    дата_сф = опц.дата_сф
    ном_накл = опц.ном_накл
    //время = ?(опц.время = ПУСТО, 12:00:00, опц.время)
    ЕСЛИ НЕ ЕстьТовары И ПРОФИЛЬ["Если в сч-ф нет ТМЦ, а только услуги", 1] = 1 ТО
      Грузоотправитель = "---"
      Грузополучатель = "---"
    КОНЕЦ_ЕСЛИ

  КОНЕЦ_ЕСЛИ

  // Вывод из ДЦУ
  ЕСЛИ выбор = 2 ТО
    ЦИКЛ ПО ЖУРНАЛУ б_тмц! тмц2
      (ф_тмц И б_тмц.ид <> тмц.ид)
      тмц2.ВыводКолонокИзТМЦ(1)
    КОНЕЦ_ЦИКЛА
    тмц.ВыводКолонокИзТМЦ(1) // после цикла спецом, чтобы реквизиты были уж точно какие нада (грузоотправитель к примеру)
    дата_накл = тмц.дата
    дата_сф = тмц.дата_сф
    ном_накл = тмц.ном_накл
    //время = 12:00:00  //чисто условно, т.к. времени в дцу нет
    ЕСЛИ НЕ ЕстьТовары И ПРОФИЛЬ["Если в сч-ф нет ТМЦ, а только услуги", 1] = 1 ТО
      Грузоотправитель = "---"
      Грузополучатель = "---"
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЕСЛИ

  //Код страны
  код_страны ЭТО с_страны
  ЦИКЛ ДЛЯ (ст ИЗ Страна) //Оксана
    ЕСЛИ Страна!ст = "-" ТО
      Страна!ст = ""
      страна_код!ст = ""
    ИНАЧЕ
      ЕСЛИ код_страны.НАЙТИ(название=Страна!ст) ТО
        страна_код!ст=код_страны.код
      КОНЕЦ_ЕСЛИ
    КОНЕЦ_ЕСЛИ
    страна_код_в!ст = страна_код!ст  //для выгрузки
  КОНЕЦ_ЦИКЛА

  //Категория товара
  ЦИКЛ ПО с_товары тов, с_товары_категории кат
    категория_товара!тов.код = кат.товар_услуга
  КОНЕЦ_ЦИКЛА

  //для выгрузки
  //Изм. 16.04.2018 / Сергей Н. / Если выгружаем накладную (ДОП), то в качестве даты и номера сф берем дату и номер накладной, как это сделано в бланке.
  ЕСЛИ функция_упд = "ДОП" ТО
    дата_сф_в = дата_накл
    номер_сф_в = ном_накл
  ИНАЧЕ  //Для СЧФ и СЧФДОП выгружаем только дату и номер сф (при загрузке УПД дата и номер накладной будет = дате и номеру СФ)
    дата_сф_в = дата_сф
    номер_сф_в = номер_сф
  КОНЕЦ_ЕСЛИ

  //Получаем номер документа об отгрузке
  //Если выгружается СФ, то по аналогии с печатным бланком СФ: номер док. об отгрузке = номеру накладной / 16.07.2021, Сергей Н.
  ЕСЛИ функция_упд = "СЧФ" ТО
    ДокОтгрузкиНомер = ном_накл
    ДокОтгрузкиДата = дата_накл
  ИНАЧЕ  //Если выгружается УПД, то по аналогии с печатным бланком УПД: номер док. об отгрузке = номеру УПД
    ДокОтгрузкиНомер = номер_сф_в
    ДокОтгрузкиДата = дата_сф_в
  КОНЕЦ_ЕСЛИ
 //конец РАСЧЕТНОЙ ЧАСТИ


 //=== ВЫГРУЗКА ===
 {
 Адреса местанахождения Продавца/Грузотпр./Грузополуч/Покупателя определяются только в РФ
 Информационные теги/поля закоментированы (пока не используются)
 Выгружаем только исходящие СФ (напр., реализация)
 }

  //реквизиты
  мы ЭТО с_клиенты
  мы.СчитатьРеквизиты

  ОБНУЛИТЬ(ошибки)
  //Если = ДА, то используем адрес местонахождения в РФ; если = НЕТ, то за пределами РФ (Сейчас ДА)
  адрес_рф_пост = ДА
  адрес_рф_грузот = ДА
  адрес_рф_грузполуч = ДА
  адрес_рф_покуп = ДА

  ОдинарныйТег = ДА
  //ном_корр_ввод =  СТР0(ЗНАЧ(0), 3)
  ГодДанных = СТР(ГОД(дата_сф_в))
  //Для формата 5.01.997 (приказ 820) новый префикс: ON_NSCHFDOPPR / 22.10.2019, Сергей Н.
  //Вместо 5.01.995 нужно использовать 5.02.995 (редакция 2 приказа 7-15/155 (с 19.07.2019)) / 28.01.2020, Сергей Н.
  НаимФОтч = ?(версия_формата = "5.02.995", "ON_SCHFDOPPR", "ON_NSCHFDOPPR") //Информация продавца
  КодКнд = ?(версия_формата = "5.02.995", "1115125", "1115131") //21.02.2019, Сергей Н. / Для формата 5.01.997 (приказ 820) новый код КНД

  //Формируем имя фала с директорией, например, "C:\NP\2012\\\...."
  РЕЗУЛЬТАТ = дир_файла + "\" + ЭДОИмяФайлаХМЛ(НаимФОтч, дата_сф_в)
  СоздатьФайлХМЛ(РЕЗУЛЬТАТ, WIN)

  //доб. Оксана, 11.2020 для выгрузки в эдо_исходящие
  ЭДОДокументыПуть[ЗАМ(РЕЗУЛЬТАТ, дир_файла + "\", "")] = РЕЗУЛЬТАТ
  ЭДОДокументыОснование[ЗАМ(РЕЗУЛЬТАТ, дир_файла + "\", "")] =
                           ?(функция_упд = "СЧФ", "Счет-фактура",
                           ?(функция_упд = "СЧФДОП", "Счет-фактура и документ об отгрузке товаров (выполнении работ), передаче имущественных прав (документ об оказании услуг)",
                           ?(функция_упд = "ДОП", "Документ об отгрузке товаров (выполнении работ), передаче имущественных прав (Документ об оказании услуг)", "")))    //Оксана
  ЭДОДокументыДанные[ЗАМ(РЕЗУЛЬТАТ, дир_файла + "\", "")] = номер_сф_в + РР + СТР(дата_сф_в)

  ФайлХМЛ.ЗАПИСАТЬ("<?xml version=""1.0"" encoding=""windows-1251""?>")
  ОткрытьТег("Файл", "ИдФайл=" + """" + СЛОВО(1, ИМЯ_ФАЙЛА(РЕЗУЛЬТАТ), ".") + """" +
                    " ВерсФорм=" + """" + ?(версия_формата = "5.02.995", "5.02", "5.01") + """" +  //Для формата 7-15/155 версия 5.02. Для формата 7-15/820 - 5.01 / 28.01.2020, Сергей Н.
                    " ВерсПрог=""Инфо-Предприятие(версия " + ВЕРСИЯ_НАСТРОЙКИ + ")""" +
                    " xmlns:xsi=" + """" + "http://www.w3.org/2001/XMLSchema-instance" + """")

  //===== Сведения об участниках электронного документооборота =====
  ЕСЛИ УчЭДОИдОтпр = "" ТО
    ЭДООшибкаЭкспорта("У продавца " + мы.название + " (" + мы.код + ")" + " не задан ""Идентификатор участника ЭДО""")
  КОНЕЦ_ЕСЛИ
  ЕСЛИ УчЭДОИдПол = "" ТО
    ЭДООшибкаЭкспорта("У покупателя " + Клиент.название + " (" + Клиент.код + ")" + " не задан ""Идентификатор участника ЭДО""")
  КОНЕЦ_ЕСЛИ
                            //??? При Функция=ДОП и направлении документа не через оператора ЭДО СФ ИдОтпр - глобальный уникальный идентификатор (GUID), однозначно идентифицирующий участника документооборота
  ОткрытьТег("СвУчДокОбор", "ИдОтпр=" + """" + УчЭДОИдОтпр + """" +   //Код оператора ЭДО + наш код ЭДО.
                            //??? При Функция=ДОП и направлении документа не через оператора ЭДО СФ ИдПол - глобальный уникальный идентификатор (GUID), однозначно идентифицирующий участника документооборота
                           " ИдПол=" + """" + УчЭДОИдПол + """")
   //Сведения об операторе ЭДО отправителя (наш оператор ЭДО). Обязателен при направлении документа через оператора ЭДО СФ (у нас пока пусть будет всегда)
   ХМЛЭкспортОператор
  ЗакрытьТег//СвУчДокОбор
  //===== Конец. Сведения об участниках электронного документооборота =====


  //===== Документ =====
  ОткрытьТег("Документ", "КНД=" + """" + КодКнд + """" +
                         " Функция=" + """" + функция_упд + """" +  //СЧФ - это СФ | СЧФДОП - это СФ + накл (акт): статус 1 | ДОП - это накл (акт): статус 2
                         ?(функция_упд <> "СЧФ", " ПоФактХЖ=""Документ об отгрузке товаров (выполнении работ), передаче имущественных прав (документ об оказании услуг)""", "") +
                         ?(функция_упд = "СЧФДОП", " НаимДокОпр=""Счет-фактура и документ об отгрузке товаров (выполнении работ), передаче имущественных прав (документ об оказании услуг)""",
                           ?(функция_упд = "ДОП",  " НаимДокОпр=""Документ об отгрузке товаров (выполнении работ), передаче имущественных прав (Документ об оказании услуг)""", "")) +
                         " ДатаИнфПр=" + """" + СТР(ДАТА_ТЕК_СИС) + """" + // СТР(дата_накл)
                         " ВремИнфПр=" + """" + ЗАМ(СТР(ВРЕМЯ_ТЕК), ":", ".") + """" +  //СТР(время)
                         //Название экономического субъекта составителя (название нашей фирмы)
                         " НаимЭконСубСост=" + """" + ХМЛ_ЗаменитьСпецсимволы(мы.название) + """" //+
                         /*Основание, по которому экономический субъект является составителем файла обмена счета-фактуры (информации продавца).
                         Обязателен, если составитель файла не продавец.
                         Пока не будем выгружать. Будем считать, что составитель всегда продавец.*/
                         //" ОснДоверОргСост=" + """" + "" + """"
                         )


    //===== Сведения о СФ =====
    ОткрытьТег("СвСчФакт", "НомерСчФ=" + """" + номер_сф_в + """" +
                          " ДатаСчФ=" + """" + СТР(дата_сф_в) + """" +
                          " КодОКВ=" + """" + ВалютаОКВ + """")

      //===== Сведения об исправленном СФ (не обяз) =====
      //Закомментарил - нет данных для вывода
      //ЗаписатьСтроку("ИспрСчФ НомИспрСчФ=" + """" + "" + """" +     //Необяз. элем.
      //                      " ДатаИспрСчФ=" + """" + "" + """", "")
      //===== Конец Сведения об исправленном СФ =====


      //===== Сведения о продавце =====
      //21.02.2019, Сергей Н. / Добавлена версия формата
      СведенияОбУчастникеЭДОВыгрузкаУПД("СвПрод", мы.код, функция_упд, версия_формата, адрес_рф_пост)


      //===== Сведения о грузоотправителе =====
      //Если грузоотправитель не задан или = "---", то данный тег не выгружаем.
      //Находим грузоотправителя по его коду
      грузот ЭТО с_клиенты
      ЕСЛИ грузот.НАЙТИ(код = ГрузоотправительКод) И Грузоотправитель <> "---" ТО
        ОткрытьТег("ГрузОт", "")
          ЕСЛИ Грузоотправитель <> "он же" ТО //Если грузоотправитель <> "он же"
            //21.02.2019, Сергей Н. / Добавлена версия формата
            СведенияОбУчастникеЭДОВыгрузкаУПД("ГрузОтпр", грузот.код, функция_упд, версия_формата, адрес_рф_грузот)
          ИНАЧЕ //если Грузоотправитель = "он же"
            ОдинарныйТег = НЕТ
            ЗаписатьСтроку("ОнЖе", "он же")
            ОдинарныйТег = ДА
          КОНЕЦ_ЕСЛИ
        ЗакрытьТег//ГрузОт
      КОНЕЦ_ЕСЛИ

      //===== Сведения о грузополучателе =====
      //Находим грузополучателя по его коду
      грузполуч ЭТО с_клиенты
      ЕСЛИ грузполуч.НАЙТИ(код = ГрузополучательКод) И Грузополучатель <> "---" ТО
        //21.02.2019, Сергей Н. / Добавлена версия формата
        СведенияОбУчастникеЭДОВыгрузкаУПД("ГрузПолуч", грузполуч.код, функция_упд, версия_формата, адрес_рф_грузполуч)
      КОНЕЦ_ЕСЛИ

      //===== Сведения о платежке (не обяз) =====
      ЦИКЛ СЛОВА (слово = платежка, ",") //Проходим по всем оплатам (перечисляются через ",")
        РАЗБОР(слово, "* от *", номер_плат, дата_плат) //Работаем отдельно с каждой оплатой
        ЕСЛИ номер_плат <> "" ИЛИ дата_плат <> "" ТО //Если номер и дата есть, то выгружаем их
          ЗаписатьСтроку("СвПРД НомерПРД=" + """" + номер_плат + """" +    //? номер определяем как первое слово перед "от"
                              " ДатаПРД=" + """" + дата_плат + """", "")   //? а затем идет уже дата
        КОНЕЦ_ЕСЛИ
      КОНЕЦ_ЦИКЛА

      //===== Сведения о покупателе =====
      //21.02.2019, Сергей Н. / Добавлена версия формата
      СведенияОбУчастникеЭДОВыгрузкаУПД("СвПокуп", Клиент.код, функция_упд, версия_формата, адрес_рф_покуп)

      //===== Доп. сведения об участниках факта хозяйственной жизни, основаниях и обстоятельствах его проведения =====
      //Необязательный параметр.
      //Доб. 05.07.2017 / Сергей Н. / Выгружаем только ид госконтракта.
      //Доб. 07.07.2017 / Сергей Н. / Изм. условие на "-"
      ЕСЛИ УБР_ПРОБ(ГосКонтракт) <> "-" ТО
        ЗаписатьСтроку("ДопСвФХЖ1 ИдГосКон=" + """" + УБР_ПРОБ(ГосКонтракт) + """" +  //Идентификатор государственного контракта
                                  ?(функция_упд = "СЧФ", " ОбстФормСЧФ=""1""", ""),    //1 - счет-фактура, выставляемый при реализации товаров (работ, услуг), передаче имущественных прав
                                //" НаимОКВ=" + """" + ВалютаНазвание + """" +   //Валюта: Наименование
                                //" КурсВал=" + """" + ТекущийКурс + """",    //Курс валюты. Курс валюты документа?
                       "")
      КОНЕЦ_ЕСЛИ

      //Выгрузка документа об отгрузке / 16.07.2021, Сергей Н.
      ЕСЛИ версия_формата <> "5.02.995" ТО
        ХМЛЭкспортДокументОбОтгурзке
      КОНЕЦ_ЕСЛИ

      //===== Информационное поле факта хозяйственной жизни 1 =====
      //ИнфПолФХЖ1 - не выгружаем, нет информации. если нужно то смотреть формат выгрузки

    ЗакрытьТег//СвСчФакт

    //===============================================

    //===== Табличная часть =====
    ОткрытьТег("ТаблСчФакт", "")
      //сколько позиций в табличной части, столько и тегов в выгрузке
      ЦИКЛ ДЛЯ(и ИЗ Наименование) //Пробегаем по каждому наименованию в табл.части
        //Налоговая ставка принимает значение: 0% | 10% | 18% | 10 / 110 | 18 / 118 | без НДС
        ставка = Ставка!и
        ставка = ?(ставка = "Без НДС", "без НДС", ставка)

        //===== Сведения о товарах, услугах =====
        //21.02.2019, Сергей Н. / Доб. выгрузка для формата "5.01.997"
        ЕСЛИ версия_формата = "5.02.995" ТО //для формата "5.02.995"
          ОткрытьТег("СведТов", "НомСтр=" + """" + и + """" +
                               " НаимТов=" + """" + ХМЛ_ЗаменитьСпецсимволы(Наименование!и) + """" +
                               ?(КодОКЕИ!и ИЗ ["", "-"], "", " ОКЕИ_Тов=" + """" + КодОКЕИ!и + """") +    //необ
                               ?(Кол!и = 0, "", " КолТов=" + """" + СТР(Кол!и: 3) + """") +   //необ / обяз. только СЧФДОП, ДОП при налич. КодОКЕИ
                               " ЦенаТов=" + """" + СТР(ЦенаБезНДС!и: 2) + """" +             //необ
                               " СтТовБезНДС=" + """" + СТР(СтоимостьБезНДС!и: 2) + """" +    //необ / обяз. только СЧФ, СЧФДОП
                               " НалСт=" + """" + ставка + """" +
                               " СтТовУчНал=" + """" + СТР(СтоимостьСНДС!и: 2) + """"
                                )
        ИНАЧЕ  //для формата "5.01.997"
          ОткрытьТег("СведТов", "НомСтр=" + """" + и + """" +
                               " НаимТов=" + """" + ХМЛ_ЗаменитьСпецсимволы(Наименование!и) + """" +
                               ?(версия_формата = "5.02.995",
                                 //для версии формата "5.02.995"
                                 ?(КодОКЕИ!и ИЗ ["", "-"], "", " ОКЕИ_Тов=" + """" + КодОКЕИ!и + """"),
                                 //для версии формата "5.01.997"
                                 ?(КодОКЕИ!и ИЗ ["", "-"], ?(функция_упд ИЗ ["СЧФ", "СЧФДОП"], " ДефОКЕИ_Тов=""-""", ""), " ОКЕИ_Тов=" + """" + КодОКЕИ!и + """")
                                ) +
                               " КолТов=" + """" + СТР(Кол!и: 3) + """" +
                               " ЦенаТов=" + """" + СТР(ЦенаБезНДС!и: 2) + """" +             //необ
                               " СтТовБезНДС=" + """" + СТР(СтоимостьБезНДС!и: 2) + """" +
                               " НалСт=" + """" + ставка + """" +
                               " СтТовУчНал=" + """" + СТР(СтоимостьСНДС!и: 2) + """")
        КОНЕЦ_ЕСЛИ



        //===== Акциз =====
        о_тег = ОдинарныйТег
        ОткрытьТег("Акциз", "")
          ОдинарныйТег = НЕТ
          ЗаписатьСтроку("БезАкциз", "без акциза")
        ЗакрытьТег
        ОдинарныйТег = о_тег

        //===== Сумма налога =====
        о_тег = ОдинарныйТег
        ОткрытьТег("СумНал", "")
          ОдинарныйТег = НЕТ
          //Если ставка у товара Без НДС, то соответственно так и выгружаем,
          //Иначе выгружаем сумму НДС.
          ЕСЛИ Ставка!и = "Без НДС" ТО
            ЗаписатьСтроку("БезНДС", "без НДС")
          ИНАЧЕ
            ЗаписатьСтроку("СумНал", СТР(СуммаНДС!и: 2))
          КОНЕЦ_ЕСЛИ
        ЗакрытьТег
        ОдинарныйТег = о_тег

        //===== Сведения о ГТД =====
        //Если включено использование ГТД, и код ГТД и страна проихождения введены, то выгружаем след. два тега, иначе нет.
        ЕСЛИ ВКЛ_ГТД И страна_код_в!и <> "" ТО
          ОдинарныйТег = ДА
          ЗаписатьСтроку("СвТД", " КодПроисх=" +  """" + страна_код_в!и + """" +
                                 //В старом формате 5.02.995 выводиться только ГТД. В новом формате вывод ГТД записит от прослеживаемости / 07.06.2021, Сергей Н.
                                 " НомерТД =""" + ?(версия_формата = "5.02.995", НомерГТД!и, ?(ПрослеживаемыйТовар!и, "Прослеж", НомерГТД!и)) + """")  //необ
        КОНЕЦ_ЕСЛИ

        //===== Информационное поле факта хозяйственной жизни 1 =====
        //ИнфПолФХЖ1 - не выгружаем, нет информации. Если нужно то смотреть формат выгрузки

        //===== Доп. сведения о товарах (услугах)
        //Принимает значение:1 | 2 | 3 | 4 | 5, где: 1 - имущество; 2 - работа; 3 - услуга; 4 - имущественные права; 5 - иное
        признак_товара = ?(категория_товара!КодТовара!и ИЗ [товУслуга], "3", //работа и услуги у нас одно и тоже = 3
                         ?(категория_товара!КодТовара!и ИЗ [товПраво], "4",  //право = 3
                         "1"))                                             //все остальное, это товар = 1
        //21.02.2019, Сергей Н. / Доб. выгрузка для формата "5.01.997"
        ЕСЛИ версия_формата = "5.02.995" ТО  //для формата "5.02.995"
          ЗаписатьСтроку("ДопСведТов", " ПрТовРаб=" +  """" + признак_товара + """" +
                                       //" ДопПризн =" +  """" +  "" + """" +  //необ. (не выгружаем, нет информации)
                                       ?(вывод_кода_товара <> 3, " КодТов =" +  """" + ?(вывод_кода_товара = 1, КодТовара!и, ?(вывод_кода_товара = 2, Артикул!и, "")) + """", "") +  //код товара или артикул
                                       ?(КодОКЕИ!и <> "", " НаимЕдИзм =" +  """" +  Единица!и + """", "") +
                                       ?(страна_код_в!и <> "", " КрНаимСтрПр =" +  """" +  Страна!и + """", "")
                                       //" НадлОтп =" +  """" +  "" + """" +     //необ. (не выгружаем, нет информации)
                                       //" КорСчДебет =" +  """" +  "" + """" +  //необ. (не выгружаем, нет информации)
                                       //" КорСчКредит =" +  """" +  "" + """"   //необ. (не выгружаем, нет информации)
                                       )

        ИНАЧЕ  //для формата "5.01.997"
            ОткрытьТег("ДопСведТов", " ПрТовРаб=" +  """" + признак_товара + """" +
                                       //21.02.2019, Сергей Н. / для  "СЧФ", "СЧФДОП" если нет ЕИ, то ставиться "-"
                                       ?(КодОКЕИ!и <> "", " НаимЕдИзм=" +  """" +  Единица!и + """",
                                       ?(КодОКЕИ!и = "" И функция_упд ИЗ ["СЧФ", "СЧФДОП"], " НаимЕдИзм=" +  """-""", ""))  +
                                       ?(страна_код_в!и <> "", " КрНаимСтрПр=" +  """" +  Страна!и + """", "") +
                                       ?(Артикул!и <> "", " АртикулТов=" +  """" +  Артикул!и + """", "") +  //21.02.2019, Сергей Н. / Артикул
                                       ?(вывод_кода_товара <> 3, " КодТов=" +  """" + ?(вывод_кода_товара = 1, КодТовара!и, ?(вывод_кода_товара = 2, Артикул!и, "")) + """", "") +  //код товара или артикул
                                       //21.02.2019, Сергей Н. / Код вида товара (ТНВЭД). Обязательно только для экспорта
                                       ?(КодТНВЭД!и <> "", " КодВидТов=" +  """" + КодТНВЭД!и + """", "")
                                       //" НадлОтп =" +  """" +  "" + """" +     //необ. (не выгружаем, нет информации)
                                       //" КорСчДебет =" +  """" +  "" + """" +  //необ. (не выгружаем, нет информации)
                                       //" КорСчКредит =" +  """" +  "" + """"   //необ. (не выгружаем, нет информации)
                                       )
              ХМЛЭкспортУПДСведПрослеж(и)  //Выгрузка сведений о прослеживаемости / 07.06.2021, Сергей Н.
              ХМЛЭкспортУПДНомСредИдентТов(и) //Выгрузка номеров средств идент. товаров/ 15.02.2021, Сергей. Н
            ЗакрытьТег //ДопСведТов
        КОНЕЦ_ЕСЛИ
        //Запоминаем содержание товарной операции
        //Для товаров "Товары переданы", для улуг "Услуги оказаны", для прав "Права переданы"
        //Нужно для заполнения СвПродПер (заполняется ниже)
        содержание_операции = ?(категория_товара!КодТовара!и ИЗ [товУслуга], "Услуги оказаны",
                                                          ?(категория_товара!КодТовара!и ИЗ [товПраво], "Права переданы",
                                                          "Товары переданы"))
        содержание_операции_мас[содержание_операции] = содержание_операции

        ЗакрытьТег//СведТов
      КОНЕЦ_ЦИКЛА

      //===== Всего к оплате =====
      ОткрытьТег("ВсегоОпл", "СтТовБезНДСВсего=" + """" + СТР(ИтогоБезНДС: 2) + """" +
                            " СтТовУчНалВсего=" + """" + СТР(ИтогоСНДС: 2) + """")
        о_тег = ОдинарныйТег
        ОткрытьТег("СумНалВсего", "")
          ОдинарныйТег = НЕТ
          ЕСЛИ СУММАМ(СуммаНДС) > 0 ТО
            ЗаписатьСтроку("СумНал", СТР(СУММАМ(СуммаНДС): 2))
          ИНАЧЕ
            ЗаписатьСтроку("БезНДС", "без НДС")
          КОНЕЦ_ЕСЛИ
        ЗакрытьТег//СумНалВсего
          ОдинарныйТег = о_тег

        //21.02.2019, Сергей Н. / Количество (масса нетто/количество) - всего по документу
        ЕСЛИ вывод_массы_нетто <> 1 ТО
          ОдинарныйТег = НЕТ
          ЗаписатьСтроку(?(версия_формата = "5.02.995", "НеттоВс", "КолНеттоВс"), СТР(?(вывод_массы_нетто = 2, СУММАМ(Кол) / 1000 - РУБ(СУММАМ(Кол) / 1000), СУММАМ(Кол) - РУБ(СУММАМ(Кол))): 3))
          ОдинарныйТег = ДА
        КОНЕЦ_ЕСЛИ
      ЗакрытьТег//ВсегоОпл
    ЗакрытьТег//ТаблСчФакт
    //Конец Табличной части

    //===============================================

    //===== Содержание факта хозяйственной жизни 3 - сведения о факте отгрузки товаров (выполнения работ), передачи имущественных прав (о предъявлении оказанных услуг) =====
    ОткрытьТег("СвПродПер", "")
      //===== Сведения об отгрузки товаров (услуг)
      ОткрытьТег("СвПер", "СодОпер=" + """" + СУММАМ(содержание_операции_мас, "*", ", ") + """" +  //Содержание операции. Для товаров "Товары переданы", для улуг "Услуги оказаны", через ", "
                          //" ВидОпер=" + """" + "" + """" + //Необ.
                          ?(дата_накл = дата_сф, "", " ДатаПер=" + """" + СТР(дата_накл) + """")) //Необ. Обязателен, если ДатаПер отлична от ДатаСчФ


        //===== Документ основание отгрузки товаров (услуг) =====
        //В программе есть текстовое поле основание, там может быть все что угодно
        //ЗаписатьСтроку("ОснПер НаимОсн=" + """" + "Отсутствует" + """", "") //Есть еще атрибуты: НомОсн, ДатаОсн, ДопСвОсн, но они не обязательные.
        //Изм. 05.07.2017 / Сергей Н. / Выгрузка основания отгрузки
        //Изм. 27.07.2017 / Сергей Н. / Основание является обязательным. Основание формируется если указан договор
        //21.02.2019, Сергей Н. / Поправил вывод основания
        ЗаписатьСтроку("ОснПер" + ?(Договор = "", ?(версия_формата = "5.02.995", " НаимОсн=""Отсутствует""", " НаимОсн=""Без документа-основания"""), //Если нет документа основания (например, договора), то выводится надпись Отсутствует
                                                  " НаимОсн=""договор""" +    //Если есть документ-основание, то выводятся реквизиты договора
                                                  " НомОсн=" + """" + ДоговорНомер + """" +
                                                  " ДатаОсн=" + """" + ДоговорДата + """") +
                                  ?(Основание = "", "", " ДопСвОсн=" + """" + Основание + """"), "") //Отдельно выводится текст основания

        //===== Сведения о лице, передавшем товар (груз) =====
        ЕСЛИ УБР_ПРОБ(ВдОтпустил) <> "" ТО
          ОткрытьТег("СвЛицПер", "")
            //===== Работник организации продавца =====
            //Доб. вывод должности / 17.07.2019, Сергей Н.
            ОткрытьТег("РабОргПрод", "Должность=" + """" + ?(ВдОтпустилДолжность = "", "Отсутствует", ВдОтпустилДолжность) + """"
                                    //" ИныеСвед=" + """" + "" + """" +  //необ.
                                    /*" ОснПолн=" + """" + "Отсутствует" + """"**/) //необ. Значение по умолчанию "Должностные обязанности" или указываются иные основания полномочий
              //===== ФИО работника =====
              ЗаписатьСтроку("ФИО Фамилия=" + """" + СЛОВО(1, ВдОтпустил) + """" +
                                  " Имя=" + """" + СЛОВО(2, ВдОтпустил) + """" +
                                  ?(СЛОВО(3, ВдОтпустил) = "", "", " Отчество=" + """" + СЛОВО(3, ВдОтпустил) + """"), "") //необ
            ЗакрытьТег//РабОргПрод
          ЗакрытьТег//СвЛицПер
        КОНЕЦ_ЕСЛИ

        //===== Транспортировка и груз =====
        ОткрытьТег("ТранГруз", ""/*"СвТранГруз=" + """" +  + """"*/)  //СвТранГруз - необяз., нет информации
          ЗаписатьСтроку("ТранНакл НомТранНакл=" + """" + ном_накл + """" +
                                 " ДатаТранНакл=" + """" + СТР(дата_накл) + """", "")
          //тег Перевозчик - орагнизация перезвозчик товара/груза. Необязателmьный. Не выводим, нет информации
        ЗакрытьТег//ТранГруз

        //СвПерВещи - Сведения о передаче вещи, изготовленной по договору подряда
        //Тег необязателmьный. Не выводим, нет информации
      ЗакрытьТег//СвПер

      ОткрытьТег("ИнфПолФХЖ3", "")
      ЗакрытьТег//ИнфПолФХЖ3

    ЗакрытьТег//СвПродПер



    //===== Сведения о лице, подписывающем файл обмена счета-фактуры (информации продавца) в электронной форме =====
    ОткрытьТег("Подписант", "ОблПолн=" + """" + "5" + """"+  //5 - отвечает за все
                           " Статус=" + """" + "1" + """" +   //1 - работник организации продавца
                           " ОснПолн=" + """" + "Должностные обязанности" + """") //По умолчанию для статуса 1 = Должностные обязанности
                           //ОснПолнОрг - необяз.
      ЕСЛИ мы.тип = мыЮЛ ТО
        //===== Представитель юридического лица =====
        ОткрытьТег("ЮЛ", //"ГосРегИПВыдДов=" + """" + "" + """" +  //Реквизиты свидетельства о гос. регистрации ИП, выдавшего доверенность на подписание СФ. Необяз. Не выгружаем, нет информации.
                         "ИННЮЛ=" + """" + ИннПост + """" +
                         " НаимОрг=" + """" + ХМЛ_ЗаменитьСпецсимволы(Поставщик) + """" +
                         ?(ДолжностьРуководителя = "", "", " Должн=" + """" + ХМЛ_ЗаменитьСпецсимволы(ДолжностьРуководителя) + """"))  //необ
                         //ИныеСвед - иные сведения. Необ.
          //===== ФИО =====
          ЗаписатьСтроку("ФИО Фамилия=" + """" + СЛОВО(1, Руководитель + РуководительИП) + """" +
                            " Имя=" + """" + СЛОВО(2, Руководитель + РуководительИП) + """" +
                            ?(СЛОВО(3, Руководитель + РуководительИП) = "", "", " Отчество=" + """" + СЛОВО(3, Руководитель + РуководительИП) + """"), "")  //необ
        ЗакрытьТег//ЮЛ
      ИНАЧЕ
        //===== ИП =====
        ОткрытьТег("ИП", ?(версия_формата = "5.02.995", "ИННФЛ=" + """" + ИннПост + """",  //21.02.2019, Сергей Н. / для формата "5.02.995"
                                                        ?(ИннПост <> "", "ИННФЛ=" + """" + ИннПост + """", "ДефИННФЛ=""-""") ) + //21.02.2019, Сергей Н. / для формата "5.01.997", ИНН теперь не обяз.
                         " СвГосРегИП=" + """" + ХМЛ_ЗаменитьСпецсимволы(РеквизитыИП) + """")

                        //ИныеСвед - иные сведения. Необяз.
          //===== ФИО =====
          ЗаписатьСтроку("ФИО Фамилия=" + """" + СЛОВО(1, Руководитель + РуководительИП) + """" +
                            " Имя=" + """" + СЛОВО(2, Руководитель + РуководительИП) + """" +
                            ?(СЛОВО(3, Руководитель + РуководительИП) = "", "", " Отчество=" + """" + СЛОВО(3, Руководитель + РуководительИП) + """"), "")  //необ
        ЗакрытьТег//ИП
      КОНЕЦ_ЕСЛИ
    ЗакрытьТег//Подписант
    //Конец Подписант

  //КонецЭкспорта

  ЗакрытьТег
  ЗакрытьТег

  ЗакрытьФайлХМЛ

  //Изм. 27.12.2018 / Сергей Н. / В окне со списком ошибок будет только одна кнопка Закрыть
  //Изменил теcкт заголовка / 21.02.2019, Сергей Н.
  ?(ВСЕГОМ(ЭДОЭкспортОшибки) = 0, "", ВЫБОР(ЭДОЭкспортОшибки, "Ошибки выгрузки документа (с функцией " + функция_упд + ")", "Описание ошибок", 1, НЕТ, НЕТ, НЕТ, ДА))
КОНЕЦ_ФУНКЦИИ


ФУНКЦИЯ СведенияОбУчастникеЭДОВыгрузкаУПД(СТРОКА: имя_тега; СТРОКА: контр_код, функция_упд, версия_формата; ЛОГИКА: адрес_рф)
  {Сведения об участнике электронного документаоборота.
  Необходим для выгрузки УПД.
  Формируется один из тегов: ГрузОт, ГрузПолуч, СвПрод, СвПокуп

  имя_тега - имя тега. Возможные варианты: ГрузОтпр    - грузоотправитель
                                           ГрузПолуч - грузополучатель
                                           СвПрод    - продавец
                                           СвПокуп   - покуптель
  функция_упд - Функция приказа. Может принимать следубщие значения:
                  СЧФ    - это СФ;
                  СЧФДОП - это СФ + накл (акт). Аналог УПД со статусом 1;
                  ДОП    - это накл (акт). Аналог УПД со статусом 2;
  версия_формата - Версия формата файла выгрузки: 5.02.995, 5.01.997
  контр_код - код контрагента (грузоотпр/получателя, поставщика или плателька, в зависимости от тега)
  адрес_рф - используется адрес местанахождения контрагента рф или нет (пока всегда = ДА)
  }

  //определяем контрагнета
  контр ЭТО с_клиенты
  контр.НАЙТИ(код = контр_код)

  //окпо контрагента
  контр_окпо = ?(имя_тега = "ГрузОтпр", ОкпоГрузоотправитель,
               ?(имя_тега = "ГрузПолуч", ОкпоГрузополучатель,
               ?(имя_тега = "СвПрод", ОкпоПост,
               ?(имя_тега = "СвПокуп", ОкпоПокуп, ""))))

  // КПП
  контр_кпп = ?(имя_тега = "ГрузОтпр", КппГрузоотправитель,
              ?(имя_тега = "ГрузПолуч", КппГрузополучатель,
              ?(имя_тега = "СвПрод", КппПост,
              ?(имя_тега = "СвПокуп", КппПокуп, ""))))

  // Адрес
  контр_адрес = ХМЛ_ЗаменитьСпецсимволы(?(имя_тега = "ГрузОтпр", АдресСкрытГрузоотправитель,
                ?(имя_тега = "ГрузПолуч", АдресСкрытГрузополучатель,
                ?(имя_тега = "СвПрод", АдресСкрытПост,
                ?(имя_тега = "СвПокуп", АдресСкрытПокуп, "")))))

  //структурное подразделение. только для нашей фирмы
  //Изм. 27.12.2018 / Сергей Н. / Экранирование кавычек
  структ_подр = ?(КлиентНашаФирма(контр.код), ХМЛ_ЗаменитьСпецсимволы(Подразделение) , "")

  //Тег ГрузОтпр/ГрузПост/СвПрод/СвПокуп

  ОткрытьТег(имя_тега, ?(контр_окпо = "", "", "ОКПО=" + """" + контр_окпо + """") + //ОКПО, необ.
                       //Изм. 23.07.2018 / Сергей Н. / Убрал опечатку (лишние кавычки)
                       ?(структ_подр = "", "", " СтруктПодр=" + """" + структ_подр + """")  //Структурное подразделение, необ.
                       //+ """" + " ИнфДляУчаст=" + """" + "" + """"    //Информация для участника документооборота, необ.
             )

    //ИдСв - Сведения о контрагенте
    ОткрытьТег("ИдСв", "")
      //СвЮЛУч - Юр. лицо определяем по длине ИНН (10 цифр)
      ЕСЛИ ДЛИНА(контр.инн) = 10 ТО
        ЗаписатьСтроку("СвЮЛУч НаимОрг=" + """" + ХМЛ_ЗаменитьСпецсимволы(контр.название) + """" +
                               ?(версия_формата = "5.02.995", " ИННЮЛ=" + """" + контр.инн + """",  //21.02.2019, Сергей Н. / Для формата 5.02.995
                                                              ?(контр.инн <> "", " ИННЮЛ=" + """" + контр.инн + """", " ДефИННЮЛ=""-""")) +  //21.02.2019, Сергей Н. / Для формата 5.01.997
                               ?(контр_кпп = "", "", " КПП=" + """" + контр_кпп + """"), "")  //необ.

      ИНАЧЕ
        //СвИП - Сведения об ИП
        ОткрытьТег("СвИП", ?(версия_формата = "5.02.995", "ИННФЛ=" + """" + контр.инн + """",  //21.02.2019, Сергей Н. / Для формата 5.02.995
                                                          ?(контр.инн <> "", "ИННФЛ=" + """" + контр.инн + """", "ДефИННФЛ=""-""")) + //21.02.2019, Сергей Н. / Для формата 5.01.997
                           //Реквизиты свидет. о госрегитсрации ИП. Обязателен если СФ подписывает продавец
                           //если есть данная информация, то пусть выводится. Такая информация есть только в наших фирмах (ИП).
                           ?(контр.реквизиты_ип <> "", " СвГосРегИП=" + """" + контр.реквизиты_ип + """", "")
                           //Иные сведения, идентифицирующие физическое лицо, необ.
                           /*" ИныеСвед=" + """" + "" + """"*/)
          //21.02.2019, Сергей Н. / Проверка на заполнения поля Руководитель
          ЕСЛИ контр.руководитель = "" ТО
              ЭДООшибкаЭкспорта("Не заполнено поле ""Руководитель"" у контрагента """ + контр.название + " (" + контр.код + ").")
          КОНЕЦ_ЕСЛИ
          ЗаписатьСтроку("ФИО Фамилия=" + """" + СЛОВО(1, контр.руководитель) + """" +
                              " Имя=" + """" + СЛОВО(2, контр.руководитель) + """" +
                              ?(СЛОВО(3, контр.руководитель) = "", "", " Отчество=" + """" + СЛОВО(3, контр.руководитель) + """"), "")//необ

        ЗакрытьТег//СвИП
      КОНЕЦ_ЕСЛИ

      //СвЮлНеУч - Сведения об иностранном лице, не состоящем на учете в налоговых органах
      //Пока не выводим
      /*ОткрытьТег("СвЮлНеУч", "НаимОрг=" + """" + контр.название + """" +
                             //Иные сведения, идентифицирующие юридическое лицо
                             //Например страна, а если нет, то код страны
                             " ИныеСвед="+"""" + "" + """")*/
    ЗакрытьТег//ИдСв

    ЕСЛИ контр_адрес = "" И функция_упд ИЗ ["СЧФ", "СЧФДОП"] ТО
      ЭДООшибкаЭкспорта("Адрес " +
                ?(имя_тега = "ГрузОтпр", "грузоотправителя",
                ?(имя_тега = "ГрузПолуч", "грузополучателя",
                ?(имя_тега = "СвПрод", "продавца",
                "покупателя"))) +
                " " + контр.название + " (" + контр.код + ")" + " не задан, либо не соответствует ФИАС")
    КОНЕЦ_ЕСЛИ

    //Выгрузка адреса обязательна только для функции упд = "СЧФ", "СЧФДОП". В остальных же случаях, если адреса нет, то он не выводится.
    ЕСЛИ контр_адрес <> "" ИЛИ функция_упд ИЗ ["СЧФ", "СЧФДОП"] ТО
      ОткрытьТег("Адрес", "")
        ЕСЛИ адрес_рф ТО
          //АдрРФ
          ЗаписатьСтроку("АдрРФ" + ?(УБР_ПРОБ(СЛОВО!(10, контр_адрес, ",")) = "", "", " Индекс=" + """" + УБР_ПРОБ(СЛОВО!(10, контр_адрес, ",")) + """") +
                                   " КодРегион=" + """" + СЛОВО!(1, контр_адрес, ",") + """" +
                                   ?(УБР_ПРОБ(СЛОВО!(3, контр_адрес, ",")) = "", "", " Район=" + """" + УБР_ПРОБ(СЛОВО!(3, контр_адрес, ",")) + """") +
                                   ?(УБР_ПРОБ(СЛОВО!(4, контр_адрес, ",")) = "", "", " Город=" + """" + УБР_ПРОБ(СЛОВО!(4, контр_адрес, ",")) + """") +
                                   ?(УБР_ПРОБ(СЛОВО!(5, контр_адрес, ",")) = "", "", " НаселПункт=" + """" + УБР_ПРОБ(СЛОВО!(5, контр_адрес, ",")) + """") +
                                   ?(УБР_ПРОБ(СЛОВО!(6, контр_адрес, ",")) = "", "", " Улица=" + """" + УБР_ПРОБ(СЛОВО!(6, контр_адрес, ",")) + """") +
                                   ?(УБР_ПРОБ(СЛОВО!(7, контр_адрес, ",")) = "", "", " Дом=" + """" + УБР_ПРОБ(СЛОВО!(7, контр_адрес, ",")) + """") +
                                   ?(УБР_ПРОБ(СЛОВО!(8, контр_адрес, ",")) = "", "", " Корпус=" + """" + "корп." + УБР_ПРОБ(СЛОВО!(8, контр_адрес, ",")) + """") +
                                   ?(УБР_ПРОБ(СЛОВО!(9, контр_адрес, ",")) = "", "", " Кварт=" + """" + УБР_ПРОБ(СЛОВО!(9, контр_адрес, ",")) + """"), "")

        ИНАЧЕ
          //Пока не используем (необ.)
          ЗаписатьСтроку("АдрИнф КодСтр=" + """" + "" + """" +
                                  " АдрТекст=" + """" + "" + """", "")
        КОНЕЦ_ЕСЛИ

        /*ОдинарныйТег = НЕТ
        //Уникальный номер адреса объекта адресации в государственном адресном реестре. Пока не используем
        ЗаписатьСтроку("КодГАР", "")
        ОдинарныйТег = ДА */
      ЗакрытьТег//Адрес
    КОНЕЦ_ЕСЛИ

    //Контакт - контакт контрагента (грузоотправителя, получателя, поставщика или покупателя)
    //Телефон контакта
    контр_тел_факс = ?(имя_тега = "Груз*", контр.тел_факс,    //тел. грузоотпрв/получ
                     ?(имя_тега = "СвПрод", ТелПост,          //тел. поставщика
                     ?(имя_тега = "СвПокуп", ТелПокуп, "")))  //тел. покупателя
    //Емаил контакта
    контр_емаил = ?(имя_тега = "Груз*", контр.электронный_адрес,        //емаил грузоотпрв/получ
                  ?(имя_тега = "СвПрод", ЭлектронныйАдресПост,          //емаил поставщика
                  ?(имя_тега = "СвПокуп", ЭлектронныйАдресПокуп, "")))  //емаил покупателя
    //Выгружаем тег, если есть телефон или емаил
    ЕСЛИ УБР_ПРОБ(контр_тел_факс) <> "" ИЛИ контр_емаил <> "" ТО
      ЗаписатьСтроку("Контакт" + ?(контр_тел_факс <> "", " Тлф=" + """" + ХМЛ_ЗаменитьСпецсимволы(контр_тел_факс) + """", "") +   //необ.
                                 ?(контр_емаил <> "", " ЭлПочта=" + """" + ХМЛ_ЗаменитьСпецсимволы(контр_емаил) + """", ""), "")  //необ.
    КОНЕЦ_ЕСЛИ

    //БанкРекв - банковские реквизиты
    //если опция выводит банк. реквизиты = ДА, то выгружаем данный тег
     контр_банк = ?(имя_тега = "Груз*", контр.банк,         //банк грузоотпрв/получ
                  ?(имя_тега = "СвПрод", БанкПост,          //банк продавца
                  ?(имя_тега = "СвПокуп", БанкПокуп, "")))  //банк покупателя

     контр_бик = ?(имя_тега = "Груз*", контр.бик,         //бик грузоотпрв/получ
                 ?(имя_тега = "СвПрод", БИКПост,          //бик продавца
                 ?(имя_тега = "СвПокуп", БИКПокуп, "")))  //бик покупателя

     контр_рс = ?(имя_тега = "Груз*", контр.рс,          //рс грузоотпрв/получ
                ?(имя_тега = "СвПрод", РСПост,           //рс продавца
                ?(имя_тега = "СвПокуп", РСПокуп,  "")))  //рс покупателя

     контр_кс = ?(имя_тега = "Груз*", контр.кс,          //рс грузоотпрв/получ
                ?(имя_тега = "СвПрод", КСПост,           //рс продавца
                ?(имя_тега = "СвПокуп", КСПокуп,  "")))  //рс покупателя

     //если расч.счета, кор. счета, наименования банка и его бик нет, то тег БанкРекв не выгружаем (необ.)
     ЕСЛИ контр_рс <> ""  И контр_банк <> "" И контр_бик <> "" И контр_кс <> "" ТО
       ОткрытьТег("БанкРекв", ?(контр_рс = "", "", "НомерСчета=" + """" + контр_рс +""""))
         //если наименования банка и его бик нет, то тег СвБанк не выгружаем (необ.)
         ЕСЛИ контр_банк <> "" И контр_бик <> "" И контр_кс <> "" ТО
           ЗаписатьСтроку("СвБанк" + ?(контр_банк = "", "", " НаимБанк=" + """" + ХМЛ_ЗаменитьСпецсимволы(контр_банк) + """") + //необ.
                                     ?(контр_бик = "", "", " БИК=" + """" + контр_бик + """") + //необ.
                                     ?(контр_кс = "", "", " КорСчет=" + """" + контр_кс + """"), "")
         КОНЕЦ_ЕСЛИ
       ЗакрытьТег //БанкРекв
     КОНЕЦ_ЕСЛИ
  ЗакрытьТег //ГрузОтпр/ГрузПолуч/СаПрод/СвПокуп
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЗагрузкаДанныхДокНомерДата(ЧИСЛО: вид_документа; ПЕРЕМ СТРОКА: опер_номер_накл; ПЕРЕМ ДАТА: опер_дата_накл; ПЕРЕМ СТРОКА: опер_номер_сф; ПЕРЕМ ДАТА: опер_дата_сф) //(ЧИСЛО: вид_документа; ПЕРЕМ СТРОКА: опер_номер_накл, опер_номер_сф; ПЕРЕМ ДАТА: опер_дата_накл, опер_дата_сф)
  {Сергей Н. / 16.04.2018
   Загрузка номера и даты накладной, номера и даты СФ из файла выгрузки

   вид_документа - какой документ загружается:
                   1 - СФ;
                   2 - ТОРГ-12;
                   3 - Акт;
                   4 - УПД.
   опер_номер_накл - номер накладной (акта)
   опер_дата_накл - дата накладной (акта)
   опер_номер_сф - номер СФ
   опер_дата_сф - дата СФ
   }

  //Номер и дата накладной
  //Загрузка УПД
  ЕСЛИ вид_документа = 4 ТО
    //Дата накладной должна быть всегда / 28.06.2019, Сергей Н.
    опер_дата_накл = ЗНАЧ(ДокДата, ДАТА)
    //если УПД с функцией СЧФДОП или ДОП, то в файле выгрузки номер - это либо номер сф, либо номер накладной (в этом случае считаем номер накл = номер сф).
    //если УПД с функцией СЧФ, то это СФ, без номера накладной
    опер_номер_накл = ?(УПДФункция ИЗ ["СЧФДОП", "ДОП"], ДокНомер, "")
  ИНАЧЕ //Загрузка других документов
    опер_номер_накл = ?(вид_документа = 1, ДокНомер,  //Номер СФ
                      ?(вид_документа = 2, ТовНакНом, //Номер накладной
                                           АктНомер)) //Номер акта
    опер_дата_накл = ЗНАЧ(?(вид_документа = 1, ДокДата,  //Дата СФ
                          ?(вид_документа = 2, ТовНакДата,  //Дата накл
                                               АктДата)), ДАТА)  //Дата акта
  КОНЕЦ_ЕСЛИ

  //Номер и дата Сф
  //Загрузка УПД
  ЕСЛИ вид_документа = 4 ТО
    //если УПД с функцией СЧФ или СЧФДОП, то есть толкьо номер и дата сф
    ЕСЛИ УПДФункция ИЗ ["СЧФ", "СЧФДОП"] ТО
      опер_номер_сф = ДокНомер
      опер_дата_сф = ЗНАЧ(ДокДата, ДАТА)
    ИНАЧЕ //если УПД с функцией ДОП, то номера и даты СФ нет
      опер_номер_сф = ""
      опер_дата_сф = ПУСТО
    КОНЕЦ_ЕСЛИ
  ИНАЧЕ //Загрузка других документов
    опер_номер_сф = ?(вид_документа = 1, ДокНомер, "")
    опер_дата_сф = ?(вид_документа = 1, ЗНАЧ(ДокДата, ДАТА), ПУСТО)
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ


ФУНКЦИЯ СТРОКА: ВыгрузкаДОУ(СТРОКА: дир_файла)
  {
   Выгрузка документа о передаче результатов работ (документа об оказании услуг) в электронной форме.

   Выгрузка в формате 5.02, часть 990. Приказ от 30 ноября 2015 г. N ММВ-7-10/552@
   http://www.consultant.ru/cons/cgi/online.cgi?req=doc&base=LAW&n=316356&fld=134&dst=1000000001,0&rnd=0.6406727076604353#006762135610006492

   дир_файла - Директория сохранения файла выгрузки;
   версия_формата - Версия формата файла выгрузки, по состоянию на момент разработки принимает значения
     -- 5.02.990;

   Автор: Слепов П. А.
   23.10.2019
  }

  ИСПОЛЬЗОВАТЬ("c_blank_output", "c_common", "B_eksport", "xml")
  РЕЗУЛЬТАТ = ""
  // Обнулить все общие массивы
  ОБНУЛИТЬ(Наименование, НомерПП, Артикул, КодТовара, БазЕд, КолУпаковок, КодОКЕИ, ВидУпаковки, КолВУпаковке, КолУпаковок,
    Вес, ЦенаБезНДС, СтоимостьСНДС, Ставка, Кол, СтоимостьБезНДС, СуммаНДС, НомерГТД, Страна)
  ВалютаОКВ = "" ВалютаНазвание = ""

  опц ЭТО тс_операции
  тмц ЭТО б_тмц

  версия_формата = "5.02.990"
  адрес_рф_пост = ДА // Пока всегда "ДА", обработка зарубежных организаций пока не предусмотрена
  // Получить код ОКЕИ единиц измерения по их названию
  ЦИКЛ ПО ЖУРНАЛУ с_единицы еи
    океи[еи.название] = еи.код_океи
  КОНЕЦ_ЦИКЛА

  выбор = ИЗ_ЖУРНАЛА(опц, тмц)
  ЕСЛИ выбор = 0 ТО
    СООБЩЕНИЕ("Выберите операцию")
    ВЫХОД
  // Торговый склад
  ИНАЧЕ_ЕСЛИ выбор = 1 ТО
    опц.ВыводКолонокИзТовОпераций(1, 1, ДА)
    опц.ДоговорИОснованиеИзТовОпераций // Для получения номера государственного контракта
    //
    дата_док = опц.дата
    номер_док = опц.ном_накл
    //время_ = опц.время
  // Бухгалтерия
  ИНАЧЕ
    тмц.ВыводКолонокИзТМЦ(1)
    тмц.ДоговорИОснованиеИзТМЦ // Для получения номера государственного контракта
    //
    дата_док = тмц.дата
    номер_док = тмц.ном_накл
    //время_ = 12:00:00 // Условно, т.к. времени в ДЦУ нет
  КОНЕЦ_ЕСЛИ

  мы ЭТО с_клиенты
  мы.СчитатьРеквизиты

  // Предварительные проверки на возможные ошибки
  ЕСЛИ УчЭДОИдОтпр = "" ТО
    СООБЩЕНИЕ("<ОШИБКА!> Не указан код продавца/покупателя, присваеваемый оператором ЭДО, у нашей фирмы <" + мы.название + "> (код " + мы.код + "). Выход.")
    СТОП_ВСЕ
  КОНЕЦ_ЕСЛИ
  ЕСЛИ УчЭДОИдПол = "" ТО
    СООБЩЕНИЕ("<ОШИБКА!> Не указан код продавца/покупателя, присваеваемый оператором ЭДО, у контрагента <" + Клиент.название + "> (код " + Клиент.код + "). Выход.")
    СТОП_ВСЕ
  КОНЕЦ_ЕСЛИ

  // -------------- Выгрузка в xml --------------

  НаимФОтч = "DP_REZRUISP"

  РЕЗУЛЬТАТ = дир_файла + "\" + ЭДОИмяФайлаХМЛ(НаимФОтч, дата_док)
  СоздатьФайлХМЛ(РЕЗУЛЬТАТ, WIN)

 //доб. Оксана, 11.2020 для выгрузки в эдо_исходящие
  ЭДОДокументыПуть[ЗАМ(РЕЗУЛЬТАТ, дир_файла + "\", "")] = РЕЗУЛЬТАТ    //Оксана
  ЭДОДокументыОснование[ЗАМ(РЕЗУЛЬТАТ, дир_файла + "\", "")] = "Акт о передаче результатов работ (Акт об оказании услуг)"
  ЭДОДокументыДанные[ЗАМ(РЕЗУЛЬТАТ, дир_файла + "\", "")] = номер_док + РР + СТР(дата_док)

  ФайлХМЛ.ЗАПИСАТЬ("<?xml version=""1.0"" encoding=""windows-1251""?>")
  ОдинарныйТег = ДА  //Сначала должно быть ДА. Поправил здесь и ниже использование ОдинарныйТег / 21.04.2021, Сергей Н.
  ОткрытьТег("Файл", "ИдФайл=" + """" + СЛОВО(1, ИМЯ_ФАЙЛА(РЕЗУЛЬТАТ), ".") + """" +
                    " ВерсПрог=""Инфо-Предприятие(версия " + ВЕРСИЯ_НАСТРОЙКИ + ")""" +
                    " ВерсФорм=" + """" + "5.02" + """"
                    + "")

    ОткрытьТег("СвУчДокОбор",
      "ИдОтпр=" + """" + УчЭДОИдОтпр + """" // Код оператора ЭДО + наш код ЭДО
      + " ИдПол=" + """" + УчЭДОИдПол + """"
      + "")
      ХМЛЭкспортОператор
    ЗакрытьТег // СвУчДокОбор

    КодКнд = "1175012" // - зависит от версии документа, при последующих доработках исправлять соответственно

    ОткрытьТег("Документ",
      "КНД=" + """" + КодКнд + """"
      + " ДатаИнфИсп=" + """" + СТР(ДАТА_ТЕК_СИС) + """" //СТР(дата_док_)
      + " ВремИнфИсп=" + """" + ЗАМ(СТР(ВРЕМЯ_ТЕК), ":", ".") + """" //СТР(время_)
      + " НаимЭконСубСост=" + """" + ХМЛ_ЗаменитьСпецсимволы(мы.название) + """"
      + "")
      ОткрытьТег("СвДокПРУ", "")
        ЗаписатьСтроку("НаимДок",
          "ПоФактХЖ=" + """" + "Документ о передаче результатов работ (Документ об оказании услуг)" + """"
          + " НаимДокОпр=" + """" + "Акт о передаче результатов работ (Акт об оказании услуг)" + """"
          + "")

        ЗаписатьСтроку("ИдентДок",
          ?(номер_док<>"", "НомДокПРУ=" + """" + номер_док + """", "")
          + " ДатаДокПРУ=" + """" + СТР(дата_док) + """"
          + "")

        ЗаписатьСтроку("ДенИзм"
          + " КодОКВ=" + """" + ВалютаОКВ + """"
          + " НаимОКВ=" + """" + ВалютаНазвание + """"
          + ?(ТекущийКурс<>0, " КурсВал=" + """" + СТР(ТекущийКурс){СТР(опц.курс_расч)} + """", "")
          + "", "")

        ОткрытьТег("СодФХЖ1", "")
          СведенияОбУчастникеЭДОВыгрузкаДОУ("Исполнитель", мы.код, версия_формата, адрес_рф_пост)
          СведенияОбУчастникеЭДОВыгрузкаДОУ("Заказчик", Клиент.код, версия_формата, адрес_рф_пост)

          //Выгрузка основания / Сергей Н., 23.11.2021
          ХМЛЭкспортДОУОснование

          ЕСЛИ ГосКонтракт <> "" ТО
            ОдинарныйТег = НЕТ
            ЗаписатьСтроку("ИдГосКон", ГосКонтракт)
            ОдинарныйТег = ДА
          КОНЕЦ_ЕСЛИ

          ОткрытьТег("ОписРабот",
            ?(дата_док <> НЕТ_ДАТЫ, "НачРабот=" + """" + СТР(дата_док) + """", "") // Принято как дата документа
            + ?(дата_док <> НЕТ_ДАТЫ, " КонРабот=" + """" + СТР(дата_док) + """", "") // Принято как дата документа
            + " СтБезНДСИт=" + """" + СТР(СУММАМ(СтоимостьБезНДС)) + """"
            + " СумНДСИт=" + """" + СТР(СУММАМ(СуммаНДС)) + """"
            + " СтУчНДСИт=" + """" + СТР(СУММАМ(СтоимостьСНДС)) + """"
            + "")

            // Табл. 5.12, стр. 6. Сведения о выполненной работе (об оказанной услуге) (Работа)
            ЕСЛИ ВСЕГОМ(Наименование) > 0 ТО
              ЦИКЛ ДЛЯ (ии ИЗ Наименование)
                ОткрытьТег("Работа",
                  "Номер=" + """" + НомерПП[ии] + """"
                  + " НаимРабот=" + """" + ХМЛ_ЗаменитьСпецсимволы(Наименование[ии]) + """"
                  + ?(БазЕд[ии]<>"", " НаимЕдИзм=" + """" + БазЕд[ии] + """", "")
                  + ?(океи[БазЕд[ии]]<>"", " ОКЕИ=" + """" + океи[БазЕд[ии]] + """", "")
                  + ?(ЦенаБезНДС[ии]<>0, " Цена=" + """" + СТР(ЦенаБезНДС[ии]) + """", "")
                 + ?(Наименование[ии]<>"",
                    " Количество=" + """" + СТР(Кол[ии]) + """",
                    ?(Кол[ии]>0, " Количество=" + """" + СТР(Кол[ии]) + """", ""))
                  + ?(СтоимостьБезНДС[ии]>0, " СтоимБезНДС=" + """" + СТР(СтоимостьБезНДС[ии]) + """", "")
                  // При отсутствии НДС название ставки указывать со строчной буквы (иначе несоответстви xsd-схеме)
                  + ?(Ставка[ии]<>"", " НалСт=" + """" + ?(СТРОЧ(Ставка[ии])="без ндс", "без НДС", Ставка[ии]) + """", "")
                  + ?(СуммаНДС[ии]<>0, " СумНДС=" + """" + СТР(СуммаНДС[ии]) + """", "")
                  + ?(Наименование[ии]<>"",
                    " СтоимУчНДС=" + """" + СТР(СтоимостьСНДС[ии]) + """",
                    ?(СтоимостьСНДС[ии]>0, " СтоимУчНДС=" + """" + СТР(СтоимостьСНДС[ии]) + """", ""))
                  + "")
                ЗакрытьТег // Работа
              КОНЕЦ_ЦИКЛА
            КОНЕЦ_ЕСЛИ
          ЗакрытьТег // ОписРабот
        ЗакрытьТег // СодФХЖ1
      ЗакрытьТег // СвДокПРУ

      ОткрытьТег("СодФХЖ2",
        "СодОпер=" + """" + "Результаты работ переданы (услуги оказаны)" + """"
        + "")
       ЗакрытьТег // СодФХЖ2

      ОткрытьТег("Подписант",
        // Значения по классификатору:
        //   1 - лицо, совершившее сделку, операцию;
        //   2 - лицо, совершившее сделку, операцию и ответственное за ее оформление;
        //   3 - лицо, ответственное за оформление свершившегося события;
        "ОблПолн=" + """" + "2" + """" // Максимально широкие полномочия
        // Значения по классификатору:
        //   1 - Работник организации - исполнителя работ (услуг);
        //   2 - Работник организации - составителя информации исполнителя;
        //   3 - Работник иной уполномоченной организации;
        //   4 - Уполномоченное физическое лицо (в том числе индивидуальный предприниматель)
        + " Статус=" + """" + "1" + """" // Обыкновенный случай
        // Для Статус=1 или Статус=2 или Статус=3 указываются "Должностные обязанности" по умолчанию или иные основания полномочий (доверия).
        // Для Статус=4 указываются основания полномочий (доверия)
        + " ОснПолнПодп=" + """" + "Должностные обязанности" + """"
        // Обязателен для Статус=3. Указываются основания полномочий (доверия)
        // УТОЧНИТЬ: разработка кода по факту востребования, пока не используется.
        + "")

        ЕСЛИ мы.тип = мыЮЛ ТО
          ОткрытьТег("ЮЛ", //"ГосРегИПВыдДов=" + """" + "" + """" +  //Реквизиты свидетельства о гос. регистрации ИП, выдавшего доверенность на подписание СФ. Необяз. Не выгружаем, нет информации.
            "ИННЮЛ=" + """" + ИннПост + """" +
            " НаимОрг=" + """" + ХМЛ_ЗаменитьСпецсимволы(Поставщик) + """" +
            ?(ДолжностьРуководителя = "", "", " Должн=" + """" + ДолжностьРуководителя + """"))  //необ
            ЗаписатьСтроку("ФИО"
              + " Фамилия=" + """" + СЛОВО(1, Руководитель + РуководительИП) + """"
              + " Имя=" + """" + СЛОВО(2, Руководитель + РуководительИП) + """"
              + ?(СЛОВО(3, Руководитель + РуководительИП) = "", "", " Отчество=" + """" + СЛОВО(3, Руководитель + РуководительИП) + """"), "")  // Необязательный параметр
          ЗакрытьТег//ЮЛ
        ИНАЧЕ
          ОткрытьТег("ИП",
            "ИННФЛ=" + """" + ИннПост + """"
            + " СвГосРегИП=" + """" + РеквизитыИП + """"
            + "")
            ЗаписатьСтроку("ФИО"
              + " Фамилия=" + """" + СЛОВО(1, Руководитель + РуководительИП) + """"
              + " Имя=" + """" + СЛОВО(2, Руководитель + РуководительИП) + """"
              + ?(СЛОВО(3, Руководитель + РуководительИП) = "", "", " Отчество=" + """" + СЛОВО(3, Руководитель + РуководительИП) + """"), "")
          ЗакрытьТег // ИП
        КОНЕЦ_ЕСЛИ

      ЗакрытьТег // Подписант
    ЗакрытьТег // Документ
  ЗакрытьТег // Файл

  ЗакрытьФайлХМЛ
  // При наличии ошибок показать их
  ?(ВСЕГОМ(ЭДОЭкспортОшибки) = 0, "", ВЫБОР(ЭДОЭкспортОшибки, "Ошибки выгрузки документа", "Описание ошибок", 1, НЕТ, НЕТ, НЕТ, ДА))
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ХМЛЭкспортДОУОснование
  ЗаписатьСтроку("Основание" +
                   ?(Договор = "", " НаимОсн=""-""",
                     " НаимОсн=""договор""" +
                     " НомОсн=" + """" + ДоговорНомер + """" +
                     " ДатаОсн=" + """" + ДоговорДата + """") +
                   ?(Основание = "", "", " ДопСвОсн=" + """" + Основание + """"), "")
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ СТРОКА: ВыгрузкаДПТ(СТРОКА: дир_файла)
  {
   Выгрузка документа о передаче товаров при торговых операциях в электронной форме.

   Приказ от 30.11.2015 № ММВ-7-10/551@
   https://www.nalog.ru/rn77/about_fts/docs/5867137/

   дир_файла - Директория сохранения файла выгрузки;
   версия_формата - Версия формата файла выгрузки, по состоянию на момент разработки принимает значения
     -- 5.02.990;

  }



  ИСПОЛЬЗОВАТЬ("c_blank_output", "c_common", "B_eksport", "xml")
  РЕЗУЛЬТАТ = ""
  // Обнулить все общие массивы
  ОБНУЛИТЬ(Наименование, НомерПП, Артикул, КодТовара, БазЕд, КолУпаковок, КодОКЕИ, ВидУпаковки, КолВУпаковке, КолУпаковок,
    Вес, ЦенаБезНДС, СтоимостьСНДС, Ставка, Кол, СтоимостьБезНДС, СуммаНДС, НомерГТД, Страна)
  ВалютаОКВ = "" ВалютаНазвание = ""

  опц ЭТО тс_операции
  тмц ЭТО б_тмц

  //версия_формата = "5.02"
  адрес_рф_пост = ДА // Пока всегда "ДА", обработка зарубежных организаций пока не предусмотрена
  адрес_рф_грузот = ДА
  адрес_рф_грузполуч = ДА
  адрес_рф_покуп = ДА

  ГрузПолОтпрТипАдреса = ПРОФИЛЬ["Адрес грузоотпр/получателя (дпт)", 2]
  ГрузОтпрОнЖе = 2
  НастройкиВывода!"грузо_инн_кпп" = ДА
  режим_вывода = ПРОФИЛЬ["Выводить в составе документа (дпт)", 2]
  пост_плат_банк = ПРОФИЛЬ["Выводить банковские реквизиты поставщика и плательщика (дпт)", 2] = 1
  груз_пол_отпр_банк = ПРОФИЛЬ["Выводить банковские реквизиты грузоотпр. и грузополуч. (дпт)", 2] = 1
  НастройкиВывода!"грузо_банк" = НЕТ
  НастройкиВывода!"грузо_инн_кпп" = НЕТ
  вывод_кода_товара = ПРОФИЛЬ["В качестве кода товара (дпт)", 1]

  /*Указываем, что нужно переопределить настройки в функции ВыводКолонок..., указав свои. / 21.04.2021, Сергей Н.
  //Например, указали свое значение типа количества ТипКолва, и чтобы ф-ия ВыводКолонок их не обнулила, указываем, что мы их переопределили.*/
  НастройкиВывода!"настройки_переопределить" = ДА

  ТипКолва = ПРОФИЛЬ["Количество (дпт)", 2]
  //если подписи не разрешено указывать в операциях, то используем подписи из настроек выгрузки
  ЕСЛИ НЕ ВКЛ_ПОДПИСИ ТО
    ИспользоватьПодписи = ПРОФИЛЬ["Подписи", ""]
  КОНЕЦ_ЕСЛИ

  выбор = ИЗ_ЖУРНАЛА(опц, тмц)
  ЕСЛИ выбор = 0 ТО
    СООБЩЕНИЕ("Выберите операцию")
    ВЫХОД
  // Торговый склад
  ИНАЧЕ_ЕСЛИ выбор = 1 ТО
    опц.ВыводКолонокИзТовОпераций(режим_вывода, 1, ДА)
    опц.ДоговорИОснованиеИзТовОпераций // Для получения номера государственного контракта
    дата_док = опц.дата
    номер_док = опц.ном_накл
  // Бухгалтерия
  ИНАЧЕ
    тмц.ВыводКолонокИзТМЦ(режим_вывода)
    тмц.ДоговорИОснованиеИзТМЦ // Для получения номера государственного контракта
    дата_док = тмц.дата
    номер_док = тмц.ном_накл
  КОНЕЦ_ЕСЛИ

  мы ЭТО с_клиенты
  мы.СчитатьРеквизиты

  // Предварительные проверки на возможные ошибки
  ЕСЛИ УчЭДОИдОтпр = "" ТО
    ЭДООшибкаЭкспорта("У продавца " + мы.название + " (" + мы.код + ")" + " не задан ""Идентификатор участника ЭДО""")
  КОНЕЦ_ЕСЛИ
  ЕСЛИ УчЭДОИдПол = "" ТО
    ЭДООшибкаЭкспорта("У покупателя " + Клиент.название + " (" + Клиент.код + ")" + " не задан ""Идентификатор участника ЭДО""")
  КОНЕЦ_ЕСЛИ

  // -------------- Выгрузка в xml --------------
  ОдинарныйТег = ДА
  НаимФОтч = "DP_TOVTORGPR"
  РЕЗУЛЬТАТ = дир_файла + "\" + ЭДОИмяФайлаХМЛ(НаимФОтч, дата_док)
  СоздатьФайлХМЛ(РЕЗУЛЬТАТ, WIN)

 //доб. Оксана, 11.2020 для выгрузки в эдо_исходящие
  ЭДОДокументыПуть[ЗАМ(РЕЗУЛЬТАТ, дир_файла + "\", "")] = РЕЗУЛЬТАТ    //Оксана
  ЭДОДокументыОснование[ЗАМ(РЕЗУЛЬТАТ, дир_файла + "\", "")] = "Товарная накладная"
  ЭДОДокументыДанные[ЗАМ(РЕЗУЛЬТАТ, дир_файла + "\", "")] = номер_док + РР + СТР(дата_док)


  ФайлХМЛ.ЗАПИСАТЬ("<?xml version=""1.0"" encoding=""windows-1251""?>")

  ОткрытьТег("Файл", "ИдФайл=" + """" + СЛОВО(1, ИМЯ_ФАЙЛА(РЕЗУЛЬТАТ), ".") + """" +
                     " ВерсПрог=""Инфо-Предприятие(версия " + ВЕРСИЯ_НАСТРОЙКИ + ")""" +
                     //форматы 5.01 и 5.02 взаимозаменяемые. xsd схема расчитана на 5.01.
                     //Разъяснения по смене версий форматов 5.01, 5.02: Письмо ФНС от 17.07.2019 № ЕД-4-15/13878@
                     " ВерсФорм=" + """" + "5.02" + """")

    ОткрытьТег("СвУчДокОбор", "ИдОтпр=" + """" + УчЭДОИдОтпр + """" +
                              " ИдПол=" + """" + УчЭДОИдПол + """")
      ХМЛЭкспортОператор
    ЗакрытьТег // СвУчДокОбор

    КодКнд = "1175010" // - зависит от версии документа, при последующих доработках исправлять соответственно

    ОткрытьТег("Документ", "КНД=" + """" + КодКнд + """" +
                           " ДатаИнфПр=" + """" + СТР(ДАТА_ТЕК_СИС) + """" +
                           " ВремИнфПр=" + """" + ЗАМ(СТР(ВРЕМЯ_ТЕК), ":", ".") + """" +
                           " НаимЭконСубСост=" + """" + ХМЛ_ЗаменитьСпецсимволы(мы.название) + """" +
                           "")
      //ОдинарныйТег = НЕТ
      ОткрытьТег("СвДокПТПрКроме", "")
        ОткрытьТег("СвДокПТПр", "")
          //ОдинарныйТег = ДА
          ЗаписатьСтроку("НаимДок", "ПоФактХЖ=""Документ о передаче товара при торговых операциях""" +
                                    " НаимДокОпр=""Товарная накладная""")

          //ОдинарныйТег = ДА
          ЗаписатьСтроку("ИдентДок", ?(номер_док <> "", "НомДокПТ=" + """" + номер_док + """", "") +
                                     " ДатаДокПТ=" + """" + СТР(дата_док) + """")

          ЗаписатьСтроку("ДенИзм" + " КодОКВ=" + """" + ВалютаОКВ + """" +
                                    " НаимОКВ=" + """" + ВалютаНазвание + """" +
                                    ?(ТекущийКурс<>0, " КурсВал=" + """" + СТР(ТекущийКурс) + """", ""), "")

          //ОдинарныйТег = НЕТ
          ОткрытьТег("СодФХЖ1", "")
            грузот ЭТО с_клиенты
            ЕСЛИ грузот.НАЙТИ(код = ГрузоотправительКод) И Грузоотправитель <> "---" ТО
              СведенияОбУчастникеЭДОВыгрузкаДПТ("ГрузОтпр", грузот.код, адрес_рф_грузот, груз_пол_отпр_банк)
            КОНЕЦ_ЕСЛИ
            грузполуч ЭТО с_клиенты
            ЕСЛИ грузполуч.НАЙТИ(код = ГрузополучательКод) И Грузополучатель <> "---" ТО
              СведенияОбУчастникеЭДОВыгрузкаДПТ("ГрузПолуч", грузполуч.код, адрес_рф_грузполуч, груз_пол_отпр_банк)
            КОНЕЦ_ЕСЛИ
            СведенияОбУчастникеЭДОВыгрузкаДПТ("Продавец", мы.код, адрес_рф_пост, пост_плат_банк)
            СведенияОбУчастникеЭДОВыгрузкаДПТ("Покупатель", Клиент.код, адрес_рф_покуп, пост_плат_банк)

            ЗаписатьСтроку("Основание" + ?(Договор = "", " НаимОсн=""-""",
                                         " НаимОсн=""договор""" +
                                         " НомОсн=" + """" + ДоговорНомер + """" +
                                         " ДатаОсн=" + """" + ДоговорДата + """") +
                                         ?(Основание = "", "", " ДопСвОсн=" + """" + Основание + """"), "")

            ЕСЛИ ГосКонтракт <> "" ТО
              ОдинарныйТег = НЕТ
              ЗаписатьСтроку("ИдГосКон", ГосКонтракт)
              ОдинарныйТег = ДА
            КОНЕЦ_ЕСЛИ
          ЗакрытьТег //СодФХЖ1
        ЗакрытьТег //СвДокПТПр

        //===== Табличная часть =====
        ОткрытьТег("СодФХЖ2", "")
          ЦИКЛ ДЛЯ(и ИЗ Наименование)
            ЕСЛИ Единица!и = "" ТО
              ЭДООшибкаЭкспорта("У товара """ + Наименование!и + """ не указана единица измерения")
            КОНЕЦ_ЕСЛИ

            //===== Сведения о товарах, услугах =====
            ОткрытьТег("СвТов", "НомТов=" + """" + и + """" +
                                " НаимТов=" + """" + ХМЛ_ЗаменитьСпецсимволы(Наименование!и) + """" +
                                ?(Артикул!и <> "", " АртикулТов=" +  """" +  Артикул!и + """", "") +
                                ?(вывод_кода_товара <> 3, " КодТов=" +  """" + ?(вывод_кода_товара = 1, КодТовара!и, ?(вывод_кода_товара = 2, Артикул!и, "")) + """", "") +  //код товара или артикул
                                " НаимЕдИзм =" +  """" +  Единица!и + """" +
                                " ОКЕИ_Тов=" + """" + ?(КодОКЕИ!и ИЗ ["", "-"], "0000", КодОКЕИ!и) + """" +
                                ?(ВидУпаковки!и <> "", " ВидУпак=" +  """" +  ВидУпаковки!и + """", "") +
                                ?(КолВУпаковке!и <> 0, " Место=" +  """" +  СТР(КолВУпаковке!и: 2) + """", "") +
                                ?(КолУпаковок!и <> 0, " КолМест=" +  """" +  СТР(КолУпаковок!и: 2) + """", "") +
                                ?(Вес!и = 0, "", " Брутто=" + """" + СТР(Вес!и: 3) + """") +
                                ?(Кол!и = 0, "", " НадлОтп=" + """" + СТР(Кол!и: 3) + """") +
                                " НеттоПередано=" + """" + СТР(Кол!и: 3) + """" +
                                " Цена=" + """" + СТР(ЦенаБезНДС!и: 2) + """" +
                                " СтБезНДС=" + """" + СТР(СтоимостьБезНДС!и: 2) + """" +
                                " НалСт=" + """" + ?(Ставка!и = "Без НДС", "без НДС", Ставка!и) + """" +
                                " СумНДС=" + """" + СТР(СуммаНДС!и: 2) + """" +
                                " СтУчНДС=" + """" + СТР(СтоимостьСНДС!и: 2) + """")

            ЗакрытьТег//СведТов
          КОНЕЦ_ЦИКЛА
          ЗаписатьСтроку("Всего" + " КолМестВс=" + """" + СТР(СУММАМ(КолУпаковок)) + """" +
                                   " БруттоВс=" + """" + СТР(СУММАМ(Вес): 3) + """" +
                                   " НеттоВс=" + """" + СТР(ИтогоКол: 3) + """" +
                                   " СтБезНДСВс=" + """" + СТР(ИтогоБезНДС: 2) + """" +
                                   " СумНДСВс=" + """" + СТР(ИтогоНДС: 2) + """" +
                                   " СтУчНДСВс=" + """" + СТР(ИтогоСНДС: 2) + """", "")
        ЗакрытьТег//СодФХЖ2
      ЗакрытьТег//СвДокПТПрКроме

      ОткрытьТег("СодФХЖ3", "СодОпер=" + """Перечисленные в документе ценности переданы""" +
                           " ДатаОтпуск=" + """" + СТР(дата_док) + """")
        ЕСЛИ ВдОтпустил <> "" ТО
          ОткрытьТег("СвЛицОтпГруз", "")
            ОткрытьТег("РабОргПрод", "Должность=" + """" + ВдОтпустилДолжность + """" +
                                     " ОснПолн=""Должностные обязанности""")
              ЗаписатьСтроку("ФИО Фамилия=" + """" + СЛОВО(1, ВдОтпустил) + """" +
                                  " Имя=" + """" + СЛОВО(2, ВдОтпустил) + """" +
                                  ?(СЛОВО(3, ВдОтпустил) = "", "", " Отчество=" + """" + СЛОВО(3, ВдОтпустил) + """"), "")
            ЗакрытьТег //РабОргПрод
          ЗакрытьТег //ОтпускПроизв
        КОНЕЦ_ЕСЛИ
      ЗакрытьТег //СодФХЖ3

      ОткрытьТег("Подписант", "ОблПолн=" + """" + "2" + """" +
                              " Статус=" + """" + "1" + """" +
                              " ОснПолн=""Должностные обязанности""")
        ЕСЛИ мы.тип = мыЮЛ ТО
          ОткрытьТег("ЮЛ", "ИННЮЛ=" + """" + ИннПост + """" +
                           " НаимОрг=" + """" + ХМЛ_ЗаменитьСпецсимволы(Поставщик) + """" +
                           " Должн=" + """" + ДолжностьРуководителя + """")
            ЗаписатьСтроку("ФИО" + " Фамилия=" + """" + СЛОВО(1, Руководитель + РуководительИП) + """" +
                                   " Имя=" + """" + СЛОВО(2, Руководитель + РуководительИП) + """" +
                                   ?(СЛОВО(3, Руководитель + РуководительИП) = "", "", " Отчество=" + """" + СЛОВО(3, Руководитель + РуководительИП) + """"), "")
          ЗакрытьТег//ЮЛ
        ИНАЧЕ
          ОткрытьТег("ИП", "ИННФЛ=" + """" + ИннПост + """" +
                           " СвГосРегИП=" + """" + РеквизитыИП + """")
            //ОдинарныйТег = ДА
            ЗаписатьСтроку("ФИО" + " Фамилия=" + """" + СЛОВО(1, Руководитель + РуководительИП) + """" +
                                   " Имя=" + """" + СЛОВО(2, Руководитель + РуководительИП) + """" +
                                   ?(СЛОВО(3, Руководитель + РуководительИП) = "", "", " Отчество=" + """" + СЛОВО(3, Руководитель + РуководительИП) + """"), "")
          ЗакрытьТег //ИП
        КОНЕЦ_ЕСЛИ

      ЗакрытьТег // Подписант
    ЗакрытьТег // Документ
  ЗакрытьТег // Файл

  ЗакрытьФайлХМЛ
  // При наличии ошибок показать их
  ?(ВСЕГОМ(ЭДОЭкспортОшибки) = 0, "", ВЫБОР(ЭДОЭкспортОшибки, "Ошибки выгрузки документа", "Описание ошибок", 1, НЕТ, НЕТ, НЕТ, ДА))
КОНЕЦ_ФУНКЦИИ


ФУНКЦИЯ СведенияОбУчастникеЭДОВыгрузкаДОУ(СТРОКА: имя_тега; СТРОКА: контр_код, версия_формата; ЛОГИКА: адрес_рф)
  {
  Сведения об Участнике электронного документооборота.
  Приказ ФНС России от 30.11.2015 N ММВ-7-10/552@ (ред. от 08.04.2019)

  имя_тега - имя тега. Возможные варианты: 1). Исполнитель;
                                           2). Заказчик.
  контр_код - код контрагента (в зависимости от тега).
  версия_формата - Версия формата файла выгрузки: 5.02.990 (на момент разработки кода).
  адрес_рф - используется адрес местанахождения контрагента рф или нет (пока всегда = ДА)
  }

  //определяем контрагнета
  контр ЭТО с_клиенты
  контр.НАЙТИ(код = контр_код)

  // Реквизиты контрагента
  // КПП
  контр_кпп =
    ?(имя_тега = "Исполнитель", КппПост,
    ?(имя_тега = "Заказчик", КппПокуп, ""))
  // ОКПО
  контр_окпо =
    ?(имя_тега = "Исполнитель", ОкпоПост,
    ?(имя_тега = "Заказчик", ОкпоПокуп, ""))
  // Адрес
  контр_адрес =
    ?(имя_тега = "Исполнитель", АдресСкрытПост,
    ?(имя_тега = "Заказчик", АдресСкрытПокуп, ""))

  // Структурное подразделение. Только для нашей фирмы
  структ_подр = ?(КлиентНашаФирма(контр.код), ХМЛ_ЗаменитьСпецсимволы(Подразделение) , "")

  // Принято, что параметр не используется. Оставлен в коде на перспективу
  инф_для_участн = "" // ПРОФИЛЬ["Информация для участника документооборота"]

  // Исключение программной ошибки при обработке некорректного тэга
  ЕСЛИ НЕ имя_тега ИЗ ["Исполнитель", "Заказчик"] ТО
    СООБЩЕНИЕ("<ОШИБКА!> Принят некорректный тег <" + имя_тега + "> для записи данных об участнике факта хозяйственной жизни. Ожидался тэг из списка [""Исполнитель"", ""Заказчик""]. Выход.")
    СТОП_ВСЕ
  КОНЕЦ_ЕСЛИ
  ОткрытьТег(имя_тега,
    // Табл. 5.26, стр. 1. Код в общероссийском классификаторе предприятий и организаций
    ?(контр_окпо = "", "", "ОКПО=" + """" + контр_окпо + """")
    // Табл. 5.26, стр. 2. Структурное подразделение
    + ?(структ_подр = "", "", " СтруктПодр=" + """" + структ_подр + """")
    // Табл. 5.26, стр. 3. Информация для участника документооборота
    // Информация, позволяющая получающему документ участнику документооборота обеспечить его автоматизированную обработку
    + ?(инф_для_участн = "", "", " ИнфДляУчаст=" + """" + инф_для_участн + """")
    + "")

    // Табл. 5.26, стр. 4 --> табл. 5.27. Идентификационные сведения (ИдСв)
    ОдинарныйТег = НЕТ
    ОткрытьТег("ИдСв", "")
      ЕСЛИ ДЛИНА(контр.инн) = 10 ТО
        // Табл. 5.27, стр. 3 --> табл. 5.28. Сведения об организации (СвОрг)
        // УТОЧНИТЬ. Способ распознавания российской/иностранной организации
        // добавить по факту необходимости (пока приянто, что все российские).
        ОткрытьТег("СвОрг", "")
          ЕСЛИ ДА ТО
            // Табл. 5.28, стр. 1 --> табл. 5.29. Сведения о российской организации (СвЮЛ)
            ОдинарныйТег = ДА
            ЗаписатьСтроку("СвЮЛ"
              // Табл. 5.29, стр. 1. Наименование полное
              + " НаимОрг=" + """" + ХМЛ_ЗаменитьСпецсимволы(контр.название)  + """"
              // Табл. 5.29, стр. 2. ИНН
              + " ИННЮЛ=" + """" + контр.инн + """"
              // Табл. 5.29, стр. 3. КПП
              + " КПП=" + """" + контр_кпп + """"
              + "", "")
          // ИНАЧЕ
            // Табл. 5.28, стр. 2 --> табл. 5.30. Сведения об иностранной организации (ИнОрг)
            // УТОЧНИТЬ: добавить по факту необходимости (на перспективу).
          КОНЕЦ_ЕСЛИ
        ЗакрытьТег // СвОрг

      ИНАЧЕ_ЕСЛИ ДЛИНА(контр.инн) = 12 ТО
        // Табл. 5.27, стр. 2 --> табл. 5.23. Сведения об индивидуальном предпринимателе (СвИП)
        ОдинарныйТег = НЕТ
        ОткрытьТег("СвИП",
          // Табл. 5.23, стр. 1. ИНН
          "ИННФЛ=" + """" + контр.инн + """"
          // Табл. 5.23, стр. 2. Реквизиты свидетельства о государственной регистрации индивидуального предпринимателя
          + ?(контр.реквизиты_ип<>"", " СвГосРегИП=" + """" + контр.реквизиты_ип + """", "")
          // Табл. 5.23, стр. 3. Иные сведения, идентифицирующие физическое лицо (ИныеСвед)
          // УТОЧНИТЬ. Доработать в перспективе по факту необходимости.
          // + (иные_свед <> "", " ИныеСвед=" + """" + иные_свед + """", "")
          + "")
          // Табл. 5.23, стр. 4 --> табл. 5.33, стр. 4. Фамилия, Имя, Отчество
          // Если поле "руководитель" пустое, то сформировать ошибку
          ЕСЛИ контр.руководитель = "" ТО
            ЭДООшибкаЭкспорта("Не заполнено поле ""руководитель"" для контрагента " + контр.название + """ (" + контр.код + ").")
          КОНЕЦ_ЕСЛИ
          ОдинарныйТег = ДА
          ЗаписатьСтроку("ФИО"
            // Табл. 5.33, стр. 1. Фамилия
            + " Фамилия=" + """" + СЛОВО(1, контр.руководитель) + """"
            // Табл. 5.33, стр. 2. Имя
            + " Имя=" + """" + СЛОВО(2, контр.руководитель) + """"
            // Табл. 5.33, стр. 3. Отчество
            + ?(СЛОВО(3, контр.руководитель) <> "", " Отчество=" + """" + СЛОВО(2, контр.руководитель) + """", "")
            + "", "")
        ЗакрытьТег // СвИП
        // ИНАЧЕ
          // Табл. 5.27, стр. 1 --> табл. 5.24. Сведения о физическом лице (ФЛ)
          // УТОЧНИТЬ. Добавить получение информации по физическому лицу по факту необходимости.
      КОНЕЦ_ЕСЛИ
    ЗакрытьТег // ИдСв

    // Табл. 5.26, стр. 5 --> табл. 5.19. Адрес
    ЕСЛИ контр_адрес = "" ТО
      ЭДООшибкаЭкспорта("Ошибка. Не указан адрес для контрагента <" + контр.название + "> "
        + " код (" + контр.код + ")" + ".")
    КОНЕЦ_ЕСЛИ

    ЕСЛИ контр_адрес <> "" ТО
      ОдинарныйТег = НЕТ
      ОткрытьТег("Адрес", "")
        // На данный момент разработана обработка только адреса российской организации из числа следующих:
        // "АдрРФ" - российской организации (обрабатывается в коде)
        // "АдрИно" - иностранной организации (не обрабатывается в коде)
        // "КодГАР" - уникальный номер адреса объекта адресации в государственном адресном реестре (не обрабатывается в коде)
        ЕСЛИ адрес_рф ТО
          // Табл. 5.19, стр. 1 --> 5.21. Адрес местонахождения/почтовый адрес (реквизиты адреса на территории Российской Федерации)
          ОдинарныйТег = ДА
          ЗаписатьСтроку("АдрРФ"
            // Табл. 5.21, стр. 1. Индекс
            + ?(УБР_ПРОБ(СЛОВО!(10, контр_адрес, ",")) = "", "", " Индекс=" + """" + УБР_ПРОБ(СЛОВО!(10, контр_адрес, ",")) + """")
            // ...
            + " КодРегион=" + """" + СЛОВО!(1, контр_адрес, ",") + """"
            + ?(УБР_ПРОБ(СЛОВО!(3, контр_адрес, ",")) = "", "", " Район=" + """" + УБР_ПРОБ(СЛОВО!(3, контр_адрес, ",")) + """")
            + ?(УБР_ПРОБ(СЛОВО!(4, контр_адрес, ",")) = "", "", " Город=" + """" + УБР_ПРОБ(СЛОВО!(4, контр_адрес, ",")) + """")
            + ?(УБР_ПРОБ(СЛОВО!(5, контр_адрес, ",")) = "", "", " НаселПункт=" + """" + УБР_ПРОБ(СЛОВО!(5, контр_адрес, ",")) + """")
            + ?(УБР_ПРОБ(СЛОВО!(6, контр_адрес, ",")) = "", "", " Улица=" + """" + УБР_ПРОБ(СЛОВО!(6, контр_адрес, ",")) + """")
            + ?(УБР_ПРОБ(СЛОВО!(7, контр_адрес, ",")) = "", "", " Дом=" + """" + УБР_ПРОБ(СЛОВО!(7, контр_адрес, ",")) + """")
            + ?(УБР_ПРОБ(СЛОВО!(8, контр_адрес, ",")) = "", "", " Корпус=" + """" + УБР_ПРОБ(СЛОВО!(8, контр_адрес, ",")) + """")
            + ?(УБР_ПРОБ(СЛОВО!(9, контр_адрес, ",")) = "", "", " Кварт=" + """" + УБР_ПРОБ(СЛОВО!(9, контр_адрес, ",")) + """")
            + "", "")
        ИНАЧЕ
          // Пока не используется
          ЗаписатьСтроку("АдрИно"
            + " КодСтр=" + """" + "" + """"
            + " АдрТекст=" + """" + "" + """"
            + "", "")
        КОНЕЦ_ЕСЛИ
        // Уникальный номер адреса объекта адресации в государственном адресном реестре. Пока не используем
        // ОдинарныйТег = НЕТ
        // ЗаписатьСтроку("КодГАР", "") // На перспективу, как альтернативный вариант - ВМЕСТО тегов АдрРФ и АдрИно
      ЗакрытьТег // Адрес
    КОНЕЦ_ЕСЛИ

  // Табл. 5.26, стр. 6 --> табл. 5.22. Контактные данные
  контр_тел_факс =
    ?(имя_тега = "Исполнитель", ТелПост,
    ?(имя_тега = "Заказчик", ТелПокуп, ""))
  //
  контр_емаил =
    ?(имя_тега = "Исполнитель", ЭлектронныйАдресПост,
    ?(имя_тега = "Заказчик", ЭлектронныйАдресПокуп, ""))
  //
  ЕСЛИ УБР_ПРОБ(контр_тел_факс) <> "" ИЛИ контр_емаил <> "" ТО
    ОдинарныйТег = ДА
    ЗаписатьСтроку("Контакт"
      // Табл. 5.22, стр. 1. Номер контактного телефона/факс
      + ?(контр_тел_факс <> "", " Тлф=" + """" + контр_тел_факс + """", "")
      // Табл. 5.22, стр. 2. Адрес электронной почты
      + ?(контр_емаил <> "", " ЭлПочта=" + """" + контр_емаил + """", "")
      + "", "")
  КОНЕЦ_ЕСЛИ

  // Табл. 5.26, стр. 7 --> табл. 5.31. Банковские реквизиты (БанкРекв)
  контр_банк =
    ?(имя_тега = "Исполнитель", БанкПост,
    ?(имя_тега = "Заказчик", БанкПокуп, ""))
  //
  контр_бик =
    ?(имя_тега = "Исполнитель", БИКПост,
    ?(имя_тега = "Заказчик", БИКПокуп, ""))
  //
  контр_рс =
    ?(имя_тега = "Исполнитель", РСПост,
    ?(имя_тега = "Заказчик", РСПокуп, ""))
  //
  контр_кс =
    ?(имя_тега = "Исполнитель", КСПост,
    ?(имя_тега = "Заказчик", КСПокуп, ""))

  // Если расч. счета, кор. счета, наименования банка и его бик нет, то тег БанкРекв не выгружать
  ЕСЛИ контр_рс <> ""  И контр_банк <> "" И контр_бик <> "" И контр_кс <> "" ТО
    // Табл. 5.31, стр. 1. Номер банковского счета
    ОткрытьТег("БанкРекв", ?(контр_рс = "", "", "НомерСчета=" + """" + контр_рс +""""))
      // Табл. 5.31, стр. 2 --> табл. 5.32. Сведения о банке
      // Если наименования банка и его бик нет, то тег СвБанк не выгружать
      ЕСЛИ контр_банк <> "" И контр_бик <> "" И контр_кс <> "" ТО
        ОдинарныйТег = ДА
        ЗаписатьСтроку("СвБанк"
          // Табл. 5.32, стр. 1. Наименование банка
          + ?(контр_банк = "", "", " НаимБанк=" + """" + ХМЛ_ЗаменитьСпецсимволы(контр_банк) + """")
          // Табл. 5.32, стр. 2. Банковский идентификационный код (БИК) в соответствии со "Справочником БИК РФ"
          + ?(контр_бик = "", "", " БИК=" + """" + контр_бик + """")
          // Табл. 5.32, стр. 3. Корреспондентский счет банка
          + ?(контр_кс = "", "", " КорСчет=" + """" + контр_кс + """")
          + "", "")
      КОНЕЦ_ЕСЛИ
    ЗакрытьТег // БанкРекв
  КОНЕЦ_ЕСЛИ

  ЗакрытьТег // имя_тега: Исполнитель/Заказчик
КОНЕЦ_ФУНКЦИИ


ФУНКЦИЯ ЛОГИКА: ЗагрузкаДОУ(СТРОКА: содержимое_файла; ЛОГИКА: вывести_сообщение = НЕТ)
  ИСПОЛЬЗОВАТЬ("xml", "B_otch", "c_common", "c_units", с_товары, с_клиенты, б_тмц, б_тмц_доп, б_тмц_оплаты)

  РЕЗУЛЬТАТ = НЕТ

  ОБНУЛИТЬ(ТовНаимен, ТовОКЕИ, ТовНаимЕдИзм, ТовЦена, ТовКолво, ТовСуммаБезНДС, ТовСтавкаНДС, ТовСуммаНДС, ТовСуммаСНДС, ТовКод)
  ДокДата = "" ДокВремя = "" ПостНаимен = "" ДокНомер = "" ДокДата = "" ГосКонтракт = "" ПостПодпДолжн = ""

  ХМЛ_ИзСтроки(содержимое_файла)

  ХМЛИмпортДОУСвУчДокОбор
  ЕСЛИ НЕ ПроверитьМыПокупатель(вывести_сообщение) ТО
    ВЫХОД
  КОНЕЦ_ЕСЛИ

  //----- Табл. 5.1 --> табл. 5.4 Документ -----
  документ = ХМЛ_ВыбратьПодч("Документ")
  ХМЛ_ПерейтиПодч(документ)
  кнд = ХМЛ_ПолучитьАтрибутПодч("КНД")  // КНД

  ЕСЛИ кнд <> "1175012" ТО
    ЭДООшибкаИмпорта("Ошибка загрузки документа" + ?(ДокИнфо = "", "", " " + ДокИнфо) + ".//Неверный код формы по КНД. Загрузка остановлена")
    ВЫХОД
  КОНЕЦ_ЕСЛИ

  //Дата и время создания файла обмена продавцом
  ФайлДатаСоздания = ЗНАЧ(ХМЛ_ПолучитьАтрибутПодч("ДатаИнфИсп"), ДАТА)
  ФайлВремяСоздания = ЗНАЧ(ХМЛ_ПолучитьАтрибутПодч("ВремИнфИсп"), ВРЕМЯ)

  // Табл. 5.4. (О) Дата формирования документа о передаче результатов работ (документа об оказании услуг), информация исполнителя (ДатаИнфИсп)
  ДокДата = ХМЛ_ПолучитьАтрибутПодч("ДатаИнфИсп")
  // Табл. 5.4. (О) Время формирования документа о передаче результатов работ (документа об оказании услуг), информация исполнителя л(ВремИнфИсп)
  ДокВремя = ХМЛ_ПолучитьАтрибутПодч("ВремИнфИсп")
  // Табл. 5.4. (О) Наименование экономического субъекта - составителя файла обмена информации покупателя (НаимЭконСубСост)
  ПостНаимен = ХМЛ_ПолучитьАтрибутПодч("НаимЭконСубСост")
  // Закомментировано до востребования
  {
  // Табл. 5.4. (Н) Основание, по которому экономический субъект является составителем информации исполнителя (ОснДоверОргСост)
  // _____________ = ХМЛ_ПолучитьАтрибутПодч("ОснДоверОргСост") // Необязательный
  }
  // Сведения документа, кроме сведений о передаче результатов работ (о предъявлении оказанных услуг) (СвДокПРУ)
  // Табл. 5.4 --> табл. 5.5
  ЕСЛИ ХМЛ_ВыбратьПодч("Документ/СвДокПРУ") > 0 ТО
    ХМЛ_ПерейтиПодч(1)
    // Закомментировано до востребования
    {
    // Табл. 5.5 --> табл. 5.6. Наименование первичного документа (НаимДок)
    ЕСЛИ ХМЛ_ВыбратьПодч("Документ/СвДокПРУ/НаимДок") > 0 ТО
      ХМЛ_ПерейтиПодч(1)
      // Табл. 5.6. Наименование первичного документа по факту хозяйственной жизни (ПоФактХЖ)
      _____________ != ХМЛ_ПолучитьАтрибутПодч("ПоФактХЖ")
      // Табл. 5.6. Наименование первичного документа, определенное организацией (согласованное сторонами сделки) (НаимДокОпр)
      _____________ != ХМЛ_ПолучитьАтрибутПодч("НаимДокОпр")
    КОНЕЦ_ЕСЛИ
    }

    // Табл. 5.5 --> табл. 5.7. Дата и номер документа (ИдентДок)
    ЕСЛИ ХМЛ_ВыбратьПодч("Документ/СвДокПРУ/ИдентДок") > 0 ТО
      ХМЛ_ПерейтиПодч(1)
      // Табл. 5.7 Номер документа о передаче результатов работ (документа об оказании услуг) (НомДокПРУ)
      АктНомер != ХМЛ_ПолучитьАтрибутПодч("НомДокПРУ") // Необязательный
      // Табл. 5.7. Дата составления документа о передаче результатов работ (документа об оказании услуг) (ДатаДокПРУ)
      АктДата != ХМЛ_ПолучитьАтрибутПодч("ДатаДокПРУ")
    КОНЕЦ_ЕСЛИ

    // Закомментировано до востребования
    {
    // Табл. 5.5 --> табл. 5.8. Исправление (ИспрДокПРУ)
    ЕСЛИ ХМЛ_ВыбратьПодч("Документ/СвДокПРУ/ИспрДокПРУ") > 0 ТО
      ХМЛ_ПерейтиПодч(1)
      // Табл. 5.8. Исправление: N (НомИспрДокПРУ)
      _____________ != ХМЛ_ПолучитьАтрибутПодч("НомИспрДокПРУ")
      // Табл. 5.8. Исправление: Дата (ДатаИспрДокПРУ)
      _____________ != ХМЛ_ПолучитьАтрибутПодч("ДатаИспрДокПРУ")
    КОНЕЦ_ЕСЛИ
    }

    // Закомментировано до востребования (экспортируется в файл, но пока не считывается, см. перем. "код_окв")
    {
    // Табл. 5.5 --> табл. 5.9. Единица денежного измерения (ДенИзм)
    ЕСЛИ ХМЛ_ВыбратьПодч("Документ/СвДокПРУ/ДенИзм") > 0 ТО
      ХМЛ_ПерейтиПодч(1)
      // Табл. 5.9. (ОК) Валюта: Код (КодОКВ)
      _____________ != ХМЛ_ПолучитьАтрибутПодч("КодОКВ")
      // Табл. 5.9. (ОК) Валюта: Наименование (НаимОКВ)
      _____________ != ХМЛ_ПолучитьАтрибутПодч("НаимОКВ")
      // Табл. 5.9. (Н) Курс валюты (КурсВал)
      _____________ != ?(ХМЛ_ЕстьАтрибутПодч("КурсВал"),  ХМЛ_ПолучитьАтрибутПодч("КурсВал"), "")
    КОНЕЦ_ЕСЛИ
    }

    // Табл. 5.5 --> табл. 5.10. Содержание факта хозяйственной жизни
    // (1) - сведения об участниках факта хозяйственной жизни и основаниях
    // передачи, а также количественных, качественных характеристиках
    // работ (оказанных услуг) (СодФХЖ1)
    ЕСЛИ ХМЛ_ВыбратьПодч("Документ/СвДокПРУ/СодФХЖ1") > 0 ТО
      // Закомментировано до востребования
      {
      // Табл. 5.10. (Н) Заголовок содержания операции (ЗагСодОпер)
      ХМЛ_ПерейтиПодч(1)
      _____________ != ХМЛ_ПолучитьПодч("ЗагСодОпер")
      }
      // Табл. 5.10 --> табл. 5.26. Сведения об участнике факта хозяйственной жизни (УчастникТип)
      // Исполнитель (Исполнитель)
      ЕСЛИ ХМЛ_ВыбратьПодч("Документ/СвДокПРУ/СодФХЖ1/Исполнитель") > 0 ТО
        // Очистить переменные для записи в них данных, которые будут иметься в файле
        УчастникИНН = ""
        УчастникНаименов = ""
        //УчастникАдресТекст = ""
        УчастникКПП = ""
        УчастникОКПО = ""
        УчастникТел = ""
        УчастникЭлПочта = ""
        СведенияОбУчастникеЭДОЗагрузкаДОУ("Документ/СвДокПРУ/СодФХЖ1/Исполнитель")
        // Перенести данные в переменные, соответствующие участнику
        ПостНаимен = УчастникНаименов
        ПостИНН = УчастникИНН
        ПостКПП = УчастникКПП
        ПостАдрес = УчастникАдресТекст
        ПостОКПО = УчастникОКПО
        ПостТел = УчастникТел
        ПостЭлПочта = УчастникЭлПочта
      КОНЕЦ_ЕСЛИ

      // Закомментировано до востребования - куда передавать полученные параметры?
      {
      // Табл. 5.10 --> табл. 5.26. Сведения об участнике факта хозяйственной жизни (УчастникТип)
      // Заказчик (Заказчик)
      ЕСЛИ ХМЛ_ВыбратьПодч("Документ/СвДокПРУ/СодФХЖ1/Заказчик") > 0 ТО
        СведенияОбУчастникеЭДОЗагрузкаДОУ("Документ/СвДокПРУ/СодФХЖ1/Заказчик")
      КОНЕЦ_ЕСЛИ
      }

      // Табл. 5.10 --> табл. 5.11. Основание (Основание)
      основание_отгрузки = ХМЛ_ВыбратьПодч("Документ/СвДокПРУ/СодФХЖ1/Основание")
      ЦИКЛ ДЛЯ (и = 1, основание_отгрузки)
        ХМЛ_ПерейтиПодч(и)
        // Табл. 5.11. (О) Наименование документа - основания (НаимОсн)
        док_осн_наименование != ?(ХМЛ_ЕстьАтрибутПодч("НаимОсн"),  ХМЛ_ПолучитьАтрибутПодч("НаимОсн"), "")
        // (При отсутствии указывается прочерк - указано в Приказе...)
        док_осн_наименование != ?(док_осн_наименование = "-", "", док_осн_наименование)
        док_осн = ""
        ЕСЛИ док_осн_наименование = "-" ТО
          док_осн_наименование = ""
        ИНАЧЕ
          // Табл. 5.11. (Н) Номер документа - основания (НомОсн)
          док_осн_номер != ?(ХМЛ_ЕстьАтрибутПодч("НомОсн"),  ХМЛ_ПолучитьАтрибутПодч("НомОсн"), "")
          // Табл. 5.11. (Н) Дата документа - основания (ДатаОсн)
          // Обязателен при НаимОсн отличном от прочерка
          док_осн_дата != ?(ХМЛ_ЕстьАтрибутПодч("ДатаОсн"),  ХМЛ_ПолучитьАтрибутПодч("ДатаОсн"), "")
          док_осн = док_осн_наименование + " " + ?(док_осн_номер <> "", "№" + док_осн_номер, "") + ?(док_осн_дата <> "", " от " + док_осн_дата,  "")
        КОНЕЦ_ЕСЛИ
        // Табл. 5.11. (Н) Дополнительные сведения (ДопСвОсн)
        док_осн_досвед != ?(ХМЛ_ЕстьАтрибутПодч("ДопСвОсн"),  ХМЛ_ПолучитьАтрибутПодч("ДопСвОсн"), "")
        ДокОснование += УБР_ПРОБ(док_осн) + " " + док_осн_досвед + ?(и <> основание_отгрузки, ", ", "")
      КОНЕЦ_ЦИКЛА
      // Табл. 5.10. (Н) Идентификатор государственного контракта (ИдГосКон)
      ЕСЛИ ХМЛ_ВыбратьПодч("Документ/СвДокПРУ/СодФХЖ1") > 0 ТО
        ХМЛ_ПерейтиПодч(1)
        // УТОЧНИТЬ: элемент типа "П" (простой параметр) или "А" (атрибут)?
        ГосКонтракт != ХМЛ_ПолучитьПодч("ИдГосКон") // ХМЛ_ПолучитьПодч("ИдГосКон") // ХМЛ_ПолучитьАтрибутПодч("ИдГосКон")
      КОНЕЦ_ЕСЛИ
      // Закомментировано до востребования
      {
      // Табл. 5.10. (Н) Вид операции (ВидОперации)
      ЕСЛИ ХМЛ_ВыбратьПодч("Документ/СвДокПРУ/СодФХЖ1/ВидОперации") > 0 ТО
        ХМЛ_ПерейтиПодч(1)
        _____________ != ХМЛ_ПолучитьПодч("ВидОперации")
      КОНЕЦ_ЕСЛИ
      }
      // Табл. 5.10 --> 5.12. (О) Описание выполненных работ (оказанных услуг) (ОписРабот)
      // ЦИКЛ ДЛЯ (и = 1, ХМЛ_ВыбратьПодч("Документ/СвДокПРУ/СодФХЖ1/ОписРабот"))
      ХМЛ_ВыбратьПодч("Документ/СвДокПРУ/СодФХЖ1/ОписРабот")
      ХМЛ_ПерейтиПодч(1)
        // Закомментировано до вотребования
        {
        // Табл. 5.12. (Н) Начало периода выполнения работ (оказания услуг) (НачРабот)
        _____________ = ?(ХМЛ_ЕстьАтрибутПодчПодч("НачРабот"),  ХМЛ_ПолучитьАтрибутПодчПодч("НачРабот"), "")
        // Табл. 5.12. (Н) Окончание периода выполнения работ (оказания услуг) (КонРабот)
        _____________ = ?(ХМЛ_ЕстьАтрибутПодчПодч("КонРабот"),  ХМЛ_ПолучитьАтрибутПодчПодч("КонРабот"), "")
        // Табл. 5.12. (Н) Стоимость без учета НДС - итого (СтБезНДСИт)
        _____________ = ?(ХМЛ_ЕстьАтрибутПодчПодч("СтБезНДСИт"),  ХМЛ_ПолучитьАтрибутПодчПодч("СтБезНДСИт"), "")
        // Табл. 5.12. (Н) Сумма НДС - итого (СумНДСИт)
        _____________ = ?(ХМЛ_ЕстьАтрибутПодчПодч("СумНДСИт"),  ХМЛ_ПолучитьАтрибутПодчПодч("СумНДСИт"), "")
        // Табл. 5.12. (О) Стоимость с учетом НДС - итого (СтУчНДСИт)
        _____________ = ?(ХМЛ_ЕстьАтрибутПодчПодч("СтУчНДСИт"),  ХМЛ_ПолучитьАтрибутПодчПодч("СтУчНДСИт"), "")
        }
        // Табл. 5.12 --> табл. 5.13. (О) Сведения о выполненной работе (об оказанной услуге) (Работа)
        ЦИКЛ ДЛЯ (к = 1, ХМЛ_ВыбратьПодчПодч("Работа"))
          ХМЛ_ПерейтиПодчПодч(к)

          // Закомментировано до востребования
          {
          // Табл. 5.13. (Н) Номер по порядку (Номер)
          _____________ != ?(ХМЛ_ЕстьАтрибутПодчПодч("Номер"),  ХМЛ_ПолучитьАтрибутПодчПодч("Номер"), "")
          }
          // Табл. 5.13. (Н) Наименование работ (услуг) (НаимРабот)
          ТовНаимен!к = ?(ХМЛ_ЕстьАтрибутПодчПодч("НаимРабот"),  ХМЛ_ПолучитьАтрибутПодчПодч("НаимРабот"), "")
          // Табл. 5.13. (Н) Код единицы измерения (ОКЕИ)
          ТовОКЕИ!к = ?(ХМЛ_ЕстьАтрибутПодчПодч("ОКЕИ"),  ХМЛ_ПолучитьАтрибутПодчПодч("ОКЕИ"), "")
          // Табл. 5.13. (Н) Наименование единицы измерения (НаимЕдИзм)
          // Формируется автоматически в соответствии с указанным ОКЕИ.
          // При ОКЕИ=0000 автоматическое формирование наименования единицы измерения
          // не производится, наименование единицы измерения указывается пользователем
          //
          // Закомментировано до востребования, пока формируется упрощённо
          {
          ЕСЛИ ХМЛ_ЕстьАтрибутПодчПодч("ОКЕИ") И УБР_ПРОБ(ХМЛ_ПолучитьАтрибутПодчПодч("ОКЕИ")) <> "0000" ТО
            // Принять из справочника автоматически

          ИНАЧЕ_ЕСЛИ ХМЛ_ЕстьАтрибутПодчПодч("ОКЕИ") И УБР_ПРОБ(ХМЛ_ПолучитьАтрибутПодчПодч("ОКЕИ")) = "0000" ТО
            // Считать название пользовательской единицы измерения из файла
            // Можно уведомить в конце импорта в случае отсутствия названия
            _____________ != ХМЛ_ПолучитьАтрибутПодчПодч("НаимЕдИзм")
          КОНЕЦ_ЕСЛИ
          }
          // Табл. 5.13. (Н) Цена (Цена)
          ТовЦена!к = ?(ХМЛ_ЕстьАтрибутПодчПодч("Цена"),  ХМЛ_ПолучитьАтрибутПодчПодч("Цена"), "")
          // Табл. 5.13. (Н) Количество (Количество)
          // Обязателен при наличии НаимРабот
          // Можно вывести в уведомление, если не соблюдается
          ТовКолво!к = ?(ХМЛ_ЕстьАтрибутПодчПодч("Количество"),  ХМЛ_ПолучитьАтрибутПодчПодч("Количество"), "")
          // Табл. 5.13. (Н) Стоимость без учета НДС (СтоимБезНДС)
          ТовСуммаБезНДС!к = ?(ХМЛ_ЕстьАтрибутПодчПодч("СтоимБезНДС"),  ХМЛ_ПолучитьАтрибутПодчПодч("СтоимБезНДС"), "")
          // Табл. 5.13. (Н) Налоговая ставка (НалСт)
          ТовСтавкаНДС!к = ?(ХМЛ_ЕстьАтрибутПодчПодч("НалСт"),  ХМЛ_ПолучитьАтрибутПодчПодч("НалСт"), "")
          // Табл. 5.13. (Н) Сумма НДС (СумНДС)
          ТовСуммаНДС!к = ?(ХМЛ_ЕстьАтрибутПодчПодч("СумНДС"),  ХМЛ_ПолучитьАтрибутПодчПодч("СумНДС"), "")
          // Табл. 5.13. (Н) Стоимость с учётом НДС (СтоимУчНДС)
          // Обязателен, если присутствует НаимРабот
          // Можно вывести в уведомление
          ТовСуммаСНДС!к = ?(ХМЛ_ЕстьАтрибутПодчПодч("СтоимУчНДС"),  ХМЛ_ПолучитьАтрибутПодчПодч("СтоимУчНДС"), "")
          // Закомментировано до востребования
          {
          // Табл. 5.13. (Н) Текстовое описание выполненных работ (оказанных услуг) (Описание)
          // Обязателен, если ОТСУТСТВУЕТ НаимРабот
          _____________ = ?(ХМЛ_ЕстьАтрибутПодчПодч("Описание"),  ХМЛ_ПолучитьАтрибутПодчПодч("Описание"), "")
          // Табл. 5.13. (Н) Корреспондирующие счета: дебет (КоррСчДебет)
          _____________ = ?(ХМЛ_ЕстьАтрибутПодчПодч("КоррСчДебет"),  ХМЛ_ПолучитьАтрибутПодчПодч("КоррСчДебет"), "")
          // Табл. 5.13 --> табл. 5.25. (Н) Информационное поле описания работ (ИнфПолеОписРабот)
          ЦИКЛ ДЛЯ (н = 1, ХМЛ_ВыбратьПодчПодчПодч("ИнфПолеОписРабот"))
            ХМЛ_ПерейтиПодчПодчПодч(н)
            // Табл. 5.25. (О) Идентификатор (Идентиф)
            _____________ != ?(ХМЛ_ЕстьАтрибутПодчПодч("Идентиф"),  ХМЛ_ПолучитьАтрибутПодчПодч("Идентиф"), "")
            // Табл. 5.25. (О) Значение (Значен)
            _____________ != ?(ХМЛ_ЕстьАтрибутПодчПодч("Значен"),  ХМЛ_ПолучитьАтрибутПодчПодч("Значен"), "")
          КОНЕЦ_ЦИКЛА
          }
        КОНЕЦ_ЦИКЛА
      // КОНЕЦ_ЦИКЛА

      // Закомментировано до востребования
      {
      // Табл. 5.10 --> 5.14. (Н) Информационное поле факта хозяйственной жизни (1) (ИнфПолФХЖ1)
      ЕСЛИ ХМЛ_ВыбратьПодч("Документ/СвДокПРУ/СодФХЖ1/ИнфПолФХЖ1") > 0 ТО
        ХМЛ_ПерейтиПодч(1)
        // _____________ != ХМЛ_ПолучитьПодч("ИнфПолФХЖ1")
        // Табл. 5.14. (Н) Идентификатор файла информационного поля (ИдФайлИнфПол)
        // GUID. Указывается идентификатор файла, связанного со сведениями данного электронного документа
        _____________ != ХМЛ_ПолучитьАтрибутПодч("ИдФайлИнфПол")
        // Табл. 5.14 --> табл. 5.25. (Н) Текстовая информация (ТекстИнф)
        ЕСЛИ ХМЛ_ВыбратьПодч("Документ/СвДокПРУ/СодФХЖ1/ИнфПолФХЖ1/ТекстИнф") > 0 ТО
          ЦИКЛ ДЛЯ (и = 1, ХМЛ_ВыбратьПодч("Документ/СвДокПРУ/СодФХЖ1/ИнфПолФХЖ1/ТекстИнф"))
            ХМЛ_ПерейтиПодч(и)
            // Переменные представить в виде массива?
            // Табл. 5.25. (О) Идентификатор (Идентиф)
            _____________ != ?(ХМЛ_ЕстьАтрибутПодч("Идентиф"),  ХМЛ_ПолучитьАтрибутПодч("Идентиф"), "")
            // Табл. 5.25. (О) Значение (Значен)
            _____________ != ?(ХМЛ_ЕстьАтрибутПодч("Значен"),  ХМЛ_ПолучитьАтрибутПодч("Значен"), "")
          КОНЕЦ_ЦИКЛА
        КОНЕЦ_ЕСЛИ
      КОНЕЦ_ЕСЛИ // Конец табл. 5.14
      }
    КОНЕЦ_ЕСЛИ // Конец табл. 5.10
  КОНЕЦ_ЕСЛИ // Конец табл. 5.5

  // Закомментировано до востребования
  {
  // Табл. 5.4 --> 5.15. (О) Содержание факта хозяйственной жизни (2) - сведения о
  // передаче результатов работ (о предъявлении оказанных услуг) (СодФХЖ2)
  ХМЛ_ВыбратьПодч("Документ/СодФХЖ2")
  ХМЛ_ПерейтиПодч(1)
  // Табл. 5.15. (О) Содержание операции (СодОпер)
  _____________ != ХМЛ_ПолучитьАтрибутПодч("СодОпер")
  // Табл. 5.15. (Н) Дата передачи результатов работ (предъявления оказанных услуг) (ДатаПер)
  // Обязателен, если ДатаПер не совпадает с ДатаДокПРУ
  _____________ != ?(ХМЛ_ЕстьАтрибутПодч("ДатаПер"),  ХМЛ_ПолучитьАтрибутПодч("ДатаПер"), "")
  // Табл. 5.15 --> 5.16. (Н) Сведения о передаче вещи, изготовленной по договору подряда (СвПерВещи)
  ЕСЛИ ХМЛ_ВыбратьПодч("Документ/СодФХЖ2/СвПерВещи") > 0 ТО
    ХМЛ_ПерейтиПодч(1)
    // Табл. 5.16. (Н) Дата передачи вещи, изготовленной по договору подряда (ДатаПерВещ)
    _____________ != ?(ХМЛ_ЕстьАтрибутПодч("Идентиф"),  ХМЛ_ПолучитьАтрибутПодч("Идентиф"), "")
    // Табл. 5.16. (Н) Сведения о передаче (СвПерВещ)
    _____________ != ?(ХМЛ_ЕстьАтрибутПодч("СвПерВещ"),  ХМЛ_ПолучитьАтрибутПодч("СвПерВещ"), "")
  КОНЕЦ_ЕСЛИ
  // Табл. 5.15 --> табл. 5.25. (Н) Информационное поле факта хозяйственной жизни (2) (ИнфПолФХЖ2)
  ЕСЛИ ХМЛ_ВыбратьПодч("Документ/СодФХЖ2/ИнфПолФХЖ2") > 0 ТО
    ЦИКЛ ДЛЯ (и = 1, ХМЛ_ВыбратьПодч("Документ/СодФХЖ2/ИнфПолФХЖ2"))
      ХМЛ_ПерейтиПодч(и)
      // Переменные представить в виде массива?
      // Табл. 5.25. (О) Идентификатор (Идентиф)
      _____________ != ?(ХМЛ_ЕстьАтрибутПодч("Идентиф"),  ХМЛ_ПолучитьАтрибутПодч("Идентиф"), "")
      // Табл. 5.25. (О) Значение (Значен)
      _____________ != ?(ХМЛ_ЕстьАтрибутПодч("Значен"),  ХМЛ_ПолучитьАтрибутПодч("Значен"), "")
    КОНЕЦ_ЦИКЛА
  КОНЕЦ_ЕСЛИ
  // Конец табл. 5.15
  }

  {
  // Табл. 5.4 --> табл. 5.17. (О) Сведения о лице, подписавшем информацию исполнителя в электронном виде (Подписант)
  ЦИКЛ ДЛЯ (и = 1, ХМЛ_ВыбратьПодч("Документ/Подписант"))
    ХМЛ_ПерейтиПодч(и)
    // Переменные представить в виде массива?
    // Табл. 5.17. (ОК) Область полномочий (ОблПолн)
    _____________ != ?(ХМЛ_ЕстьАтрибутПодч("ОблПолн"),  ХМЛ_ПолучитьАтрибутПодч("ОблПолн"), "")
    // Табл. 5.17. (ОК) Статус (Статус)
    _____________ != ?(ХМЛ_ЕстьАтрибутПодч("Статус"),  ХМЛ_ПолучитьАтрибутПодч("Статус"), "")
  КОНЕЦ_ЕСЛИ
  }

  // Табл. 5.4 --> табл. 5.17. (О) Сведения о лице, подписавшем информацию исполнителя в электронном виде (Подписант)
  // Для упрощения некоторые свойства подписанта (область полномочий, статус, основания полномочий) не обрабатываются
  // Табл. 5.24. Подписант Физическое лицо
  ЕСЛИ ХМЛ_ВыбратьПодч("Документ/Подписант/ФЛ") > 0 ТО
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч("Документ/Подписант/ФЛ"))
    //инн_подписант != ХМЛ_ПолучитьАтрибутПодч("ИННФЛ")       //ИНН ИП (физ.лица)
    //свид_подписант != ХМЛ_ПолучитьАтрибутПодч("СвГосРегИП") //реквизиты свидетельства о гос.регистрации ИП
    ПостПодпДолжн = "" //для физ.лица нет
    //будем в дальнейшем считывать фамилию физ.лица
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч("Документ/Подписант/ИП/ФИО"))
  // Табл. 5.23. Подписант ИП
  ИНАЧЕ_ЕСЛИ ХМЛ_ВыбратьПодч("Документ/Подписант/ИП") > 0 ТО
    //подписант_юл = ХМЛ_ВыбратьПодч("Документ/Подписант/ИП")
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч("Документ/Подписант/ИП"))
    //инн_подписант != ХМЛ_ПолучитьАтрибутПодч("ИННЮЛ")   //ИНН организации (юр.лица)
    ПостПодпДолжн = "" //должность подписанта
    //свид_подписант != "" //для юр.лица нет
    //будем в дальнейшем считывать фамилию юр.лица
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч("Документ/Подписант/ИП/ФИО")  )
  // Табл. 5.18. Подписант юр. лицо
  ИНАЧЕ_ЕСЛИ ХМЛ_ВыбратьПодч("Документ/Подписант/ЮЛ") > 0 ТО
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч("Документ/Подписант/ЮЛ") )
    //инн_подписант != ХМЛ_ПолучитьАтрибутПодч("ИННЮЛ")   //ИНН организации (юр.лица)
    ПостПодпДолжн = ?(ХМЛ_ЕстьАтрибутПодч("Должн"), ХМЛ_ПолучитьАтрибутПодч("Должн"), "") //должность подписанта
    //свид_подписант != "" //для юр.лица нет
    //будем в дальнейшем считывать фамилию юр.лица
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч("Документ/Подписант/ЮЛ/ФИО") )
  КОНЕЦ_ЕСЛИ

  ЗакрытьФайлХМЛ
  РЕЗУЛЬТАТ = ДА
КОНЕЦ_ФУНКЦИИ


ФУНКЦИЯ ЛОГИКА: ЗагрузкаДПТ(СТРОКА: содержимое_файла; ЛОГИКА: вывести_сообщение = НЕТ)
  ИСПОЛЬЗОВАТЬ("xml", "B_otch", "c_common", "c_units")
  РЕЗУЛЬТАТ = НЕТ

  ОБНУЛИТЬ(ТовНаимен, ТовОКЕИ, ТовНаимЕдИзм, ТовЦена, ТовКолво, ТовСуммаБезНДС, ТовСтавкаНДС, ТовСуммаНДС, ТовСтавкаНДС, ТовСуммаСНДС, ТовКод, ТовУпаковка, ТовАртикул, ТовКолвоВУп, ТовКолвоУп)
  ДокДата = ""
  ДокВремя = ""
  ПостНаимен = ""
  ДокНомер = ""
  ДокДата = ""
  ПостПодпДолжн = ""
  ТовНакДата = ""
  ТовНакНом = ""
  ДокВалютаКод = ""
  ДокВалютаНазв = ""
  ДокКурс = ПУСТО

  ХМЛ_ИзСтроки(содержимое_файла)

  ХМЛИмпортДПТСвУчДокОбор
  ЕСЛИ НЕ ПроверитьМыПокупатель(вывести_сообщение) ТО
    ВЫХОД
  КОНЕЦ_ЕСЛИ

  документ = ХМЛ_ВыбратьПодч("Документ")
  ХМЛ_ПерейтиПодч(документ)
  кнд = ХМЛ_ПолучитьАтрибутПодч("КНД")  // КНД

  ЕСЛИ кнд <> "1175010" ТО
    ЭДООшибкаИмпорта("Ошибка загрузки документа" + ?(ДокИнфо = "", "", " " + ДокИнфо) + ".//Неверный код формы по КНД. Загрузка остановлена")
    ВЫХОД
  КОНЕЦ_ЕСЛИ

  //Дата и время создания файла обмена продавцом
  ФайлДатаСоздания = ЗНАЧ(ХМЛ_ПолучитьАтрибутПодч("ДатаИнфПр"), ДАТА)
  ФайлВремяСоздания = ЗНАЧ(ХМЛ_ПолучитьАтрибутПодч("ВремИнфПр"), ВРЕМЯ)

  ЕСЛИ ХМЛ_ВыбратьПодч("Документ/СвДокПТПрКроме") > 0 ТО
    ХМЛ_ПерейтиПодч(1)
    тег_св_док = "Документ/СвДокПТПрКроме/СвДокПТПр"
    ЕСЛИ ХМЛ_ВыбратьПодч(тег_св_док) > 0 ТО
      ХМЛ_ПерейтиПодч(1)

      ЕСЛИ ХМЛ_ВыбратьПодч(тег_св_док + "/ИдентДок") > 0 ТО
        ХМЛ_ПерейтиПодч(1)
        ТовНакНом != ХМЛ_ПолучитьАтрибутПодч("НомДокПТ")
        ТовНакДата != ХМЛ_ПолучитьАтрибутПодч("ДатаДокПТ")
      КОНЕЦ_ЕСЛИ

      ЕСЛИ ХМЛ_ВыбратьПодч(тег_св_док + "/ДенИзм") > 0 ТО
        ХМЛ_ПерейтиПодч(1)
        ДокВалютаКод != ХМЛ_ПолучитьАтрибутПодч("КодОКВ")
        ДокВалютаНазв != ?(ХМЛ_ЕстьАтрибутПодч("НаимОКВ"), ХМЛ_ПолучитьАтрибутПодч("НаимОКВ"), "")
        ДокКурс != ?(ХМЛ_ЕстьАтрибутПодч("КурсВал"), ЗНАЧ(ХМЛ_ПолучитьАтрибутПодч("КурсВал"), ЗНАК_ВАЛ), ПУСТО) //Испр. 25.01.2021, Сергей Н.
      КОНЕЦ_ЕСЛИ

      тег_фхж1 = тег_св_док + "/СодФХЖ1"
      ЕСЛИ ХМЛ_ВыбратьПодч(тег_фхж1) > 0 ТО
        сост_элемент = тег_фхж1 + "/Продавец"
        ЕСЛИ ХМЛ_ВыбратьПодч(сост_элемент) > 0  ТО
          СведенияОбУчастникеЭДОЗагрузкаДПТ(сост_элемент)
          ПостНаимен = УчастникНаименов
          ПостИНН = УчастникИНН
          ПостКПП = УчастникКПП
          ПостАдресФИАС = УчастникАдресФИАС
          ПостАдрес = УчастникАдресТекст
          ПостОКПО = УчастникОКПО
          ПостТел = УчастникТел
          ПостЭлПочта = УчастникЭлПочта
          ПостЮрЛицо = УчастникЮрЛицо
        КОНЕЦ_ЕСЛИ

        сост_элемент = тег_фхж1 + "/ГрузОтпр"
        ЕСЛИ ХМЛ_ВыбратьПодч(сост_элемент) > 0  ТО
          СведенияОбУчастникеЭДОЗагрузкаДПТ(сост_элемент)
          ГрузОтпрИНН = УчастникИНН
        КОНЕЦ_ЕСЛИ

        сост_элемент = тег_фхж1 + "/ГрузПолуч"
        ЕСЛИ ХМЛ_ВыбратьПодч(сост_элемент) > 0  ТО
          СведенияОбУчастникеЭДОЗагрузкаДПТ(сост_элемент)
          ГрузПолучИНН = УчастникИНН
        КОНЕЦ_ЕСЛИ

        основание_отгрузки = ХМЛ_ВыбратьПодч(тег_фхж1 + "/Основание")
        ЦИКЛ ДЛЯ (и = 1, основание_отгрузки)
          ХМЛ_ПерейтиПодч(и)
          док_осн_наименование != ?(ХМЛ_ЕстьАтрибутПодч("НаимОсн"),  ХМЛ_ПолучитьАтрибутПодч("НаимОсн"), "")
          док_осн_наименование != ?(док_осн_наименование = "-", "", док_осн_наименование)
          док_осн = ""
          ЕСЛИ док_осн_наименование <> "" ТО
            док_осн_номер != ?(ХМЛ_ЕстьАтрибутПодч("НомОсн"),  ХМЛ_ПолучитьАтрибутПодч("НомОсн"), "")
            док_осн_дата != ?(ХМЛ_ЕстьАтрибутПодч("ДатаОсн"),  ХМЛ_ПолучитьАтрибутПодч("ДатаОсн"), "")
            док_осн = док_осн_наименование + " " + ?(док_осн_номер <> "", "№" + док_осн_номер, "") + ?(док_осн_дата <> "", " от " + док_осн_дата,  "")
          КОНЕЦ_ЕСЛИ
          док_осн_досвед != ?(ХМЛ_ЕстьАтрибутПодч("ДопСвОсн"),  ХМЛ_ПолучитьАтрибутПодч("ДопСвОсн"), "")
          ДокОснование += УБР_ПРОБ(док_осн) + " " + док_осн_досвед + ?(и <> основание_отгрузки, ", ", "")
        КОНЕЦ_ЦИКЛА
      КОНЕЦ_ЕСЛИ

      тег_фхж2 = "Документ/СвДокПТПрКроме/СодФХЖ2"
      ЕСЛИ ХМЛ_ВыбратьПодч(тег_фхж2) > 0 ТО
        ХМЛ_ПерейтиПодч(1)
        тег_св_тов = тег_фхж2 + "/СвТов"
        св_тов = ХМЛ_ВыбратьПодч(тег_св_тов)
        ЕСЛИ св_тов > 0 ТО
          ЦИКЛ ДЛЯ (и_св_тов = 1, св_тов)
            //выбираем вновь тег со сведениями о товаре
            //ХМЛ_ВыбратьПодч("Документ/СвТНО/ТН/Таблица/СвТов")
            ХМЛ_ПерейтиПодч(и_св_тов)

            ТовНаимен!и_св_тов =?(ХМЛ_ЕстьАтрибутПодч("НаимТов"), ХМЛ_ПолучитьАтрибутПодч("НаимТов"), "")
            ТовАртикул!и_св_тов =?(ХМЛ_ЕстьАтрибутПодч("АртикулТов"), ХМЛ_ПолучитьАтрибутПодч("АртикулТов"), "")
            ТовКод!и_св_тов = ?(ХМЛ_ЕстьАтрибутПодч("КодТов"), ХМЛ_ПолучитьАтрибутПодч("КодТов"), "")
            ТовОКЕИ!и_св_тов = ?(ХМЛ_ЕстьАтрибутПодч("ОКЕИ_Тов"), ХМЛ_ПолучитьАтрибутПодч("ОКЕИ_Тов"), "")
            ТовНаимЕдИзм!и_св_тов = ?(ХМЛ_ЕстьАтрибутПодч("НаимЕдИзм"), ХМЛ_ПолучитьАтрибутПодч("НаимЕдИзм"), "")
            ТовУпаковка!и_св_тов = ?(ХМЛ_ЕстьАтрибутПодч("ВидУпак"), ХМЛ_ПолучитьАтрибутПодч("ВидУпак"), "")
            ТовКолвоВУп!и_св_тов =?(ХМЛ_ЕстьАтрибутПодч("Место"), ХМЛ_ПолучитьАтрибутПодч("Место"), "")
            ТовКолвоУп!и_св_тов =?(ХМЛ_ЕстьАтрибутПодч("КолМест"), ХМЛ_ПолучитьАтрибутПодч("КолМест"), "")
            ТовКолво!и_св_тов =?(ХМЛ_ЕстьАтрибутПодч("НеттоПередано"), ХМЛ_ПолучитьАтрибутПодч("НеттоПередано"), "")
            ТовЦена!и_св_тов =?(ХМЛ_ЕстьАтрибутПодч("Цена"), ХМЛ_ПолучитьАтрибутПодч("Цена"), "")
            ТовСуммаБезНДС!и_св_тов =?(ХМЛ_ЕстьАтрибутПодч("СтБезНДС"), ХМЛ_ПолучитьАтрибутПодч("СтБезНДС"), "")
            ТовСтавкаНДС!и_св_тов =?(ХМЛ_ЕстьАтрибутПодч("НалСт"), ХМЛ_ПолучитьАтрибутПодч("НалСт"), "")
            ТовСуммаНДС!и_св_тов =?(ХМЛ_ЕстьАтрибутПодч("СумНДС"), ХМЛ_ПолучитьАтрибутПодч("СумНДС"), "")
            ТовСуммаСНДС!и_св_тов =?(ХМЛ_ЕстьАтрибутПодч("СтУчНДС"), ХМЛ_ПолучитьАтрибутПодч("СтУчНДС"), "")
          КОНЕЦ_ЦИКЛА
        КОНЕЦ_ЕСЛИ
      КОНЕЦ_ЕСЛИ
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЕСЛИ

  ЕСЛИ ХМЛ_ВыбратьПодч("Документ/Подписант/ФЛ") > 0 ТО
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч("Документ/Подписант/ФЛ"))
    ПостПодпДолжн = ""
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч("Документ/Подписант/ИП/ФИО"))
  ИНАЧЕ_ЕСЛИ ХМЛ_ВыбратьПодч("Документ/Подписант/ИП") > 0 ТО
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч("Документ/Подписант/ИП"))
    ПостПодпДолжн = ""
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч("Документ/Подписант/ИП/ФИО")  )
  ИНАЧЕ_ЕСЛИ ХМЛ_ВыбратьПодч("Документ/Подписант/ЮЛ") > 0 ТО
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч("Документ/Подписант/ЮЛ") )
    ПостПодпДолжн = ?(ХМЛ_ЕстьАтрибутПодч("Должн"), ХМЛ_ПолучитьАтрибутПодч("Должн"), "")
    ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч("Документ/Подписант/ЮЛ/ФИО") )
  КОНЕЦ_ЕСЛИ
  ПостПодпФИО = ХМЛ_ПолучитьАтрибутПодч("Фамилия") + " " + ХМЛ_ПолучитьАтрибутПодч("Имя") + " " + ?(ХМЛ_ЕстьАтрибутПодч("Отчество"), ХМЛ_ПолучитьАтрибутПодч("Отчество"), "")

  ЗакрытьФайлХМЛ
  РЕЗУЛЬТАТ = ДА
КОНЕЦ_ФУНКЦИИ


ФУНКЦИЯ СведенияОбУчастникеЭДОЗагрузкаДОУ (СТРОКА: состав_элемента)
  {Загурзка сведений об участниках. Необходимо для загрузки документа выполнения
  работ, оказания услуг; состав_элемента - элемент, который будем разбирать:
                     Исполнитель:      Документ/СвДокПРУ/СодФХЖ1/Исполнитель
                     Исполнитель:      Документ/СвДокПРУ/СодФХЖ1/ИсполнительДокумент/СвСчФакт/СвПокуп
  }

  // Очистить переменные для записи в них данных, которые будут иметься в файле
  УчастникИНН = ""
  УчастникНаименов = ""
  УчастникКПП = ""
  УчастникОКПО = ""
  УчастникТел = ""
  УчастникЭлПочта = ""

  ХМЛ_ПерейтиПодч(1)
  // Табл. 5.26 (Н). Код в общероссийском классификаторе предприятий и организаций (ОКПО)
  УчастникОКПО != ?(ХМЛ_ЕстьАтрибутПодч("ОКПО"), ХМЛ_ПолучитьАтрибутПодч("ОКПО"), "")
  // Табл. 5.26 (Н). Структурное подразделение (СтруктПодрМ)
  УчастникСтруктПодр != ?(ХМЛ_ЕстьАтрибутПодч("СтруктПодр"), ХМЛ_ПолучитьАтрибутПодч("СтруктПодр"), "")
  // Табл. 5.26 (Н). Информация для участника документооборота (ИнфДляУчаст)
  ИнфДляУчаст != ?(ХМЛ_ЕстьАтрибутПодч("ИнфДляУчаст"), ХМЛ_ПолучитьАтрибутПодч("ИнфДляУчаст"), "")

  // Табл. 5.26 --> 5.27. Идентификационные сведения (ИдСв)
  ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв") > 0 ТО
    ХМЛ_ПерейтиПодч(1)

    // Табл. 5.27 --> 5.23. (О) Сведения об индивидуальном предпринимателе (СвИП)
    ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвИП") > 0 ТО
     ХМЛ_ПерейтиПодч(1)
      // Табл. 5.23. (О) ИНН (ИННФЛ)
      УчастникИНН = ХМЛ_ПолучитьАтрибутПодч("ИННФЛ")
      // Табл. 5.23. (Н) Реквизиты свидетельства о государственной регистрации индивидуального предпринимателя (СвГосРегИП)
      УчастникГосРегИП != ХМЛ_ПолучитьАтрибутПодч("СвГосРегИП")
      // Табл. 5.33. (Н) Иные сведения, идентифицирующие физическое лицо (ИныеСвед)
      УчастникИныеСведФЛ != ХМЛ_ПолучитьАтрибутПодч("ИныеСвед")
      // Табл. 5.23 --> табл. 5.33. (О) Фамилия, Имя, Отчество (ФИО)
      ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвФЛ/ФИО") > 0 ТО
        ХМЛ_ПерейтиПодч(1)
        // Табл. 5.33. (О) Фамилия (Фамилия)
        УчастникФам != ?(ХМЛ_ЕстьАтрибутПодч("Фамилия"),  ХМЛ_ПолучитьАтрибутПодч("Фамилия"), "")
        // Табл. 5.33. (О) Имя (Имя)
        УчастникИмя != ?(ХМЛ_ЕстьАтрибутПодч("Имя"),  ХМЛ_ПолучитьАтрибутПодч("Имя"), "")
        // Табл. 5.33. (Н) Отчество (Отчество)
        УчастникОтч != ?(ХМЛ_ЕстьАтрибутПодч("Отчество"),  ХМЛ_ПолучитьАтрибутПодч("Отчество"), "")
        УчастникНаименов != УчастникФам + " " + УчастникИмя + " " + УчастникОтч
      КОНЕЦ_ЕСЛИ
    КОНЕЦ_ЕСЛИ

    // Закомментировано до востребования. При необходимости раскомментировать и объявить переменные
    {
    // Табл. 5.27 --> 5.24. (О) Сведения о физическом лице (ФЛ)
    ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвФЛ") > 0 ТО
      ХМЛ_ПерейтиПодч(1)
      // Табл. 5.24. (Н) ИНН (ИННФЛ).
      _____________ = ХМЛ_ПолучитьАтрибутПодч("ИННФЛ")
      // Табл. 5.24. (Н) Иные сведения, идентифицирующие физическое лицо (ИныеСвед)
      _____________ = ХМЛ_ПолучитьАтрибутПодч("ИныеСвед")
      // Табл. 5.24 --> табл. 5.33. (О) Фамилия, Имя, Отчество (ФИО)
      ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвФЛ/ФИО") ТО
        ХМЛ_ПерейтиПодч(1)
        // Табл. 5.33. (О) Фамилия (Фамилия)
        _____________ = ХМЛ_ПолучитьАтрибутПодч("Фамилия")
        // Табл. 5.33. (О) Имя (Имя)
        _____________ = ХМЛ_ПолучитьАтрибутПодч("Имя")
        // Табл. 5.33. (Н) Отчество (Отчество)
        _____________ = ХМЛ_ПолучитьАтрибутПодч("Отчество")
    КОНЕЦ_ЕСЛИ
    }

    // Табл. 5.27 --> табл. 5.28. (О) Сведения об организации (СвОрг)
    ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвОрг") > 0 ТО
      ХМЛ_ПерейтиПодч(1)
      // Табл. 5.28 --> табл. 5.29. Сведения о РОССИЙСКОЙ организации (СвЮЛ)
      ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвОрг/СвЮЛ") > 0 ТО
        ХМЛ_ПерейтиПодч(1)
        // Табл. 5.29. (О) Наименование полное (НаимОрг)
        УчастникНаименов = ХМЛ_ПолучитьАтрибутПодч("НаимОрг")
        // Табл. 5.29. (О) ИНН (ИННЮЛ)
        УчастникИНН = ХМЛ_ПолучитьАтрибутПодч("ИННЮЛ")
        // Табл. 5.29. (Н) КПП (КПП)
        УчастникКПП != ХМЛ_ПолучитьАтрибутПодч("КПП")
      // Табл. 5.28 --> табл. 5.30. Сведения об ИНОСТРАННОЙ организации (ИнОрг)
      // Закомментировано до востребования. При необходимости раскомментировать и объявить переменные
      {
      ИНАЧЕ_ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/ИдСв/СвОрг/ИнОрг") > 0 ТО
        ХМЛ_ПерейтиПодч(1)
        // Табл. 5.30. (О) Наименование полное (НаимОрг)
        _____________ = ХМЛ_ПолучитьАтрибутПодч("НаимОрг")
        // Табл. 5.30. (О) Страна (Страна)
        _____________ = ХМЛ_ПолучитьАтрибутПодч("Страна")
        // Табл. 5.30. (Н) Иные сведения, идентифицирующие юридическое лицо (ИныеСвед)
        _____________ != ХМЛ_ПолучитьАтрибутПодч("ИныеСвед")
      }
      КОНЕЦ_ЕСЛИ

    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЕСЛИ

  // Табл. 5.26 --> табл. 5.19. (Н) Адрес
  ХМЛИмпортДОУАдрес(состав_элемента)

  // Табл. 5.26 --> табл. 5.22. (Н) Контакт
  ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/Контакт") > 0 ТО
    ХМЛ_ПерейтиПодч(1)
    // Табл. 5.22. (Н) Номер контактного телефона/факс (Тлф)
    УчастникТел != ?(ХМЛ_ЕстьАтрибутПодч("Тлф"), ХМЛ_ПолучитьАтрибутПодч("Тлф"), "")
    // Табл. 5.22. (Н) Адрес электронной почты (ЭлПочта)
    УчастникЭлПочта != ?(ХМЛ_ЕстьАтрибутПодч("ЭлПочта"), ХМЛ_ПолучитьАтрибутПодч("ЭлПочта"), "")
  КОНЕЦ_ЕСЛИ

  // Табл. 5.26 --> табл. 5.31. (Н) Банковские реквизиты (БанкРекв)
  ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/БанкРекв") > 0 ТО
    ХМЛ_ПерейтиПодч(1)
    // Табл. 5.31. (Н) Номер банковского счета (НомерСчета)
    УчастникРасчСчет != ?(ХМЛ_ЕстьАтрибутПодч("НомерСчета"), ХМЛ_ПолучитьАтрибутПодч("НомерСчета"), "")
    // Табл. 5.31 --> 5.32. (Н) Сведения о банке (СвБанк)
    ЕСЛИ ХМЛ_ВыбратьПодч(состав_элемента + "/БанкРекв/СвБанк") > 0 ТО
      ХМЛ_ПерейтиПодч(1)
      // Табл. 5.32. (Н) Наименование банка (НаимБанк)
      УчастникБанкНазвание != ?(ХМЛ_ЕстьАтрибутПодч("НаимБанк"), ХМЛ_ПолучитьАтрибутПодч("НаимБанк"), "")
      // Табл. 5.32. (Н) Банковский идентификационный код (БИК) в соответствии со "Справочником БИК РФ" (БИК)
      УчастникБанкБИК != ?(ХМЛ_ЕстьАтрибутПодч("БИК"), ХМЛ_ПолучитьАтрибутПодч("БИК"), "")
      // Табл. 5.32. (Н) Корреспондентский счет банка (КорСчет)
      УчастникКорСчет = ?(ХМЛ_ЕстьАтрибутПодч("КорСчет"), ХМЛ_ПолучитьАтрибутПодч("КорСчет"), "")
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЖУРНАЛ(тс_операции) ЧИСЛО: СтатусУПД
  ИСПОЛЬЗОВАТЬ("ts_to")
  нужна_счет_фактура = тс_виды_то.НАЙТИ(ид = СВОЕ.вид_то_ид) И тс_виды_то.доступ_к_ндс И тс_виды_то.доступ_к_гтд И СВОЕ.НужнаСчетФактура
  номер_сф = ?(нужна_счет_фактура, СВОЕ.ном_сф, "")
  РЕЗУЛЬТАТ = ?(номер_сф = "", 2, 1)
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЖУРНАЛ(б_тмц) ЧИСЛО: СтатусУПД
  ИСПОЛЬЗОВАТЬ("b_tmc")
  доступна_счет_фактура = СВОЕ.ДоступнаСчетФактура
  номер_сф = ?(доступна_счет_фактура, СВОЕ.номер_сф, "")
  РЕЗУЛЬТАТ = ?(номер_сф = "", 2, 1)
КОНЕЦ_ФУНКЦИИ


ФУНКЦИЯ ЛОГИКА: ПроверитьФормат(ПЕРЕМ СТРОКА: префикс_формата)
  {префикс_формата - Префикс формата загружаемого файла.
   РЕЗУЛЬТАТ = ДА - формат поддерживается

   Форматы ММВ-7-6/93@ (ON_SFAKT); ММВ-7-6/172@ (DP_OTORG12, DP_IAKTPRM) устарели в 2017 году, и начиная с 2021 уже не принимаются. Поэтому удалены.
   Формат ММВ-7-15/155@ (ON_SCHFDOPPR) устарел в 2019 году. Принимается налоговой по 31.12.2022. Удалить нужно в 2023 году.
   03.09.2021 / Сергей Н.}
  префикс_формата = СЛОВО!(1, ФайлИд, "_") + "_" + СЛОВО!(2, ФайлИд, "_")  //Префикс формата извлекается из Ид файла: R_T_A_O_GGGGMMDD_N. Где R_T - это префикс формата
  РЕЗУЛЬТАТ = (префикс_формата ИЗ ["ON_NSCHFDOPPR", "ON_NSCHFDOPPRMARK", "ON_NSCHFDOPPRPROS"] И ФайлВерсФорм = "5.01") ИЛИ  //УПД, формат 7-15/820. Версия 5.01
              (префикс_формата = "DP_REZRUISP"  И ФайлВерсФорм = "5.02") ИЛИ                                                //ДОУ, формат ММВ-7-10/552
              (префикс_формата = "DP_TOVTORGPR" И ФайлВерсФорм ИЗ ["5.01", "5.02"]) ИЛИ                                     //ДПТ, формат ММВ-7-10/551
              (префикс_формата = "ON_SCHFDOPPR" И ФайлВерсФорм ИЗ ["5.01", "5.02"])                                         //УПД, формат 7-15/155. Версия 5.01 или 5.02

КОНЕЦ_ФУНКЦИИ


ФУНКЦИЯ ЛОГИКА: ОпределитьФормат(СТРОКА: содержимое_файла; ПЕРЕМ СТРОКА: префикс_формата)
  {содержимое_файла - Содержимое файла XML;
   префикс_формата  - Префикс формата загружаемого файла;
   РЕЗУЛЬТАТ = ДА - формат определен.
  }
  РЕЗУЛЬТАТ = НЕТ
  ФайлИд = ""
  ФайлГУИД = ""
  ФайлВерсФорм = ""

  ЕСЛИ содержимое_файла == "" ТО  //сравнение без шаблонов / Сергей Н., 10.12.2020
    //СообщениеОшибкаИмпорта("Файл не найден или не определен тип файла.//Загрузка возможна из файлов обмена в формате xml.", вывести_сообщение)
    ЭДООшибкаИмпорта("Файл не найден или не определен тип файла.//Загрузка возможна из файлов обмена в формате xml.")
    ВЫХОД
  КОНЕЦ_ЕСЛИ

  ЕСЛИ ХМЛИмпортПроверитьСодержимое(содержимое_файла) ТО
    ХМЛ_ИзСтроки(содержимое_файла)
    всего = ХМЛ_Выбрать("Файл")
    ЕСЛИ всего > 0 ТО
      ХМЛ_Перейти(всего)
      //Доб. проверка атрибутов, чтобы не выводились ошибки при загрузке неформализованных документов / Сергей Н. 29.04.2021
      ЕСЛИ ХМЛ_ЕстьАтрибут("ВерсФорм") ТО
        ФайлВерсФорм = ХМЛ_ПолучитьАтрибут("ВерсФорм")
      КОНЕЦ_ЕСЛИ
      ЕСЛИ ХМЛ_ЕстьАтрибут("ИдФайл") ТО
        ФайлИд = ХМЛ_ПолучитьАтрибут("ИдФайл")
      КОНЕЦ_ЕСЛИ
      ФайлГУИД = СЛОВО!(6, ФайлИд, "_")  //ГУИД извлекается из Ид файла: R_T_A_O_GGGGMMDD_N. Где N - это ГУИД
      РЕЗУЛЬТАТ = ПроверитьФормат(префикс_формата)
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЕСЛИ

  ЕСЛИ НЕ РЕЗУЛЬТАТ ТО
    ЭДООшибкаИмпорта("Неизвестный формат файла обмена. " + ЭдоПоддержимаемыеФорматы + "//Загрузка остановлена.")
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЛОГИКА: ХМЛИмпортПроверитьСодержимое(СТРОКА: содержимое_файла)
  ИСПОЛЬЗОВАТЬ("c_common")
  ПЕРЕМ ОБЪЕКТ: xmlDoc, xmlErr
  ПЕРЕМ СТРОКА: строка_ошибки
  РЕЗУЛЬТАТ = НЕТ
  xmlDoc = СОЗДАТЬ_ОБЪЕКТ("MSXML2.DOMDocument")
  xmlDoc.async = НЕТ
  xmlDoc.validateOnParse = ДА
  xmlDoc.resolveExternals = ДА
  xmlDoc.loadXML(содержимое_файла)
  xmlErr = xmlDoc.parseError
  ЕСЛИ xmlErr.errorCode <> 0 ТО
    формат_ошибки = "Номер ошибки: %N//Строка: %L//Позиция в строке: %P//Ошибка: %E//Фрагмент файла: %T"
    строка_ошибки = формат_ошибки
    строка_ошибки = ЗАМ(строка_ошибки, "%N", СТР(xmlErr.errorCode))
    строка_ошибки = ЗАМ(строка_ошибки, "%F", СТР(xmlErr.filepos))
    строка_ошибки = ЗАМ(строка_ошибки, "%L", СТР(xmlErr.line))
    строка_ошибки = ЗАМ(строка_ошибки, "%P", СТР(xmlErr.linepos))
    строка_ошибки = ЗАМ(строка_ошибки, "%E", ЗаменитьУправляющиеСимволы(xmlErr.reason))
    строка_ошибки = ЗАМ(строка_ошибки, "%T", ЗаменитьУправляющиеСимволы(xmlErr.srcText))
    строка_ошибки = ЗАМ(строка_ошибки, "%U", ИМЯ_ФАЙЛА(СТР(xmlErr.url)))
    ЭДООшибкаИмпорта(строка_ошибки)
  ИНАЧЕ
    строка_ошибки = ""
    РЕЗУЛЬТАТ = ДА
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ СТРОКА: ЭдоПоддержимаемыеФорматы
  {Форматы ММВ-7-6/93@ (ON_SFAKT); ММВ-7-6/172@ (DP_OTORG12, DP_IAKTPRM) устарели в 2017 году, и начиная с 2021 уже не принимаются. Поэтому удалены.
   Формат ММВ-7-15/155@ (ON_SCHFDOPPR) устарел в 2019 году. Принимается налоговой по 31.12.2022. Удалить нужно в 2023 году.
   03.09.2021 / Сергей Н.}
  РЕЗУЛЬТАТ = "Программа поддерживает загрузку из XML-файлов следующих форматов://" +
              "   • формат приказа ФНС № ММВ-7-15/820@;//" +  //Префикс файла ON_SCHFDOPPR, ON_NSCHFDOPPR, ON_NSCHFDOPPRMARK, ON_NSCHFDOPPRPROS
              "   • формат приказа ФНС № ММВ-7-10/551@;//" +  //Префикс файла DP_TOVTORGPR
              "   • формат приказа ФНС № ММВ-7-10/552@;//" +  //Префикс файла DP_REZRUISP
              "   • формат приказа ФНС № ММВ-7-15/155@.//"    //Префикс файла ON_SCHFDOPPR
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЛОГИКА: ЭДОЗагрузитьХМЛ(СТРОКА: содержимое_файла; ПЕРЕМ ЧИСЛО: вид_документа; ЛОГИКА: вывести_сообщение = НЕТ)
  ИСПОЛЬЗОВАТЬ("xml")
  {содержимое_файла - Содержимое файла XML;
   вид_документа    - Возвращается вид загружаемого документа:
                      1 - СФ;
                      2 - ТОРГ-12;
                      3 - Акт;
                      4 - УПД.
   РЕЗУЛЬТАТ = ДА - удалось загрузить данные из файла xml.
   }

  ЕСЛИ НЕ ОпределитьФормат(содержимое_файла, префикс_формата) ТО
    ВЫХОД(НЕТ)
  КОНЕЦ_ЕСЛИ

  //УПД
  ЕСЛИ префикс_формата ИЗ ["ON_SCHFDOPPR", "ON_NSCHFDOPPR", "ON_NSCHFDOPPRMARK", "ON_NSCHFDOPPRPROS"] ТО
    РЕЗУЛЬТАТ = ЗагрузкаУПД(содержимое_файла, вывести_сообщение)
    вид_документа = 4

  //ДПТ
  ИНАЧЕ_ЕСЛИ префикс_формата = "DP_TOVTORGPR" ТО
    РЕЗУЛЬТАТ = ЗагрузкаДПТ(содержимое_файла, вывести_сообщение)
    вид_документа = 2

  //ПРУ, ДОУ
  ИНАЧЕ_ЕСЛИ префикс_формата = "DP_REZRUISP" ТО
    РЕЗУЛЬТАТ = ЗагрузкаДОУ(содержимое_файла, вывести_сообщение)
    вид_документа = 3
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЛОГИКА: ЭДОСоздатьПоступление(ЧИСЛО: вид_документа, выбор_программы; СТРОКА: код_склада; СТРОКА: гуид_документ = "")
  {вид_документа - Какой документ загружается:
                   1 - СФ;
                   2 - ТОРГ-12;
                   3 - Акт;
                   4 - УПД.
   код_склада    - На какой склад делать поступление}
  РЕЗУЛЬТАТ = НЕТ
  ЕСЛИ вид_документа = ПУСТО ТО ВЫХОД КОНЕЦ_ЕСЛИ
  ЕСЛИ выбор_программы = 1 ТО
    РЕЗУЛЬТАТ = ЗагрузкаДанныхДокТсОперации(вид_документа, код_склада, гуид_документ)
  ИНАЧЕ_ЕСЛИ выбор_программы = 2 ТО
    РЕЗУЛЬТАТ = ЗагрузкаДанныхДокБТМЦ(вид_документа, код_склада, гуид_документ)
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЧИСЛО: ЭДООпределитьПрограмму
  выбор = ИЗ_ЖУРНАЛА(тс_операции, б_тмц, эдо_сообщения)
  ЕСЛИ выбор = 3 ТО
    РЕЗУЛЬТАТ = ?(ЕСТЬ_ДОСТУП (тс_операции), 1, 2)
    ЕСЛИ ЕСТЬ_ДОСТУП (тс_операции) И ЕСТЬ_ДОСТУП(б_тмц) ТО
      РЕЗУЛЬТАТ = ЗАПРОС("Создать поступление в программе: ", "#Торговый склад;Бухгалтерия")
    КОНЕЦ_ЕСЛИ
  ИНАЧЕ
    РЕЗУЛЬТАТ = выбор
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЛОГИКА: ЭДОПолучитьСписокДокументов(ПЕРЕМ СТРОКА: документы_список!, документы_содержимое!)
  ЦИКЛ ИЗ_ЖУРНАЛА эдо_сообщения сообщ
    ЦИКЛ ДЕТАЛИ сообщ (док, эдо_документы)
      ЕСЛИ док.идлинк_дцу <> ПУСТО ИЛИ док.идлинк_жто <> ПУСТО ТО
        ПРОДОЛЖИТЬ
      КОНЕЦ_ЕСЛИ

      содержимое_файла = УБР_ПРОБ(док.ПОЛЕ("XmlContent"))
      //В записи сохраняются толкьо хмл документы. Если тут пусто - значит это не хмл. Таким документы пропускаем
      ЕСЛИ содержимое_файла == "" ТО //сравнение без шаблонов / Сергей Н., 10.12.2020
        ПРОДОЛЖИТЬ
      КОНЕЦ_ЕСЛИ

      //Пропускаем документ неподдерживаемого формата
      ЕСЛИ содержимое_файла != "" И НЕ ОпределитьФормат(содержимое_файла, префикс_формата) ТО  //сравнение без шаблонов / Сергей Н., 10.12.2020
        документы_пропуск[сообщ.идентиф_участника, ДатаГМД(док.дата), док.номер, СТР(док.гуид_документ)] = док.тип + " №" + док.номер  +  " от " + СТР(док.дата)
        ПРОДОЛЖИТЬ
      КОНЕЦ_ЕСЛИ

      инд = сообщ.идентиф_участника + РР + ДатаГМД(док.дата) + РР + док.номер + РР + СТР(док.гуид_документ)
      //изм. Оксана, 24.05.21, клиент берется теперь из эдо_сообщения
      документы_список!инд = сообщ.клиент + "|" + СТР(док.дата) + "|" + УБР_ПРОБ(док.номер) + "|" + док.тип + "|" + СТР(док.сумма) + "|" + СТР(док.ндс)
      документы_содержимое!инд = содержимое_файла
    КОНЕЦ_ЦИКЛА
  КОНЕЦ_ЦИКЛА

  РЕЗУЛЬТАТ = ВСЕГОМ(документы_список) > 0
  ЕСЛИ ВСЕГОМ(документы_список) = 0 И ВСЕГОМ(документы_пропуск) = 0 ТО
    СООБЩЕНИЕ("Нет XML-файлов для сохранения документов в журнале накладных.////" + ЭдоПоддержимаемыеФорматы)
  ИНАЧЕ_ЕСЛИ ВСЕГОМ(документы_пропуск) > 0 ТО
    СООБЩЕНИЕ("Были пропущены следующие документы://" +
              "   • " + СУММАМ(документы_пропуск, "*", ";//   • ") +
              "////Неизвестный формат файла обмена.//" + ЭдоПоддержимаемыеФорматы)
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ХМЛИмпортОператор
  //данные оператора ЭДО отправителя
  ХМЛ_ПерейтиПодч(ХМЛ_ВыбратьПодч("СвУчДокОбор/СвОЭДОтпр"))
  ПостОператорНазвание != ХМЛ_ПолучитьАтрибутПодч("НаимОрг")
  ПостОператорИНН != ХМЛ_ПолучитьАтрибутПодч("ИННЮЛ")
  ПостОператорИд != ХМЛ_ПолучитьАтрибутПодч("ИдЭДО")
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЭДОПоказатьОперации
  ЕСЛИ ВСЕГОМ(ЭДОТОИмпорт) > 0 ТО
    СТАРТ_ЖУРНАЛ!(тс_операции:"накладные", ид ИЗ ЭДОТОИмпорт, "Поступления, которые были сохранены в журнале ""Товарные операции""")
  КОНЕЦ_ЕСЛИ
  ЕСЛИ ВСЕГОМ(ЭДОДЦУИмпорт) > 0 ТО
    СТАРТ_ЖУРНАЛ!(б_тмц, ид ИЗ ЭДОДЦУИмпорт, "Поступления, которые были сохранены в журнале ""Движение ценностей и услуг""")
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЭДОПолучитьНашиФирмы(ПЕРЕМ ЛОГИКА: документы_выбор!)
  ОБНУЛИТЬ(ЭДОНашиФирмы)
  //Идентификатор ЭДО нашей фирмы указан в сообщении.
  //Поэтому определяем по каким сообщениям загружаются документы,
  //формируем список наших фирм в сообщениях
  ЦИКЛ ДЛЯ (док_выбор ИЗ документы_выбор)
    фирма_в_сообщ!СЛОВО!(1, док_выбор, РР) = ДА
  КОНЕЦ_ЦИКЛА
  ЦИКЛ ПО эдо_участники эдо_уч, с_клиенты.ип_фирма_ид фирма_ид (с_клиенты.ип_фирма_ид = с_фирмы_ид.ид+0 И эдо_уч.идентиф_участника ИЗ !фирма_в_сообщ, ДА)
    наши_фирмы!эдо_уч.идентиф_участника = фирма_ид
  КОНЕЦ_ЦИКЛА
  //Для каждого загружаемого документа запоминаем нашу фирму
  ЦИКЛ ДЛЯ (док_выбор ИЗ документы_выбор)
    ЭДОНашиФирмы!СЛОВО!(4, док_выбор, РР) = наши_фирмы!СЛОВО!(1, док_выбор, РР)
  КОНЕЦ_ЦИКЛА
КОНЕЦ_ФУНКЦИИ

ПЕРЕМ ЛОГИКА: ЭДОНужноВыбратьИд
ФУНКЦИЯ ЛОГИКА: ЗапросВыбораИдУчастников//(СТРОКА: код_фирмы, код_клиента)
  ЦИКЛ ПО эдо_участники уч (уч.код_клиента = ЭДОЭкспортПостКод ИЛИ уч.код_клиента = ЭДОЭкспортПокупКод)
    участники_ид_эдо[уч.код_клиента, уч.идентиф_участника] = уч.идентиф_участника
  КОНЕЦ_ЦИКЛА

  инд_пост = ЭДОЭкспортПостКод + РР + "*"
  всего_пост_ид = ВСЕГОМ(участники_ид_эдо, инд_пост)
  УчЭДОИдОтпр = ?(всего_пост_ид = 1, участники_ид_эдо!НАЙТИМ(участники_ид_эдо, инд_пост), "")

  инд_покуп = ЭДОЭкспортПокупКод + РР + "*"
  всего_покуп_ид = ВСЕГОМ(участники_ид_эдо, инд_покуп)
  УчЭДОИдПол = ?(всего_покуп_ид = 1, участники_ид_эдо!НАЙТИМ(участники_ид_эдо, инд_покуп), "")

  ЭДОНужноВыбратьИд = всего_пост_ид > 1 ИЛИ всего_покуп_ид > 1
  РЕЗУЛЬТАТ = ЭДОНужноВыбратьИд
КОНЕЦ_ФУНКЦИИ

ДИАЛОГ ЭДОМастерЭкспорта
ЗАКЛАДКА Шаг 1. Настройка выгрузки документов
 <Выберите вариант выгрузки>
  Сохранить в *$сохранить_в_журнал(["Каталог", "ЭДО. Исходящие"], выбРадиоГор):33

  В выбранном каталоге будут сохраняться файлы обмена электронных документов
  *~?дирф("c_edo", "ВыборДиректорииХМЛЭДО"):82

 <Выберите тип и формат электронных документов>
  Выбранные документы будут выгружены в файлы обмена, соответствующих выбранным форматам
  $выгрузка_сф("Счет-фактура")  *$выгрузка_сф_формат(    [{1} "В формате приказа ФНС 7-15/155 (с 01.07.2017). Функция СЧФ",         {2} "В формате приказа ФНС 7-15/820 (с 02.02.2019). Функция СЧФ"]):70
  $выгрузка_упд("УПД")           *$выгрузка_упд_формат(  [{1} "В формате приказа ФНС 7-15/155 (с 01.07.2017). Функция СЧФДОП, ДОП", {2} "В формате приказа ФНС 7-15/820 (с 02.02.2019). Функция СЧФДОП, ДОП"]):70
  $выгрузка_накл("Накладная")     *$выгрузка_накл_формат([{1} "В формате приказа ФНС 7-15/155 (с 01.07.2017). Функция ДОП",         {2} "В формате приказа ФНС 7-15/820 (с 02.02.2019). Функция ДОП",             {3} "В формате приказа ФНС 7-10/551 (с 09.01.2016). Документ о передаче товаров"]):70
  $выгрузка_акт("Акт")           *$выгрузка_акт_формат(  [{1} "В формате приказа ФНС 7-15/155 (с 01.07.2017). Функция ДОП",         {2} "В формате приказа ФНС 7-15/820 (с 02.02.2019). Функция ДОП",             {3} "В формате приказа ФНС 7-10/552 (с 09.01.2016). Документ об оказании услуг"]):70

  #~Настройка дополнительных параметров("c_edo", "НастройкаВыгрукиЭДО")
ЗАКЛАДКА Шаг 2. Выбор оператора ЭДО

 <Выберите оператора ЭДО нашей фирмы>
  Оператор электронного документооборота, в системе которого зарегистрирована наша фирма.//Электронные документы покупателю будут переданы через этого оператора.

  *~УчЭДОИдОтпр("","ВыборПостИд",выбЛист):86:4



 <Выберите оператора ЭДО покупателя>
  Оператор электронного документооборота, в системе которого зарегистрирован покупатель.//Через этого оператора покупатель будет получать электронные документы от нашей фирмы.

  *~УчЭДОИдПол("","ВыборПокупИд",выбЛист):86:4
ИЗМЕНЕНИЕ
  ЕСЛИ НЕ ЭДОНужноВыбратьИд ТО
    ПОСЛЕДНЯЯ_ЗАКЛАДКА = 1
  КОНЕЦ_ЕСЛИ
  //доб. Оксана, 11.2020 для выгрузки в эдо_исходящие
  ЕСЛИ сохранить_в_журнал  = 1  ТО
    ДОСТУП(дирф, ДА)
  ИНАЧЕ
    ДОСТУП(дирф, НЕТ)
  КОНЕЦ_ЕСЛИ
СЛЕДУЮЩАЯ
  ЕСЛИ ЗАКЛАДКА = 2 И сохранить_в_журнал  = 1  ТО
    ЕСЛИ НЕ СУЩ_ФАЙЛ(дирф) ТО
      СООБЩЕНИЕ("Каталог для сохранения не указан, либо не существует. Выберите каталог и повторите выгрузку", типОшибка)
      ЗАКЛАДКА = 1
      ФОКУС(дирф)
    КОНЕЦ_ЕСЛИ
  КОНЕЦ_ЕСЛИ

ВЫЧИСЛИТЬ
  ИСПОЛЬЗОВАТЬ("b_eksport", "xml", "import_xml", "c_common", "c_edo", "c_blank_output", б_тмц)
  ХРАНИТЬ(дирф,
          выгрузка_сф, выгрузка_упд, выгрузка_накл, выгрузка_акт,
          выгрузка_сф_формат, выгрузка_упд_формат, выгрузка_накл_формат, выгрузка_акт_формат,
          сохранить_в_журнал)

  //Изм. 04.08.2015 / Сергей Н. / доб. условие на б_тмц.
  опер ЭТО тс_операции
  тмц ЭТО б_тмц
  выбор = ИЗ_ЖУРНАЛА(тмц, опер)
  ЕСЛИ выбор = 0 ТО
    СТОП_ВСЕ("Не выбрана операция")
  КОНЕЦ_ЕСЛИ

  //По умолчанию используем самый новый формат выгрузки / 21.02.2019, Сергей Н.
  выгрузка_сф_формат ?= 2
  выгрузка_упд_формат ?= 2
  выгрузка_накл_формат ?= 2
  выгрузка_акт_формат ?= 3

  //Определение статуса УПД / 28.01.2020, Сергей Н.
  ЕСЛИ выбор = 1  ТО
    статус_упд = тмц.СтатусУПД
  КОНЕЦ_ЕСЛИ
  ЕСЛИ выбор = 2  ТО
    статус_упд = опер.СтатусУПД
  КОНЕЦ_ЕСЛИ

  ЕСЛИ выбор = 1 ТО
    ВЫБРАТЬ с_клиенты.код ЭДОЭкспортПостКод (с_клиенты.ип_фирма_ид = :НЕ_ПУСТО(тмц.фирма, ТЕК_ФИРМА))
    ВЫБРАТЬ с_клиенты.код ЭДОЭкспортПокупКод (с_клиенты.код = тмц.ПолучитьКодКонтрагента)
  ИНАЧЕ_ЕСЛИ выбор = 2 ТО
    ЭДОЭкспортПостКод = опер.код_фирмы
    тс_виды_то.НАЙТИ(ид = опер.вид_то_ид)
    ЭДОЭкспортПокупКод = ?(тс_виды_то.ид_стр = "комис_отчет", опер.комитент_код, опер.код_клиента)
  КОНЕЦ_ЕСЛИ
  ЗапросВыбораИдУчастников
  ФИОПолностью = ДА
ВВЕСТИ
  ОБНУЛИТЬ(ЭДОДокументыПуть)

  ЦИКЛ ПОКА(ЭДОНужноВыбратьИд И (УчЭДОИдОтпр = "" ИЛИ УчЭДОИдПол = ""))
    ошибка += ?(УчЭДОИдОтпр = "", "Не выбран оператор ЭДО нашей фирмы.//", "")
    ошибка += ?(УчЭДОИдПол = "", "Не выбран оператор ЭДО покупателя.//", "")
    СООБЩЕНИЕ(ошибка + "Выберите оператора и повторите выгрузку.", типОшибка)
    ошибка = ""
    ЕСЛИ УчЭДОИдОтпр = "" ТО ФОКУС(УчЭДОИдОтпр)
    ИНАЧЕ_ЕСЛИ УчЭДОИдПол = "" ТО ФОКУС(УчЭДОИдПол)
    КОНЕЦ_ЕСЛИ
    ВВЕСТИ
  КОНЕЦ_ЦИКЛА

  //Определяем УПД с какой функцией выгружать / 21.02.2019, Сергей Н.
  //Функция СЧФ: Если СФ выгружается по форматам 155, 820
  выгрузка_упд_счф = выгрузка_сф И выгрузка_сф_формат ИЗ [1, 2]
  //Функция СЧФДОП: Если УПД выгружается по форматам 155, 820
  //УПД с СЧФДОП соответсвует статусу 1 / 28.01.2020, Сергей Н.
  выгрузка_упд_счфдоп = выгрузка_упд И выгрузка_упд_формат ИЗ [1, 2] И статус_упд = 1
  // Функция выгрузки акта выполненных работ, оказанных услуг по формату Приказа от 30.11.2015 N ММВ-7-10/552@
  выгрузка_доу = выгрузка_акт И выгрузка_акт_формат = 3
  //Функция ДОП
  выгрузка_упд_доп = (выгрузка_упд И выгрузка_упд_формат ИЗ [1, 2] И статус_упд = 2) ИЛИ  //УПД со статусом 2 / 28.01.2020, Сергей Н.
                     (выгрузка_накл И выгрузка_накл_формат ИЗ [1, 2]) ИЛИ                 //Накладная
                     (выгрузка_акт И выгрузка_акт_формат ИЗ [1, 2])                       //Акт
  выгрузка_дпт = выгрузка_накл И выгрузка_накл_формат = 3

  //доб. Оксана, 11.2020 для выгрузки в эдо_исходящие
  создать_сообщение = НЕТ
  дирф_темп = дирф
  ЕСЛИ сохранить_в_журнал  = 2 ТО
    ЕСЛИ (выбор = 2 И СУЩ(эдо_документы.идлинк_жто = опер.ид)) ИЛИ
         (выбор = 1 И СУЩ(эдо_документы.идлинк_дцу = тмц.ид)) ТО
      ЕСЛИ ВОПРОС("В журнале <ЭДО. Исходящие> уже есть связанное сообщение. Создать новое сообщение?") ТО
        создать_сообщение = ДА
      ИНАЧЕ
        ВЫХОД
      КОНЕЦ_ЕСЛИ
    ИНАЧЕ
      создать_сообщение = ДА
    КОНЕЦ_ЕСЛИ
    дирф_темп = дирф
    дирф = ДИР_ВРЕМЕННАЯ
  КОНЕЦ_ЕСЛИ


   //Замена версии "5.01.995" на "5.02.995" для форммата ММВ-7-15/155 согласно редакции от 08.04.2019 / Сергей Н., 28.01.2020
   //Доб. 13.06.2017 / Сергей Н. / Новый формат
   //Выгрузка УПД, с разными функциями
   //СЧФ: СФ
   ЕСЛИ выгрузка_упд_счф ТО
     ВыгрузкаУПД(дирф, "СЧФ", ?(выгрузка_сф_формат = 1, "5.02.995", "5.01.997"))
   КОНЕЦ_ЕСЛИ
   //СЧФДОП: СФ + Накл. (акт)
   ЕСЛИ выгрузка_упд_счфдоп ТО
     ВыгрузкаУПД(дирф, "СЧФДОП", ?(выгрузка_упд_формат = 1, "5.02.995", "5.01.997"))
   КОНЕЦ_ЕСЛИ
   //ДОП: Накл. (акт)
   ЕСЛИ выгрузка_упд_доп ТО
     //Если выбрали для выгрузки накладной и акта два разных новых формата (например, для накладной 155, для акта 820), то формируем два файла выгрузки, по старому и новому формату
     ЕСЛИ выгрузка_накл ИЛИ (выгрузка_акт И НЕ выгрузка_доу) ТО
       ЕСЛИ выгрузка_накл_формат <> выгрузка_акт_формат ТО
         //Выгрузка ДОП для флажка Накладная
         ЕСЛИ выгрузка_накл ТО
           ВыгрузкаУПД(дирф, "ДОП", ?(выгрузка_накл_формат = 1, "5.02.995", "5.01.997"))
         КОНЕЦ_ЕСЛИ
         //Выгрузка ДОП для флажка Акт
         ЕСЛИ выгрузка_акт И НЕ выгрузка_доу ТО
           ВыгрузкаУПД(дирф, "ДОП", ?(выгрузка_акт_формат = 1, "5.02.995", "5.01.997"))
         КОНЕЦ_ЕСЛИ
       ИНАЧЕ
         //Выгрузка ДОП для случая, когда вклчены флажки Накладная, Акт и у них одинаковый новый формат (155 или 820)
         ВыгрузкаУПД(дирф, "ДОП", ?(выгрузка_накл_формат = 1, "5.02.995", "5.01.997"))
       КОНЕЦ_ЕСЛИ
     КОНЕЦ_ЕСЛИ
     //Выгрузка УПД с функцией ДОП (УПД со статусом 2) / 28.01.2020, Сергей Н.
     ЕСЛИ выгрузка_упд ТО
       ВыгрузкаУПД(дирф, "ДОП", ?(выгрузка_упд_формат = 1, "5.02.995", "5.01.997"))
     КОНЕЦ_ЕСЛИ
   КОНЕЦ_ЕСЛИ
   // Выгрузка акта выполненных работ, оказанных услуг по формату Приказа от 30.11.2015 N ММВ-7-10/552@
   ЕСЛИ выгрузка_доу ТО
     ВыгрузкаДОУ(дирф)
   КОНЕЦ_ЕСЛИ
   ЕСЛИ выгрузка_дпт ТО
     ВыгрузкаДПТ(дирф)
   КОНЕЦ_ЕСЛИ

  //доб. Оксана, 11.2020 для выгрузки в эдо_исходящие
   дирф = дирф_темп
   ЕСЛИ ВСЕГОМ(ЭДОЭкспортОшибки) = 0 И сохранить_в_журнал  = 2 И создать_сообщение ТО
     ЭДОСохранитьВИсходящие(опер, тмц, выбор)
   КОНЕЦ_ЕСЛИ
КОНЕЦ_ДИАЛОГА

ФУНКЦИЯ СТРОКА: ЭДОИмяФайлаХМЛ(СТРОКА: префикс; ДАТА: дата)
  ИСПОЛЬЗОВАТЬ("c_common")
  РЕЗУЛЬТАТ = префикс     + "_" +
              УчЭДОИдПол  + "_" +  //идентификатор получателя СФ (покупателя)
              УчЭДОИдОтпр + "_" +  //идентификатор отправителя СФ (продавца/поставщика)
              ЗАМ(ДатаГМД(дата), ".", "")  + "_" +
              СТР(ГУИД)   + ".XML"
КОНЕЦ_ФУНКЦИИ




ФУНКЦИЯ СведенияОбУчастникеЭДОВыгрузкаДПТ(СТРОКА: имя_тега; СТРОКА: контр_код; ЛОГИКА: адрес_рф; ЛОГИКА: контр_банк_рекв)
  //определяем контрагнета
  контр ЭТО с_клиенты
  контр.НАЙТИ(код = контр_код)

  //окпо контрагента
  контр_окпо = ?(имя_тега = "ГрузОтпр", ОкпоГрузоотправитель,
               ?(имя_тега = "ГрузПолуч", ОкпоГрузополучатель,
               ?(имя_тега = "Продавец", ОкпоПост,
               ?(имя_тега = "Покупатель", ОкпоПокуп, ""))))

  // КПП
  контр_кпп = ?(имя_тега = "ГрузОтпр", КппГрузоотправитель,
              ?(имя_тега = "ГрузПолуч", КппГрузополучатель,
              ?(имя_тега = "Продавец", КппПост,
              ?(имя_тега = "Покупатель", КппПокуп, ""))))

  // Адрес
  контр_адрес = ХМЛ_ЗаменитьСпецсимволы(?(имя_тега = "ГрузОтпр", АдресСкрытГрузоотправитель,
                ?(имя_тега = "ГрузПолуч", АдресСкрытГрузополучатель,
                ?(имя_тега = "Продавец", АдресСкрытПост,
                ?(имя_тега = "Покупатель", АдресСкрытПокуп, "")))))

  //структурное подразделение. только для нашей фирмы
  структ_подр = ?(КлиентНашаФирма(контр.код), ХМЛ_ЗаменитьСпецсимволы(Подразделение) , "")

  ОткрытьТег(имя_тега, ?(контр_окпо = "", "", "ОКПО=" + """" + контр_окпо + """") + //ОКПО, необ.
                       ?(структ_подр = "", "", " СтруктПодр=" + """" + структ_подр + """")  //Структурное подразделение, необ.
             )

    //ИдСв - Сведения о контрагенте
    ОткрытьТег("ИдСв", "")
      ЕСЛИ контр.юр_физ = юрФиз ТО
        ОткрытьТег("СвФЛ", ?(контр.инн = "", "", "ИННФЛ=" + """" + контр.инн + """")) //атриб необ
          ЕСЛИ контр.руководитель <> "" ТО
            ЗаписатьСтроку("ФИОИП Фамилия=" + """" + СЛОВО(1, контр.руководитель) + """" +
                                " Имя=" + """" + СЛОВО(2, контр.руководитель) + """" +
                                ?(СЛОВО(3, контр.руководитель) = "", "", " Отчество=" + """" + СЛОВО(3, контр.руководитель) + """"), "")//необ
          КОНЕЦ_ЕСЛИ
        ЗакрытьТег//СвФЛ
      ИНАЧЕ
        //СвЮЛУч - Юр. лицо определяем по длине ИНН (10 цифр)
        ЕСЛИ ДЛИНА(контр.инн) = 10 ТО
          ОткрытьТег("СвОрг", "")
            ЗаписатьСтроку("СвЮЛ НаимОрг=" + """" + ХМЛ_ЗаменитьСпецсимволы(контр.название) + """" +
                                 " ИННЮЛ=" + """" + контр.инн + """" +
                                 ?(контр_кпп = "", "", " КПП=" + """" + контр_кпп + """"), "")  //необ.
          ЗакрытьТег //СвОрг
        ИНАЧЕ
          //СвИП - Сведения об ИП
          ОткрытьТег("СвИП", "ИННФЛ=" + """" + контр.инн + """" +
                             ?(контр.реквизиты_ип <> "", " СвГосРегИП=" + """" + контр.реквизиты_ип + """", "")
                    )

            ЕСЛИ контр.руководитель = "" ТО
                ЭДООшибкаЭкспорта("Не заполнено поле ""Руководитель"" у контрагента """ + контр.название + " (" + контр.код + ").")
            КОНЕЦ_ЕСЛИ
            ЗаписатьСтроку("ФИО Фамилия=" + """" + СЛОВО(1, контр.руководитель) + """" +
                                " Имя=" + """" + СЛОВО(2, контр.руководитель) + """" +
                                ?(СЛОВО(3, контр.руководитель) = "", "", " Отчество=" + """" + СЛОВО(3, контр.руководитель) + """"), "")//необ

          ЗакрытьТег//СвИП
        КОНЕЦ_ЕСЛИ
      КОНЕЦ_ЕСЛИ

    ЗакрытьТег//ИдСв

    ЕСЛИ контр_адрес = "" ТО
      ЭДООшибкаЭкспорта("Адрес " +
                ?(имя_тега = "ГрузОтпр", "грузоотправителя",
                ?(имя_тега = "ГрузПолуч", "грузополучателя",
                ?(имя_тега = "Продавец", "продавца",
                "покупателя"))) +
                " " + контр.название + " (" + контр.код + ")" + " не задан, либо не соответствует ФИАС")
    ИНАЧЕ
      ОткрытьТег("Адрес", "")
        ЕСЛИ адрес_рф ТО
          //АдрРФ
          ЗаписатьСтроку("АдрРФ" + ?(УБР_ПРОБ(СЛОВО!(10, контр_адрес, ",")) = "", "", " Индекс=" + """" + УБР_ПРОБ(СЛОВО!(10, контр_адрес, ",")) + """") +
                                   " КодРегион=" + """" + СЛОВО!(1, контр_адрес, ",") + """" +
                                   ?(УБР_ПРОБ(СЛОВО!(3, контр_адрес, ",")) = "", "", " Район=" + """" + УБР_ПРОБ(СЛОВО!(3, контр_адрес, ",")) + """") +
                                   ?(УБР_ПРОБ(СЛОВО!(4, контр_адрес, ",")) = "", "", " Город=" + """" + УБР_ПРОБ(СЛОВО!(4, контр_адрес, ",")) + """") +
                                   ?(УБР_ПРОБ(СЛОВО!(5, контр_адрес, ",")) = "", "", " НаселПункт=" + """" + УБР_ПРОБ(СЛОВО!(5, контр_адрес, ",")) + """") +
                                   ?(УБР_ПРОБ(СЛОВО!(6, контр_адрес, ",")) = "", "", " Улица=" + """" + УБР_ПРОБ(СЛОВО!(6, контр_адрес, ",")) + """") +
                                   ?(УБР_ПРОБ(СЛОВО!(7, контр_адрес, ",")) = "", "", " Дом=" + """" + УБР_ПРОБ(СЛОВО!(7, контр_адрес, ",")) + """") +
                                   ?(УБР_ПРОБ(СЛОВО!(8, контр_адрес, ",")) = "", "", " Корпус=" + """" + "корп." + УБР_ПРОБ(СЛОВО!(8, контр_адрес, ",")) + """") +
                                   ?(УБР_ПРОБ(СЛОВО!(9, контр_адрес, ",")) = "", "", " Кварт=" + """" + УБР_ПРОБ(СЛОВО!(9, контр_адрес, ",")) + """"), "")

        ИНАЧЕ
          //Пока не используем (необ.)
          ЗаписатьСтроку("АдрИнф КодСтр=" + """" + "" + """" +
                                  " АдрТекст=" + """" + "" + """", "")
        КОНЕЦ_ЕСЛИ
      ЗакрытьТег//Адрес
    КОНЕЦ_ЕСЛИ

    //Контакт - контакт контрагента (грузоотправителя, получателя, поставщика или покупателя)
    //Телефон контакта
    контр_тел_факс = ?(имя_тега = "Груз*", контр.тел_факс,    //тел. грузоотпрв/получ
                     ?(имя_тега = "Продавец", ТелПост,          //тел. поставщика
                     ?(имя_тега = "Покупатель", ТелПокуп, "")))  //тел. покупателя
    //Емаил контакта
    контр_емаил = ?(имя_тега = "Груз*", контр.электронный_адрес,        //емаил грузоотпрв/получ
                  ?(имя_тега = "Продавец", ЭлектронныйАдресПост,          //емаил поставщика
                  ?(имя_тега = "Покупатель", ЭлектронныйАдресПокуп, "")))  //емаил покупателя
    //Выгружаем тег, если есть телефон или емаил
    ЕСЛИ УБР_ПРОБ(контр_тел_факс) <> "" ИЛИ контр_емаил <> "" ТО
      ЗаписатьСтроку("Контакт" + ?(контр_тел_факс <> "", " Тлф=" + """" + ХМЛ_ЗаменитьСпецсимволы(контр_тел_факс) + """", "") +   //необ.
                                 ?(контр_емаил <> "", " ЭлПочта=" + """" + ХМЛ_ЗаменитьСпецсимволы(контр_емаил) + """", ""), "")  //необ.
    КОНЕЦ_ЕСЛИ

    //БанкРекв - банковские реквизиты
    //если опция выводит банк. реквизиты = ДА, то выгружаем данный тег
    ЕСЛИ контр_банк_рекв ТО
      контр_банк = ?(имя_тега = "Груз*", контр.банк,         //банк грузоотпрв/получ
                   ?(имя_тега = "Продавец", БанкПост,          //банк продавца
                   ?(имя_тега = "Покупатель", БанкПокуп, "")))  //банк покупателя

      контр_бик = ?(имя_тега = "Груз*", контр.бик,         //бик грузоотпрв/получ
                  ?(имя_тега = "Продавец", БИКПост,          //бик продавца
                  ?(имя_тега = "Покупатель", БИКПокуп, "")))  //бик покупателя

      контр_рс = ?(имя_тега = "Груз*", контр.рс,          //рс грузоотпрв/получ
                 ?(имя_тега = "Продавец", РСПост,           //рс продавца
                 ?(имя_тега = "Покупатель", РСПокуп,  "")))  //рс покупателя

      контр_кс = ?(имя_тега = "Груз*", контр.кс,          //рс грузоотпрв/получ
                 ?(имя_тега = "Продавец", КСПост,           //рс продавца
                 ?(имя_тега = "Покупатель", КСПокуп,  "")))  //рс покупателя

      //если расч.счета, кор. счета, наименования банка и его бик нет, то тег БанкРекв не выгружаем (необ.)
      ЕСЛИ контр_рс <> ""  И контр_банк <> "" И контр_бик <> "" И контр_кс <> "" ТО
        ОткрытьТег("БанкРекв", ?(контр_рс = "", "", "НомерСчета=" + """" + контр_рс +""""))
          //если наименования банка и его бик нет, то тег СвБанк не выгружаем (необ.)
          ЕСЛИ контр_банк <> "" И контр_бик <> "" И контр_кс <> "" ТО
            ЗаписатьСтроку("СвБанк" + ?(контр_банк = "", "", " НаимБанк=" + """" + ХМЛ_ЗаменитьСпецсимволы(контр_банк) + """") + //необ.
                                      ?(контр_бик = "", "", " БИК=" + """" + контр_бик + """") + //необ.
                                      ?(контр_кс = "", "", " КорСчет=" + """" + контр_кс + """"), "")
          КОНЕЦ_ЕСЛИ
        ЗакрытьТег //БанкРекв
      КОНЕЦ_ЕСЛИ
    КОНЕЦ_ЕСЛИ
  ЗакрытьТег
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЖУРНАЛ(с_упаковки) ЛОГИКА: НайтиУпаковку(СТРОКА: код_товара, упаковка_название; ЧИСЛО: кол_в_упак)
  /*Поиск упаковки по названию и количеству в упаковке, в зависимости от опции УПАКОВКА_ОБЩАЯ.
  Если упаковка найдена, то РЕЗУЛЬТАТ = ДА, иначе РЕЗУЛЬТАТ = НЕТ.
  Сергей Н., 07.12.2020
  */
  РЕЗУЛЬТАТ = НЕТ
  ЕСЛИ упаковка_название = "" ТО
    ВЫХОД(НЕТ)
  КОНЕЦ_ЕСЛИ
  ф = с_упаковки.ФИЛЬТР
  ф_кол = с_упаковки.ФИЛЬТР(кол = кол_в_упак)
  ЕСЛИ УПАКОВКА_ОБЩАЯ = 0 ТО
    ф.УСЛОВИЕ(название = упаковка_название И ф_кол)
  КОНЕЦ_ЕСЛИ
  ЕСЛИ УПАКОВКА_ОБЩАЯ = 1 ТО
    ЦИКЛ ПО ЖУРНАЛУ с_товары_родители(код_товара) ур
      группы!ур.результат = ур.результат
    КОНЕЦ_ЦИКЛА
    //если внешний_ид = ПУСТО, то будет найдена упаковка, которая никому не принадлежит
    ф.УСЛОВИЕ(название = упаковка_название И (внешний_ид ИЗ !группы ИЛИ внешний_ид = ПУСТО) И ф_кол)
  КОНЕЦ_ЕСЛИ
  ЕСЛИ УПАКОВКА_ОБЩАЯ = 2 ТО
    //если внешний_ид = ПУСТО, то будет найдена упаковка, которая никому не принадлежит
    ф.УСЛОВИЕ(название = упаковка_название И (внешний_ид = код_товара ИЛИ внешний_ид = ПУСТО) И ф_кол)
  КОНЕЦ_ЕСЛИ
  РЕЗУЛЬТАТ = СВОЕ.НАЙТИ(ф)
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЖУРНАЛ(с_упаковки) ДобавитьУпаковку(СТРОКА: код_товара, упаковка_название; ЧИСЛО: кол_в_упаковке)
  /*Добавление новой упаковки.
  Сергей Н., 07.12.2020*/
  ЕСЛИ упаковка_название = "" ТО
    ВЫХОД
  КОНЕЦ_ЕСЛИ
  внешний_ид = ПУСТО
  ЕСЛИ УПАКОВКА_ОБЩАЯ = 1 ТО
    ВЫБРАТЬ с_товары.родитель внешний_ид (с_товары.код = код_товара)
  КОНЕЦ_ЕСЛИ
  ЕСЛИ УПАКОВКА_ОБЩАЯ = 2 ТО
    внешний_ид = код_товара
  КОНЕЦ_ЕСЛИ
  название = упаковка_название
  кол = кол_в_упаковке
  ДОБАВИТЬ!!(НЕТ)
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ПолучитьУпаковки(ПЕРЕМ СТРОКА: тов_ид!)
  /* Получние упаковок товаров: ТовУпаковкаИд.
  Для УПД информация по упаковкам загружается из честного знака в ф-ии ЭДОЭтоУпаковка - только для сигарет
  Сергей Н., 07.12.2020*/
  //Если нет упаковок, то выходим
  ЕСЛИ НЕ ВКЛ_УПАКОВКИ ИЛИ ВСЕГОМ(ТовУпаковка) = 0 ТО
    ВЫХОД
  КОНЕЦ_ЕСЛИ
  ЦИКЛ ДЛЯ (и_тов ИЗ тов_ид)
    уп ЭТО с_упаковки
    ЕСЛИ НЕ уп.НайтиУпаковку(тов_ид!и_тов, ТовУпаковка!и_тов, ЗНАЧ(ТовКолвоВУп!и_тов)) ТО
      уп.ДобавитьУпаковку(тов_ид!и_тов, ТовУпаковка!и_тов, ЗНАЧ(ТовКолвоВУп!и_тов))
    КОНЕЦ_ЕСЛИ
    ТовУпаковкаИд!и_тов = уп.ид
  КОНЕЦ_ЦИКЛА
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ  ВыборКатегорииТовара
  ЖУРНАЛ_ВЫБРАТЬ(с_товары_категории, вкл = ДА)
КОНЕЦ_ФУНКЦИИ
// юра добавил выбор категории товара и группы
ФУНКЦИЯ  СправочникЕдениц  // юрий добавил для выбора группы
 ЖУРНАЛ_ВЫБРАТЬ(с_единицы, название <>"" )
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ  ВыборКатегорииГруппы  // юрий добавил для выбора группы
 ЖУРНАЛ_ВЫБРАТЬ(с_товары, кол_подуровней <>0 )
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЖУРНАЛ(тс_операции) ЭДОПолучитьМарки
  ОБНУЛИТЬ(ТовНомУпак, ТовКИЗ)

  ЦИКЛ ПО ЖУРНАЛУ с_товары_категории кат
    категории!кат.ид = кат.маркировка
  КОНЕЦ_ЦИКЛА

  ЦИКЛ ДЛЯ (инд ИЗ ИдЗаписиСостава)
    марк_ном = 1
    ЦИКЛ ПО ЖУРНАЛУ тс_операции_доп доп, тс_операции_доп_марки доп_марки (доп_марки.идлинк_тс_опер = :СВОЕ.ид И доп_марки.идлинк = :ИдЗаписиСостава!инд)
      ЕСЛИ категории!доп.группа_ид <> тов_маркНет ТО
        ЕСЛИ категории!доп.группа_ид = тов_маркТабак ТО
          ЕСЛИ ПОЗ("8005", доп_марки.суффикс) = 0 ТО
            ТовКИЗ[инд +РР+ СТРМ(марк_ном)] = доп_марки.марка
          ИНАЧЕ
            ТовНомУпак[инд +РР+ СТРМ(марк_ном)] = доп_марки.марка + доп_марки.суффикс
          КОНЕЦ_ЕСЛИ
        ИНАЧЕ_ЕСЛИ категории!доп.группа_ид = тов_маркШины ТО
          ТовКИЗ[инд +РР+ СТРМ(марк_ном)] = доп_марки.марка
        ИНАЧЕ
          ТовНомУпак[инд +РР+ СТРМ(марк_ном)] = доп_марки.марка
        КОНЕЦ_ЕСЛИ
        марк_ном++
      КОНЕЦ_ЕСЛИ
    КОНЕЦ_ЦИКЛА
  КОНЕЦ_ЦИКЛА
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ХМЛЭкспортУПДНомСредИдентТов(СТРОКА: и)
  /*
  Для каждой позиции в составе выгружаем "Номера средств идентификации товаров".
  Сергей Н., 15.02.2021
  */
  ИСПОЛЬЗОВАТЬ("xml")
  //Если есть номера упаковок или КИЗ, то выгружаем их
  ЕСЛИ НАЙТИМ(ТовНомУпак, и + РР + "*") <> "" ИЛИ
       НАЙТИМ(ТовКИЗ, и + РР + "*") <> "" ТО
    ОткрытьТег("НомСредИдентТов", "")
      //НомУпак
      ЦИКЛ ДЛЯ (и_идент ИЗ ТовНомУпак, и + РР + "*")
        ОдинарныйТег = НЕТ
          ЗаписатьСтроку("НомУпак", ХМЛ_ЗаменитьСпецсимволы(ТовНомУпак!и_идент))
        ОдинарныйТег = ДА
      КОНЕЦ_ЦИКЛА
      //КИЗ
      ЦИКЛ ДЛЯ (и_идент ИЗ ТовКИЗ, и + РР + "*")
        ОдинарныйТег = НЕТ
          ЗаписатьСтроку("КИЗ", ХМЛ_ЗаменитьСпецсимволы(ТовКИЗ!и_идент))
        ОдинарныйТег = ДА
      КОНЕЦ_ЦИКЛА
    ЗакрытьТег //НомСредИдентТов
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЛОГИКА: СканироватьШтрихКод(ПЕРЕМ СТРОКА: стр)
  /*Поиск товара в базе для сопоставления путем сканирования штрих-кода
  16.03.2021, Сергей Н.*/
  РЕЗУЛЬТАТ = НЕТ
  источник != ""
  событие != ""
  ТовКодСкан = ""
  СопостСканированием = НЕТ

  ЕСЛИ ЗАПРОС_ВНЕШНЕГО_СОБЫТИЯ("Считайте штрих-код товара для поиска товара в базе//или нажмите ""Отмена""", источник, событие, штрих_код_скан, ДА) И штрих_код_скан <> "" ТО
    РЕЗУЛЬТАТ = ДА
    СопостСканированием = ДА  //Указываем что отсканировали ШК
    ф_шк_врем = ФильтрПоШтрихКоду //Запоминаем предыдущий фильтр по ШК (для случая если товар автоматически был найден по ШК)
    штрих_коды!штрих_код_скан = ДА
    //Если сущетвует только одна запись с этим ШК, то определяем код_товара  / 01.07.2021, Сергей Н.
    ЕСЛИ ЕстьТоварСШтрихКодом(штрих_коды, нашли_всего) И нашли_всего = 1 ТО
      ВЫБРАТЬ с_товары.код ТовКодСкан (ФильтрПоШтрихКоду)
    //Иначе, если в базе несколько товаров с одним ШК, то выводим список таких товаров, для выбора
    ИНАЧЕ_ЕСЛИ нашли_всего > 1 ТО
      РежимСопост = "штрих_код" //указываем что нашли товар по ШК, в окне выбора товары будут фильтроваться по этому ШК
      ЗаголовокВыбораТовара = "Выберите ТМЦ или услугу (Отфильтровано по штрих-коду: " + штрих_код_скан + ")" //Заголовк окна выбора
      ВыборТовара(ТовКодСкан)
    КОНЕЦ_ЕСЛИ
    ФильтрПоШтрихКоду = ф_шк_врем  //Восстанавливаем фильтр по ШК
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЛОГИКА: ЕстьТоварСШтрихКодом(ПЕРЕМ ЛОГИКА: штрих_коды!; ПЕРЕМ ЧИСЛО: нашли_всего)
  /* Определение, существуют ли с указанными штрих-кодами товары.
  штрих_коды  - массив штрих-кодов, по которому будет найден товар.
  нашли_всего - сколько товаров нашли с указанными штрих-кодами.
  01.07.2021, Сергей Н.*/
  РЕЗУЛЬТАТ = НЕТ
  //Определяем коды товаров с указанными ШК
  ЦИКЛ ПО с_штрих_коды шк (с_штрих_коды.название ИЗ !штрих_коды)
    тов_шк!шк.идлинк = ДА
    РЕЗУЛЬТАТ = ДА
  КОНЕЦ_ЦИКЛА
  ФильтрПоШтрихКоду = с_товары.ФИЛЬТР(с_товары.код ИЗ !тов_шк)
  нашли_всего = ВСЕГОМ(тов_шк)
  //Если сущетвует только одна запись с этим фильтром, то определяем код_товара
  //РЕЗУЛЬТАТ = ВЫБРАТЬ ВСЕГО(с_товары.код) нашли_всего (ФильтрПоШтрихКоду)
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ СТРОКА: ПолучитьШтрихКоды(СТРОКА: тов_код; ПЕРЕМ СТРОКА: штрих_коды!)
  /*Получение для товара массива с его штрих-кодами. Нужно в окне сопоставления товаров.

  тов_код - код товара, для которого будут считываться штрих-коды.
  штрих_коды - штрих-коды указанного товара.

  РЕЗУЛЬТАТ = строка - перечисление штрих-кодов через ",".
  16.03.2021, Сергей Н.*/
  ОБНУЛИТЬ(штрих_коды)
  ЦИКЛ ПО с_товары тов, с_штрих_коды.название штрих_код (тов.код = тов_код)
    СООБЩЕНИЕ (штрих_код)
    штрих_коды!штрих_код = штрих_код
  КОНЕЦ_ЦИКЛА
  РЕЗУЛЬТАТ = СУММАМ(штрих_коды, "*", "; ")
КОНЕЦ_ФУНКЦИИ


ФУНКЦИЯ ЭДОСохранитьВИсходящие(ПЕРЕМ ЖУРНАЛ(тс_операции): опер; ПЕРЕМ ЖУРНАЛ(б_тмц): тмц; ЧИСЛО: выбор)
  ИСПОЛЬЗОВАТЬ("Edo")



  рез_вложения = НЕТ
  ЕСЛИ выбор = 2 ТО
    ЦИКЛ ПО ЖУРНАЛУ с_связанные_ссылки вложения_ссылки (журнал = "тс_операции" И ид_записи = СТР(опер.ид))
      ЕСЛИ НЕ СУЩ_ФАЙЛ(вложения_ссылки.ссылка) ТО
        ПРОДОЛЖИТЬ
      КОНЕЦ_ЕСЛИ
      вложение_инфо!вложения_ссылки.ид = вложения_ссылки.описание + "(" +  ИМЯ_ФАЙЛА(вложения_ссылки.ссылка) + ")"
      вложение_путь!вложения_ссылки.ид = вложения_ссылки.ссылка
      вложение_выбор!вложения_ссылки.ид = ДА
    КОНЕЦ_ЦИКЛА
    ВЫБРАТЬ тс_операции.код_фирмы к_фирмы (ид = опер.ид)
    ВЫБРАТЬ с_клиенты мы (код = к_фирмы)
  ИНАЧЕ
    ЦИКЛ ПО ЖУРНАЛУ с_связанные_ссылки вложения_ссылки (журнал = "б_тмц" И ид_записи = СТР(тмц.ид))
      ЕСЛИ НЕ СУЩ_ФАЙЛ(вложения_ссылки.ссылка) ТО
        ПРОДОЛЖИТЬ
      КОНЕЦ_ЕСЛИ
      вложение_инфо!вложения_ссылки.ид = вложения_ссылки.описание + "(" + ИМЯ_ФАЙЛА(вложения_ссылки.ссылка) + ")"
      вложение_путь!вложения_ссылки.ид = вложения_ссылки.ссылка
      вложение_выбор!вложения_ссылки.ид = ДА
    КОНЕЦ_ЦИКЛА
    ВЫБРАТЬ б_тмц.фирма и_фирмы (ид = тмц.ид)
    ВЫБРАТЬ с_клиенты мы (ип_фирма_ид = и_фирмы)
  КОНЕЦ_ЕСЛИ
  ЕСЛИ ВСЕГОМ(вложение_инфо) > 0  ТО
   рез_вложения =  ВЫБРАТЬ_ЗНАЧЕНИЕ("Выберите вложения для отправки", вложение_инфо, вложение_выбор)
  КОНЕЦ_ЕСЛИ
  ЕСЛИ НЕ рез_вложения И ВСЕГОМ(вложение_инфо) > 0 ТО
    ВЫХОД
  КОНЕЦ_ЕСЛИ

  сообщения ЭТО эдо_сообщения
  файл ЭТО ФАЙЛ
  сообщения.входящий = НЕТ
  сообщения.гуид_сообщения = ГУИД
  сообщения.дата = ?(выбор = 2, опер.дата, тмц.дата)
  сообщения.идентиф_участника = УчЭДОИдОтпр
  ВЫБРАТЬ эдо_участники.код_клиента код_кл (идентиф_участника = УчЭДОИдПол)
  ВЫБРАТЬ с_клиенты кл (код = код_кл)
  сообщения.клиент = кл.название
  сообщения.клиент_ид_участника = УчЭДОИдПол
  сообщения.номер =  ?(выбор = 2, опер.ном_накл, тмц.ном_накл)
  сообщения.сумма = ?(выбор = 2, опер.сумма, тмц.сумма)
  ВЫБРАТЬ эдо_операторы.название опер_назв (код = ПОДСТР(УчЭДОИдОтпр, 1, 3))
  сообщения.эдо_название = опер_назв
  сообщения.ЗАПИСАТЬ!!

  ЦИКЛ ДЛЯ(и ИЗ Наименование)
    документы_доп ЭТО эдо_документы_доп
    документы_доп.гуид_сообщения = сообщения.гуид_сообщения
    документы_доп.колво = Кол!и
    //для оптовых продаж не реализованно. Поэтому заполнение пропустим.
   //? документы_доп.марки_всего
   //? документы_доп.марки_проверено
    документы_доп.название = Наименование!и
    документы_доп.сумма = СтоимостьСНДС!и
    документы_доп.цена = ОКРУГЛЕНИЕ(ДЕЛ(ЗНАЧ(СтоимостьСНДС!и), ЗНАЧ(Кол!и), 0),2)
    документы_доп.ЗАПИСАТЬ!!

  КОНЕЦ_ЦИКЛА

  ЦИКЛ ДЛЯ (инд ИЗ ЭДОДокументыПуть)
    документы ЭТО эдо_документы
    документы.время = ?(СЛОВО(3, ЭДОДокументыДанные!инд, РР) <> "", ЗНАЧ(СЛОВО(3, ЭДОДокументыДанные!инд, РР), ВРЕМЯ), ВРЕМЯ_ТЕК)
    документы.входящий = НЕТ
    документы.гуид_документ = ЗАМ(СЛОВО(6, инд, "_"), ".XML", "")
    документы.гуид_сообщения = сообщения.гуид_сообщения
    документы.идлинк_дцу = тмц.ид
    документы.идлинк_жто = опер.ид

    документы.основание = ЭДОДокументыОснование!инд
    документы.статус_док = эдо_док_статусыНаПодпись
    документы.тип = ЭДОТипДокумента(инд)
    документы.номер = СЛОВО(1, ЭДОДокументыДанные!инд, РР)
    документы.дата = ЗНАЧ(СЛОВО(2, ЭДОДокументыДанные!инд, РР), ДАТА)
    документы.ндс = СУММАМ(СуммаНДС)
    документы.сумма = СУММАМ(СтоимостьСНДС)

    файл.ОТКРЫТЬ(ЭДОДокументыПуть!инд, НЕТ)
    вложение_данные = файл.СЧИТАТЬ_ВСЕ
    файл.ЗАКРЫТЬ
    документы.ЗАП_ПОЛЕ("XmlContent", вложение_данные)
    документы.ЗАПИСАТЬ!!


  КОНЕЦ_ЦИКЛА

  ЕСЛИ рез_вложения ТО
    ЦИКЛ ДЛЯ (инд ИЗ вложение_выбор)
      ЕСЛИ вложение_выбор!инд ТО
        документы ЭТО эдо_документы
        документы.входящий = НЕТ
        документы.гуид_документ = ГУИД
        документы.гуид_сообщения = сообщения.гуид_сообщения
        документы.идлинк_дцу = тмц.ид
        документы.идлинк_жто = опер.ид

        документы.основание = вложение_инфо!инд
        документы.статус_док = эдо_док_статусыНаПодпись
        документы.тип = "Доп вложение"
        документы.номер = сообщения.номер
        документы.дата = сообщения.дата
        документы.время = ВРЕМЯ_ТЕК
        документы.ндс = 0
        документы.сумма = 0
        документы.ЗАП_ПОЛЕ("path", вложение_путь!инд)
        документы.ЗАПИСАТЬ!!
      КОНЕЦ_ЕСЛИ
    КОНЕЦ_ЦИКЛА
  КОНЕЦ_ЕСЛИ

  сообщения.ндс =  документы.ндс
  ПОПЫТКА
    сообщения.ЗАПИСАТЬ!!
    СТАРТ_ЖУРНАЛ!(эдо_сообщения, гуид_сообщения = сообщения.гуид_сообщения, "Документы, подготовленные к отправке")
  ИСКЛЮЧЕНИЕ
    СООБЩЕНИЕ(ОШИБКА)
  КОНЕЦ_ПОПЫТКИ

  //удаляем временные файлы
  ЦИКЛ ДЛЯ (инд ИЗ ЭДОДокументыПуть)
    ФАЙЛ_УДАЛИТЬ(ЭДОДокументыПуть!инд)
  КОНЕЦ_ЦИКЛА

КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ СТРОКА: ЭДОТипДокумента (СТРОКА: имя_файла)
  //УТОЧНИТЬ УПД
  префикс_формата = СЛОВО!(1, имя_файла, "_") + "_" + СЛОВО!(2, имя_файла, "_")  //Префикс формата извлекается из Ид файла: R_T_A_O_GGGGMMDD_N. Где R_T - это префикс формата
  РЕЗУЛЬТАТ = ""
  РЕЗУЛЬТАТ = ?(префикс_формата ИЗ ["ON_NSCHFDOPPR", "ON_NSCHFDOPPRMARK", "ON_NSCHFDOPPRPROS"], "УПД", РЕЗУЛЬТАТ)  //УПД, формат 7-15/820. Версия 5.01
  РЕЗУЛЬТАТ = ?(префикс_формата = "DP_REZRUISP", "ДОУ", РЕЗУЛЬТАТ)                                                 //ДОУ, формат ММВ-7-10/552
  РЕЗУЛЬТАТ = ?(префикс_формата = "DP_TOVTORGPR", "ДПТ", РЕЗУЛЬТАТ)                                                //ДПТ, формат ММВ-7-10/551
  РЕЗУЛЬТАТ = ?(префикс_формата = "ON_SCHFDOPPR", "УПД", РЕЗУЛЬТАТ)                                                //УПД, формат 7-15/155. Версия 5.01 или 5.02
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ХМЛИмпортУПДСведПрослеж(ЧИСЛО: и_св_тов)
  /*Загрузка сведений о прослеживаемости / 07.06.2021, Сергей Н.*/

  ИСПОЛЬЗОВАТЬ("c_common")
  ид_товара_тег = "ДопСведТов/СведПрослеж"
  ЦИКЛ ДЛЯ (и_ид_прослеж = 1, ХМЛ_ВыбратьПодчПодч(ид_товара_тег))
    ХМЛ_ВыбратьПодчПодч(ид_товара_тег)
    ХМЛ_ПерейтиПодчПодч(и_ид_прослеж)
    ТовПрослеж!и_св_тов = ДА //Это прослеживаемый товар
    ТовПрослежРНПТ[и_св_тов, и_ид_прослеж] = ХМЛ_ПолучитьАтрибутПодчПодч("НомТовПрослеж")         //рег. номер партии прослеживаемого товара
    ТовПрослежОКЕИ[и_св_тов, и_ид_прослеж] = ХМЛ_ПолучитьАтрибутПодчПодч("ЕдИзмПрослеж")          //код океи единицы измерения прослеживаемого товара
    ТовПрослежНаимЕдИзм[и_св_тов, и_ид_прослеж] = ХМЛ_ПолучитьАтрибутПодчПодч("НаимЕдИзмПрослеж") //название единицы измерения прослеживаемого товара
    ТовПрослежКолво[и_св_тов, и_ид_прослеж] = ХМЛ_ПолучитьАтрибутПодчПодч("КолВЕдПрослеж")        //кол-во прослеживаемого товара
  КОНЕЦ_ЦИКЛА
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ХМЛЭкспортУПДСведПрослеж(СТРОКА: и)
  /*Выгрузка сведений о прослеживаемости / 07.06.2021, Сергей Н.*/

  ЕСЛИ ПрослеживаемыйТовар!и ТО
    ЕСЛИ КодОКЕИ!и ИЗ ["", "-"] ТО
      ЭДООшибкаЭкспорта("У товара """ + Наименование!и + """, подлежащего прослеживаемости, не указана единица измерения")
    КОНЕЦ_ЕСЛИ
    ЗаписатьСтроку("СведПрослеж",
                     "НомТовПрослеж=""" + НомерГТД!и + """" +
                     " ЕдИзмПрослеж=""" + ?(КодОКЕИ!и ИЗ ["", "-"], "", КодОКЕИ!и) + """" +
                     " НаимЕдИзмПрослеж=""" + ?(КодОКЕИ!и ИЗ ["", "-"], "", Единица!и) + """" +
                     " КолВЕдПрослеж=""" + СТР(Кол!и: 3) + """")


  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ХМЛЭкспортДокументОбОтгурзке
  /* Выгрузка сведений о документе об отгрузке (строка 5а).

  Есть расхождение в выгрузке данных по стороке 5а УПД (СФ). Формат выгрузки не подразумевает выгрузку этой строки,
  в том виде, как это выводиться в печатной форме УПД. На данный момнт разные операторы формирует строку 5а в печатной форме по разному.
  Сделали как эту строку выводит в печатной форме СБИС.
  16.07.2021, Сергей Н. */

  ЕСЛИ ДокОтгрузкиНомер <> "" ТО
    док_отгр_номер_пп = ?(ВсегоСтрокДокумента = 1, "1", "1-" + СТР(ВсегоСтрокДокумента))
    ЗаписатьСтроку("ДокПодтвОтгр НаимДокОтгр=""№ п/п " + СТР(док_отгр_номер_пп) + """" +  //В качестве названия документа условно передаем порядковые номера товаров в УПД
                                 " НомДокОтгр=""" + ДокОтгрузкиНомер + """" +
                                 " ДатаДокОтгр=""" + СТР(ДокОтгрузкиДата) + """", "")
  КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ
