|
Выгрузка табличной части документа | ☑ | ||
---|---|---|---|---|
0
Zibra72
02.07.19
✎
14:13
|
Всем доброго времени суток!
Устраиваюсь в компанию, выдали тестовое задание - создать управляемую форму выгрузки/загрузки документа любого типа через .txt формат без сериализации XML или JSON. Находил на этом форуме точно такое же задание, но все, о чем там писали, уже реализовал. Так как текстовый файл должен быть понятным пользователю, ЗначениеВФайл()/ЗначениеИзФайла() использовать не получается. ЗначениеВСтрокуВнутр() использовать запрещено по условию. Возникли следующие вопросы: 1. Реквизиты выгрузить в текст получилось, но при попытке загрузки в новый созданный документ реквизита (значение и тип я считываю из этого же текстового файла, данный реквизит точно должен быть у этого документа, так как считываю тип документа и создаю именно его), через НовыйДок[НазвРекв] = ЗначРекв выдает ошибку "Поле объекта не обнаружено". При этом если я конкретно указываю НовыйДок["КонкретноеНазвРеквНеИзФайла"] = КакоеТоЗнач ошибку не выдает, но ничего не записывает, хотя с НовыйДок["Дата"] = ДатаИзДока все работает правильно. Что я здесь делаю не так? 2. Нужно выгружать/загружать еще и табличную часть документа. Делаю следующим образом: для каждой табличной части документа выгружаю ее в таблицу Табл = Док[ТабличнаяЧасть.Имя].Выгрузить();, прохожу по строкам и выписываю все значения в txt файл. При этом не могу в "Табл" получить название колонки таблицы, а могу получить только название самой таблицы, значения и типы ее элементов. Есть ли удобный способ получить все данные из табличной части документа или как это корректно сделать способом, который я описал? 3. Некоторые реквизиты документов и табличных частей - ссылки на справочники,перечисления, доки и тд. При выгрузке их в txt формат преобразуются просто в строки, даже когда пытаюсь преобразовать в ссылку справочника, например: Значение=Справочники[Строка(ТипРекв)].НайтиПоНаименованию(Значение).Ссылка; Как можно записать ссылку в текстовый файл и потом считать ее или как из строки получить обратно ссылку и заполнить ей реквизит? И еще, можете посоветовать учебники для начинающего в 1С, где можно было бы почитать обо всех этих штуках? Заранее благодарен за ответы! |
|||
1
dka80
02.07.19
✎
14:24
|
НовыйДок["КонкретноеНазвРеквНеИзФайла"] = КакоеТоЗнач - не совпадают типы какого-то значения и доступные типы реквизита
|
|||
2
dka80
02.07.19
✎
14:25
|
НовыйДок[НазвРекв] = ЗначРекв выдает ошибку "Поле объекта не обнаружено"
Поставь точку останова на этой строчке, посмотри чему равно НовыйДок, НазвРекв. Посмотри, НовыйДок есть ли устанавливаемый тобой реквизит НазвРекв |
|||
3
Zibra72
02.07.19
✎
14:47
|
(2) Работаю для отладки с документом АвансовыйОтчет. Новый документ имеет этот же тип ДокументОбъект.АвансовыйОтчет. Первый же реквизит - ВалютаДокумента типа СправочникСсылка.Валюты. СтрокаИмя - считываю из файла название реквизита, СтрокаИмя = "ВалютаДокумента", СтрокаЗнач = "руб.", СтрокаТип = "Валюты". При попытке НовыйДок[СтрокаИмя] = СтрокаЗнач выдает ошибку. При записи даты таким же образом все ок, а тут даже не видит поле "ВалютаДокумента"
|
|||
4
Жан Пердежон
02.07.19
✎
15:05
|
(0)
во-первых, тестовое задание выдали тебе, чтобы оценить именно твой уровень, а не форума; во-вторых, с такими заданиями работодателя надо сразу слать куда подальше, имхо. |
|||
5
Zibra72
02.07.19
✎
15:20
|
(4) Задание выдали, чтобы перед самой стажировкой я хоть как-то научился работать с 1С, оценить мой уровень владения не получится, потому что он нулевой) Спросил у знатоков что-бы как раз и научиться, нужно же как-то решать задание
И что не так с заданием, что советуете послать?) |
|||
6
sqr4
02.07.19
✎
15:29
|
А давай год
|
|||
7
sqr4
02.07.19
✎
15:29
|
*код
|
|||
8
Zibra72
02.07.19
✎
15:34
|
(7) Код выгрузки реквизитов:
|
|||
9
Zibra72
02.07.19
✎
15:40
|
(8) Для каждого Реквизит Из ДокументВвод.Метаданные().Реквизиты Цикл ;
Имя = Реквизит.Имя; Значение = ДокументВвод[Имя]; Если Строка(Значение) = "" тогда продолжить; конецесли; Если ТипЗнч(Значение) = Тип("Число") ИЛИ ТипЗнч(Значение) = Тип("Строка") ИЛИ ТипЗнч(Значение) = Тип("Булево") ИЛИ ТипЗнч(Значение) = Тип("Дата") Тогда ТипРекв = ТипЗнч(Значение); Иначе Типп = Реквизит.Тип.Типы(); для каждого ти из Типп цикл ТипРекв = Метаданные.НайтиПоТипу(Ти).ПолноеИмя(); ТипРекв = Прав(Строка(ТипРекв), СтрДлина(Строка(ТипРекв)) - Найти(Строка(ТипРекв), ".")) конеццикла; Значение = Справочники[Строка(ТипРекв)].НайтиПоНаименованию(Значение).Ссылка; КонецЕсли; ТекстФайла.ЗаписатьСтроку(Имя + " :: " + ТипРекв + " :: " + Значение); КонецЦикла; Пытаюсь сделать ссылку и выгрузить ее, но, кажись, это бесполезно. Выгрузка табличной части: Для каждого ТабличнаяЧасть Из ДокументВвод.Метаданные().ТабличныеЧасти Цикл ТекстФайла.ЗаписатьСтроку(ТабличнаяЧасть); Таблица=ДокументВвод[ТабличнаяЧасть.Имя].Выгрузить(); для каждого строк из Таблица цикл ТекстФайла.ЗаписатьСтроку(" " + Строка(ТипЗНЧ(строк)) + " " + Строка(строк)); для каждого эл из строк цикл ТекстФайла.ЗаписатьСтроку(" " + Строка(ТипЗНЧ(эл)) + " " + Строка(эл)); КонецЦикла; КонецЦикла; КонецЦикла; ТекстФайла.Закрыть(); Тут не могу достучаться до названия колонки Загрузка реквизитов: Стр = Текст.ПрочитатьСтроку(); Пока СтрЗаменить(Стр, " ", "") <> "ТабличнаяЧасть" Цикл МногострочнаяСтрока = СтрЗаменить(Стр, "::", Символы.ПС); //Если СтрПолучитьСтроку(МногострочнаяСтрока,2) = "Число" или СтрПолучитьСтроку(МногострочнаяСтрока,2) = "Строка" или СтрПолучитьСтроку(МногострочнаяСтрока,2) = "Булево" или СтрПолучитьСтроку(МногострочнаяСтрока,2) = "Дата" тогда //Сообщить(СтрПолучитьСтроку(МногострочнаяСтрока,1)); НовыйДок[СтрПолучитьСтроку(МногострочнаяСтрока,1)] = СтрПолучитьСтроку(МногострочнаяСтрока,3); //конецесли; Стр = Текст.ПрочитатьСтроку(); КонецЦикла; Выгрузку реализовал очень частично, четвертые сутки думаю над выгрузкой табличной части...Закомментировал условие для отладки, первый же реквизит "ВалютаДокумента" крашится, как описал выше |
|||
10
sqr4
02.07.19
✎
15:50
|
По табличной части
для каждого строк из Таблица цикл Для Каждого Колонка из Таблица.Колонки Цикл Значение = Строк[Колонка]; КонецЦикла; КонецЦикла; Также у колонки есть и имя и тип. |
|||
11
sqr4
02.07.19
✎
15:55
|
Для реквизитов используй УникальныйИдентификатор()
Т.е не Значение = Справочники[Строка(ТипРекв)].НайтиПоНаименованию(Значение).Ссылка; а Значение = ДокументВвод[Имя].УникальныйИдентификатор(); |
|||
12
Zibra72
02.07.19
✎
16:01
|
(11) По условию нельзя использовать УникальныйИдентификатор(). А по (10) жалуется "Получение элемента по индексу для значения не определено Значение = Строк[Колонка];"
|
|||
13
sqr4
02.07.19
✎
16:10
|
Значение = Строк[Колонка.имя]
|
|||
14
sqr4
02.07.19
✎
16:13
|
Если УИ нельзя использовать, то для справочника наименование, для перечисление имя значения
|
|||
15
Zibra72
02.07.19
✎
16:23
|
(13) Спасибо, вроде, то, что нужно. (14) Я так и делаю, разве нет? Только все равно Значение не приобретает какой-то другой формат при выводе, чтобы было понятно, что это ссылка. Или так и не должно быть? Понимаю, что нужно еще условие для проверки справочник/перечисление и уже так искать, но сначала со справочниками хотя-бы разобраться.
|
|||
16
sqr4
02.07.19
✎
16:41
|
ТекстФайла.ЗаписатьСтроку(Имя + " :: " + ТипРекв + " :: " + Значение);
Модернизируйте вот эту строку, где будет понятно что это ссылочный тип, хотя не понятно почему не использовать именно эту строку ТипРекв = Метаданные.НайтиПоТипу(Ти).ПолноеИмя(); |
|||
17
sqr4
02.07.19
✎
16:41
|
без удаления того что до дочки
|
|||
18
sqr4
02.07.19
✎
16:41
|
точки*
|
|||
19
Zibra72
02.07.19
✎
16:54
|
(16) Не совсем понимаю, как Вы предлагаете модернизировать. Сейчас в файл выводится, например, строка
ФизЛицо :: ФизическиеЛица :: Иванов Иван Иванович, где первое - реквизит документа, второе - сокращенный тип (от СправочникСсылка.ФизическиеЛица - из реквизитов в конфигурации), третье - значение. Можно ли это значение получить и записать ссылкой, а не просто взять строку из заполненного поля, чтобы потом не искать по справочникам физ лиц товарища Иванова, а сразу вставить ссылку не простой строкой? |
|||
20
sqr4
02.07.19
✎
16:56
|
УникальныйИдентификатор() = Ссылка
|
|||
21
sqr4
02.07.19
✎
16:59
|
Просто ссылка в базе имеет представление, которое и формируется в большинстве случаем как наименование, и применяя к ней Строка() вы получаете как раз представление. Т.е запрет на использование УникальныйИдентификатор(), предполагает что вы выберете реквизит и будете его использовать в качестве Уникального идентификатора. Это может быть либо код либо наименование. Например для справочника Банки Код, вроде бы то что нужно)
|
|||
22
Fish
02.07.19
✎
17:01
|
Интересно потом эту ветку работодателю показать :))
|
|||
23
sqr4
02.07.19
✎
17:03
|
(22) ну если человек готовится на стажера и с такими подсказками справится, то почему бы не взять?
|
|||
24
sqr4
02.07.19
✎
17:03
|
+(23) особенно это будет сделка
|
|||
25
Fish
02.07.19
✎
17:04
|
(21) Если один реквизит не обеспечивает уникальность ключа, то ключ можно сделать из совокупности реквизитов, на 100% обеспечивающих уникальность.
|
|||
26
sqr4
02.07.19
✎
17:04
|
да!
|
|||
27
Zibra72
02.07.19
✎
17:17
|
Дык дело в том, что когда спросил совета у работодателя, что да как сделать можно, он посоветовал гуглить или спросить здесь)) А гугл все равно ведет сюда)
А насчет (21), получил коды ссылочных типов. Теперь буду искать, как по этим кодам при загрузке обратно получить нужное значение. Спасибо! |
|||
28
Fish
02.07.19
✎
17:20
|
Я так понимаю, тест в основном направлен не на решение задачи, а на проверку способности гуглить и задавать вопросы на мисте :))
|
|||
29
Zibra72
02.07.19
✎
17:31
|
(28) Это типовое тестовое задание многолетней давности, как я понял. Так что да, главное - научиться искать то, чего нет в книгах))
Или все такие есть? Мне советовали почитать руководство начинающего разработчика, но там по коду почти ничего нет, все в целом по конфигурации. А про функции, параметры где можно почитать? Понятно, что если знаешь название - то СП, но если нужно что-то новое? Гугл не выдает никаких справочников... Изучал С# - все на метаните с 0 до приличного уровня, например, а с 1С есть похожие ресурсы? |
|||
30
Fish
02.07.19
✎
17:33
|
(29) Да не, это я шучу. А на самом деле тут самый живой ресурс по 1С. Не без троллинга, конечно, но специалистов тут много, всегда помогут.
|
|||
31
Zibra72
04.07.19
✎
16:25
|
Спасибо всем, кто помог!
Остался последний шаг - при записи нового документа единственное, что не выгружается в текстовый файл и потом не загружается обратно - счет-фактура. В реквизитах и табличной части документа ее нет, видна только на форме самого документа в "подвале". Можно как-нибудь узнать, есть ли у документа это свойство и как его программно выгрузить в txt файл и потом загрузить на новосозданный документ? |
|||
32
sqr4
04.07.19
✎
16:45
|
Вообщем, это другой документ, связанный с этим
|
|||
33
sqr4
04.07.19
✎
16:45
|
Реквизиты связи в том документе.
|
|||
34
Zibra72
04.07.19
✎
17:00
|
(33) А как до них добраться можно? В Документ.Метаданные().Реквизиты их нет...
|
|||
35
sqr4
04.07.19
✎
17:03
|
их и не будет. У счет фактуре реквизит документоснование или табличная часть со списком доков оснований. При открытии, документ ищется среди оснований счет фактур и если находится, то выводится надпись
|
|||
36
sqr4
04.07.19
✎
17:03
|
Вообщем для перенос, надо еще и ее за собой цеплять и создавать ну это в идеале
|
|||
37
Fish
04.07.19
✎
17:06
|
(31) Посмотри, откуда она на форму попадает.
|
|||
38
Zibra72
04.07.19
✎
17:16
|
(36) А как узнать, нужно ли это для данного документа?
(37) Насколько я понял, на форме есть реквизит "СчетФактура" и кнопка "ВыписатьСчетФактуру". Но через Документы.РеализацияТоваровУслуг.Формы.ФормаДокументаОбщая не могу получить этот самый реквизит. |
|||
39
Fish
04.07.19
✎
17:20
|
(38) Я ничего не понял из того, что ты написал :)
А я имел ввиду следующее: Ту написал "видна только на форме самого документа в "подвале"" - т.е. тебе надо найти в коде модуля формы место, где заполняется этот реквизит формы. |
|||
40
sqr4
04.07.19
✎
17:32
|
(38) ты и не получишь его, через форму, забудь, это так не работает. На форме данные только отображаются, я уже сказал как нужно делать и в какую сторону идти. В форме ты лишь убедишься, что заполняется этот реквизит именно оттуда.
|
|||
41
sqr4
04.07.19
✎
17:41
|
(38) Запросом надо найти или не найти счет фактуру для которого этот документ - основание.
|
|||
42
sqr4
04.07.19
✎
17:42
|
Как то так
ВЫБРАТЬ СчетФактураПолученныйДокументыОснования.Ссылка КАК Ссылка ИЗ Документ.СчетФактураПолученный.ДокументыОснования КАК СчетФактураПолученныйДокументыОснования ГДЕ СчетФактураПолученныйДокументыОснования.ДокументОснование = &ДокументОснование |
|||
43
Zibra72
04.07.19
✎
18:29
|
(42) Как я понял, вместо &ДокументОбоснование нужно вставить ссылку на документ, который должен быть основанием. Подставляю ДокументВвод типа ДокументСсылка, полученный из поля ввода, но вылезает ошибка "не задано значение параметра ДокументВвод"
|
|||
44
Zibra72
04.07.19
✎
19:01
|
(36) Нашел документ счет-фактуры без запроса, перебором в цикле. Предлагаете его тоже полностью выгружать/загружать или достаточно при загрузке документа создать новую счет-фактуру и задать ей основанием новосозданный документ?
|
|||
45
sqr4
05.07.19
✎
09:19
|
(44) циклом перебирать все СФ плохая идея, запросом быстрее гораздо. Предлагаю полностью
|
|||
46
catena
05.07.19
✎
09:34
|
(44)Вы мудрите, в задаче было сказано о выгрузке реквизитов документа или о выгрузке всех связанных объектов? Так-то документом основания ваш документ любого типа может быть не только у счет-фактуры. И не только документом-основания.
|
|||
47
Zibra72
11.07.19
✎
17:00
|
Всем спасибо, все сделал и сдал!
Теперь выдали второе задание на загрузку контрагентов из excel)) И у меня снова вопросы) Не хочу создавать новые темы, поэтому спрошу здесь, может кто поможет. В общем, как я понял из списка реквизитов, представленных в таблице, нужно создавать не просто контрагента, но и связывать его с партнером, контактными лицами и договором. Может я не прав насчет этого, но тогда не знаю, как контрагенту вписать следующие поля: 1. вид взаимоотношений(покупатель/поставщик, есть в "партнере") 2. 2 телефона (в контрагенте только 1, в партнере сколько хочешь) 3. регион 4. название и валюту договора 5. номер расчетного счета, БИК 6. данные нескольких контактных лиц (в партнере можно вписать только одного, но, как я понял, можно привязать к партнеру список контактных лиц) 7.сайт (вообще нигде не могу найти этого реквизита...) Дело происходит в "Управление торговлей 11.4", а данные в excel выгружены из "Торговля и склад 7.7". Буду благодарен всем, кто сможет помочь еще раз! |
|||
48
sqr4
11.07.19
✎
17:04
|
А зря лучше новую. Да нужно будет все связные справочники создать. Сайт это такая же контактная информация, как и телефон.
|
|||
49
sqr4
11.07.19
✎
17:05
|
(47) Также предусмотри возможность чтобы вся херня не задваивалась
|
|||
50
Zibra72
11.07.19
✎
17:12
|
(48) Как соединить партнера и контрагента я, вроде, понял, у контрагента соответствующие реквизит есть, туда запросом перекинуть данные из этого контрагента в партнера и присоединить обратно. А как присоединить ко всему этому добру договор и контактные лица?
Еще для договора нужно поле "организация". Сейчас в базе уже есть много контрагентов/партнеров и тд, но организаций всего штук 5, так что это не те же партнеры, как я понял. (49) Вы про двойников контрагентов или что? Про двойников я попробую учесть поиском в базе, если Вы про что-то другое - объясните, пожалуйста |
|||
51
sqr4
11.07.19
✎
17:28
|
(50) да про это. У договоров и контактных лиц, наверно они будут владельцами
|
|||
52
Zibra72
11.07.19
✎
17:36
|
(51) Вроде пока алгоритм действия понятен, буду пробовать реализовывать. Спасибо!
|
|||
53
FIXXXL
12.07.19
✎
12:33
|
> Дело происходит в "Управление торговлей 11.4", а данные в excel выгружены из "Торговля и склад 7.7".
странные тесты... денег то заплатят за это? |
|||
54
Zibra72
13.07.19
✎
23:23
|
(53) Пока нет, это ж тесты)
|
|||
55
Zibra72
13.07.19
✎
23:29
|
Возникла проблемка при загрузке информации о банковском счете контрагента. Номер счета и валюты загружаются, а БИК - нет. Ошибок не выдает, но при создании счета поле остается пустым. Не могу нагуглить, в чем дело, про программное заполнение ни слова...
|
|||
56
hhhh
14.07.19
✎
01:28
|
(55) БИК это у банка поле. Банк вам надо.
|
|||
57
Zibra72
14.07.19
✎
22:57
|
(56) В справочнике "БанковскиеСчетаКонтрагентов" есть реквизит "БИКБанка", который я и пытаюсь заполнить. Реквизит "НомерСчеты" заполняется и отображается без проблем а БИК - не показывается после записи
|
|||
58
Garykom
гуру
14.07.19
✎
23:10
|
(57) Поищи справочник Банки
|
|||
59
Zibra72
14.07.19
✎
23:47
|
(58) Такого нет, есть только "БанковскиеСчетаКонтрагентов" и "БанковскиеСчетаОрганизаций". "БИКБанка" типа строка, записать туда тоже пытаюсь строку
Других структур про банки поиск тоже не выдал |
|||
60
hhhh
15.07.19
✎
00:00
|
(59) что-то вы врете, смотрю справочник БанковскиеСчетаКонтрагентов, там первый реквизит НомерСчета, второй реквизит Банк.
|
|||
61
Zibra72
15.07.19
✎
00:07
|
(60) Да, есть. Неправильно понял прошлое сообщение, прошу прощения.
Но я не могу создать банк только по его БИК-у. Про расчетный счет контрагента мне известно только его номер и БИК банка. И найти банк по БИК в справочнике "КлассификаторБанков", куда ссылается реквизит "Банк" у расчетного счета не могу, там нет такого реквизита... |
|||
62
hhhh
15.07.19
✎
00:37
|
(61) да, уж
|
|||
63
Zibra72
15.07.19
✎
00:43
|
(62) Есть какие-нибудь идеи, почему он не заполняется?)
|
|||
64
hhhh
15.07.19
✎
01:29
|
(63) кто он? банк? Наверно, потому что вы его не заполнили, вот он и не заполняется.
|
|||
65
hhhh
15.07.19
✎
01:30
|
откройте сам справочник этот найдите там бик.
|
|||
66
Zibra72
18.07.19
✎
17:22
|
С БИКом и всем остальным разобрался, большое спасибо!
Остался последний (надеюсь) пункт - заполнить адрес доставки у партнера. Уже перепробовал устанавливать все виды из Справочники.ВидыКонтактнойИнформации, но никак не могу заполнить адрес доставки. Через форму тоже не получается докопаться - там стоит декорация контактных данных... Как можно до него добраться? Простой адрес заполняется без проблем. |
|||
67
Fish
18.07.19
✎
17:24
|
(66) Показывай, как делал.
|
|||
68
Zibra72
18.07.19
✎
17:27
|
(67) ПартнерАдресФиз = НовыйПартнер.КонтактнаяИнформация.Добавить();
ПартнерАдресФиз.Вид = Справочники.ВидыКонтактнойИнформации.АдресПартнера(перебирал все виды со словом адрес - адрес доставки все равно не заполняется); ПартнерАдресФиз.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес; ПартнерАдресФиз.Представление = АдресФиз; |
|||
69
Fish
18.07.19
✎
17:29
|
(68) А поле "Значение" не пробовал заполнять?
|
|||
70
Zibra72
18.07.19
✎
17:40
|
(69) Заполняю. Через XML.
ПартнерАдресФиз.ЗначенияПолей = "<КонтактнаяИнформация xmlns=""http://www.v8.1c.ru/ssl/contactinfo"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" Представление=""" + ПартнерАдресФиз.Представление + """><Комментарий/><Состав xsi:type=""Адрес"" Страна=""РОССИЯ""><Состав xsi:type=""АдресРФ""><СубъектРФ xsi:nil=""true""/><СвРайМО><Район xsi:nil=""true""/></СвРайМО><Город xsi:nil=""true""/><НаселПункт xsi:nil=""true""/><Улица>" + ПартнерАдресФиз.Представление + "</Улица><ДопАдрЭл ТипАдрЭл=""10100000"" Значение=""""/></Состав></Состав></КонтактнаяИнформация>"; Дело в том, что если ставлю вид = ...АдресПартнера, заполняется просто поле "адрес", которое под полем "адрес доставки". Если беру другие виды из ВидыКонтактнойИнформации - вообще не заполняется, что и логично. |
|||
71
hhhh
18.07.19
✎
17:54
|
(70) сами лепите xml? Там же есть функция в конфе типа значения полей.
|
|||
72
Zibra72
18.07.19
✎
17:59
|
(71) Можно поподробнее об этом, пожалуйста?
И подскажете что-нибудь насчет адреса доставки? |
|||
73
hhhh
19.07.19
✎
10:03
|
(72) если юридический адрес, то вам неверно не партнера, а контрагента надо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |