|   |   | 
| 
 | Перегрузка Документа. Тестовое задание Ø (Волшебник 20.09.2023 15:21) | ☑ | ||
|---|---|---|---|---|
| 0
    
        Jurest_ 20.09.23✎ 15:20 | 
        Всем привет. Сразу скажу, что можно пользоваться любыми источниками информации, поэтому я здесь. Суть задания, перебросить любой док из базы 1с в txt файл и наоборот. Использовать функции УникальныеИдентификаторы() и тп нельзя. Вопрос: Как правильно перебрать все реквизиты табличных частей документа? Пишу вот так 
 	ТекстДляЗаписи = Новый ТекстовыйДокумент;
	ВыбранныйДокумент = Объект.Документ;
	МетаданныеДокументаРеквизиты = ВыбранныйДокумент.Метаданные().Реквизиты;
	МетаданныеДокументаТЧ = ВыбранныйДокумент.Метаданные().ТабличныеЧасти;
	Для Каждого Реквизит из МетаданныеДокументаРеквизиты Цикл
		ТекстДляЗаписи.ДобавитьСтроку("" + Реквизит.Имя + ":" + ВыбранныйДокумент[Реквизит.Имя]);
	КонецЦикла;
	Для каждого ТабличнаяЧасть Из МетаданныеДокументаТЧ Цикл
		ТекстДляЗаписи.ДобавитьСтроку("--------Новая Табличная Часть------");
		Для каждого СтрокаТабличнойЧасти Из ТабличнаяЧасть Цикл
			ТекстДляЗаписи.ДобавитьСтроку("" + СтрокаТабличнойЧасти.Имя + ":" + ВыбранныйДокумент[СтрокаТабличнойЧасти.Имя]);
		КонецЦикла; 
	КонецЦикла; 
	ТекстДляЗаписи.Записать(Объект.Файл);Ругается на {ВнешняяОбработка.ПерегрузкаДокумента.Форма.Форма.Форма(36)}: Итератор для значения не определен
 Для каждого СтрокаТабличнойЧасти Из ТабличнаяЧасть Цикл Подскажите пожалуйста. | |||
| 1
    
        Йохохо 21.07.21✎ 00:22 | 
        Для каждого СтрокаТабличнойЧасти Из ВыбранныйДокумент[ТабличнаяЧасть] Цикл
 ? | |||
| 2
    
        Йохохо 21.07.21✎ 00:23 | 
        ТабличнаяЧасть.Имя     | |||
| 3
    
        Jurest_ 21.07.21✎ 00:27 | 
        Спасибо, пропустил. Правда теперь на это ругается)
 ТекстДляЗаписи.ДобавитьСтроку("" + СтрокаТабличнойЧасти.Имя + ":" + ВыбранныйДокумент[СтрокаТабличнойЧасти.Имя]); Но тут я сам наверное. Спасибо) | |||
| 4
    
        Йохохо 21.07.21✎ 00:30 | 
        она бай намберс     | |||
| 5
    
        Jurest_ 21.07.21✎ 00:38 | 
        Не особо понял, о чем ты. Но буду разбираться)     | |||
| 6
    
        OldCondom 21.07.21✎ 00:45 | 
        поставь точку останова в месте ошибки и посмотри что у тебя в "ТабличнаяЧасть". Подсказка: ничего.     | |||
| 7
    
        Jurest_ 21.07.21✎ 00:48 | 
        ТабличнаяЧасть Значение:Товары, Тип: ОбъектМетаданных     | |||
| 8
    
        Jurest_ 21.07.21✎ 00:50 | 
        Так что все есть. 
 Еще вопросик, можно ли перебрать все реквизиты СтрокиТЧ не обращаясь к ним на прямую? Имею ввиду не писать СтрокаТЧ.Номерклатура = Значение, а все это как то циклом обойти. | |||
| 9
    
        OldCondom 21.07.21✎ 00:51 | 
        а, там цикл, точно. Ну вот, теперь посмотри там же эту табличнаячасть. Разверни. Там нет коллекции     | |||
| 10
    
        Jurest_ 21.07.21✎ 00:53 | 
        Да вроде все есть
 https://disk.yandex.ru/i/ChnSUzT7l0fwXg | |||
| 11
    
        OldCondom 21.07.21✎ 00:53 | 
        еще погугли сериализация объектов 1с. Ты можешь просто в json объект перекинуть, потом прочитать     | |||
| 12
    
        OldCondom 21.07.21✎ 00:54 | 
        (10) я вижу объект и его свойства. А ты коллекцию?     | |||
| 13
    
        Jurest_ 21.07.21✎ 00:54 | 
        (11) Не, тоже нельзя использовать. Так в задании написано(     | |||
| 14
    
        Jurest_ 21.07.21✎ 00:54 | 
        Реквизиты - КоллекцияОбъектовМетаданных     | |||
| 15
    
        Jurest_ 21.07.21✎ 00:55 | 
        Или это не то?
 Просто Строчку то я правильно получаю | |||
| 16
    
        OldCondom 21.07.21✎ 00:55 | 
        ну так и перебирай их, а не табличная часть. То есть табличнаячасть.реквизиты     | |||
| 17
    
        Jurest_ 21.07.21✎ 00:58 | 
        А он мне разве сможет все строчки так перебрать?     | |||
| 18
    
        OldCondom 21.07.21✎ 00:58 | 
        Начни с постановки вопроса. Реквизиты у тебя получиллсь перебрать и получить их значения, так? Табличные части получилось, а вот значения их строк - нет. Так? Или я путаю     | |||
| 19
    
        Йохохо 21.07.21✎ 00:59 | 
        ну если КоллекцияХХХ то она итерируемая а потом тСтрокаТЧ[тЭлементКоллекцияХХХ]     | |||
| 20
    
        Jurest_ 21.07.21✎ 00:59 | 
        (18) Строчки получилось получить     | |||
| 21
    
        Jurest_ 21.07.21✎ 01:00 | 
        А вот правильно обратиться к каждому полю строчкиТЧ, чтоб вывести в док нет.     | |||
| 22
    
        Jurest_ 21.07.21✎ 01:01 | 
        Вот строчка
 https://disk.yandex.ru/i/avjjofXwcZbXEg | |||
| 23
    
        Йохохо 21.07.21✎ 01:02 | 
        (21) для нее не работает цикл для каждого?     | |||
| 24
    
        Jurest_ 21.07.21✎ 01:04 | 
        {ВнешняяОбработка.ПерегрузкаДокумента.Форма.Форма.Форма(37)}: Получение элемента по индексу для значения не определено
 Для каждого Резвизит Из ВыбранныйДокумент[СтрокаТабличнойЧасти] Цикл | |||
| 25
    
        OldCondom 21.07.21✎ 01:06 | 
        Чего то ты не договариваешь. В (22) именно СтрокаТабличнойЧасти - это строкаТЧ документа, а не метаданных. А в коде (1) это метаданные объекта.     | |||
| 26
    
        Йохохо 21.07.21✎ 01:07 | 
        если хочется спать то засунуть имена реквизитов ТЧ (+стандартных) в массив и по нему строчкиТЧ[массивреквТЧ[Счетчик]]     | |||
| 27
    
        OldCondom 21.07.21✎ 01:08 | 
        (24) И снова. Точка останова. Что в ВыбранныйДокумент[СтрокаТабличнойЧасти]? Что в СтрокаТабличнойЧасти?     | |||
| 28
    
        Jurest_ 21.07.21✎ 01:09 | 
        Для каждого ТабличнаяЧасть Из МетаданныеДокументаТЧ Цикл
 ТекстДляЗаписи.ДобавитьСтроку("--------Новая Табличная Часть------"); Для каждого СтрокаТабличнойЧасти Из ВыбранныйДокумент[ТабличнаяЧасть.Имя] Цикл Для каждого Резвизит Из ВыбранныйДокумент[СтрокаТабличнойЧасти] Цикл ТекстДляЗаписи.ДобавитьСтроку("" + Реквизит.Имя + ":" + ВыбранныйДокумент[Реквизит.Имя]); КонецЦикла; ДанныеОСтрочке = ВыбранныйДокумент[СтрокаТабличнойЧасти].Метаданные(); КонецЦикла; КонецЦикла; (25) | |||
| 29
    
        Йохохо 21.07.21✎ 01:09 | 
        или у коллекции должен быть метод Количество() и доступ по КоллекцияРеквизитовТЧ[1].Имя     | |||
| 30
    
        Jurest_ 21.07.21✎ 01:11 | 
        (27) Действительно, в ВыбранныйДокумент[СтрокаТабличнойЧасти] походу ничего нет     | |||
| 31
    
        Jurest_ 21.07.21✎ 01:12 | 
        (26) (29) Блин, что то я себя таким тупым чувствую     | |||
| 32
    
        OldCondom 21.07.21✎ 01:20 | 
        (31) я тоже не понял, о чем он. 
 У тебя с реквизитами все получилось. Табличная часть почти тоже самое. Тебе нужно обойти табличные части(это ты сделал), потом обойти реквизиты табличной части(этого нет). Далее обходишь Объект[твоя табличная часть из коллекции метаданных объекта] и уже внутри обходишь реквизиты табличной части. Примерно так Для каждого СтрокаТабличнойЧасти Из ВыбранныйДокумент[ТабличнаяЧасть.Имя] Цикл -- это у тебя есть Для каждого Резвизит Из РеквизитыТабличнойЧасти Цикл -- у тебя этого нет, ты не получил коллекцию реквизитов табличной части СтрокаТабличнойЧасти[Реквизит.Имя] -- получаешь значение реквизита строки табличной части документа КонецЦикла; КонецЦикла; | |||
| 33
    
        Jurest_ 21.07.21✎ 01:24 | 
        (32) Кажется, я понял о чем ты)) Спасибо большое, пошел пробовать.     | |||
| 34
    
        Jurest_ 21.07.21✎ 01:41 | 
        (32) Получилось! Спасибо еще раз. Смог достать каждый реквизит строчкиТЧ.     | |||
| 35
    
        Jurest_ 21.07.21✎ 18:32 | 
        С выгрузкой разобрался. Теперь бы с загрузкой. При загрузке надо понять, какой документ вообще надо создавать. У меня есть в текстовом документе строчка, которая содержит представление объекта нужного типа документа. Можно ли по этой строчке как-то найти этот тип и создать документ?     | |||
| 36
    
        Pro-tone 21.07.21✎ 18:39 | 
        (35) допиши в текстовый док поле, которое будет отвечать за вид документа как он назван в пофигураторе кодом ВыбранныйДокумент.Метаданные().Имя     | |||
| 37
    
        Jurest_ 21.07.21✎ 18:45 | 
        (36) Большое спасибо. Теперь в Текстовом документе правильное имя документа, который надо создать. Еще один вопрос, как правильно обратиться к документу через переменную?
 Я имею ввиду, что можно создать документ так: Документы.РеализацияТоваровИУслуг.СоздатьДокумент(); Вот как вместо РеализацияТоваровИУслуг положить переменную, в которой будет лежать строчка из текстового документа соответствующая имени нужного документа? | |||
| 38
    
        OldCondom 21.07.21✎ 18:48 | 
        Документ[ИмяДокументаСтрокой]     | |||
| 39
    
        OldCondom 21.07.21✎ 18:48 | 
        Документы***     | |||
| 40
    
        Jurest_ 21.07.21✎ 18:55 | 
        Спасибо!     | |||
| 41
    
        Jurest_ 21.07.21✎ 20:05 | 
        Пытаюсь добавить реквизиты таким кодом, оказывается, это не так просто, как я думал.
 НовыйДокумент = Документы[ТипДокумента].СоздатьДокумент(); //НовыйДокумент.Дата = НачалоДня(ТекущаяДата()); Для НомерСтроки = 2 По ЗагружаемыйФайл.КоличествоСтрок() Цикл СтрокаТекста = ЗагружаемыйФайл.ПолучитьСтроку(НомерСтроки); Если Сред(СтрокаТекста,1,1) <> ":" Тогда МассивСлов = СтрРазделить(СтрокаТекста, ":"); НовыйДокумент[МассивСлов[0]] = МассивСлов[1]; Иначе НомерСтрокиКонцаРеквизитов = НомерСтроки; Прервать; КонецЕсли; КонецЦикла; НовыйДокумент.Записать(); Но проблема в том, что не все реквизиты простые, там есть и ссылки на справочники, перечисления. Реально ли как то проще сделать, а не проверять каждую строку текстового документа на соответствие какому-то типу данных? | |||
