Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

выбор документа из базы данных и преобразование его в txt файл

выбор документа из базы данных и преобразование его в txt файл
Я
   illi_dan
 
28.04.18 - 18:46
Добрый день уважаемые форумчане. Мне необходимо реализовать запись документа из базы данных в текстовый формат представления без использования сериализации,функций ЗаписатьВстроку() и без использования xml и json.Так как я пересел с плюсов, у меня возникли некоторые трудности. Я не особо понимаю, как выглядит объект "метаданных" изнутри. У нас ведь они могут быть разного типа и соответственно количество полей будет разное, как можно тогда написать общий для всех код,который выгружал бы эти данные? Буду благодарен так же за ссылки где можно подробно об этом почитать.Спасибо
 
 
   Остап Сулейманович
 
1 - 28.04.18 - 18:57
(0) Если перешел с плюсов - тогда должен бы знать за коллекции и foreach. Оно также точно есть в 1С.
Посему
Для каждого реквизит ИЗ Реквизиты
....
КонецЦикла;
Для каждого ТабличнаяЧасть ИЗ ТабличнаяЧасти ....
   Для Каждого текСтрока ИЗ ТабличнаяЧасть ....
   КонецЦикла;
КонецЦикла;
   illi_dan
 
2 - 28.04.18 - 19:09
Благодарю. А каким кодом можно открыть выбор документа в форме? Нашел,что открывается с помощью "форма.ОткрытьМодально()" Но там вызывают метод формы по отношению к конкретному типу(справочник,регистр и т.д),мне же нужен произвольный. Прошу прощения если путаюсь в терминах
   illi_dan
 
3 - 28.04.18 - 19:11
выбор документа в форме я имею ввиду такое же открывающееся меню, как тут:"ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие)"
   mistеr
 
4 - 28.04.18 - 19:55
(2) Выбрать документ произвольного типа можно стандартной процедурой ВвестиЗначение().

    Перем ДокСсылка;
    
    ВвестиЗначение(ДокСсылка, "Выбрите документ", Документы.ТипВсеСсылки());
   mistеr
 
5 - 28.04.18 - 20:02
(0) >как можно тогда написать общий для всех код,который выгружал бы эти данные?

Для этого и нужен объект метаданных. Он описывает структуру прикладного объекта. Если провести аналогию с плюсами, то конкретный вид документа это класс, а метаданные это RTTI для этого класса. Получается объект метаданных методом Метаданные():

    Метаданные = ДокСсылка.Метеданные()

У этого объекта есть свойства-коллекции Реквизиты и ТабличныеЧасти. Обходишь их циклом, получаешь имена реквизитов, получаешь значения реквизитов документа через [].

    ИмяРеквизита = "Дата";
    ДатаДокумента = ДокСсылка[ИмяРеквизита];
   illi_dan
 
6 - 28.04.18 - 22:37
Спасибо огромное.
   illi_dan
 
7 - 28.04.18 - 23:38
Прошу прощения, но вот этот код 





Процедура ДокументНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Перем нач;
    ОписаниеОповещения=Новый ОписаниеОповещения("КонецВвода",ЭтаФорма);
    ПоказатьВводЗначения(ОписаниеОповещения,нач,,);    
КонецПроцедуры


Процедура КонецВвода()Экспорт
    
    
КонецПроцедуры



почему-то вылетает с ошибкой
"отсутствует способ ввести значение требуемого типа",что я не так делаю?
   Красный рассвет
 
8 - 28.04.18 - 23:42
Зачем ты пересаживаешься с плюсов на 1С, а не на веб и прочие джавы?
   illi_dan
 
9 - 29.04.18 - 00:53
Хм,с++ это приговор?
   zwei
 
10 - 29.04.18 - 12:27
(9) Симптом
 
 Рекламное место пустует
   mistеr
 
11 - 29.04.18 - 12:58
(7) Нужно задать тип вводимого значения. Явно тип задается четвертым параметром. Если не задан, как у тебя, то берется тип переменной-приемника. У тебя он тоже не задан. Поэтому и ошибка.
   illi_dan
 
12 - 29.04.18 - 16:28
(11) Прошу не бить тапками, но я не особо понимаю вот в этом примере

вестиЗначение(ДокСсылка, "Выбрите документ", Документы.ТипВсеСсылки());

"Документы"- это созданный объект с именем "Документы" такого вида:
Документы = новый <тип>;

?

Тогда какого типа должен быть этот объект,что бы можно было бы вызвать функцию "ТипВсеСсылки()"?
   mexanik_96
 
13 - 29.04.18 - 16:35
(0) зачем с плюсов в 1с?
   mexanik_96
 
14 - 29.04.18 - 16:36
вообще красногласые говорят кресты, а тут плюсы, студент что ли?
   illi_dan
 
15 - 29.04.18 - 16:38
(11) Нашел что 3 аргумент функции ВвестиЗначение() в принимает "ОписаниеТипов",но как тогда передать все возможные типы? Просто на ваш код ругается,что мол "документы" переменная не определенна
   illi_dan
 
16 - 29.04.18 - 16:38
(14) да
   mistеr
 
17 - 29.04.18 - 16:58
(12) "Документы" - это типа глобальный объект, его создавать не нужно. Но если у тебя управляемые формы (по твоему коду похоже, что так), то на клиенте она не доступна, только на сервере.

(15) Описание типов придется сформировать на сервере и передать на клиента.
   illi_dan
 
18 - 29.04.18 - 19:07
(17) пробую вот так

&НаСервере
Функция ГенерДок()
    возврат Документы;    
КонецФункции



&НаКлиенте
Процедура ДокументНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
      Перем ДокСсылка;
    Документы=ГенерДок();
    ВвестиЗначение(ДокСсылка, "Выберите документ",Документы.ТипВсеСсылки());
    
КонецПроцедуры

Падает с "ошибка отображения типов".Есть ли возможность сделать это без сервера?
   hhhh
 
19 - 29.04.18 - 20:23
(18) просто заведи реквизит с типом ДокументСсылка. И кинь его мышкой на на форму. Всё, никакого программного кода писать не надо.
   mistеr
 
20 - 29.04.18 - 20:23
Возврат Документы.ТипВсеСсылки()
   trdm
 
21 - 30.04.18 - 11:12
А зачем с плюсов уходить?
   illi_dan
 
22 - 30.04.18 - 21:08
(19)я собственно так и сделал,но мне нужно сделать форму,при открытии которой можно выбрать документ из базы.
   hhhh
 
23 - 30.04.18 - 22:38
(22) почему при открытии? Это бзик такой или пари? Просто у тебя есть поле на форме типа документ. Значения в него вводятся также как и везде.
   illi_dan
 
24 - 01.05.18 - 00:03
(20) так тоже выдает ошибку "отсутсвует способ ввести значение требуемого типа"(
   illi_dan
 
25 - 01.05.18 - 00:04
(23) такое задание вот
   illi_dan
 
26 - 01.05.18 - 00:44
(20) прошу прощение,все работает)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует