Модераторы: stron
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработкa (создание экземпляра существ. док.) +XML 
:(
    Опции темы
Strucka
Дата 2.8.2007, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 27.5.2007

Репутация: нет
Всего: нет



Такой вопрос: нужно написать обтаботку для документа XML перевести его в документ 1С.
Мне нужно создать экземпляр существующего дока. и заполнить шапку и реквизиты из XML.
Пока вопросов по переводу из XML нету как раз 8) Но так как я еще плохо знаю 1С, то ...
Так вот, чтобы создать экземпляр существующего объекта мне нужно написать выражение типа

<переменная>=документ.<имя существующего документа>.новый 
(или создатьобъект(документ...)
Или как? 
И какие процедуры (предопределенные процедуры) мне нужно будет написать.
PM MAIL   Вверх
Kaboom
Дата 3.8.2007, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 25.5.2007

Репутация: нет
Всего: нет



Вот пример кода надеюсь разберешься:

Код

 Док = СоздатьОбъект("Документ.ХХХХХ"); //ХХХХХ - вид документа который нужно создать ( напр. РасходнаяНакладная)
 Док.Новый();
 //записываем реквизиты шапки
 Док.ДатаДок = ТекущаяДата();
 Док.Автор = глПользователь;
 <.....>
 //теперь цикл по строкам документа(допустим табличная часть сохраняется в таблице значений), для примера взял цикл Для
 Тз.ВыбратьСтроки();
  Пока Тз.ПолучитьСтроку() = 1 Цикл
       Док.НоваяСтрока()
       Док. Товар = Тз.Товар;
       Док.Количество = Тз.Количество
      <...>
   КонецЦикла;
   Док.Записать();
   Док.Провести(); 


 
PM MAIL   Вверх
Strucka
Дата 5.8.2007, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 27.5.2007

Репутация: нет
Всего: нет



Теперь обработка выглядит вот так. (Еще не завершена)
Код

//*******************************************
//Ограничения на входящие файлы XML:                         

//1) В первой строке обязателен заголовок XML вида <?xml version="1.0" encoding="windows-1251"?>    
//2) Каждый тег должен быть записан в отдельной строке. Возможны отступы от начала строки и пустые строки.        
//3) Значения атрибутов - строго в двойных кавычках.                                                              
//4) Не поддерживаются текстовые значения (любые значения можно передавать только через атрибуты).                
//5) Комментарии и "подобные им" элементы XML не поддерживаются.                                                  
                
перем xml_fso;
перем xml_file; 
перем xml_ИмяТега;                                 

перем xml_СписокАтрибутов;                         
перем xml_сз;  

                
///////////////////////////////////////////////////////////////////////                                           
//Открывает XML-файл в режиме "только чтение"      
Процедура xml_ОткрытьФайл(прм_ИмяФайла)            
//прм_ИмяФайла - имя файла XML (укажите полный путь и расширение .XML).                                           
                
        xml_fso=СоздатьОбъект("Scripting.FileSystemObject");                                                      
        xml_file=xml_fso.OpenTextFile(прм_ИмяФайла, 1, 0, 0); //Открываем файл в режиме "только чтение"           

        стр=xml_file.ReadLine(); //Читаем заголовок XML вида <?xml version="1.0" encoding="windows-1251"?>        
        Если Найти(стр,"<?xml")=0 Тогда            
                Сообщить("Неправильный файл XML "+прм_ИмяФайла,"!"); а=10/0;                                      
        КонецЕсли;    
                             
        Если Найти(стр,"windows-1251")=0 Тогда     
                Сообщить("Требуется кодировка windows-1251 файла XML "+прм_ИмяФайла,"!"); а=10/0;                 
        КонецЕсли;                                 
        xml_СписокАтрибутов=СоздатьОбъект("СписокЗначений");                                                      
        xml_сз=СоздатьОбъект("СписокЗначений");    

КонецПроцедуры  // xml_ОткрытьФайл                 




///////////////////////////////////////////////////////////////////////                                           
//Получает значение атрибута считанного тега по имени атрибута.                                                   
//Если надо получить атрибут по его номеру, читайте список значений xml_СписокАтрибутов                           
                
Функция xml_ПолучитьАтрибут(прм_ИмяАтрибута)       
        Возврат xml_СписокАтрибутов.Получить(прм_ИмяАтрибута);                                                    
КонецФункции    // xml_ПолучитьАтрибут             
                

///////////////////////////////////////////////////////////////////////                                           
//Закрывает открытый файл XML. По завершении работы с файлом его необходимо закрыть.                              
Функция xml_Закрыть()                              
        xml_file.Close();                          
КонецФункции    // xml_Закрыть
    
Функция КаталогФайла(Файл="")
    
    Каталог=""; Файл=ИмяФайлаЗагрузки; Разд=Найти(Файл, "\");
    
    Пока 0<Разд Цикл 
        Каталог=Каталог+Лев(Файл, Разд); Файл=Сред(Файл, Разд+1); Разд=Найти(Файл, "\");
    КонецЦикла;

    Если (4<СтрДлина(Каталог)) и (ФС.СуществуетФайл(Каталог+".")=0) Тогда
        Если 6<>Вопрос("Указанный каталог не существует! Создать?",4) Тогда Каталог="";
        Иначе ФС.СоздатьКаталог(Каталог);
        КонецЕсли;
    КонецЕсли;
    
    Возврат(Каталог);
    
КонецФункции // КаталогФайла()

                
Процедура ПриНачалеВыбораЗначения(Элемент, Продолжать) // предопределенная процедура
    
    Перем Файл; Каталог=КаталогФайла(Файл);
        
    Если Элемент="ИмяФайлаЗагрузки" Тогда
        Выбор=ФС.ВыбратьФайл(0, Файл, Каталог, "Файл загрузки", "XML (*.xml)|*.xml", "xml");
        Если Выбор=1 Тогда ИмяФайлаЗагрузки=Каталог+Файл; КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры // ПриНачалеВыбораЗначения()



//*******************************************      
//Тестовая процедура, которая считывает XML файл в справочник Товаров.                                            
Процедура Выполнить()                              
        стрИмяФайла=ИмяФайлаЗагрузки;//"XML\XMLOutPut1.xml";КаталогИБ()+   
        спрР=СоздатьОбъект("Справочник.Контрагенты");
        спрВ=создатьОбъект("справочник.Валюты"); 
        спрТЦ=создатьОбъект("справочник.ТипыЦен"); 
        док=СоздатьОбъект("Документ.ОказаниеУслуг");                                                                                                              
        
        Сообщить("Начало чтения XML: "+ТекущееВремя());                                                           
        xml_ОткрытьФайл(стрИмяФайла); 
        стр=""; 
        Пока стр="" Цикл                                                   
            стр=СокрЛП(xml_file.ReadLine());   
        КонецЦикла; //цикл, чтобы пропустить пустые строки      
        
        Пока xml_file.AtEndOfstream<>1 Цикл
            стр="";
            стр=сокрЛП(xml_file.ReadLine()); 
             
          Если Найти(стр,"ActNumber")>0 тогда
              стр=Сред(стр,стрДлина("<ActNumber>")+1,стрДлина(стр)-стрДлина("</ActNumber>")-стрДлина("<ActNumber>"));
                 док.новый();
                 Док.номердок = стр;                 
                 сообщить("документ за номером " +стр+ "  создан");
         иначеЕсли Найти(стр,"ActDate")>0   тогда            
               стр=Сред(стр,стрДлина("<ActDate>")+1,стрДлина(стр)-стрДлина("</ActDate>")-стрДлина("<ActDate>"));
                  док.датадок=Дата(стр);
                   сообщить("Дата документа "+ стр);
            иначеЕсли Найти(стр,"ClientINN")>0   тогда
               стр=Сред(стр,стрДлина("<ClientINN>")+1,стрДлина(стр)-стрДлина("</ClientINN>")-стрДлина("<ClientINN>"));
                    Если ПустаяСтрока(стр)=0 Тогда
                        
                           если спрР.ВыбратьЭлементыПоРеквизиту("ИНН",стр,1,0)=1 тогда
                                  док.контрагент=спрр.текущийэлемент;                                         
                            иначе сообщить("Нет контрагента с ИНН:"+ стр + "  или ИНН не задан");                      
                           КонецЕсли;                                   
                 конецесли;                                                              
                //иначеЕсли Найти(стр,"Client")>0   тогда
                 // стр=Сред(стр,стрДлина("<Client>")+1,стрДлина(стр)-стрДлина("</Client>")-стрДлина("<Client>"));
                  
                  // иначеЕсли Найти(стр,"DogovorNumber")>0   тогда
                    //  стр=Сред(стр,стрДлина("<DogovorNumber>")+1,стрДлина(стр)-стрДлина("</DogovorNumber>")-стрДлина("<DogovorNumber>"));
                      
                     иначеЕсли Найти(стр,"CurrencyCode")>0   тогда
                       стр=Сред(стр,стрДлина("<CurrencyCode>")+1,стрДлина(стр)-стрДлина("</CurrencyCode>")-стрДлина("<CurrencyCode>"));
                         спрВ.найтипокоду(стр); 
                         Если ПустаяСтрока(стр)=0 Тогда
                           Если спрВ.выбран()>0 Тогда
                         //    док.типцен=
                           КонецЕсли; 
                         конецЕсли;
                         иначеЕсли Найти(стр,"Currency")>0   тогда
                           стр=Сред(стр,стрДлина("<Currency>")+1,стрДлина(стр)-стрДлина("</Currency>")-стрДлина("<Currency>"));
                     
        КонецЕсли;    
            
        КонецЦикла; 
     
        
        xml_Закрыть(); 
        Сообщить("Обработка завершена! "+ТекущееВремя(),"i");
        
        
    
КонецПроцедуры

Процедура ВыполнитьОбработку() 
    
    
КонецПроцедуры    





Это сообщение отредактировал(а) Strucka - 6.8.2007, 20:18
PM MAIL   Вверх
Strucka
Дата 6.8.2007, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 27.5.2007

Репутация: нет
Всего: нет



 я столкнулся с проблемой: из XML извлекаю ИНН ,а у контрагента реквизит ИНН неразделимо идет с КПП
Мой руководитель сказал добавить ко всем экземплярам справочника контрагенты новый реквизит ИННбезКПП и соответсвенно для всех контрагентов занести в новый реквизит информацию из ИНН(только номер ИНН)

Как организовать эту процедурку?
PM MAIL   Вверх
Strucka
Дата 10.8.2007, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 27.5.2007

Репутация: нет
Всего: нет



Все задачу решил всем спасибо 8)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "1C: Предприятие, SAP, ERP и учётные системы"
stron

Запрещается!

1. Обсуждение крэков, кейгенов и других подобных программ

Пробуйте искать сами или обращайтесь в приват к участникам форума.

Темы с подобными вещами будут немедленно удаляться, а нарушители - получать предупреждения.

Также запрещается обсуждение проблем работы этих программ (что куда вписать, куда что скопировать и т.п...)

2. Давать ссылки на взломанные продукты

  • Пожалуйста, пользуйтесь поиском перед тем, как задать вопрос - возможно ответ уже есть на форуме.
  • Название темы должно отражать её суть
  • Действия модераторов можно обсудить здесь

С уважением, stron, Pegas.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | 1C: Предприятие, SAP, ERP и учётные системы | Следующая тема »


 




[ Время генерации скрипта: 0.0719 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.