| 42
    
        Pro-tone 21.07.21✎ 20:22 | 
        (41) для этого существует КД2 и КД3, в которых описывается структура данных, их типы, все их свойства(реквизиты) и т.п., твое задание не может быть настолько сложным чтоб текстовым документом переносить ссылочные типы реквизитов, значит ты что-то не понял, вероятно нужно перенести только небольшой список нессылочного типа реквизитов, в противном случае, слать подальше кто такое задание дал или потребовать оплаты за его выполнение     | |||
| 43
    
        Jurest_ 21.07.21✎ 20:26 | 
        (42) Вот задание. Если я действительно неправильно понял, то попробую по другому сделать. Но пока только одна идея в голове.
 https://disk.yandex.ru/i/yEY2uklDADFv0A | |||
| 44
    
        acht 21.07.21✎ 20:33 | 
        (42) > слать подальше кто такое задание дал 
 Бедный alexrovich, никто его не любит =) Сейчас появятся вопросы по "Нужно разработать внешнюю обработку в Конфигураторе 1С. Назначение обработки – оповестить по электронной почте руководителя компании о новых заказах клиентов с «интересной» суммой." =) | |||
| 45
    
        Jurest_ 21.07.21✎ 20:34 | 
        ахахах, не, это я уже сдал))     | |||
| 46
    
        Jurest_ 21.07.21✎ 20:35 | 
        (44) Пока гуглил это задание, нашел, что еще и в Сиринт чтобы пройти на стажировку такое задание дают.     | |||
| 47
    
        Jurest_ 21.07.21✎ 20:37 | 
        (44) Не можешь подсказать, как вообще подступиться то? Вот я на (41) вот этом встал пока     | |||
| 48
    
        Вафель 21.07.21✎ 20:38 | 
        (44) это они нанимают чуваков для шахматиста ерп внедрять?     | |||
| 49
    
        Вафель 21.07.21✎ 20:39 | 
        Чтобы в текст что то выгружать, помимо самих значений нужно еще хоть какуюто разметку выгружать     | |||
| 50
    
        Pro-tone 21.07.21✎ 20:39 | 
        (43) проси оплату за 4 дня минимум из расчета 6000р за день, это просто наглость такие задания задавать, поди еще и зарплату на вакансию дают 130т.р.     | |||
| 51
    
        Jurest_ 21.07.21✎ 20:42 | 
        (50) Написано от 50т.р.     | |||
| 52
    
        Jurest_ 21.07.21✎ 20:42 | 
        (50) Интересное предложение, стоит попробовать))     | |||
| 53
    
        acht 21.07.21✎ 20:46 | 
        (47) Ну, вот здесь, например, чувак хранит в строке текста еще и информацию о типе и ключевых реквизитах для поиска: https://github.com/misha1/alexrovich_1c_task3     | |||
| 54
    
        Jurest_ 21.07.21✎ 20:50 | 
        (53) Спасибо, ща поизучаю     | |||
| 55
    
        Pro-tone 21.07.21✎ 20:51 | 
        (47) общими мазками дам направление куда копать 
 1. Сперва в текстовый файл ты должен передать всю структуру возможных типов данных, и их структуру, которые есть во всех документах. Получать эти типы надо рекурсивно, проваливаясь глубже и глубже и сверять с теми типами, которые ты уже положил в описание типов в свой файл. По данной разметке ты будешь понимать как заполнять значениями и какого они типа и какие типы содержать их свойства 2. Далее циклом по конкретному объекту обойти все его метаданные, включая табчасти и их данные внутри, записав в файл имя реквизита, тип его значения и само значение 3. Если тип значения выгружаемого реквизита ссылочный, тебе надо залезть в свою структуру из 1. и по такому же принципу выгрузить его данные, и так по рекурсии падаешь до самого низа ветвления и выгружаешь все до примитивных типов, когда провалиться глубже уже невозможно 4. Далее понять как ты будешь искать в базе приемнике объект (наименование, код, дата), передать эти данные как свойства поиска, запросом будешь искать существующий, если нет его, то загружать Это я примерно описал как работает обработка УниверсальныйОбменДаннымиXML, только она делает это в формате XML. Примерно также работает и выгрузка через xdto, только там структура передается не в самом файле, а она берется из пакета xdto. По такому же принципу, но текстово можно сделать и текстовую выгрузку. | |||
| 56
    
        Pro-tone 21.07.21✎ 20:53 | 
        (51) так это работа типа фриланса? я думал экзаменационный тест     | |||
| 57
    
        Jurest_ 21.07.21✎ 20:56 | 
        (56) Не сказал бы, что прям фриланс. Но это тестовое задание, чтобы пройти на работу.     | |||
| 58
    
        Jurest_ 21.07.21✎ 20:56 | 
        (55) +- понял логику, большой спасибо за совет!     | |||
| 59
    
        Смотрящий 21.07.21✎ 20:59 | 
        (55) Лошъ, песдешъ и провокация
 (57) Пиши/читай данные как RAW как обмен в клюшках сделан | |||
| 60
    
        acht 21.07.21✎ 21:01 | 
        (56) Алексрович пылесосит рынок студентов, чтобы пожрать новых стажеров.     | |||
| 61
    
        acht 21.07.21✎ 21:02 | 
        (55) Хреновый из тебя стажер, не возьмут тебя.
 Ему наъ не уперлось полное копирование объектов - например, справочника валют со всеми реквизитами. Ему надо по коду/наименованию найти ссылку и все. | |||
| 62
    
        Смотрящий 21.07.21✎ 21:03 | 
        (60) он же жалный, ипшник этот     | |||
| 63
    
        acht 21.07.21✎ 21:04 | 
        (62) Ну, я же не спрашиваю, что он делает с предыдущими стажерами =) Это пусть у ТС голова болит.     | |||
| 64
    
        Pro-tone 21.07.21✎ 21:05 | 
        (61) плохо ты читал что он хочет
 "При нажатии кнопки «Выгрузить» информация, содержащаяся в выбранном пользователем документе, должна выгрузиться в указанный файл. Информация должна быть исчерпывающей, то есть выгружаться должны данные, чтобы при нажатии кнопки «Загрузить» в базе создавалась бы копия исходного документа" | |||
| 65
    
        Pro-tone 21.07.21✎ 21:06 | 
        это маразматическое задание для стажера, похоже на садизм какой-то, слал бы я этого товарища с его заданием далеко и надолго     | |||
| 66
    
        acht 21.07.21✎ 21:06 | 
        (64) Ю копия исходного документа
 И где тут про необходмость восстановления потрохов справочника валют? | |||
| 67
    
        Pro-tone 21.07.21✎ 21:08 | 
        (66) ты как копию передашь в базу где нет такого документа? найти по номеру+дате? ну пусто и че дальше? он хочет чтоб все данные дока ушли, и как я понял любого вида дока из конфы     | |||
| 68
    
        Pro-tone 21.07.21✎ 21:09 | 
        (66) а как ты выгрузишь валюту которой нет в приемнике без потрохов?     | |||
| 69
    
        Pro-tone 21.07.21✎ 21:10 | 
        валюту, номенклатуру, да что угодно и т.п., если их нет в приемнике     | |||
| 70
    
        Pro-tone 21.07.21✎ 21:11 | 
        только через передачу потрохов чтоб понимать что к чему приязано     | |||
| 71
    
        Jurest_ 21.07.21✎ 21:11 | 
        (63) Прости, а ТС это кто?     | |||
| 72
    
        Pro-tone 21.07.21✎ 21:12 | 
        (71) топик стартер, то есть ты     | |||
| 73
    
        OldCondom 21.07.21✎ 21:12 | 
        (65) Для ТС как раз. И мозгами пошевелит и опыт получит. ТС на самом деле редкий случай, хочет учится + задавая вопрос показывает, что сделано, и весьма не так уж убого. 
 И тут еще опыт хороший, увидит, что с дол**бами связываться не стоит и найдет нормального работодателя. | |||
| 74
    
        OldCondom 21.07.21✎ 21:13 | 
        или свалит в нормальный язык программирования     | |||
| 75
    
        acht 21.07.21✎ 21:14 | 
        (67) Про то, что документ будет загружаться в другую базу - это ты героически выдумал. 
 Если бы ты сам прочитал задание на скриншоте, то обратил бы внимание на "(за исключением номера, так как номера документов уникальные)". Что некисло так намекает. | |||
| 76
    
        Jurest_ 21.07.21✎ 21:14 | 
        (73) Если ты про меня, то я польщен)     | |||
| 77
    
        Jurest_ 21.07.21✎ 21:15 | 
        (74) Пока ищу себя, а то в своей профессии, на которую учусь, сильно разочаровался.     | |||
| 79
    
        Pro-tone 21.07.21✎ 21:17 | 
        (73) ну если только так 
 (75) надо уточнять в задании такие вещи, если это выгрузка в другую базу, то - (55), если из текущей в текущую, то просто найти по номеру+дате уже выгруженный, передать в текстовый файл его исходный номер и все, при загрузке программно скопировать тот исходный и записать, ему присвоится новый номер | |||
| 80
    
        Jurest_ 21.07.21✎ 21:18 | 
        (78) Анекдот ТОП))     | |||
| 81
    
        Pro-tone модератор 21.07.21✎ 21:19 | 
        (78) мат на форуме запрещен, поэтому удалил     | |||
| 82
    
        acht 21.07.21✎ 21:19 | 
        (79) И это ты еще про движения забыл.     | |||
| 84
    
        Pro-tone 21.07.21✎ 21:21 | 
        (82) не надо их, сами создадутся при проведении если речь о копии     | |||
| 85
    
        acht 21.07.21✎ 21:21 | 
        (78) Там в оригинале вместо абстрактного сына был вполне конерктный Вовочка - анекдот №367407     | |||
| 86
    
        acht 21.07.21✎ 21:23 | 
        (84) И не совпадут с исходными, потому что реализация проведения поменялась между выгрузкой и загрузкой =)     | |||
| 87
    
        Pro-tone 21.07.21✎ 21:25 | 
        (86) скажи еще про ручную корректировку движений, контроль остатков, партионный учет и т.п., это уже флуд     | |||
| 88
    
        acht 21.07.21✎ 21:25 | 
        (87) Ты с своим глубоким копированием первый начал     | |||
| 89
    
        Pro-tone 21.07.21✎ 21:27 | 
        (88) потому что нет однозначной конкретизации в задаче что это не в другую базу, а ТС ничего не уточнял сам как я понял     | |||
| 90
    
        Jurest_ 21.07.21✎ 21:30 | 
        (89) Нет, не уточнял. Но уверен, что загрузка документа будет в туже базу, откуда и выгрузка.     | |||
| 91
    
        Pro-tone 21.07.21✎ 21:43 | 
        (90) тогда - (79), 3 значения должны были в текстовом файле - вид документа, номер, дата. И чтение их, поиском исходника и программная копия найденного методом Скопировать () + записать(провести если исходник был проведен). Задача решена.     | |||
| 92
    
        Jurest_ 21.07.21✎ 21:48 | 
        Логично, Спасибо!     | |||
| 93
    
        hhhh 22.07.21✎ 02:12 | 
        (91) да не проведется он. Надо движения копировать.     | |||
| 94
    
        Keysto 20.09.23✎ 15:19 | 
        (32) Делаю это же самое задание, и так же проблема с получением реквизитов Табличной части, есть кто может помочь?
 Текст = Новый ТекстовыйДокумент; ВыбранныйДокумент = ЭтотОбъект.Документ; РеквизитыДокумента = ВыбранныйДокумент.Метаданные().Реквизиты; РеквизитыТЧ = ВыбранныйДокумент.Метаданные().ТабличныеЧасти; Для Каждого Реквизит ИЗ РеквизитыДокумента Цикл Текст.ДобавитьСтроку("" + ВыбранныйДокумент + " | " + Реквизит.Имя + " : " + ВыбранныйДокумент[Реквизит.Имя]); КонецЦикла; Для Каждого ТЧ ИЗ РеквизитыТЧ Цикл Текст.ДобавитьСтроку("---------------------"); Для Каждого СтрокаТЧ ИЗ ВыбранныйДокумент[ТЧ.Имя] Цикл Для Каждого Реквизит Из РеквизитыТЧ Цикл Текст.ДобавитьСтроку("" + СтрокаТЧ[Реквизит.Имя] + ":" + ВыбранныйДокумент[Реквизит.Имя]); КонецЦикла; КонецЦикла; КонецЦикла; Текст.Записать(Файл); | |||
| 95
    
        Волшебник 20.09.23✎ 15:21 | 
        (94) Создайте новую тему     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |