Выгрузка и загрузка документа в txt

1. nicknameeee1 08.08.26 18:09 Сейчас в теме
Всем здравствуйте, решаю задачку и никак не могу разобраться и решить ее.
Необходимо написать обработку для выгрузки и загрузки любых документов (не определенного, а любого) в формате txt
Написал выгрузку, но как понимаю нужно по мимо реквизитов и их значений еще тип для последующей загрузки и как поступить с типом Ссылка, в метаданных его нет, точнее есть реквизит Тип, но что это Справочник или Документ, так еще и указано в едиственном числе, поэтому прошу помогите разобраться,

Процедура ВыгрузитьДокументНаСервере()
	Счетчик = 0;
	ДокОбъект = Объект.Документ.ПолучитьОбъект();
	ТекстовыйФайл = Новый ТекстовыйДокумент;
	ТекстовыйФайл.ДобавитьСтроку(Строка(Объект.Документ.Метаданные().Имя));
	ТекстовыйФайл.ДобавитьСтроку("---Шапка документа---");
	
	Для каждого РеквизитДанных из Объект.Документ.Метаданные().Реквизиты Цикл
		ЗначениеРеквизита = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Документ, РеквизитДанных.Имя);
		ТекстовыйФайл.ДобавитьСтроку(Строка(РеквизитДанных.Имя) + ":" + Строка(ЗначениеРеквизита));
	КонецЦикла;
	ТекстовыйФайл.ДобавитьСтроку("---Табличная часть документа---");
	Для каждого ТЧОбъекта из Объект.Документ.Метаданные().ТабличныеЧасти Цикл
		Для Каждого ЗначениеРеквизитаТЧ Из ДокОбъект[Строка(ТЧОбъекта.Имя)] Цикл
			Счетчик = Счетчик + 1;
			ТекстовыйФайл.ДобавитьСтроку("Строка:" + Строка(Счетчик));
			Для каждого РеквизитТЧ из ТЧОбъекта.Реквизиты Цикл
				ТекстовыйФайл.ДобавитьСтроку(Строка(РеквизитТЧ.Имя) + ":" + ЗначениеРеквизитаТЧ[Строка(РеквизитТЧ.Имя)]);	 
			КонецЦикла;
		КонецЦикла;
	КонецЦикла;
	ТекстовыйФайл.Записать(Объект.Файл);
КонецПроцедуры


Процедура ЗагрузитьДокументНаСервере(ТекстовыйФайл, КоличествоСтрок)
	НовыйДок = Документы[ТекстовыйФайл.ПолучитьСтроку(1)].СоздатьДокумент();	
	//Для каждого РеквизитДанных из НовыйДок.Метаданные().Реквизиты Цикл
		
	Для Индекс = 3 По КоличествоСтрок Цикл
		//Сообщить(ТекстовыйФайл.ПолучитьСтроку(Индекс));
		МассивДанных = СтрРазделить(ТекстовыйФайл.ПолучитьСтроку(Индекс), ": ");
		НазваниеРеквизита = МассивДанных[0];
		//НовыйДок[НазваниеРеквизита] = 
	    
	КонецЦикла;
	
КонецПроцедуры


&НаКлиенте
Процедура ЗагрузитьДокумент(Команда)
		ТекстовыйФайл = Новый ТекстовыйДокумент;
 
    ТекстовыйФайл.Прочитать(
        Объект.Файл,
        КодировкаТекста.UTF8, 
        Символы.ВК + Символы.ПС
    );
	ТекстФайла = ТекстовыйФайл.ПолучитьТекст();
	КоличествоСтрок = ТекстовыйФайл.КоличествоСтрок();
	ЗагрузитьДокументНаСервере(ТекстовыйФайл, КоличествоСтрок);
КонецПроцедуры
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
23. SlavaKron 09.08.26 15:03 Сейчас в теме
(1) Чтобы записать ссылочное значение, используете ГУИД его ссылки и полное имя метаданных:
// Запись
ТипЗначения = ТипЗнч(Значение);
МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗначения);
Если МетаданныеОбъекта <> Неопределено Тогда // это ссылочный тип
	ПолноеИмяМетаданных = МетаданныеОбъекта.ПолноеИмя();
	СтрокаГУИД = Строка(Значение.УникальныйИдентификатор());	
КонецЕсли;
Чтобы прочитать:
// Чтение
МенеджерОбъекта = Новый(СтрЗаменить(ПолноеИмяМетаданных, ".", "Менеджер."));
Значение = МенеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаГУИД));
2. paramedic 08.08.26 21:28 Сейчас в теме
Если это не учебная задача, то не занимайтесь фигней, а просто используйте стандартную сериализацию. На выходе получите обычный XML, который тоже является текстовым файлом. Просто структурированным по определенным правилам.
3. nicknameeee1 08.08.26 22:05 Сейчас в теме
(2) К сожалению это тестовое задание, пользоваться XML, JSON и тд нельзя, только через текстовый документ нужно выгружать и загружать
9. user_2211591 09.08.26 09:57 Сейчас в теме
(3)
это тестовое задание
Ну всё в порядке. Тест проведен, результат получен.
orakool2; _user2207618; +2 Ответить
12. _user2207618 09.08.26 10:02 Сейчас в теме
(3)
пользоваться XML, JSON и тд нельзя
А если бы было можно - как бы это облегчило твою задачу?
4. ktibomail 30 09.08.26 02:55 Сейчас в теме
Возможно вам нужен метод УникальныйИдентификатор()
5. nicknameeee1 09.08.26 08:44 Сейчас в теме
(4) Для чего, не могу понять?
6. nicknameeee1 09.08.26 09:13 Сейчас в теме
(4) Подскажите для чего он мне, никак не могу понять?
21. ktibomail 30 09.08.26 12:18 Сейчас в теме
(6) Как я понял, вам надо выгрузить реквизит ссылки в txt. Вот так его можно выгрузить, а потом можно загрузить обратно. Но как уже сказали, если в другой базе объект был создан независимо, то ссылки будут разные. Но в этом случае нужно уже реализовывать поиск по полям. А это уже на правила конвертации смахивает. Для тестовой задачки по-моему чересчур.
7. grafit 8 09.08.26 09:29 Сейчас в теме
(4) Не прокатит, если это разные базы.
ktibomail; +1 Ответить
8. nicknameeee1 09.08.26 09:51 Сейчас в теме
(7) Вот я также считаю, смог разобраться с типом метод БСП ОбщегоНазначения.ИмяТаблицыПоСсылке(ЗначениеРеквизита)
Возвращает как раз "Справочник.Ссылка или Документ.Ссылка"
Осталось разобраться как загрузить в базу из файла
10. _user2207618 09.08.26 09:57 Сейчас в теме
(8)
Возвращает как раз "Справочник.Ссылка или Документ.Ссылка"
Не прокатит в разных базах, могут разные имена и идентификаторы метаданных.
Что мешает вставить такую текстовую строку сразу при выгрузке?
15. nicknameeee1 09.08.26 10:23 Сейчас в теме
(10) я вот так и сделал, в строке текстового файла идет
НазваниеРеквизита:Значение:Тип
Осталось это как-то загрузить
Как-то указать тип при загрузке
13. user_2211591 09.08.26 10:08 Сейчас в теме
(7)
если это разные базы
Это одна база. И прямой запрет на XML. Топикстартер просто ссыт показать нам всё условие целиком.

Изначально это было тестовое для студентов у алексровича, потом ушло в народ.
14. nicknameeee1 09.08.26 10:21 Сейчас в теме
(13) Это и есть тестовое для алексровича, по заданию нужно выгрузить любой документ в формате txt, запрещено использовать XML, JSON и тд.
Необходимо самому разработать формат выгрузки данных и последующую загрузку
17. _user2207618 09.08.26 10:32 Сейчас в теме
(14)
запрещено использовать XML, JSON и тд.
Необходимо самому разработать формат выгрузки
Что мешает тебе разработать СВОЙ формат (контракт) выгрузки с типом XML или JSON? В чем конкретно запрет-то?
18. nicknameeee1 09.08.26 10:52 Сейчас в теме
(17)необходимо разработать формат выгрузки в текстовый документ, а не использовать xml, json
19. Vovan1975 13 09.08.26 11:46 Сейчас в теме
(17) ну походу хотют посмотреть как чувак изобретет свой формат файла наподобие формата выгрузки платежек из клиент-банка
20. _user2207618 09.08.26 11:53 Сейчас в теме
(19) Сомнительный подход к тестовому заданию. Представляю, как на на каком-нибудь тесте по геометрии предлагают доказать теорему не используя тригонометрию, планиметрию и прочие ухищрения. Изобрести свое доказательство.

Да и чем в принципе формат банк-клиента отличается от XML? Только отсутствием разметки для ключей, и правил формирования имен ключей. А так все то же самое - Ключ-значение.
26. binx 180 09.08.26 19:54 Сейчас в теме
(14)
Необходимо самому разработать формат выгрузки данных и последующую загрузку


Смешно, если обычно изобретение велосипедов всячески не рекомендуется, то тут наоборот велосипед нужно переизобрести?! И что это даст, ваш формат обеспечит более быструю загрузку? Компактное хранение? Какие преимущества получит заказчик от нового формата?
27. user_2194436 11.08.26 08:21 Сейчас в теме
(26)
Какие преимущества получит заказчик
Заказчик поймет - стоит или не стоит тратить свой бюджет для сотрудничества с конкретным персонажем.

Это тестовая задача, чувак.
1Сники как всегда, во всей красе - тему не читай, требованиями бизнеса тупость прикрывай...
28. _user2207618 11.08.26 08:28 Сейчас в теме
(27)
стоит или не стоит тратить свой бюджет для сотрудничества с конкретным персонажем.

Это тестовая задача, чувак.
Логика есть, но не очень.
Если говорить про бизнес-заказчика, то по мне так гораздо пользительнее было бы понять - сумеет ли чувак придумать свой формат (свою структуру) XML/JSON (запретив использовать сериализацию), и умеет ли он работать с этими структурами типовым инструментарием. Потому что таких задач будет много.
А заставлять придумывать "свой" формат, под который надо писать свой личный двусторонний парсер - ну, такое. Никому не нужное.Особенно для бизнес-заказчика, как для "конечного потребителя".
29. user_2202366 11.08.26 10:44 Сейчас в теме
(28)
Никому не нужное.Особенно для бизнес-заказчика,
Отучаемся говорить за всех.
(С) Fido
_user2207618; +1 Ответить
30. _user2207618 11.08.26 10:49 Сейчас в теме
(29) 2:5056/18.25 вроде бы правильно ноду помню...
16. _user2207618 09.08.26 10:31 Сейчас в теме
(13)
И прямой запрет на XML
Мен вот это интересно. Что таоке "запрет на XML"? Это запрет на сериализацию? Или запрет в принципе на использование формата файла, даже если его собирать вручную?
22. nicknameeee1 09.08.26 14:47 Сейчас в теме
(16) Нельзя использовать ничего связанного с XML, JSON, только через текстовый документ
24. _user2207618 09.08.26 15:46 Сейчас в теме
(22) То есть и угловые скобочки со слешами под запретом в текстовобм документа? И фигурные скобки нельзя употреблять в текстовом документе? А кириллицу можно употреблять? А цифры?

Ты понимаешь разницу между "инструментарий XML", и "структура текстового документа похожая на XML"?
25. nicknameeee1 09.08.26 16:42 Сейчас в теме
(24) нет, подскажите, если не трудно
11. grafit 8 09.08.26 10:00 Сейчас в теме
//когда выгружаешь 
.....
 иначеЕсли ТипЗнч(выгружаемыйДокумент)=Тип("ДокументСсылка.ПоступлениеТоваровУслуг")  Тогда
 тутПроОбъект_чтоЗаОбъект = "ПТУ"; 
 тутПроОбъект_Номер = выгружаемыйДокумент.Номер;
 тутПроОбъект_Дата  = выгружаемыйДокумент.Дата;
 ...
 иначеЕсли ТипЗнч(выгружаемыйТовар)=Тип("СправочникСсылка.Номенклатура")  Тогда
 тутПроОбъект_чтоЗаОбъект = "НМК"; 
 тутПроОбъект_Код         = выгружаемыйТовар.Код;
 тутПроОбъект_Артикул  = выгружаемыйТовар.Артикул;
......
//когда грузишь
 Если тутПроОбъект_чтоЗаОбъект  = "ПТУ" тогда
 ПТУ = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
 ПТУ.Номер = тутПроОбъект_Номер; 
 ПТУ.Дата    = тутПроОбъект_Дата;
.....

Показать
Для отправки сообщения требуется регистрация/авторизация

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