Как из txt файла загрузить данные в новый документ через внешнюю обработку.
Всем здравствуйте
Суть вопроса, есть внешняя обработка для выгрузки документа в txt файл в таком формате
Все считывается и загружается нормально за исключением реквизитов с типом Ссылка
Есть полностью обработка загрузки документа, документ появляется в базе данных, но при попытке его открыть вылезают ошибки, см скриншот
Вот полностью код обработки, подскажите как решить эту проблему, готового решения не жду
В 1С полный ноль, совсем недавно начал обучаться, если можно то объясните как особо одаренному)
Суть вопроса, есть внешняя обработка для выгрузки документа в 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);
Если Перечисления.Свойство(ПолноеИмяПеречисления) Тогда
Элемент = Перечисления[ПолноеИмяПеречисления].НайтиПоКоду(КодЗначения);
Если Элемент <> Неопределено Тогда
Возврат Элемент.Ссылка;
КонецЕсли;
КонецЕсли;
Иначе
Возврат Значение; // Если тип не найден, возвращаем значение как есть
КонецЕсли;
Возврат Неопределено; // Возвращаем Неопределено, если элемент не найден
КонецФункции
ПоказатьПрикрепленные файлы:
По теме из базы знаний
- Перенос данных из УПП 1.3 / КА 1.1 в БП 3. Переносятся документы, справочники и начальные остатки
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- Загрузка документов и номенклатуры из Excel в 1С "одним нажатием": УПД, ТОРГ-12, отчеты маркетплейсов, заказы, счета, прайсы
- Загрузка чеков в 1С из ФНС в документы БП, УНФ, ERP, КА и УТ
- Универсальная загрузка данных формата Excel
Найденные решения
Небольшая доработка, теперь все как надо
&НаКлиенте
Процедура ВыборФайла(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Проводник = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Проводник.Заголовок = "Выберите файл";
Проводник.Фильтр = "Текстовый документ(*.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);
ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
ЗначДокТч = ПланыВидоврасчета[ТипРекТч].НайтиПоКоду(ЗначТч);
Если ЗначДокТч = Неопределено Тогда
Если ЗначТч = "" Тогда
НоваяСтрокаТч[ИмяРекТч] = ПланыВидовХарактеристик[ТипРекТч].НайтиПоНаименованию(ЗначТч,Истина);
Иначе
НоваяСтрокаТч[ИмяРекТч] = ПланыВидовХарактеристик[ТипРекТч].НайтиПоНаименованию(ЗначТч);
КонецЕсли;
Иначе
НоваяСтрокаТч[ИмяРекТч] = ЗначДокТч;
КонецЕсли;
Иначе
НоваяСтрокаТч[ИмяРекТч] = ЗначТч;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если СтатусПроводки = "Да" Тогда
Попытка
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
Сообщить("Документ успешно проведен!");
Исключение
НовыйДокумент.Записать();
ВызватьИсключение("Ошибка проведения документа. Проверьте данные и попробуйте снова.");
КонецПопытки
Иначе
НовыйДокумент.Записать();
КонецЕсли;
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Документ основание в счете является реквизитом составного типа и скорее всего не заполнен (т.е. значение = неопределено). В этом случае необходимо выполнять проверку перед вызовом строки
т.е. в самом простом случае что-то типа Если значениеЗаполнено(Объект.ДокументОснование) Тогда Соглашение = .... КонецЕсли;
Соглашение = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ДокументОснование, "Соглашение")
т.е. в самом простом случае что-то типа Если значениеЗаполнено(Объект.ДокументОснование) Тогда Соглашение = .... КонецЕсли;
В общем, разобрался с обработкой, так как по этой теме мало чего есть может быть кому нибудь пригодится
&НаКлиенте
Процедура ВыборФайла(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Проводник = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Проводник.Заголовок = "Выберите файл";
Проводник.Фильтр = "Текстовый документ(*.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);
ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
НоваяСтрокаТч[ИмяРекТч] = Задачи[ТипРекТч].НайтиПоНаименованию(ЗначТч);
Иначе
НоваяСтрокаТч[ИмяРекТч] = ЗначТч;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если СтатусПроводки = "Да" Тогда
Попытка
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
Сообщить("Документ успешно проведен!");
Исключение
ВызватьИсключение("Ошибка проведения документа. Проверьте данные и попробуйте снова.");
НовыйДокумент.Записать();
КонецПопытки
Иначе
НовыйДокумент.Записать();
КонецЕсли;
КонецПроцедуры
Показать
Небольшая доработка, теперь все как надо
&НаКлиенте
Процедура ВыборФайла(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Проводник = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Проводник.Заголовок = "Выберите файл";
Проводник.Фильтр = "Текстовый документ(*.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);
ТипРекТч = СтрЗаменить(ТипРекТч, " ", "");
ЗначДокТч = ПланыВидоврасчета[ТипРекТч].НайтиПоКоду(ЗначТч);
Если ЗначДокТч = Неопределено Тогда
Если ЗначТч = "" Тогда
НоваяСтрокаТч[ИмяРекТч] = ПланыВидовХарактеристик[ТипРекТч].НайтиПоНаименованию(ЗначТч,Истина);
Иначе
НоваяСтрокаТч[ИмяРекТч] = ПланыВидовХарактеристик[ТипРекТч].НайтиПоНаименованию(ЗначТч);
КонецЕсли;
Иначе
НоваяСтрокаТч[ИмяРекТч] = ЗначДокТч;
КонецЕсли;
Иначе
НоваяСтрокаТч[ИмяРекТч] = ЗначТч;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если СтатусПроводки = "Да" Тогда
Попытка
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
Сообщить("Документ успешно проведен!");
Исключение
НовыйДокумент.Записать();
ВызватьИсключение("Ошибка проведения документа. Проверьте данные и попробуйте снова.");
КонецПопытки
Иначе
НовыйДокумент.Записать();
КонецЕсли;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот