![]() |
![]() |
![]() |
|
Метаданные. Выгрузка\Загрузка документов. | ☑ | ||
---|---|---|---|---|
0
marty0701
23.02.11
✎
13:38
|
Здравствуйте жители!=) Нужна помощь словом или делом. Итак, есть у меня задание, нужно выгрузить исчерпывающую информацию о документе в файл, чтоб потом его можно было загрузить обратно. Собственно, что я понял пока(если не прав, поправьте): 1. Есть поле для выбора документа, который нужно выгрузить, после выбора необходимо получить номер документа, затем через конструкцию =Метаданные.Документ(["Идентификатор"/Номер]).что-то= я смогу получить всю необходимую информацию о документе и о его содержимом. Пока правильно мыслю? 2. Создать файл, например .xls и туда в цикле всю полученную информацию выгрузить. 3. При загрузке необходимо все считать каким-то образом и через все те же метаданные создать новый документ.
Реализация ТОЛЬКО с использованием метаданных. Алгоритм действий верный? Если нет, что не так? Заранее спасибо за ответы. |
|||
1
ДенисЧ
23.02.11
✎
13:39
|
всё верно
|
|||
2
AlexNew
23.02.11
✎
13:40
|
XLS.
|
|||
3
vs1c
23.02.11
✎
14:31
|
(0),(1),(2) А что, сериализацию у нас уже отменили?
|
|||
4
AlexNew
23.02.11
✎
14:41
|
(3) А где написано, что конфигурации одинаковые? (Порядок и состав реквизитов).
|
|||
5
DrShad
23.02.11
✎
14:42
|
(0) КД не предлагать?
|
|||
6
vs1c
23.02.11
✎
14:56
|
(4) А где, что разные? Это вопрос к автору (0). Однако мне кажется, что п.3 в (0) намекает на то, что они одинаковые. Кроме всего прочего я говорил немного о другом. Сериализацию можно использовать для выгрузки документа без заморочек (типа анализа метаданных и пр.), и для загрузки. Если конфы одинаковые - вообще песня, нет - парсите XML и опять счастье.
(5) Если бы (0) знал что это - вопрос бы не возник :) |
|||
7
vmv
23.02.11
✎
16:03
|
1. Забросить в общий модуль этот функционал
2. Снизу пример вызова. Примечание: РазложитьСтрокуВМассивПодстрок() - стандартная функция любой типовой, приведена рядом для удобства. Остальное мое. Назначение: позволяет получить полную раскладку свойств объекта по ссылке, в том числе и пустой. Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") МассивСтрок = Новый Массив(); Если Разделитель = " " Тогда Стр = СокрЛП(Стр); Пока 1 = 1 Цикл Поз = Найти(Стр, Разделитель); Если Поз = 0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр, Поз - 1)); Стр = СокрЛ(Сред(Стр, Поз)); КонецЦикла; Иначе ДлинаРазделителя = СтрДлина(Разделитель); Пока 1 = 1 Цикл Поз = Найти(Стр, Разделитель); Если Поз = 0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз - 1)); Стр = Сред(Стр, Поз + ДлинаРазделителя); КонецЦикла; КонецЕсли; КонецФункции Функция ПолучитьПустуюТаблицуРеквизитов() ТзРеквизиты = Новый ТаблицаЗначений; ТзРеквизиты.Колонки.Добавить("Стандартный"); // Флажок, три состояния: 0 - не реквизит, 1 - стандартный реквизит, 2 - обычный реквизит. ТзРеквизиты.Колонки.Добавить("ИмяТЧ"); ТзРеквизиты.Колонки.Добавить("Имя"); ТзРеквизиты.Колонки.Добавить("Синоним"); ТзРеквизиты.Колонки.Добавить("Тип"); ТзРеквизиты.Колонки.Добавить("ЗначениеТипа"); ТзРеквизиты.Колонки.Добавить("Комментарий"); ТзРеквизиты.Колонки.Добавить("Использование"); Возврат ТзРеквизиты КонецФункции Функция ИнициализироватьСвойстваСтрокиРеквизитов(НоваяСтрокаТз, Реквизит, Стандартный, ИмяТЧ="") НоваяСтрокаТз.Стандартный = Стандартный; НоваяСтрокаТз.ИмяТЧ = ИмяТЧ; НоваяСтрокаТз.Имя = ?(Не ПустаяСтрока(ИмяТЧ),ИмяТЧ+".","") + Реквизит.Имя; НоваяСтрокаТз.Синоним = Реквизит.Синоним; НоваяСтрокаТз.Тип = Реквизит.Тип; НоваяСтрокаТз.ЗначениеТипа = Реквизит.Тип.ПривестиЗначение(); НоваяСтрокаТз.Комментарий = Реквизит.Комментарий; Попытка НоваяСтрокаТз.Использование = Реквизит.Использование; Исключение НоваяСтрокаТз.Использование = Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппыИЭлемента; КонецПопытки; Возврат Истина; // Можно проверять успешность инициализации и возвращать Ложь. Правда, нет необходимости КонецФункции Функция ПолучитьРеквизитыОбъектаМетаданных(Ссылка, ВключаяСвойстваРеквизита = Ложь, ВключаяСтандартныеРеквизиты = Ложь, ВключаяТабличныеЧасти = Ложь) Экспорт Перем ОбъектМетаданных, ТаблицаТип, ТаблицаВид; Перем СтандартныеРеквизитыОбъектаМетаданных, РеквизитыОбъектаМетаданных; ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)); мИмяТаблицыПоСсылке = РазложитьСтрокуВМассивПодстрок(ОбъектМетаданных.ПолноеИмя(), "."); Если Не мИмяТаблицыПоСсылке.Количество() Тогда Возврат Неопределено; КонецЕсли; ТаблицаТип = мИмяТаблицыПоСсылке[0]; ТаблицаВид = мИмяТаблицыПоСсылке[мИмяТаблицыПоСсылке.ВГраница()]; Если ТипЗнч(ВключаяТабличныеЧасти) = Тип("Строка") Тогда Если ВключаяСтандартныеРеквизиты Тогда СтандартныеРеквизитыОбъектаМетаданных = ОбъектМетаданных.ТабличныеЧасти[ВключаяТабличныеЧасти].СтандартныеРеквизиты; КонецЕсли; РеквизитыОбъектаМетаданных = ОбъектМетаданных.ТабличныеЧасти[ВключаяТабличныеЧасти].Реквизиты; Иначе Если ВключаяСтандартныеРеквизиты Тогда СтандартныеРеквизитыОбъектаМетаданных = ОбъектМетаданных.СтандартныеРеквизиты; КонецЕсли; РеквизитыОбъектаМетаданных = ОбъектМетаданных.Реквизиты; КонецЕсли; Если ВключаяСвойстваРеквизита Тогда ТзРеквизиты = ПолучитьПустуюТаблицуРеквизитов(); Иначе сРеквизиты = Новый Соответствие; КонецЕсли; // Стандартные реквизиты Если ВключаяСтандартныеРеквизиты Тогда Для Каждого Реквизит Из СтандартныеРеквизитыОбъектаМетаданных Цикл Если ВключаяСвойстваРеквизита Тогда НоваяСтрокаТз = ТзРеквизиты.Добавить(); Если ТипЗнч(ВключаяТабличныеЧасти) = Тип("Строка") Тогда ИнициализироватьСвойстваСтрокиРеквизитов(НоваяСтрокаТз, Реквизит, 1, ВключаяТабличныеЧасти); Иначе ИнициализироватьСвойстваСтрокиРеквизитов(НоваяСтрокаТз, Реквизит, 1); КонецЕсли; Иначе Если ТипЗнч(ВключаяТабличныеЧасти) = Тип("Строка") Тогда сРеквизиты.Вставить(ВключаяТабличныеЧасти + "." + Реквизит.Имя, Реквизит.Синоним); Иначе сРеквизиты.Вставить(Реквизит.Имя, Реквизит.Синоним); КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; // Обычные реквизиты Для Каждого Реквизит Из РеквизитыОбъектаМетаданных Цикл Если ВключаяСвойстваРеквизита Тогда НоваяСтрокаТз = ТзРеквизиты.Добавить(); Если ТипЗнч(ВключаяТабличныеЧасти) = Тип("Строка") Тогда ИнициализироватьСвойстваСтрокиРеквизитов(НоваяСтрокаТз, Реквизит, 2, ВключаяТабличныеЧасти); Иначе ИнициализироватьСвойстваСтрокиРеквизитов(НоваяСтрокаТз, Реквизит, 2); КонецЕсли; Иначе Если ТипЗнч(ВключаяТабличныеЧасти) = Тип("Строка") Тогда сРеквизиты.Вставить(ВключаяТабличныеЧасти + "." + Реквизит.Имя, Реквизит.Синоним); Иначе сРеквизиты.Вставить(Реквизит.Имя, Реквизит.Синоним); КонецЕсли; КонецЕсли; КонецЦикла; // Реквизиты Табличных частей Если ВключаяТабличныеЧасти = Истина Тогда Для Каждого ТЧ Из ОбъектМетаданных.ТабличныеЧасти Цикл Если ВключаяСвойстваРеквизита Тогда ТзРеквизитыТЧ = ПолучитьРеквизитыОбъектаМетаданных(Ссылка, ВключаяСвойстваРеквизита, ВключаяСтандартныеРеквизиты, ТЧ.Имя); Попытка ИспользованиеТЧ = ТЧ.Использование; Исключение ИспользованиеТЧ = Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппыИЭлемента; КонецПопытки; ТзРеквизитыТЧ.ЗаполнитьЗначения(ИспользованиеТЧ, "Использование"); Для Каждого СтрокаРеквизитТЧ Из ТзРеквизитыТЧ Цикл НоваяСтрокаТз = ТзРеквизиты.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрокаТз, СтрокаРеквизитТЧ); КонецЦикла; Иначе сРеквизитыТЧ = ПолучитьРеквизитыОбъектаМетаданных(Ссылка, ВключаяСвойстваРеквизита, ВключаяСтандартныеРеквизиты, ТЧ.Имя); Для Каждого ЭлементРеквизитыТЧ Из сРеквизитыТЧ Цикл сРеквизиты.Вставить(ЭлементРеквизитыТЧ.Ключ, ЭлементРеквизитыТЧ.Значение); КонецЦикла; КонецЕсли; КонецЦикла; КонецЕсли; Если ВключаяСвойстваРеквизита Тогда Возврат ТзРеквизиты; Иначе Возврат сРеквизиты; КонецЕсли; КонецФункции Примеры иницмализации вызова: // Ссылка ПустаяСсылка = Документы.НалоговаяНакладная.ПустаяСсылка(); ПустаяСсылка = ПоллеВвода.Значение.Ссылка; //и т.д. Вызов ТзСвойства = Add_МетаданныеКонфигурации.ПолучитьРеквизитыОбъектаМетаданных(ПустаяСсылка, Истина, Истина, Истина); // ТзСвойства можно простомтреть в отладчике, обход свойств с заполнением нового тоже прост. Свойства реквизитов и табличных частей легко видими и фильтьтруему по по ключам "Имя" и "ИмяТЧ". Как-то так:) |
|||
8
marty0701
23.02.11
✎
16:41
|
Oo, спасибо всем за ответы. Буду мучить.
|
|||
9
marty0701
23.02.11
✎
16:42
|
to vs1c: Можно использовать ТОЛЬКО метаданные=)
|
|||
10
marty0701
23.02.11
✎
16:44
|
сериализация в 1с это данные в xml? xml нельзя использовать)
|
|||
11
vs1c
23.02.11
✎
17:00
|
(10) Нельзя использовать XML? А 1С можно? Открою секрет - для решения Вашей задачи с использованием XML не требуется ничего кроме 1С. И если не затруднит поясните - "Можно использовать ТОЛЬКО метаданные". А то приходит в голову аналогия - нужно ехать на велосипеде, использовать можно только руль, колеса не предлагать.
|
|||
12
marty0701
23.02.11
✎
17:19
|
=) Нельзя использовать процедуры и методы обмена данными в XML\ как - то так. 1С видимо необходимо использовать:) Про метаданные, может неправильно выразился, но при написании мне необходимо использовать элемент языка "Метаданные."
|
|||
13
Defender aka LINN
23.02.11
✎
17:21
|
(12) Тестовое задание? А, простите, кого на работу берут - нас или вас?
|
|||
14
marty0701
23.02.11
✎
17:24
|
to Defender aka LINN, да я у Вас решения готового и не прошу, просто ищу некоторую информацию, найти не могу, вот и интересуюсь здесь. Про метаданные вообще информация не особо, по-крайней мере мне понятна. Что понял - написал, что не понял - спросил. Ответили - Спасибо, нет - аналогично.
|
|||
15
vs1c
23.02.11
✎
17:27
|
А-а, ну понятно. Хотя нет, один вопрос еще есть - если это тест, то что за контора такую придурь в виде тестов выкатывает?
|
|||
16
Amra
23.02.11
✎
17:30
|
(15) Тест, точно, помниться и мне такой давали, вот только название конторы не помню.
|
|||
17
marty0701
23.02.11
✎
17:33
|
Теперь мне не стоит задавать вопросы? :) Странно даже... Тест, ну тест, я же не прошу решить его за меня, ведь так?
Контора известная, вопрос по подобному тесту уже был на форуме. |
|||
18
vs1c
23.02.11
✎
17:41
|
(17) Ну что Вы, не обижайтесь... Просто хотел узнать куда не надо ходить на собеседования. Ведь это тоже вопрос, который достоин ответа? Верно? Так кто эти герои?
|
|||
19
marty0701
23.02.11
✎
17:47
|
Да я и не обижаюсь, глупо это по-моему. название - ООО "ЦАК "Сиринт". Да и до работы мне пока далеко, я на роль подмастерия пока, чтоб научиться, там без з\п :) Работа за знания:)
|
|||
20
fisher
23.02.11
✎
17:54
|
(18) Абсолютно нормальное тестовое задание. И ограничения вполне понятные. Тестовое задание - оно для проверки навыков программирования, а не для собственно решения.
|
|||
21
vs1c
23.02.11
✎
18:05
|
2(19) Любая работа должна оплачиваться, в противном случае это что-то другое, а не работа. ИМХО.
2(20) Ничего нормального тут нет. Если задание, как Вы говорите, для проверки навыков программирования, то и проверяйте какие навыки есть у человека по использованию конкретного инструмента (1С). Что из всего того что есть в платформе он знает и чем умеет пользоваться. Вот это ИМХО нормально. А вводить дебильные ограничения - это как я уже говорил - придурь. Или у них в конторе используется версия V8 только с метаданными, стальных функций нет и не будет? |
|||
22
fisher
23.02.11
✎
18:11
|
(21) Мне, как нанимателю, будет абсолютно пофиг на твоё знание инструмента при отсутствии элементарных навыков структурного программирования и низкой культуре кодинга.
А это тестовое задание вполне способно просветить в этом вопросе. |
|||
23
Amra
23.02.11
✎
18:11
|
(19) Хм, известная? Первый раз такое название слышу
|
|||
24
marty0701
23.02.11
✎
18:13
|
Про использование элемента языка Метаданные. "Это делается для универсализации программного кода". Ну не работа, труд? за знания, опыт:).
|
|||
25
marty0701
23.02.11
✎
18:14
|
Известная, в плане того,что уже светилось название на форуме, либо я перегнул со словами:)
|
|||
26
vs1c
23.02.11
✎
18:19
|
2(22) А вот мне, как работодателю, будет абсолютно пофиг, что есть в наличии элементарные навыки структурного программирования. Т.к. если человек освоил мат.часть (инструмент), то эти самые навыки у него сто пудов есть. А культура... это мы ему в конторе быстро объясним, как культурно писать код (у каждой конторы свое представление об этой самой культуре). Так что ничего кроме комплексов тестирующих такое задание не проясняет.
2(23) Новосибирск, там видимо о них всё гремит. |
|||
27
vs1c
23.02.11
✎
18:22
|
2(24) Не увидел (по сайту по крайней мере), что кого-то зовут бесплатно работать "за знания", даже стажерам зарплату предлагают. Врут?
|
|||
28
fisher
23.02.11
✎
18:25
|
(26) Освоить мат-чать можно по-разному. Я намного охотнее возьму чела с прямыми руками и светлой головой, но с пробелами в знаниях по конкретным инструментам, чем опытного шамана с кашей в голове. Который будет писать в принципе работоспособный код, который потом никто не будет в состоянии сопровождать.
|
|||
29
marty0701
23.02.11
✎
18:29
|
Чтобы стать стажером, надо сначала попасть в группу обучения, потом в группе обучения обучиться собственно. Потом, если вы круто отличились от всех обучаемых с вами, и, естественно, выполнили на отлично еще одно тестовое задание(не это), только в этом случае вас примут в стажеры и вы получите право на получение з\п, а потом рост, карьера, перспективы... %)
|
|||
30
vs1c
23.02.11
✎
18:34
|
2(28) А кто с этим спорит. Я лишь говорю о том, что коэффициент кривизны рук определяется не такими заданиями как в (0). Ну к примеру - "Нужно выгрузить в файл(ы) определенные документы, убить их в базе, загрузить их обратно из файла и что бы было как было. Поясните все известные вам способы, для решения этой задачи." И не надо ничего писать,пусть человек просто расскажет, что и как он собирается сделать. Вот как-то так. Если он даже рассказать это не сможет - какая культура, какие навыки, а?
|
|||
31
vs1c
23.02.11
✎
18:38
|
2(29) Не это не придурь, это лохотрон.
|
|||
32
URAL
23.02.11
✎
18:48
|
||||
33
guitar_player
23.02.11
✎
19:07
|
(21) В 1С есть пару функций позволяющих сериализировать данные автоматически. Задание на изучение основных объектов конфигурации, алгоритмику и т.д.
(19) О з\п в этой конторе в ближайший год можете даже не надеяться... да и потом сообственно |
|||
34
guitar_player
23.02.11
✎
19:07
|
(29) Блин Слава уже совсем отжигает)))
|
|||
35
marty0701
23.02.11
✎
19:13
|
2guitar_player: Печально =( Ну с чего-то начинать надо, мои грабли будут=) Стажеров то никто и брать не хочет, всем нужны профессионалы, желательно с опытом управления космическими шатлами =)
|
|||
36
Mitriy
23.02.11
✎
19:23
|
(34) это называется немного грубее - офигел... и еще зажрался...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |