Как из txt файла загрузить данные в новый документ через внешнюю обработку.

1. user2101826 20.08.24 06:58 Сейчас в теме
Всем здравствуйте
Суть вопроса, есть внешняя обработка для выгрузки документа в txt файл в таком формате
СчетНаОплатуКлиенту
08.04.2021 17:07:33
СчетНаОплатуКлиенту
#Реквизиты
Организация(&СправочникСсылка.Организации)=Торговый дом "Комплексный"
СуммаДокумента(Число)=30 497,85
Валюта(&СправочникСсылка.Валюты)=RUB
ДокументОснование(&ДокументСсылка.ЗаказКлиента)=Заказ клиента ТД00-000005 от 08.04.2021 17:06:53
ФормаОплаты(&ПеречислениеСсылка.ФормыОплаты)=Наличная
БанковскийСчет(&СправочникСсылка.БанковскиеСчетаОрганизаций)=АКБ "ВПБ" (ЗАО), Торговый дом "Комплексный" (RUB)
Касса(&СправочникСсылка.Кассы)=Касса 2, Торговый дом "Комплексный" (RUB)
ДополнительнаяИнформация(Строка)=
ЧастичнаяОплата(Булево)=Да
Аннулирован(Булево)=Нет
Менеджер(&СправочникСсылка.Пользователи)=Федоров Борис Михайлович
НазначениеПлатежа(Строка)=Оплата по заказу клиента №5
Партнер(&СправочникСсылка.Партнеры)=Энигма
Контрагент(&СправочникСсылка.Контрагенты)=Энигма
Комментарий(Строка)=Выгрузка успешная 
Договор(&СправочникСсылка.ДоговорыКонтрагентов)=ТД Договор продажи Эн-1 от 01.01.2015
КонтактноеЛицо(&СправочникСсылка.КонтактныеЛицаПартнеров)=АВАААЫВавыав
Руководитель(&СправочникСсылка.ОтветственныеЛицаОрганизаций)=Исаков О.В.
ГлавныйБухгалтер(&СправочникСсылка.ОтветственныеЛицаОрганизаций)=Кострова В.Б.
ИдентификаторПлатежа(Строка)=СЧ2104ТД000000030007
Автор(&СправочникСсылка.Пользователи)=
$ЭтапыГрафикаОплаты
ДатаПлатежа(Дата)=08.04.2019 0:00:00
ПроцентПлатежа(Число)=100
СуммаПлатежа(Число)=30 497,85
ЭтоЗалогЗаТару(Булево)=Нет
Показать



Все считывается и загружается нормально за исключением реквизитов с типом Ссылка

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

Вот полностью код обработки, подскажите как решить эту проблему, готового решения не жду
В 1С полный ноль, совсем недавно начал обучаться, если можно то объясните как особо одаренному)


&НаКлиенте
Процедура ВыборФайла(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Проводник = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Проводник.Заголовок = "Выберите файл";
    Проводник.Фильтр = "Текстовый документ(*.txt)|*.txt";
    
    Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект);
    Проводник.Показать(Оповещение);  
КонецПроцедуры  

&НаКлиенте
Процедура ПослеВыбораФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт

    Если ВыбранныеФайлы = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    ЭтотОбъект.ПутьКФайлу = ВыбранныеФайлы[0];  
    ПутьПриИзменении(Неопределено);
КонецПроцедуры  

&НаКлиенте
Процедура ПросмотрФайла(Команда)

    Путь = ПутьКФайлу;

    Если Не ПустаяСтрока(Путь) Тогда
        ЗапуститьПриложение(Путь);
    Иначе
        Сообщить("Файл не найден.");
    КонецЕсли;
КонецПроцедуры       

&НаКлиенте
Процедура ПутьПриИзменении(Элемент)
    
    Если ПустаяСтрока(ПутьКФайлу) Тогда 
        Элементы.ПросмотрФайла.Видимость = Ложь;
    Иначе
        Элементы.ПросмотрФайла.Видимость = Истина;
    КонецЕсли;
    
КонецПроцедуры
&НаКлиенте
Процедура Выгрузить(Команда)
    Если ПустаяСтрока(ПутьКФайлу) Тогда
        Сообщить("Путь к файлу не указан.");
        Возврат;
    КонецЕсли;
    ВыгрузитьНаСервере(ПутьКФайлу);
КонецПроцедуры 

&НаКлиенте
Процедура Загрузить(Команда)
    Если ПустаяСтрока(ПутьКФайлу) Тогда
        Сообщить("Путь к файлу не указан.");
        Возврат;
    КонецЕсли;
    ЗагрузкаНаСервере(ПутьКФайлу);
КонецПроцедуры

&НаСервере
Процедура ВыгрузитьНаСервере(ПутьКФайлу)
    Текст = Новый ТекстовыйДокумент;

    ВыбранныйДокумент = ЭтотОбъект.Документ; 
    РеквизитыДокумента = ВыбранныйДокумент.Метаданные().Реквизиты;  
    ТабличныеЧасти = ВыбранныйДокумент.Метаданные().ТабличныеЧасти;  

    // Выгрузка основных реквизитов
    СтатусПроводки = ВыбранныйДокумент.Проведен;
    ДатаДокумента = ВыбранныйДокумент.Дата;
    ИмяДокумента = ВыбранныйДокумент.Метаданные().Имя;
    Текст.ДобавитьСтроку(ИмяДокумента);  
	Текст.ДобавитьСтроку(ДатаДокумента);
	
	
    Текст.ДобавитьСтроку("#Реквизиты");
        // Выгрузка реквизитов документа 
    Для Каждого Реквизит Из РеквизитыДокумента Цикл
        Если Реквизит.Имя <> "Ссылка" И Реквизит.Имя <> "ПометкаУдаления" И Реквизит.Имя <> "Номер" Тогда
            Значение = ВыбранныйДокумент[Реквизит.Имя];
            ТипРеквизита = ТипВСтроку(Значение);
            Текст.ДобавитьСтроку(Реквизит.Имя + "(" + ТипРеквизита + ")" + "=" + Значение);
        КонецЕсли;
    КонецЦикла;

    // Выгрузка табличных частей
	
	Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл
		Для Каждого СтрокаТЧ Из ВыбранныйДокумент[ТабличнаяЧасть.Имя] Цикл
			Текст.ДобавитьСтроку("$" + ТабличнаяЧасть.Имя);
            Для Каждого РеквизитТЧ Из ТабличнаяЧасть.Реквизиты Цикл
                Значение = СтрокаТЧ[РеквизитТЧ.Имя];
                ТипРеквизита = ТипВСтроку(Значение);
                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "(" + ТипРеквизита + ")" + "=" + Значение);
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;
    
    // Сохранение текста в файл
    Текст.Записать(ПутьКФайлу);
КонецПроцедуры

&НаСервере
Функция ТипВСтроку(Значение)
    Попытка
        ТипИмя = Значение.Метаданные().ПолноеИмя();
        Если ТипИмя <> "" Тогда
            Если СтрНайти(ТипИмя, "Справочник.") > 0 Тогда
                // Заменяем 'Справочник.' на 'СправочникСсылка.'
                ТипИмя = СтрЗаменить(ТипИмя, "Справочник.", "&СправочникСсылка.");
            ИначеЕсли СтрНайти(ТипИмя, "Перечисление.") > 0 Тогда
                // Заменяем 'Перечисление.' на 'ПеречислениеСсылка.'
                ТипИмя = СтрЗаменить(ТипИмя, "Перечисление.", "&ПеречислениеСсылка.");
            ИначеЕсли СтрНайти(ТипИмя, "Документ.") > 0 Тогда
                // Заменяем 'Документ.' на 'ДокументСсылка.'
                ТипИмя = СтрЗаменить (ТипИмя, "Документ.", "&ДокументСсылка.");    
            КонецЕсли;    
        КонецЕсли;
    Исключение
        ТипИмя = "" + ТипЗНЧ(Значение);
    КонецПопытки;
    Возврат ТипИмя;
КонецФункции 

&НаСервере
Функция ПолучитьТипДокументаИзСсылки(Ссылка)
    Если Ссылка = Неопределено Тогда
        Возврат "";
    КонецЕсли;

    // Используем функцию ТипВСтроку для получения полного имени типа
    ПолноеИмяТипаДокумента = ТипВСтроку(Ссылка);
    
    // Извлекаем название типа документа
    ЧастьСтроки = СтрНайти(ПолноеИмяТипаДокумента, ".");
    Если ЧастьСтроки > 0 Тогда
        НазваниеТипаДокумента = Сред(ПолноеИмяТипаДокумента, ЧастьСтроки + 1, СтрДлина(ПолноеИмяТипаДокумента) - ЧастьСтроки);
    Иначе
        НазваниеТипаДокумента = ПолноеИмяТипаДокумента;
    КонецЕсли;
    
    Возврат "ДокументСсылка." + НазваниеТипаДокумента;
КонецФункции

&НаСервере
Процедура ЗагрузкаНаСервере(ПутьКФайлу)
    // Создание текстового документа для чтения данных из файла
    Текст = Новый ТекстовыйДокумент;
    Текст.Прочитать(ПутьКФайлу);
    
    // Получение Имени и Даты документа
    ИмяДокумента = Текст.ПолучитьСтроку(1);
    ДатаДокумента = Текст.ПолучитьСтроку(2);
    
    // Создание нового документа с именем и датой
    НовыйДокумент = Документы.СчетНаОплатуКлиенту.СоздатьДокумент(); 
    НовыйДокумент.Дата = Дата(ДатаДокумента);
    
    // Флаги для обработки секций
    ВРеквизиты = Ложь;
    ВТабличныеЧасти = Ложь;
    ТекущаяТабличнаяЧасть = "";

    Для Индекс = 3 По Текст.КоличествоСтрок() Цикл
        Строка = Текст.ПолучитьСтроку(Индекс);

        // Определяем начало секции Реквизиты
        Если Найти(Строка, "#Реквизиты") > 0 Тогда
            ВРеквизиты = Истина;
            ВТабличныеЧасти = Ложь; // Завершаем обработку табличных частей, если они были начаты
            ТекущаяТабличнаяЧасть = ""; // Очистка текущей табличной части
            Продолжить; // Переход к следующей строке
        КонецЕсли;

        // Определяем начало новой табличной части
        Если Найти(Строка, "$") > 0 Тогда
            Если ВТабличныеЧасти Тогда
                // Завершение обработки предыдущей табличной части
                Сообщить("Завершение табличной части: " + ТекущаяТабличнаяЧасть);
            КонецЕсли;

            ВРеквизиты = Ложь; // Завершаем секцию реквизитов, если она была начата
            ВТабличныеЧасти = Истина; // Начинаем обработку табличных частей

            // Устанавливаем текущую табличную часть на основании строки
            ТекущаяТабличнаяЧасть = Сред(Строка, 2); // Пропускаем символ $
            Сообщить("Начало табличной части: " + ТекущаяТабличнаяЧасть);
            Продолжить; // Переход к следующей строке
        КонецЕсли;

        // Обработка строк в секции Реквизиты
        Если ВРеквизиты Тогда
            // Определение позиций разделителей
            РазделительТипНачало = Найти(Строка, "(");
            РазделительТипКонец = Найти(Строка, ")");
            РазделительЗнч = Найти(Строка, "=");

            // Проверяем наличие разделителей
            Если РазделительТипНачало > 0 И РазделительТипКонец > РазделительТипНачало И РазделительЗнч > 0 Тогда
                // Извлечение Имя, Тип и Значение
                ИмяРеквизита = Лев(Строка, РазделительТипНачало - 1);
                ТипДанных = Сред(Строка, РазделительТипНачало + 1, РазделительТипКонец - РазделительТипНачало - 1);
                ЗначениеРеквизита = Сред(Строка, РазделительЗнч + 1);

                // Проверяем наличие ссылки в значении
                Если Найти(ЗначениеРеквизита, "&") > 0 Тогда
                    // Убираем символы, чтобы оставить только код
                    ЗначениеРеквизита = Сред(ЗначениеРеквизита, Найти(ЗначениеРеквизита, "&") + 1);
                    ЗначениеРеквизита = СтрЗаменить(ЗначениеРеквизита, "(", "");
                    ЗначениеРеквизита = СтрЗаменить(ЗначениеРеквизита, ")", "");
                    ЗначениеРеквизита = СтрЗаменить(ЗначениеРеквизита, " ", ""); // Убираем пробелы

                    // Преобразование значения реквизита в объект
                    ЗначениеРеквизита = ПреобразоватьВОбъект(ТипДанных, ЗначениеРеквизита);
                КонецЕсли;

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

        // Обработка строк в секции Табличные Части
        Если ВТабличныеЧасти И ТекущаяТабличнаяЧасть <> "" Тогда
            // Определение позиций разделителей
            РазделительТипНачало = Найти(Строка, "(");
            РазделительТипКонец = Найти(Строка, ")");
            РазделительЗнч = Найти(Строка, "=");

            // Проверяем наличие разделителей
            Если РазделительТипНачало > 0 И РазделительТипКонец > РазделительТипНачало И РазделительЗнч > 0 Тогда
                // Извлечение Имя, Тип и Значение
                ИмяТабличнойЧасти = Лев(Строка, РазделительТипНачало - 1);
                ТипДанныхТабличнойЧасти = Сред(Строка, РазделительТипНачало + 1, РазделительТипКонец - РазделительТипНачало - 1);
                ЗначениеТабличнойЧасти = Сред(Строка, РазделительЗнч + 1);

                // Проверяем наличие ссылки в значении
                Если Найти(ЗначениеТабличнойЧасти, "&") > 0 Тогда
                    // Убираем символы, чтобы оставить только код
                    ЗначениеТабличнойЧасти = Сред(ЗначениеТабличнойЧасти, Найти(ЗначениеТабличнойЧасти, "&") + 1);
                    ЗначениеТабличнойЧасти = СтрЗаменить(ЗначениеТабличнойЧасти, "(", "");
                    ЗначениеТабличнойЧасти = СтрЗаменить(ЗначениеТабличнойЧасти, ")", "");
                    ЗначениеТабличнойЧасти = СтрЗаменить(ЗначениеТабличнойЧасти, " ", ""); // Убираем пробелы

                    // Преобразование значения табличной части в объект
                    ЗначениеТабличнойЧасти = ПреобразоватьВОбъект(ТипДанныхТабличнойЧасти, ЗначениеТабличнойЧасти);
                КонецЕсли;

                // Проверка существования табличной части в метаданных документа
                Если НовыйДокумент.Метаданные().ТабличныеЧасти.Найти(ТекущаяТабличнаяЧасть) <> Неопределено Тогда
                    // Добавление новой строки в табличную часть
                    НоваяСтрока = НовыйДокумент[ТекущаяТабличнаяЧасть].Добавить();
                    
                    // Заполнение реквизитов строки табличной части
                    Если НовыйДокумент.Метаданные().ТабличныеЧасти[ТекущаяТабличнаяЧасть].Реквизиты.Найти(ИмяТабличнойЧасти) <> Неопределено Тогда
                        НоваяСтрока[ИмяТабличнойЧасти] = ЗначениеТабличнойЧасти;
                    Иначе
                        Сообщить("Неизвестный реквизит табличной части: " + ИмяТабличнойЧасти);
                    КонецЕсли;
                Иначе
                    Сообщить("Неизвестная табличная часть: " + ТекущаяТабличнаяЧасть);
                КонецЕсли;
            Иначе
                Сообщить("Ошибка в формате строки табличной части: " + Строка);
            КонецЕсли;
        КонецЕсли;    
    КонецЦикла;

    // Завершение обработки последней табличной части, если она была начата
    Если ВТабличныеЧасти Тогда
        Сообщить("Завершение табличной части: " + ТекущаяТабличнаяЧасть);
    КонецЕсли;

    // Запись документа
    НовыйДокумент.Записать();
    
КонецПроцедуры

Функция ПреобразоватьВОбъект(Тип, Значение)
    // Функция преобразует строковое значение в объект в зависимости от типа
    Если Тип = "СправочникСсылка" Тогда
        ПолноеИмяСправочника = Сред(Значение, 1, Найти(Значение, ".") - 1);
        КодЗначения = Сред(Значение, Найти(Значение, ".") + 1);
        
        Если Справочники.Свойство(ПолноеИмяСправочника) Тогда
            Элемент = Справочники[ПолноеИмяСправочника].НайтиПоКоду(КодЗначения);
            Если Элемент <> Неопределено Тогда
                Возврат Элемент.Ссылка;
            КонецЕсли;
        КонецЕсли;

    ИначеЕсли Тип = "ДокументСсылка" Тогда
        ПолноеИмяДокумента = Сред(Значение, 1, Найти(Значение, ".") - 1);
        КодЗначения = Сред(Значение, Найти(Значение, ".") + 1);
        
        Если Документы.Свойство(ПолноеИмяДокумента) Тогда
            Документ = Документы[ПолноеИмяДокумента].НайтиПоКоду(КодЗначения);
            Если Документ <> Неопределено Тогда
                Возврат Документ.Ссылка;
            КонецЕсли;
        КонецЕсли;

    ИначеЕсли Тип = "ПеречислениеСсылка" Тогда
        ПолноеИмяПеречисления = Сред(Значение, 1, Найти(Значение, ".") - 1);
        КодЗначения = Сред(Значение, Найти(Значение, ".") + 1);
        
        Если Перечисления.Свойство(ПолноеИмяПеречисления) Тогда
            Элемент = Перечисления[ПолноеИмяПеречисления].НайтиПоКоду(КодЗначения);
            Если Элемент <> Неопределено Тогда
                Возврат Элемент.Ссылка;
            КонецЕсли;
        КонецЕсли;
    
    Иначе
        Возврат Значение; // Если тип не найден, возвращаем значение как есть
    КонецЕсли;

    Возврат Неопределено; // Возвращаем Неопределено, если элемент не найден
КонецФункции
Показать
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
5. user2101826 28.08.24 16:44 Сейчас в теме
Небольшая доработка, теперь все как надо

&НаКлиенте
Процедура ВыборФайла(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Проводник = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Проводник.Заголовок = "Выберите файл";
    Проводник.Фильтр = "Текстовый документ(*.txt)|*.txt";
    
    Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект);
    Проводник.Показать(Оповещение);  
КонецПроцедуры  

&НаКлиенте
Процедура ПослеВыбораФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт

    Если ВыбранныеФайлы = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    ЭтотОбъект.ПутьКФайлу = ВыбранныеФайлы[0];  
    ПутьПриИзменении(Неопределено);
КонецПроцедуры  

&НаКлиенте
Процедура ПросмотрФайла(Команда)

    Путь = ПутьКФайлу;

    Если Не ПустаяСтрока(Путь) Тогда
        ЗапуститьПриложение(Путь);
    Иначе
        Сообщить("Файл не найден.");
    КонецЕсли;
КонецПроцедуры       

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

    Если Не Отказ Тогда
        ВыгрузитьНаСервере(ПутьКФайлу);     
    КонецЕсли; 
КонецПроцедуры

&НаКлиенте
Процедура Загрузить(Команда)
    Отказ = Ложь;	
	 Если ПустаяСтрока(ЭтотОбъект.ПутьКФайлу) Тогда
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Файл не выбран!";
        Сообщение.Поле = "ПутьКФайлу"; 
        Сообщение.Сообщить();
        Отказ = Истина;
    КонецЕсли;
	Если не Отказ Тогда
    ЗагрузкаНаСервере(ПутьКФайлу);
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ВыгрузитьНаСервере(ПутьКФайлу)
    Текст = Новый ТекстовыйДокумент;

    ВыбранныйДокумент = ЭтотОбъект.Документ; 
    РеквизитыДокумента = ВыбранныйДокумент.Метаданные().Реквизиты;  
    ТабличныеЧасти = ВыбранныйДокумент.Метаданные().ТабличныеЧасти;  

    // Выгрузка основных реквизитов
    СтатусПроводки = ВыбранныйДокумент.Проведен;
    ДатаДокумента = ВыбранныйДокумент.Дата;
    ИмяДокумента = ВыбранныйДокумент.Метаданные().Имя;
    Текст.ДобавитьСтроку(ИмяДокумента);  
	Текст.ДобавитьСтроку(ДатаДокумента);
	Текст.ДобавитьСтроку(СтатусПроводки);
	
	//Выгрузка Реквизитов   
    Для Каждого Реквизит Из РеквизитыДокумента Цикл
   
        Значение = ВыбранныйДокумент[Реквизит.Имя];
		Если Значение = Неопределено Тогда
			Продолжить;
		КонецЕсли;
        ИмяТипа = ТипЗнч(Значение);
		Если ТипЗнч(Значение) = Тип("Строка") И Найти(Значение, Символы.ПС) > 0 Тогда
        	ОднострочныйТекст = СтрЗаменить(Значение, Символы.ПС, "|");
        	Текст.ДобавитьСтроку(Реквизит.Имя + "*" + ИмяТипа + "=" + ОднострочныйТекст);
		ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			ИмяДок = Значение.Метаданные().Имя;
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "#" + ИмяДок + "=" + Значение.Номер + "(" + Значение.Дата);
		ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			Если Значение.Код <> "" Тогда
				Справочник = Значение.Метаданные().Имя;
				Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "&" + Справочник + "=" + Значение.Код);
			Иначе
				Справочник = Значение.Метаданные().Имя;
			    Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "&" + Справочник + "=" + Значение);
			КонецЕсли;
		ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			Перечесление = Значение.Метаданные().Имя;
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "!" + Перечесление + "=" + Значение);
		ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			Если Значение.Код <> "" Тогда
				План = Значение.Метаданные().Имя;
				Текст.ДобавитьСтроку(Реквизит.Имя + "*" + ";" + План + "=" + Значение.Код);
			Иначе
			    Текст.ДобавитьСтроку(Реквизит.Имя + "*" + ";" + План + "=" + Значение);
			КонецЕсли;
		ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			Счет = Значение.Метаданные().Имя;
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "'" + Счет + "=" + Значение);
		ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			Процесс = Значение.Метаданные().Имя;
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "~" + Процесс + "=" + Значение.Номер + "(" + Значение.Дата);
		ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			Задача = Значение.Метаданные().Имя;
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + ":" + Задача + "=" + Значение.Номер + "(" + Значение);
		ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			Если Значение.Код <> "" Тогда
			Расчет = Значение.Метаданные().Имя;
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "{" + Расчет + "=" + Значение.код);
			Иначе
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "{" + Расчет + "=" + Значение);
			КонецЕсли;
		Иначе
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + ИмяТипа + "=" + Значение);	
		КонецЕсли;
    КонецЦикла;
	// Выгрузка ТабличныхЧастей
	Текст.ДобавитьСтроку("ТабличныеЧасти");
	Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл
	    Для Каждого СтрокаТЧ Из ВыбранныйДокумент[ТабличнаяЧасть.Имя] Цикл        
	        Текст.ДобавитьСтроку("-" + ТабличнаяЧасть.Имя);      
	        Для Каждого РеквизитТЧ Из ТабличнаяЧасть.Реквизиты Цикл
	            Значение = СтрокаТЧ[РеквизитТЧ.Имя];
				Если Значение = Неопределено Тогда
					Продолжить;
				КонецЕсли;				
	            ИмяТипа = ТипЗнч(Значение);
				Если ИмяТипа = Неопределено Тогда
					Продолжить;
				КонецЕсли;
				Если ТипЗнч(Значение) = Тип("Строка") И Найти(Значение, Символы.ПС) > 0 Тогда
                ОднострочныйТекст = СтрЗаменить(Значение, Символы.ПС, "|");
                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + ИмяТипа + "=" + ОднострочныйТекст);
	            ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + "#" + ИмяТипа + "=" + Значение.Номер + "(" + Значение.Дата + ")");
	            ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Если Значение.Код <> "" Тогда
	                    Справочник = Значение.Метаданные().Имя;
	                    Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + "&" + Справочник + "=" + Значение.Код);
	                Иначе
	                    Справочник = Значение.Метаданные().Имя;
	                    Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + "&" + Справочник + "=" + Значение);
	                КонецЕсли;
	            ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Перечесление = Значение.Метаданные().Имя;
	                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + "!" + Перечесление + "=" + Значение);
	            ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Если Значение.Код <> "" Тогда
	                    План = Значение.Метаданные().Имя;
	                    Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + ";" + План + "=" + Значение.Код);
	                Иначе
	                    Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + ";" + План + "=" + Значение);
	                КонецЕсли;
	            ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Счет = Значение.Метаданные().Имя;
	                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + "'" + Счет + "=" + Значение);
	            ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Процесс = Значение.Метаданные().Имя;
	                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + "~" + Процесс + "=" + Значение.Номер + "(" + Значение.Дата + ")");
	            ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Задача = Значение.Метаданные().Имя;
	                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + ":" + Задача + "=" + Значение.Номер + "(" + Значение + ")"); 
				ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда 
					Если Значение.Код <> "" Тогда
						Расчет = Значение.Метаданные().Имя;
						Текст.ДобавитьСтроку(РеквизитТч.Имя + "*" + "{" + Расчет + "=" + Значение.код);
					Иначе
						Текст.ДобавитьСтроку(РеквизитТч.Имя + "*" + "{" + Расчет + "=" + Значение);
					КонецЕсли;
	            Иначе
	                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + ИмяТипа + "=" + Значение);
	            КонецЕсли;
	        КонецЦикла;
	    КонецЦикла;
	КонецЦикла;

	// Запись файлика
	Текст.Записать(ПутьКФайлу);
КонецПроцедуры  

&НаСервере
Процедура ЗагрузкаНаСервере(ПутьКФайлу)
    Текст = Новый ТекстовыйДокумент;
    Текст.Прочитать(ПутьКФайлу);

    // Получаем количество строк в документе
    КоличествоСтрок = Текст.КоличествоСтрок();
    // Имя и дата нахоядтся в первых двух строчках 
    ИмяДокумента = Текст.ПолучитьСтроку(1);
    ДатаДокумента = Текст.ПолучитьСтроку(2);
    СтатусПроводки = Текст.ПолучитьСтроку(3);
    НовыйДокумент = Документы[ИмяДокумента].СоздатьДокумент();
    НовыйДокумент.Дата = Дата(ДатаДокумента);

    
    ОбработкаТабличныхЧастей = Ложь;
    ИмяТекущейТабличнойЧасти = "";

    Для Индекс = 4 По КоличествоСтрок Цикл
        Строка = Текст.ПолучитьСтроку(Индекс);
        Строка = СтрЗаменить(Строка, "|", Символы.ПС);
        
        Если Строка = "ТабличныеЧасти" Тогда
            ОбработкаТабличныхЧастей = Истина;
			ИмяТекущейТабличнойЧасти = "";
            Продолжить; 
        КонецЕсли;
                 
        Если Не ОбработкаТабличныхЧастей = Истина Тогда
            ТипНач = Найти(Строка, "*");
            ТипКон = Найти(Строка, "=");
            ДатаНач = Найти(Строка, "(");

            ИмяРеквизита = Лев(Строка, ТипНач - 1);
            ТипРеквизита = Сред(Строка, ТипНач + 1, ТипКон - ТипНач - 1);
            
            Если ДатаНач > 0 Тогда
                Значение = Сред(Строка, ТипКон + 1, ДатаНач - ТипКон - 1); 
                Дата = Сред(Строка, ДатаНач + 1);
            Иначе
                Значение = Сред(Строка, ТипКон + 1);
                Дата = "";
            КонецЕсли;
            Если Лев(ТипРеквизита, 1) = "#" тогда
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
				
                НовыйДокумент[ИмяРеквизита] = Документы[ТипРеквизита].НайтиПоНомеру(Значение, Дата);
            ИначеЕсли Лев(ТипРеквизита, 1) = "&" Тогда
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
                ЗначДок = Справочники[ТипРеквизита].НайтиПоКоду(Значение);
				Если ЗначДок = Неопределено Тогда
					Если значение = "" Тогда
					НовыйДокумент[ИмяРеквизита] = Справочники[ТипРеквизита].НайтиПоНаименованию(Значение, Истина);
					Иначе
                    НовыйДокумент[ИмяРеквизита] = Справочники[ТипРеквизита].НайтиПоНаименованию(Значение);
					КонецЕсли;
                Иначе
                    НовыйДокумент[ИмяРеквизита] = Справочники[ТипРеквизита].НайтиПоКоду(Значение);
                КонецЕсли;
            ИначеЕсли Лев(ТипРеквизита, 1) = "!" Тогда
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
                Значение = СтрЗаменить(Значение, " ", "");
                Если Значение = "" Тогда
                Иначе
                    НовыйДокумент[ИмяРеквизита] = Перечисления[ТипРеквизита][Значение];
                КонецЕсли;
            ИначеЕсли Лев(ТипРеквизита, 1) = ";" Тогда
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
                ЗначДок = ПланыВидовХарактеристик[ТипРеквизита].НайтиПоКоду(Значение); 
				Если ЗначДок = Неопределено Тогда
					Если Значение = "" Тогда
                    НовыйДокумент[ИмяРеквизита] = ПланыВидовХарактеристик[ТипРеквизита].НайтиПоНаименованию(Значение, Истина);
				Иначе
					НовыйДокумент[ИмяРеквизита] = ПланыВидовХарактеристик[ТипРеквизита].НайтиПоНаименованию(Значение);
				КонецЕсли;
                Иначе
                    НовыйДокумент[ИмяРеквизита] = ПланыВидовХарактеристик[ТипРеквизита].НайтиПоКоду(Значение);
                КонецЕсли;
            ИначеЕсли Лев(ТипРеквизита, 1) = "'" Тогда  
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
                НовыйДокумент[ИмяРеквизита] = ПланыСчетов[ТипРеквизита].НайтипоНаименованию(Значение);
            ИначеЕсли Лев(ТипРеквизита, 1) = "~" Тогда
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
                НовыйДокумент[ИмяРеквизита] = БизнесПроцессы[ТипРеквизита].НайтипоНомеру(Значение, Дата);
            ИначеЕсли Лев(ТипРеквизита, 1) = ":" Тогда
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
                НовыйДокумент[ИмяРеквизита] = Задачи[ТипРеквизита].НайтипоНаименованию(Значение);
			ИначеЕсли Лев(ТипРеквизита, 1) = "{" Тогда
				ТипРеквизита = сред(ТипРеквизита, 2);
				ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
				ЗначДок = ПланыВидовРасчета[ТипРеквизита].НайтиПоКоду(Значение);
				Если ЗначДок = Неопределено Тогда 
					Если Значение = "" Тогда
					НовыйДокумент[ИмяРеквизита] = ПланыВидовРасчета[ТипРеквизита].НайтиПоНаименованию(Значение,Истина);
				Иначе
					НовыйДокумент[ИмяРеквизита] = ПланыВидовРасчета[ТипРеквизита].НайтиПоНаименованию(Значение);
					КонецЕсли;
				Иначе
					НовыйДокумент[ИмяРеквизита] = ПланыВидовРасчета[ТипРеквизита].НайтиПоКоду(Значение);
				КонецЕсли;
            Иначе
                НовыйДокумент[ИмяРеквизита] = Значение;
            КонецЕсли;

		Иначе
		    // Логика обработки табличных частей
		    Если Найти(Строка, "-") > 0 Тогда
		        ИмяТекущейТабличнойЧасти = Сред(Строка, 2);
				НоваяСтрокаТч = НовыйДокумент[ИмяТекущейТабличнойЧасти].Добавить();

		        Продолжить;
		    КонецЕсли;

		    Если ИмяТекущейТабличнойЧасти <> "" Тогда
		        // Извлечение и заполнение данных табличной части
		        ТипТчНач = Найти(Строка, "*");
		        ТипТчКон = Найти(Строка, "=");
		        ДатаТчНач = Найти(Строка, "(");

		        ИмяРекТч = Лев(Строка, ТипТчНач - 1);
		        ТипРекТч = Сред(Строка, ТипТчНач + 1, ТипТчКон - ТипТчНач - 1);
		        
		        Если ДатаТчНач > 0 Тогда
		            ЗначТч = Сред(Строка, ТипТчКон + 1, ДатаТчНач - ТипТчКон - 1); 
		            ДатаТч = Сред(Строка, ДатаТчНач + 1);
		        Иначе
		            ЗначТч = Сред(Строка, ТипТчКон + 1);
		            ДатаТч = "";
		        КонецЕсли;
				Если Лев(ТипРекТч, 1) = "#" Тогда
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    НоваяСтрокаТч[ИмяРекТч] = Документы[ТипРекТч].НайтиПоНомеру(ЗначТч, ДатаТч);
				ИначеЕсли Лев(ТипРекТч, 1) = "&" Тогда
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    ЗначДокТч = Справочники[ТипРекТч].НайтиПоКоду(ЗначТч);
					Если ЗначДокТч = Неопределено Тогда
						Если ЗначТч = "" Тогда
				        НоваяСтрокаТч[ИмяРекТч] = Справочники[ТипРекТч].НайтиПоНаименованию(ЗначТч,Истина);
					Иначе
						НоваяСтрокаТч[ИмяРекТч] = Справочники[ТипРекТч].НайтиПоНаименованию(ЗначТч);
					КонецЕсли;
				    Иначе
				        НоваяСтрокаТч[ИмяРекТч] = ЗначДокТч;
				    КонецЕсли;
				ИначеЕсли Лев(ТипРекТч, 1) = "!" Тогда
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    Если ЗначТч <> "" Тогда
				        НоваяСтрокаТч[ИмяРекТч] = Перечисления[ТипРекТч][ЗначТч];
				    КонецЕсли;
				ИначеЕсли Лев(ТипРекТч, 1) = ";" Тогда
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    ЗначДокТч = ПланыВидовХарактеристик[ТипРекТч].НайтиПоКоду(ЗначТч);
					Если ЗначДокТч = Неопределено Тогда
						Если ЗначТч = "" Тогда
				        НоваяСтрокаТч[ИмяРекТч] = ПланыВидовХарактеристик[ТипРекТч].НайтиПоНаименованию(ЗначТч,Истина);
					Иначе
						НоваяСтрокаТч[ИмяРекТч] = ПланыВидовХарактеристик[ТипРекТч].НайтиПоНаименованию(ЗначТч);
					КонецЕсли;
				    Иначе
				        НоваяСтрокаТч[ИмяРекТч] = ЗначДокТч;
				    КонецЕсли;
				ИначеЕсли Лев(ТипРекТч, 1) = "'" Тогда  
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    НоваяСтрокаТч[ИмяРекТч] = ПланыСчетов[ТипРекТч].НайтиПоНаименованию(ЗначТч);
				ИначеЕсли Лев(ТипРекТч, 1) = "~" Тогда                                                                  	
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    НоваяСтрокаТч[ИмяРекТч] = БизнесПроцессы[ТипРекТч].НайтиПоНомеру(ЗначТч, ДатаТч);
				ИначеЕсли Лев(ТипРекТч, 1) = ":" Тогда
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    НоваяСтрокаТч[ИмяРекТч] = Задачи[ТипРекТч].НайтиПоНаименованию(ЗначТч);
				ИначеЕсли Лев(ТипРекТч, 1) = "{" Тогда
					ТипРекТч = Сред(ТипРекТч, 2);
					ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
					ЗначДокТч = ПланыВидоврасчета[ТипРекТч].НайтиПоКоду(ЗначТч);
					Если ЗначДокТч = Неопределено Тогда
						Если ЗначТч = "" Тогда
						НоваяСтрокаТч[ИмяРекТч] = ПланыВидовХарактеристик[ТипРекТч].НайтиПоНаименованию(ЗначТч,Истина);
					Иначе
						НоваяСтрокаТч[ИмяРекТч] = ПланыВидовХарактеристик[ТипРекТч].НайтиПоНаименованию(ЗначТч);
					КонецЕсли;
					Иначе
						НоваяСтрокаТч[ИмяРекТч] = ЗначДокТч;
					КонецЕсли;
				Иначе
				    НоваяСтрокаТч[ИмяРекТч] = ЗначТч;
				КонецЕсли;
		    КонецЕсли;
		КонецЕсли;
    КонецЦикла;   


	Если СтатусПроводки = "Да" Тогда
		Попытка
			НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
			Сообщить("Документ успешно проведен!");
		Исключение 
			НовыйДокумент.Записать();
			ВызватьИсключение("Ошибка проведения документа. Проверьте данные и попробуйте снова.");
		КонецПопытки
	Иначе
		НовыйДокумент.Записать();
	КонецЕсли;
	
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. glek 120 20.08.24 07:29 Сейчас в теме
Документ основание в счете является реквизитом составного типа и скорее всего не заполнен (т.е. значение = неопределено). В этом случае необходимо выполнять проверку перед вызовом строки
Соглашение = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ДокументОснование, "Соглашение")

т.е. в самом простом случае что-то типа Если значениеЗаполнено(Объект.ДокументОснование) Тогда Соглашение = .... КонецЕсли;
3. user2101826 20.08.24 07:52 Сейчас в теме
(2) без понятия как полностью заполнить составной тип, всегда возвращается одна ссылка Документ.ЗаказПокупателя
4. user2101826 26.08.24 07:40 Сейчас в теме
В общем, разобрался с обработкой, так как по этой теме мало чего есть может быть кому нибудь пригодится


&НаКлиенте
Процедура ВыборФайла(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Проводник = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Проводник.Заголовок = "Выберите файл";
    Проводник.Фильтр = "Текстовый документ(*.txt)|*.txt";
    
    Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект);
    Проводник.Показать(Оповещение);  
КонецПроцедуры  

&НаКлиенте
Процедура ПослеВыбораФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт

    Если ВыбранныеФайлы = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    ЭтотОбъект.ПутьКФайлу = ВыбранныеФайлы[0];  
    ПутьПриИзменении(Неопределено);
КонецПроцедуры  

&НаКлиенте
Процедура ПросмотрФайла(Команда)

    Путь = ПутьКФайлу;

    Если Не ПустаяСтрока(Путь) Тогда
        ЗапуститьПриложение(Путь);
    Иначе
        Сообщить("Файл не найден.");
    КонецЕсли;
КонецПроцедуры       

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

    Если Не Отказ Тогда
        ВыгрузитьНаСервере(ПутьКФайлу);     
    КонецЕсли; 
КонецПроцедуры

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

&НаСервере
Процедура ВыгрузитьНаСервере(ПутьКФайлу)
    Текст = Новый ТекстовыйДокумент;

    ВыбранныйДокумент = ЭтотОбъект.Документ; 
    РеквизитыДокумента = ВыбранныйДокумент.Метаданные().Реквизиты;  
    ТабличныеЧасти = ВыбранныйДокумент.Метаданные().ТабличныеЧасти;  

    // Выгрузка основных реквизитов
    СтатусПроводки = ВыбранныйДокумент.Проведен;
    ДатаДокумента = ВыбранныйДокумент.Дата;
    ИмяДокумента = ВыбранныйДокумент.Метаданные().Имя;
    Текст.ДобавитьСтроку(ИмяДокумента);  
	Текст.ДобавитьСтроку(ДатаДокумента);
	Текст.ДобавитьСтроку(СтатусПроводки);
	
	//Выгрузка Реквизитов   
    Для Каждого Реквизит Из РеквизитыДокумента Цикл
   
        Значение = ВыбранныйДокумент[Реквизит.Имя];
        ИмяТипа = ТипЗнч(Значение);
		
		Если Документы.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда 
			
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "#" + ИмяТипа + "=" + Значение.Номер + "(" + Значение.Дата);
		ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			Если Значение.Код <> "" Тогда
				Справочник = Значение.Метаданные().Имя;
				Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "&" + Справочник + "=" + Значение.Код);
			Иначе
				Справочник = Значение.Метаданные().Имя;
			    Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "&" + Справочник + "=" + Значение);
			КонецЕсли;
		ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			Перечесление = Значение.Метаданные().Имя;
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "!" + Перечесление + "=" + Значение);
		ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			Если Значение.Код <> "" Тогда
				План = Значение.Метаданные().Имя;
				Текст.ДобавитьСтроку(Реквизит.Имя + "*" + ";" + План + "=" + Значение.Код);
			Иначе
			    Текст.ДобавитьСтроку(Реквизит.Имя + "*" + ";" + План + "=" + Значение);
			КонецЕсли;
		ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			Счет = Значение.Метаданные().Имя;
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "'" + Счет + "=" + Значение);
		ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			Процесс = Значение.Метаданные().Имя;
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "~" + Процесс + "=" + Значение.Номер + "(" + Значение.Дата);
		ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			Задача = Значение.Метаданные().Имя;
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + ":" + Задача + "=" + Значение.Номер + "(" + Значение);		
		Иначе
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + ИмяТипа + "=" + Значение);	
		КонецЕсли;
    КонецЦикла;
	// Выгрузка ТабличныхЧастей
	Текст.ДобавитьСтроку("ТабличныеЧасти");
	Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл
	    Для Каждого СтрокаТЧ Из ВыбранныйДокумент[ТабличнаяЧасть.Имя] Цикл        
	        Текст.ДобавитьСтроку("-" + ТабличнаяЧасть.Имя);      
	        Для Каждого РеквизитТЧ Из ТабличнаяЧасть.Реквизиты Цикл
	            Значение = СтрокаТЧ[РеквизитТЧ.Имя];
	            ИмяТипа = ТипЗнч(Значение);

	            Если Документы.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + "#" + ИмяТипа + "=" + Значение.Номер + "(" + Значение.Дата + ")");
	            ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Если Значение.Код <> "" Тогда
	                    Справочник = Значение.Метаданные().Имя;
	                    Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + "&" + Справочник + "=" + Значение.Код);
	                Иначе
	                    Справочник = Значение.Метаданные().Имя;
	                    Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + "&" + Справочник + "=" + Значение);
	                КонецЕсли;
	            ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Перечесление = Значение.Метаданные().Имя;
	                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + "!" + Перечесление + "=" + Значение);
	            ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Если Значение.Код <> "" Тогда
	                    План = Значение.Метаданные().Имя;
	                    Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + ";" + План + "=" + Значение.Код);
	                Иначе
	                    Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + ";" + План + "=" + Значение);
	                КонецЕсли;
	            ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Счет = Значение.Метаданные().Имя;
	                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + "'" + Счет + "=" + Значение);
	            ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Процесс = Значение.Метаданные().Имя;
	                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + "~" + Процесс + "=" + Значение.Номер + "(" + Значение.Дата + ")");
	            ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Задача = Значение.Метаданные().Имя;
	                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + ":" + Задача + "=" + Значение.Номер + "(" + Значение + ")");
	            Иначе
	                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + ИмяТипа + "=" + Значение);
	            КонецЕсли;
	        КонецЦикла;
	    КонецЦикла;
	КонецЦикла;

	// Запись файлика
	Текст.Записать(ПутьКФайлу);
КонецПроцедуры    

Процедура ЗагрузкаНаСервере(ПутьКФайлу)
    Текст = Новый ТекстовыйДокумент;
    Текст.Прочитать(ПутьКФайлу);

    // Получаем количество строк в документе
    КоличествоСтрок = Текст.КоличествоСтрок();
    // Имя и дата нахоядтся в первых двух строчках 
    ИмяДокумента = Текст.ПолучитьСтроку(1);
    ДатаДокумента = Текст.ПолучитьСтроку(2);
    СтатусПроводки = Текст.ПолучитьСтроку(3);
    НовыйДокумент = Документы[ИмяДокумента].СоздатьДокумент();
    НовыйДокумент.Дата = Дата(ДатаДокумента);

    
    ОбработкаТабличныхЧастей = Ложь;
    ИмяТекущейТабличнойЧасти = "";

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

        Если Не ОбработкаТабличныхЧастей = Истина Тогда
            ТипНач = Найти(Строка, "*");
            ТипКон = Найти(Строка, "=");
            ДатаНач = Найти(Строка, "(");

            ИмяРеквизита = Лев(Строка, ТипНач - 1);
            ТипРеквизита = Сред(Строка, ТипНач + 1, ТипКон - ТипНач - 1);
            
            Если ДатаНач > 0 Тогда
                Значение = Сред(Строка, ТипКон + 1, ДатаНач - ТипКон - 1); 
                Дата = Сред(Строка, ДатаНач + 1);
            Иначе
                Значение = Сред(Строка, ТипКон + 1);
                Дата = "";
            КонецЕсли;
            Если Лев(ТипРеквизита, 1) = "#" тогда
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
                НовыйДокумент[ИмяРеквизита] = Документы[ТипРеквизита].НайтиПоНомеру(Значение, Дата);
            ИначеЕсли Лев(ТипРеквизита, 1) = "&" Тогда
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
                ЗначДок = Справочники[ТипРеквизита].НайтиПоКоду(Значение);
                Если ЗначДок = Неопределено Тогда
                    НовыйДокумент[ИмяРеквизита] = Справочники[ТипРеквизита].НайтиПоНаименованию(Значение);
                Иначе
                    НовыйДокумент[ИмяРеквизита] = Справочники[ТипРеквизита].НайтиПоКоду(Значение);
                КонецЕсли;
            ИначеЕсли Лев(ТипРеквизита, 1) = "!" Тогда
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
                Значение = СтрЗаменить(Значение, " ", "");
                Если Значение = "" Тогда
                Иначе
                    НовыйДокумент[ИмяРеквизита] = Перечисления[ТипРеквизита][Значение];
                КонецЕсли;
            ИначеЕсли Лев(ТипРеквизита, 1) = ";" Тогда
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
                ЗначДок = ПланыВидовХарактеристик[ТипРеквизита].НайтиПоКоду(Значение); 
                Если ЗначДок = Неопределено Тогда
                    НовыйДокумент[ИмяРеквизита] = ПланыВидовХарактеристик[ТипРеквизита].НайтиПоНаименованию(Значение);
                Иначе
                    НовыйДокумент[ИмяРеквизита] = ПланыВидовХарактеристик[ТипРеквизита].НайтиПоКоду(Значение);
                КонецЕсли;
            ИначеЕсли Лев(ТипРеквизита, 1) = "'" Тогда  
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
                НовыйДокумент[ИмяРеквизита] = ПланыСчетов[ТипРеквизита].НайтипоНаименованию(Значение);
            ИначеЕсли Лев(ТипРеквизита, 1) = "~" Тогда
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
                НовыйДокумент[ИмяРеквизита] = БизнесПроцессы[ТипРеквизита].НайтипоНомеру(Значение, Дата);
            ИначеЕсли Лев(ТипРеквизита, 1) = ":" Тогда
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
                НовыйДокумент[ИмяРеквизита] = Задачи[ТипРеквизита].НайтипоНаименованию(Значение);
            Иначе
                НовыйДокумент[ИмяРеквизита] = Значение;
            КонецЕсли;

		Иначе
		    // Логика обработки табличных частей
		    Если Найти(Строка, "-") > 0 Тогда
		        ИмяТекущейТабличнойЧасти = Сред(Строка, 2);
				НоваяСтрокаТч = НовыйДокумент[ИмяТекущейТабличнойЧасти].Добавить();
				Сообщить("Добавлена строка");

		        Продолжить;
		    КонецЕсли;

		    Если ИмяТекущейТабличнойЧасти <> "" Тогда
		        // Извлечение и заполнение данных табличной части
		        ТипТчНач = Найти(Строка, "*");
		        ТипТчКон = Найти(Строка, "=");
		        ДатаТчНач = Найти(Строка, "(");

		        ИмяРекТч = Лев(Строка, ТипТчНач - 1);
		        ТипРекТч = Сред(Строка, ТипТчНач + 1, ТипТчКон - ТипТчНач - 1);
		        
		        Если ДатаТчНач > 0 Тогда
		            ЗначТч = Сред(Строка, ТипТчКон + 1, ДатаТчНач - ТипТчКон - 1); 
		            ДатаТч = Сред(Строка, ДатаТчНач + 1);
		        Иначе
		            ЗначТч = Сред(Строка, ТипТчКон + 1);
		            ДатаТч = "";
		        КонецЕсли;
				Если Лев(ТипРекТч, 1) = "#" Тогда
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    НоваяСтрокаТч[ИмяРекТч] = Документы[ТипРекТч].НайтиПоНомеру(ЗначТч, ДатаТч);
				ИначеЕсли Лев(ТипРекТч, 1) = "&" Тогда
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    ЗначДокТч = Справочники[ТипРекТч].НайтиПоКоду(ЗначТч);
				    Если ЗначДокТч = Неопределено Тогда
				        НоваяСтрокаТч[ИмяРекТч] = Справочники[ТипРекТч].НайтиПоНаименованию(ЗначТч);
				    Иначе
				        НоваяСтрокаТч[ИмяРекТч] = ЗначДокТч;
				    КонецЕсли;
				ИначеЕсли Лев(ТипРекТч, 1) = "!" Тогда
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    Если ЗначТч <> "" Тогда
				        НоваяСтрокаТч[ИмяРекТч] = Перечисления[ТипРекТч][ЗначТч];
				    КонецЕсли;
				ИначеЕсли Лев(ТипРекТч, 1) = ";" Тогда
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    ЗначДокТч = ПланыВидовХарактеристик[ТипРекТч].НайтиПоКоду(ЗначТч);
				    Если ЗначДокТч = Неопределено Тогда
				        НоваяСтрокаТч[ИмяРекТч] = ПланыВидовХарактеристик[ТипРекТч].НайтиПоНаименованию(ЗначТч);
				    Иначе
				        НоваяСтрокаТч[ИмяРекТч] = ЗначДокТч;
				    КонецЕсли;
				ИначеЕсли Лев(ТипРекТч, 1) = "'" Тогда  
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    НоваяСтрокаТч[ИмяРекТч] = ПланыСчетов[ТипРекТч].НайтиПоНаименованию(ЗначТч);
				ИначеЕсли Лев(ТипРекТч, 1) = "~" Тогда
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    НоваяСтрокаТч[ИмяРекТч] = БизнесПроцессы[ТипРекТч].НайтиПоНомеру(ЗначТч, ДатаТч);
				ИначеЕсли Лев(ТипРекТч, 1) = ":" Тогда
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    НоваяСтрокаТч[ИмяРекТч] = Задачи[ТипРекТч].НайтиПоНаименованию(ЗначТч);
				Иначе
				    НоваяСтрокаТч[ИмяРекТч] = ЗначТч;
				КонецЕсли;
		    КонецЕсли;
		КонецЕсли;
    КонецЦикла;   


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





Показать
5. user2101826 28.08.24 16:44 Сейчас в теме
Небольшая доработка, теперь все как надо

&НаКлиенте
Процедура ВыборФайла(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Проводник = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Проводник.Заголовок = "Выберите файл";
    Проводник.Фильтр = "Текстовый документ(*.txt)|*.txt";
    
    Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект);
    Проводник.Показать(Оповещение);  
КонецПроцедуры  

&НаКлиенте
Процедура ПослеВыбораФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт

    Если ВыбранныеФайлы = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    ЭтотОбъект.ПутьКФайлу = ВыбранныеФайлы[0];  
    ПутьПриИзменении(Неопределено);
КонецПроцедуры  

&НаКлиенте
Процедура ПросмотрФайла(Команда)

    Путь = ПутьКФайлу;

    Если Не ПустаяСтрока(Путь) Тогда
        ЗапуститьПриложение(Путь);
    Иначе
        Сообщить("Файл не найден.");
    КонецЕсли;
КонецПроцедуры       

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

    Если Не Отказ Тогда
        ВыгрузитьНаСервере(ПутьКФайлу);     
    КонецЕсли; 
КонецПроцедуры

&НаКлиенте
Процедура Загрузить(Команда)
    Отказ = Ложь;	
	 Если ПустаяСтрока(ЭтотОбъект.ПутьКФайлу) Тогда
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Файл не выбран!";
        Сообщение.Поле = "ПутьКФайлу"; 
        Сообщение.Сообщить();
        Отказ = Истина;
    КонецЕсли;
	Если не Отказ Тогда
    ЗагрузкаНаСервере(ПутьКФайлу);
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ВыгрузитьНаСервере(ПутьКФайлу)
    Текст = Новый ТекстовыйДокумент;

    ВыбранныйДокумент = ЭтотОбъект.Документ; 
    РеквизитыДокумента = ВыбранныйДокумент.Метаданные().Реквизиты;  
    ТабличныеЧасти = ВыбранныйДокумент.Метаданные().ТабличныеЧасти;  

    // Выгрузка основных реквизитов
    СтатусПроводки = ВыбранныйДокумент.Проведен;
    ДатаДокумента = ВыбранныйДокумент.Дата;
    ИмяДокумента = ВыбранныйДокумент.Метаданные().Имя;
    Текст.ДобавитьСтроку(ИмяДокумента);  
	Текст.ДобавитьСтроку(ДатаДокумента);
	Текст.ДобавитьСтроку(СтатусПроводки);
	
	//Выгрузка Реквизитов   
    Для Каждого Реквизит Из РеквизитыДокумента Цикл
   
        Значение = ВыбранныйДокумент[Реквизит.Имя];
		Если Значение = Неопределено Тогда
			Продолжить;
		КонецЕсли;
        ИмяТипа = ТипЗнч(Значение);
		Если ТипЗнч(Значение) = Тип("Строка") И Найти(Значение, Символы.ПС) > 0 Тогда
        	ОднострочныйТекст = СтрЗаменить(Значение, Символы.ПС, "|");
        	Текст.ДобавитьСтроку(Реквизит.Имя + "*" + ИмяТипа + "=" + ОднострочныйТекст);
		ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			ИмяДок = Значение.Метаданные().Имя;
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "#" + ИмяДок + "=" + Значение.Номер + "(" + Значение.Дата);
		ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			Если Значение.Код <> "" Тогда
				Справочник = Значение.Метаданные().Имя;
				Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "&" + Справочник + "=" + Значение.Код);
			Иначе
				Справочник = Значение.Метаданные().Имя;
			    Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "&" + Справочник + "=" + Значение);
			КонецЕсли;
		ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			Перечесление = Значение.Метаданные().Имя;
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "!" + Перечесление + "=" + Значение);
		ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			Если Значение.Код <> "" Тогда
				План = Значение.Метаданные().Имя;
				Текст.ДобавитьСтроку(Реквизит.Имя + "*" + ";" + План + "=" + Значение.Код);
			Иначе
			    Текст.ДобавитьСтроку(Реквизит.Имя + "*" + ";" + План + "=" + Значение);
			КонецЕсли;
		ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			Счет = Значение.Метаданные().Имя;
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "'" + Счет + "=" + Значение);
		ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			Процесс = Значение.Метаданные().Имя;
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "~" + Процесс + "=" + Значение.Номер + "(" + Значение.Дата);
		ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			Задача = Значение.Метаданные().Имя;
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + ":" + Задача + "=" + Значение.Номер + "(" + Значение);
		ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
			Если Значение.Код <> "" Тогда
			Расчет = Значение.Метаданные().Имя;
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "{" + Расчет + "=" + Значение.код);
			Иначе
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + "{" + Расчет + "=" + Значение);
			КонецЕсли;
		Иначе
			Текст.ДобавитьСтроку(Реквизит.Имя + "*" + ИмяТипа + "=" + Значение);	
		КонецЕсли;
    КонецЦикла;
	// Выгрузка ТабличныхЧастей
	Текст.ДобавитьСтроку("ТабличныеЧасти");
	Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл
	    Для Каждого СтрокаТЧ Из ВыбранныйДокумент[ТабличнаяЧасть.Имя] Цикл        
	        Текст.ДобавитьСтроку("-" + ТабличнаяЧасть.Имя);      
	        Для Каждого РеквизитТЧ Из ТабличнаяЧасть.Реквизиты Цикл
	            Значение = СтрокаТЧ[РеквизитТЧ.Имя];
				Если Значение = Неопределено Тогда
					Продолжить;
				КонецЕсли;				
	            ИмяТипа = ТипЗнч(Значение);
				Если ИмяТипа = Неопределено Тогда
					Продолжить;
				КонецЕсли;
				Если ТипЗнч(Значение) = Тип("Строка") И Найти(Значение, Символы.ПС) > 0 Тогда
                ОднострочныйТекст = СтрЗаменить(Значение, Символы.ПС, "|");
                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + ИмяТипа + "=" + ОднострочныйТекст);
	            ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + "#" + ИмяТипа + "=" + Значение.Номер + "(" + Значение.Дата + ")");
	            ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Если Значение.Код <> "" Тогда
	                    Справочник = Значение.Метаданные().Имя;
	                    Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + "&" + Справочник + "=" + Значение.Код);
	                Иначе
	                    Справочник = Значение.Метаданные().Имя;
	                    Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + "&" + Справочник + "=" + Значение);
	                КонецЕсли;
	            ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Перечесление = Значение.Метаданные().Имя;
	                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + "!" + Перечесление + "=" + Значение);
	            ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Если Значение.Код <> "" Тогда
	                    План = Значение.Метаданные().Имя;
	                    Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + ";" + План + "=" + Значение.Код);
	                Иначе
	                    Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + ";" + План + "=" + Значение);
	                КонецЕсли;
	            ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Счет = Значение.Метаданные().Имя;
	                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + "'" + Счет + "=" + Значение);
	            ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Процесс = Значение.Метаданные().Имя;
	                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + "~" + Процесс + "=" + Значение.Номер + "(" + Значение.Дата + ")");
	            ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда
	                Задача = Значение.Метаданные().Имя;
	                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + ":" + Задача + "=" + Значение.Номер + "(" + Значение + ")"); 
				ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ИмяТипа) Тогда 
					Если Значение.Код <> "" Тогда
						Расчет = Значение.Метаданные().Имя;
						Текст.ДобавитьСтроку(РеквизитТч.Имя + "*" + "{" + Расчет + "=" + Значение.код);
					Иначе
						Текст.ДобавитьСтроку(РеквизитТч.Имя + "*" + "{" + Расчет + "=" + Значение);
					КонецЕсли;
	            Иначе
	                Текст.ДобавитьСтроку(РеквизитТЧ.Имя + "*" + ИмяТипа + "=" + Значение);
	            КонецЕсли;
	        КонецЦикла;
	    КонецЦикла;
	КонецЦикла;

	// Запись файлика
	Текст.Записать(ПутьКФайлу);
КонецПроцедуры  

&НаСервере
Процедура ЗагрузкаНаСервере(ПутьКФайлу)
    Текст = Новый ТекстовыйДокумент;
    Текст.Прочитать(ПутьКФайлу);

    // Получаем количество строк в документе
    КоличествоСтрок = Текст.КоличествоСтрок();
    // Имя и дата нахоядтся в первых двух строчках 
    ИмяДокумента = Текст.ПолучитьСтроку(1);
    ДатаДокумента = Текст.ПолучитьСтроку(2);
    СтатусПроводки = Текст.ПолучитьСтроку(3);
    НовыйДокумент = Документы[ИмяДокумента].СоздатьДокумент();
    НовыйДокумент.Дата = Дата(ДатаДокумента);

    
    ОбработкаТабличныхЧастей = Ложь;
    ИмяТекущейТабличнойЧасти = "";

    Для Индекс = 4 По КоличествоСтрок Цикл
        Строка = Текст.ПолучитьСтроку(Индекс);
        Строка = СтрЗаменить(Строка, "|", Символы.ПС);
        
        Если Строка = "ТабличныеЧасти" Тогда
            ОбработкаТабличныхЧастей = Истина;
			ИмяТекущейТабличнойЧасти = "";
            Продолжить; 
        КонецЕсли;
                 
        Если Не ОбработкаТабличныхЧастей = Истина Тогда
            ТипНач = Найти(Строка, "*");
            ТипКон = Найти(Строка, "=");
            ДатаНач = Найти(Строка, "(");

            ИмяРеквизита = Лев(Строка, ТипНач - 1);
            ТипРеквизита = Сред(Строка, ТипНач + 1, ТипКон - ТипНач - 1);
            
            Если ДатаНач > 0 Тогда
                Значение = Сред(Строка, ТипКон + 1, ДатаНач - ТипКон - 1); 
                Дата = Сред(Строка, ДатаНач + 1);
            Иначе
                Значение = Сред(Строка, ТипКон + 1);
                Дата = "";
            КонецЕсли;
            Если Лев(ТипРеквизита, 1) = "#" тогда
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
				
                НовыйДокумент[ИмяРеквизита] = Документы[ТипРеквизита].НайтиПоНомеру(Значение, Дата);
            ИначеЕсли Лев(ТипРеквизита, 1) = "&" Тогда
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
                ЗначДок = Справочники[ТипРеквизита].НайтиПоКоду(Значение);
				Если ЗначДок = Неопределено Тогда
					Если значение = "" Тогда
					НовыйДокумент[ИмяРеквизита] = Справочники[ТипРеквизита].НайтиПоНаименованию(Значение, Истина);
					Иначе
                    НовыйДокумент[ИмяРеквизита] = Справочники[ТипРеквизита].НайтиПоНаименованию(Значение);
					КонецЕсли;
                Иначе
                    НовыйДокумент[ИмяРеквизита] = Справочники[ТипРеквизита].НайтиПоКоду(Значение);
                КонецЕсли;
            ИначеЕсли Лев(ТипРеквизита, 1) = "!" Тогда
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
                Значение = СтрЗаменить(Значение, " ", "");
                Если Значение = "" Тогда
                Иначе
                    НовыйДокумент[ИмяРеквизита] = Перечисления[ТипРеквизита][Значение];
                КонецЕсли;
            ИначеЕсли Лев(ТипРеквизита, 1) = ";" Тогда
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
                ЗначДок = ПланыВидовХарактеристик[ТипРеквизита].НайтиПоКоду(Значение); 
				Если ЗначДок = Неопределено Тогда
					Если Значение = "" Тогда
                    НовыйДокумент[ИмяРеквизита] = ПланыВидовХарактеристик[ТипРеквизита].НайтиПоНаименованию(Значение, Истина);
				Иначе
					НовыйДокумент[ИмяРеквизита] = ПланыВидовХарактеристик[ТипРеквизита].НайтиПоНаименованию(Значение);
				КонецЕсли;
                Иначе
                    НовыйДокумент[ИмяРеквизита] = ПланыВидовХарактеристик[ТипРеквизита].НайтиПоКоду(Значение);
                КонецЕсли;
            ИначеЕсли Лев(ТипРеквизита, 1) = "'" Тогда  
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
                НовыйДокумент[ИмяРеквизита] = ПланыСчетов[ТипРеквизита].НайтипоНаименованию(Значение);
            ИначеЕсли Лев(ТипРеквизита, 1) = "~" Тогда
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
                НовыйДокумент[ИмяРеквизита] = БизнесПроцессы[ТипРеквизита].НайтипоНомеру(Значение, Дата);
            ИначеЕсли Лев(ТипРеквизита, 1) = ":" Тогда
                ТипРеквизита = Сред(ТипРеквизита, 2);
                ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
                НовыйДокумент[ИмяРеквизита] = Задачи[ТипРеквизита].НайтипоНаименованию(Значение);
			ИначеЕсли Лев(ТипРеквизита, 1) = "{" Тогда
				ТипРеквизита = сред(ТипРеквизита, 2);
				ТипРеквизита = СтрЗаменить(ТипРеквизита, " ", "");
				ЗначДок = ПланыВидовРасчета[ТипРеквизита].НайтиПоКоду(Значение);
				Если ЗначДок = Неопределено Тогда 
					Если Значение = "" Тогда
					НовыйДокумент[ИмяРеквизита] = ПланыВидовРасчета[ТипРеквизита].НайтиПоНаименованию(Значение,Истина);
				Иначе
					НовыйДокумент[ИмяРеквизита] = ПланыВидовРасчета[ТипРеквизита].НайтиПоНаименованию(Значение);
					КонецЕсли;
				Иначе
					НовыйДокумент[ИмяРеквизита] = ПланыВидовРасчета[ТипРеквизита].НайтиПоКоду(Значение);
				КонецЕсли;
            Иначе
                НовыйДокумент[ИмяРеквизита] = Значение;
            КонецЕсли;

		Иначе
		    // Логика обработки табличных частей
		    Если Найти(Строка, "-") > 0 Тогда
		        ИмяТекущейТабличнойЧасти = Сред(Строка, 2);
				НоваяСтрокаТч = НовыйДокумент[ИмяТекущейТабличнойЧасти].Добавить();

		        Продолжить;
		    КонецЕсли;

		    Если ИмяТекущейТабличнойЧасти <> "" Тогда
		        // Извлечение и заполнение данных табличной части
		        ТипТчНач = Найти(Строка, "*");
		        ТипТчКон = Найти(Строка, "=");
		        ДатаТчНач = Найти(Строка, "(");

		        ИмяРекТч = Лев(Строка, ТипТчНач - 1);
		        ТипРекТч = Сред(Строка, ТипТчНач + 1, ТипТчКон - ТипТчНач - 1);
		        
		        Если ДатаТчНач > 0 Тогда
		            ЗначТч = Сред(Строка, ТипТчКон + 1, ДатаТчНач - ТипТчКон - 1); 
		            ДатаТч = Сред(Строка, ДатаТчНач + 1);
		        Иначе
		            ЗначТч = Сред(Строка, ТипТчКон + 1);
		            ДатаТч = "";
		        КонецЕсли;
				Если Лев(ТипРекТч, 1) = "#" Тогда
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    НоваяСтрокаТч[ИмяРекТч] = Документы[ТипРекТч].НайтиПоНомеру(ЗначТч, ДатаТч);
				ИначеЕсли Лев(ТипРекТч, 1) = "&" Тогда
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    ЗначДокТч = Справочники[ТипРекТч].НайтиПоКоду(ЗначТч);
					Если ЗначДокТч = Неопределено Тогда
						Если ЗначТч = "" Тогда
				        НоваяСтрокаТч[ИмяРекТч] = Справочники[ТипРекТч].НайтиПоНаименованию(ЗначТч,Истина);
					Иначе
						НоваяСтрокаТч[ИмяРекТч] = Справочники[ТипРекТч].НайтиПоНаименованию(ЗначТч);
					КонецЕсли;
				    Иначе
				        НоваяСтрокаТч[ИмяРекТч] = ЗначДокТч;
				    КонецЕсли;
				ИначеЕсли Лев(ТипРекТч, 1) = "!" Тогда
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    Если ЗначТч <> "" Тогда
				        НоваяСтрокаТч[ИмяРекТч] = Перечисления[ТипРекТч][ЗначТч];
				    КонецЕсли;
				ИначеЕсли Лев(ТипРекТч, 1) = ";" Тогда
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    ЗначДокТч = ПланыВидовХарактеристик[ТипРекТч].НайтиПоКоду(ЗначТч);
					Если ЗначДокТч = Неопределено Тогда
						Если ЗначТч = "" Тогда
				        НоваяСтрокаТч[ИмяРекТч] = ПланыВидовХарактеристик[ТипРекТч].НайтиПоНаименованию(ЗначТч,Истина);
					Иначе
						НоваяСтрокаТч[ИмяРекТч] = ПланыВидовХарактеристик[ТипРекТч].НайтиПоНаименованию(ЗначТч);
					КонецЕсли;
				    Иначе
				        НоваяСтрокаТч[ИмяРекТч] = ЗначДокТч;
				    КонецЕсли;
				ИначеЕсли Лев(ТипРекТч, 1) = "'" Тогда  
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    НоваяСтрокаТч[ИмяРекТч] = ПланыСчетов[ТипРекТч].НайтиПоНаименованию(ЗначТч);
				ИначеЕсли Лев(ТипРекТч, 1) = "~" Тогда                                                                  	
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    НоваяСтрокаТч[ИмяРекТч] = БизнесПроцессы[ТипРекТч].НайтиПоНомеру(ЗначТч, ДатаТч);
				ИначеЕсли Лев(ТипРекТч, 1) = ":" Тогда
				    ТипРекТч = Сред(ТипРекТч, 2);
				    ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
				    НоваяСтрокаТч[ИмяРекТч] = Задачи[ТипРекТч].НайтиПоНаименованию(ЗначТч);
				ИначеЕсли Лев(ТипРекТч, 1) = "{" Тогда
					ТипРекТч = Сред(ТипРекТч, 2);
					ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
					ЗначДокТч = ПланыВидоврасчета[ТипРекТч].НайтиПоКоду(ЗначТч);
					Если ЗначДокТч = Неопределено Тогда
						Если ЗначТч = "" Тогда
						НоваяСтрокаТч[ИмяРекТч] = ПланыВидовХарактеристик[ТипРекТч].НайтиПоНаименованию(ЗначТч,Истина);
					Иначе
						НоваяСтрокаТч[ИмяРекТч] = ПланыВидовХарактеристик[ТипРекТч].НайтиПоНаименованию(ЗначТч);
					КонецЕсли;
					Иначе
						НоваяСтрокаТч[ИмяРекТч] = ЗначДокТч;
					КонецЕсли;
				Иначе
				    НоваяСтрокаТч[ИмяРекТч] = ЗначТч;
				КонецЕсли;
		    КонецЕсли;
		КонецЕсли;
    КонецЦикла;   


	Если СтатусПроводки = "Да" Тогда
		Попытка
			НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
			Сообщить("Документ успешно проведен!");
		Исключение 
			НовыйДокумент.Записать();
			ВызватьИсключение("Ошибка проведения документа. Проверьте данные и попробуйте снова.");
		КонецПопытки
	Иначе
		НовыйДокумент.Записать();
	КонецЕсли;
	
КонецПроцедуры
Показать
6. user1880116 29.08.24 08:34 Сейчас в теме
(5)
теперь все как надо
Спасибо, что разместил решение в интернете.
Теперь при анализе работ будет явно видно кто откуда что скопировал.
7. user2033930 29.08.24 08:37 Сейчас в теме
(6) Опасный ты человек, Рулон Обоев!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот