|
выбор документа из базы данных и преобразование его в txt файл | ☑ | ||
---|---|---|---|---|
0
illi_dan
28.04.18
✎
18:46
|
Добрый день уважаемые форумчане. Мне необходимо реализовать запись документа из базы данных в текстовый формат представления без использования сериализации,функций ЗаписатьВстроку() и без использования xml и json.Так как я пересел с плюсов, у меня возникли некоторые трудности. Я не особо понимаю, как выглядит объект "метаданных" изнутри. У нас ведь они могут быть разного типа и соответственно количество полей будет разное, как можно тогда написать общий для всех код,который выгружал бы эти данные? Буду благодарен так же за ссылки где можно подробно об этом почитать.Спасибо
|
|||
1
Остап Сулейманович
28.04.18
✎
18:57
|
(0) Если перешел с плюсов - тогда должен бы знать за коллекции и foreach. Оно также точно есть в 1С.
Посему Для каждого реквизит ИЗ Реквизиты .... КонецЦикла; Для каждого ТабличнаяЧасть ИЗ ТабличнаяЧасти .... Для Каждого текСтрока ИЗ ТабличнаяЧасть .... КонецЦикла; КонецЦикла; |
|||
2
illi_dan
28.04.18
✎
19:09
|
Благодарю. А каким кодом можно открыть выбор документа в форме? Нашел,что открывается с помощью "форма.ОткрытьМодально()" Но там вызывают метод формы по отношению к конкретному типу(справочник,регистр и т.д),мне же нужен произвольный. Прошу прощения если путаюсь в терминах
|
|||
3
illi_dan
28.04.18
✎
19:11
|
выбор документа в форме я имею ввиду такое же открывающееся меню, как тут:"ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие)"
|
|||
4
mistеr
28.04.18
✎
19:55
|
(2) Выбрать документ произвольного типа можно стандартной процедурой ВвестиЗначение().
Перем ДокСсылка; ВвестиЗначение(ДокСсылка, "Выбрите документ", Документы.ТипВсеСсылки()); |
|||
5
mistеr
28.04.18
✎
20:02
|
(0) >как можно тогда написать общий для всех код,который выгружал бы эти данные?
Для этого и нужен объект метаданных. Он описывает структуру прикладного объекта. Если провести аналогию с плюсами, то конкретный вид документа это класс, а метаданные это RTTI для этого класса. Получается объект метаданных методом Метаданные(): Метаданные = ДокСсылка.Метеданные() У этого объекта есть свойства-коллекции Реквизиты и ТабличныеЧасти. Обходишь их циклом, получаешь имена реквизитов, получаешь значения реквизитов документа через []. ИмяРеквизита = "Дата"; ДатаДокумента = ДокСсылка[ИмяРеквизита]; |
|||
6
illi_dan
28.04.18
✎
22:37
|
Спасибо огромное.
|
|||
7
illi_dan
28.04.18
✎
23:38
|
Прошу прощения, но вот этот код
Процедура ДокументНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) Перем нач; ОписаниеОповещения=Новый ОписаниеОповещения("КонецВвода",ЭтаФорма); ПоказатьВводЗначения(ОписаниеОповещения,нач,,); КонецПроцедуры Процедура КонецВвода()Экспорт КонецПроцедуры почему-то вылетает с ошибкой "отсутствует способ ввести значение требуемого типа",что я не так делаю? |
|||
8
Красный рассвет
28.04.18
✎
23:42
|
Зачем ты пересаживаешься с плюсов на 1С, а не на веб и прочие джавы?
|
|||
9
illi_dan
29.04.18
✎
00:53
|
Хм,с++ это приговор?
|
|||
10
zwei
29.04.18
✎
12:27
|
(9) Симптом
|
|||
11
mistеr
29.04.18
✎
12:58
|
(7) Нужно задать тип вводимого значения. Явно тип задается четвертым параметром. Если не задан, как у тебя, то берется тип переменной-приемника. У тебя он тоже не задан. Поэтому и ошибка.
|
|||
12
illi_dan
29.04.18
✎
16:28
|
(11) Прошу не бить тапками, но я не особо понимаю вот в этом примере
вестиЗначение(ДокСсылка, "Выбрите документ", Документы.ТипВсеСсылки()); "Документы"- это созданный объект с именем "Документы" такого вида: Документы = новый <тип>; ? Тогда какого типа должен быть этот объект,что бы можно было бы вызвать функцию "ТипВсеСсылки()"? |
|||
13
mexanik_96
29.04.18
✎
16:35
|
(0) зачем с плюсов в 1с?
|
|||
14
mexanik_96
29.04.18
✎
16:36
|
вообще красногласые говорят кресты, а тут плюсы, студент что ли?
|
|||
15
illi_dan
29.04.18
✎
16:38
|
(11) Нашел что 3 аргумент функции ВвестиЗначение() в принимает "ОписаниеТипов",но как тогда передать все возможные типы? Просто на ваш код ругается,что мол "документы" переменная не определенна
|
|||
16
illi_dan
29.04.18
✎
16:38
|
(14) да
|
|||
17
mistеr
29.04.18
✎
16:58
|
(12) "Документы" - это типа глобальный объект, его создавать не нужно. Но если у тебя управляемые формы (по твоему коду похоже, что так), то на клиенте она не доступна, только на сервере.
(15) Описание типов придется сформировать на сервере и передать на клиента. |
|||
18
illi_dan
29.04.18
✎
19:07
|
(17) пробую вот так
&НаСервере Функция ГенерДок() возврат Документы; КонецФункции &НаКлиенте Процедура ДокументНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) Перем ДокСсылка; Документы=ГенерДок(); ВвестиЗначение(ДокСсылка, "Выберите документ",Документы.ТипВсеСсылки()); КонецПроцедуры Падает с "ошибка отображения типов".Есть ли возможность сделать это без сервера? |
|||
19
hhhh
29.04.18
✎
20:23
|
(18) просто заведи реквизит с типом ДокументСсылка. И кинь его мышкой на на форму. Всё, никакого программного кода писать не надо.
|
|||
20
mistеr
29.04.18
✎
20:23
|
Возврат Документы.ТипВсеСсылки()
|
|||
21
trdm
30.04.18
✎
11:12
|
А зачем с плюсов уходить?
|
|||
22
illi_dan
30.04.18
✎
21:08
|
(19)я собственно так и сделал,но мне нужно сделать форму,при открытии которой можно выбрать документ из базы.
|
|||
23
hhhh
30.04.18
✎
22:38
|
(22) почему при открытии? Это бзик такой или пари? Просто у тебя есть поле на форме типа документ. Значения в него вводятся также как и везде.
|
|||
24
illi_dan
01.05.18
✎
00:03
|
(20) так тоже выдает ошибку "отсутсвует способ ввести значение требуемого типа"(
|
|||
25
illi_dan
01.05.18
✎
00:04
|
(23) такое задание вот
|
|||
26
illi_dan
01.05.18
✎
00:44
|
(20) прошу прощение,все работает)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |