Имя: Пароль:
1C
1С v8
как реквизиты из строки перевести в нужный тип ?
0 wlbmJames
 
27.02.12
12:07
Привет народ. Сегодня уже задавал вопрос.
Как создать документ, зная его имя и значения реквизитов ?  
т.е. у меня есть текстовый файл, в котором написано, например - РеализацияТоваровУслуг, Организация такая-то, контрагент такой-то и т.д. Нужно прочитать эти данные из файла и на их основании создать нужный документ.

Документ создал, подсказали как. Теперь нужно как-то реквизиты правильно заполнить. Советовали типа такого :
Объект = Документы["РеализацияТоваровУслуг"].СоздатьДокумент();
Объект["Организация"] = "такая-то";
Но Организация и т.д. не строкового типа :)
1 wlbmJames
 
27.02.12
12:08
Никто не подскажет как половчее нужный тип получить ? %)
2 Reset
 
27.02.12
12:10
Поиском твоих строковых значений в соотв. справочниках.
3 SUA
 
27.02.12
12:12
найтипонаименованию
или еще как
4 n koretsky
 
27.02.12
12:17
Объект["Организация"] = ?(ЗначениеЗаполнено(Справочники.Организации.НайтиПоНаименованию(СокрЛП(НазваниеОрганизацииПолученноеИзФайла)), Справочники.Организации.НайтиПоНаименованию(СокрЛП(НазваниеОрганизацииПолученноеИзФайла)), Справочники.Организации.ПустаяСсылка());

//Или проще
ДокументОбъект.Организация = Справочники.Организации.НайтиПоНаименованию(НазваниеОрганизацииИзСтрокиФайла);
5 Wobland
 
27.02.12
12:17
(4) зачем два раза искать? чтоб одна строка была?
6 wlbmJames
 
27.02.12
12:17
НайтиПоНаименованию это, конечно хорошо. Но тут есть проблема. Через текстовый файл я переношу документы из друго базы. И не 1 вид документа или не 2, а любой. Поэтому нужно придумать какой-то универсалный механизм, потому что откуда я могу знать, что в случаном документе будет СправочникСсылка..., что ПеречислениеСсылка..., а что ДокументСсылка... и тд %)
7 Wobland
 
27.02.12
12:18
(6) предварительно запомни, что у тебя за объект - документ, справочник или ещё что
8 n koretsky
 
27.02.12
12:19
(7) ты сам понял, что ты написал?
9 salvator
 
27.02.12
12:20
(6) Универсальный обмен данными через XML чем не устраивает?
10 Wobland
 
27.02.12
12:20
(8) да
11 Reset
 
27.02.12
12:20
(6) А ты точно не изобретаешь сейчас какую-нибудь Конвертацию Данных? :)
12 n koretsky
 
27.02.12
12:21
(10) сорри, промазал, писал к шестому сообщению
13 palpetrovich
 
27.02.12
12:21
(6)  "из друго базы" - если это тоже 1с - то смори (9) и не изобретай велосипед
14 pessok
 
27.02.12
12:24
Объект["Организация"] = Справочники.Организации.НайтиПоНаименованию("такая-то");

не спасает?
15 pessok
 
27.02.12
12:25
не спасает :) используй КД. я уже пытался такое навертеть через COM, после возни лицом в грязи понял, что лучше таки КД :)
16 wlbmJames
 
27.02.12
12:31
Я не изобретаю велосипед :)) Меня, можно сказать, принудили его изобретать :) Задание такое. Написаль обработку, которая переносит документ между двумя одинаковыми конфами через текстовый файл )
17 palpetrovich
 
27.02.12
12:31
(15) не обязательно, вот у меня односторонний обмен УТ->БП, так я создал реквизит КодУТ в нужных справочниках БП - и по КОМ-у 2 года уже полет нормальный :)
(16) это что, тестовое задание?
18 wlbmJames
 
27.02.12
12:32
Что-то пипа того %)
19 Zolotko
 
27.02.12
12:34
(16) делай через описание типов. Определяешь тип реквизита, потом определяешь как данные у тебя передаются по этому реквизиту: код, наименование, номер, гуид и т.д.; ищешь по значению и подставляешь в документ. все
20 Агент Инфостарта
 
27.02.12
12:36
(18) Ищи другую контору. Представляю, что дальше будет.
21 lxs
 
27.02.12
12:36
(4) читай СП о том, что возвращает НайтиПоНаименованию. Фигню написал.
22 aleks-id
 
27.02.12
12:37
по сути XML тоже текстовый файл. заюзай универсальный обмен и не парь мозг
23 palpetrovich
 
27.02.12
12:38
(16) если это тест и только "обработку, которая переносит документ между двумя одинаковыми конфами" - морочь себе голову, считай что справочники у тебя идентичные - стало-быть ищи по-коду и не парься ;)
24 lxs
 
27.02.12
12:38
(16) xml - это тот самый обычный текстовый файл. Шли всех нах и используй стандартные методы.
25 palpetrovich
 
27.02.12
12:39
* морочь = НЕ морочь :)
26 wlbmJames
 
27.02.12
12:40
Ога. Приношу им такой стандартню обработку переноса через XML без палева. Вы чо посоны это я написал!!!!11 :D
27 wlbmJames
 
27.02.12
12:41
Как получить строковое имя типа ? %)
28 Zolotko
 
27.02.12
12:42
(24) а может они готовятся перейти на неоднородные системы? Задание полезное. Я такое писала - упрощает обмен с базами, которые не могут выгружать данные по правилам обмена
29 lxs
 
27.02.12
12:43
(28) какие правила?

ЗаписьXML и ЧтениеXML для идентичных баз никто не отменял.
30 wlbmJames
 
27.02.12
12:43
если это тест и только "обработку, которая переносит документ между двумя одинаковыми конфами" - морочь себе голову, считай что справочники у тебя идентичные - стало-быть ищи по-коду и не парься ;)

Так и хичу сделать. Для этого надо получить строковое имя типа. %)
31 salvator
 
27.02.12
12:44
(26) Можешь сам написать, ничего сверхъестественного там нет.
Разбиваешь обработку на 2 логических части - выгрузка в хмл и загрузка из файла.
32 wlbmJames
 
27.02.12
12:44
*хочу
33 Zolotko
 
27.02.12
12:47
(27) ОписаниеТиповРеквизита = МдРеквизитыЗагружаемогоСправочника[РеквизитДокумента.Имя].Тип;
34 palpetrovich
 
27.02.12
12:49
(30) если не нигде ошибся, не тестил
   ДокМетаданные = Метаданные.Документы[ТекВидДока];
   Кво = ДокМетаданные.Реквизиты.Количество()-1;
   Для К = 0 По Кво Цикл
       ТекРеквизит   =  ДокМетаданные.Реквизиты.Получить(К);
       ТекРеквизитИмя = ТекРеквизит.Имя;
       Сообщить("Реквизит: " + ТекРеквизитИмя + " Тип: " + ТекРеквизит.Тип);
   КонецЦикла;
   Для каждого ТЧДока Из ДокМетаданные.ТабличныеЧасти Цикл
       Сообщить("Табличная часть: " + ТЧДока);
       Кво = ДокМетаданные.ТабличныеЧасти[ТЧДока.Имя].Реквизиты.Количество()-1;
       Для К = 0 По Кво Цикл
           ТекРеквизит   = ДокМетаданные.ТабличныеЧасти[ТЧДока.Имя].Реквизиты.Получить(К);
           ТекРеквизитИмя = ТекРеквизит.Имя;
           Сообщить("Реквизит ТЧ: " + ТекРеквизитИмя + " Тип: " + ТекРеквизит.Тип);
       КонецЦикла;
   КонецЦикла;