Имя: Пароль:
1C
 
Помогите с COM соединением V8
0 Homer
 
30.03.10
11:15
Задача состоит в том что бы из УАТ взять информацию по машинам и запихать их в документ УПП. Это у меня все получилось. Но перед тем как начать поиск мне необходимо обновить справочник ПодразделенияОрганизации. Вот здесь у меня и не работает. Обработка не может создать справочник или не может записать его или не может пометить его на удоление.
Что не так

Процедура КоманднаяПанель3ЗагрузкаИзУАТ(Кнопка)
   V8 = Новый COMObject("V81.COMConnector");
   СерверОбмена = "1cserver";
   БазаОбмена = "Autotransport";
   Логин = "Администратор";
   Пароль = "123";
   Попытка
       //Открытие = V8.Connect("Srvr="""+СерверОбмена+""";Ref="""+БазаОбмена+""";Usr="""+Логин+""";Pwd="""+Пароль+""";");  
       Открытие = V8.Connect("File=""D:\V8\avtotest\"";Usr=""Администратор"";Pwd=""123"";");  
       
       НачДата = "20100101000000";
       КонДата = "20100131235959";
       //проверка подразделений
       ЗапросПод=Открытие.NewObject("Запрос");
       ЗапросПод.текст =    "ВЫБРАТЬ
                             |    ПодразделенияОрганизаций.Наименование,
                             |    ПодразделенияОрганизаций.Ссылка КАК Ссылка,
                             |    ПодразделенияОрганизаций.Код КАК Код,
                             |    ПодразделенияОрганизаций.Родитель КАК Родитель
                             |ИЗ
                             |    Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
                             |УПОРЯДОЧИТЬ ПО
                             |    Код";
       
       РезультатУАТ = ЗапросПод.Выполнить().Выгрузить();
       
       Рез = ПроверкаПодразделенийОрганизаций();
       СпрПодразделенияОрганизации = Открытие.Справочники.ПодразделенияОрганизаций;
       Для Ном = 15 По Рез.Количество() - 1 Цикл
           ПроверкаНаНаличиеВСистемеУАТ = РезультатУАТ.Найти(Рез.Получить(Ном).Код,"Код");
           Если ПроверкаНаНаличиеВСистемеУАТ.Код = "" Тогда
               Нов = СпрПодразделенияОрганизации.СоздатьЭлемент();
               Нов.Наименование =Рез.Получить(Ном).Наименование;
               Нов.Родитель=Рез.Получить(Ном).Родитель;
               Нов.Записать();
           Иначе
               Если ПроверкаНаНаличиеВСистемеУАТ.Родитель = Рез.Получить(Ном).Родитель и ПроверкаНаНаличиеВСистемеУАТ.Наименование = Рез.Получить(Ном).Наименование Тогда
                   Сообщить("Сущ")
               Иначе
                   Открытие.Справочники.ПодразделенияОрганизаций.НайтиПоКоду(ПроверкаНаНаличиеВСистемеУАТ.Код).ПометкаУдаления = Истина;
                   
                   Нов = СпрПодразделенияОрганизации.СоздатьЭлемент();
                   Нов.Наименование =Рез.Получить(Ном).Наименование;
                   Нов.Родитель=Рез.Получить(Ном).Родитель;
                   Нов.Записать();
                   
               КонецЕсли;
           КонецЕсли;    
       КонецЦикла;
       //кон
       Запрос=Открытие.NewObject("Запрос");
       запрос.текст =    
       "ВЫБРАТЬ
       |    уатПутевойЛистЗадание.КоличествоЧасов,
       |    уатПутевойЛистЗадание.Ссылка.ТранспортноеСредство.Код,
       |    уатПутевойЛистЗадание.Ссылка.ТранспортноеСредство.Наименование
       |ИЗ
       |    Документ.уатПутевойЛист.Задание КАК уатПутевойЛистЗадание
       |ГДЕ
       |    уатПутевойЛистЗадание.Выполнено = &Истина
       |    И уатПутевойЛистЗадание.Ссылка.Дата МЕЖДУ &НачДата И &КонДата
       |    И уатПутевойЛистЗадание.Ссылка.Рассчитан = &Истина";
       
       //|    И уатПутевойЛистЗадание.Подразделение = &Подразделение";
       
       Запрос.УстановитьПараметр("Подразделение",ПодразделенияОрганизаций);
       Запрос.УстановитьПараметр("Истина",Истина);
       Запрос.УстановитьПараметр("НачДата",НачалоДня(НачДата));
       Запрос.УстановитьПараметр("КонДата",КонецДня(КонДата));
       тз = Запрос.Выполнить().Выгрузить();
       
   Исключение
       Предупреждение("База данных не открыта!!!");
       Возврат;
   КонецПопытки;
   Для Ном = 0 По тз.Количество() - 1 Цикл
       НовСтрока = ТС.Добавить();
       НовСтрока.ОС = Справочники.ОсновныеСредства.НайтиПоКоду(тз.Получить(Ном).ТранспортноеСредствоКод);
       НовСтрока.КоличествоЧасов = тз.Получить(Ном).КоличествоЧасов;
       НовСтрока.ЕдиницаИзмерения =Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("356");
     КонецЦикла;
   
КонецПроцедуры

Функция  ПроверкаПодразделенийОрганизаций()
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ПодразделенияОрганизаций.Наименование,
   |    ПодразделенияОрганизаций.Ссылка КАК Ссылка,
   |    ПодразделенияОрганизаций.Код КАК Код,
   |    ПодразделенияОрганизаций.Родитель КАК Родитель
   |ИЗ
   |    Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
   |
   |УПОРЯДОЧИТЬ ПО
   |    Код
   |ИТОГИ ПО
   |    Родитель ИЕРАРХИЯ";

   Результат = Запрос.Выполнить().Выгрузить();
   Возврат Результат;
КонецФункции
1 zbv
 
30.03.10
11:23
а на что ругается ?
2 Guk
 
30.03.10
11:23
в каком месте?...
3 Homer
 
30.03.10
11:27
Вот здесь например

{Документ.ОтчетМастера.Форма.ФормаДокумента(95)}: Ошибка при установке значения атрибута контекста (ПометкаУдаления): Метод не найден
                   СпрПодразделенияОрганизации.НайтиПоКоду(ПроверкаНаНаличиеВСистемеУАТ.Код).ПометкаУдаления = Истина;
по причине:
Метод не найден

Вот например!!!
4 zbv
 
30.03.10
11:28
а поидее у "ПодразделенияОрганизации" должен быть владелец - правда с пометкой на удаление это не вяжется...
5 zbv
 
30.03.10
11:29
(3) объект надо бы сначала получить.
6 Guk
 
30.03.10
11:30
(3) найти по коду возвращает ссылку, а атрибуты выставляются у объекта...
7 Homer
 
30.03.10
11:57
(6) это я понял что я не правильно обращаюсь к объекту, а как мне к нему обратиться?
8 Guk
 
30.03.10
11:58
(7) Ссылка.ПолучитьОбъект()...
9 Homer
 
30.03.10
12:12
а что делать вот с этим

{Документ.ОтчетМастера.Форма.ФормаДокумента(100)}: Ошибка при вызове метода контекста (Записать): Произошла исключительная ситуация: Владелец не задан или задан неверно!
                   Нов.Записать();
по причине:
Произошла исключительная ситуация: Владелец не задан или задан неверно!

отладчиком смотрел там пусто
10 Guk
 
30.03.10
12:14
(9) что написано, то и значит. справочник то подчиненный?...
11 Homer
 
30.03.10
21:35
Вот все вроде работает кроме одного вычисления. Причем ошибку не пишет.

               Если ПроверкаНаНаличиеВСистемеУАТ.Наименование = Рез.Получить(Ном).Наименование Тогда
                   ВыборкаДетали.Ссылка.ПолучитьОбъект().Родитель = Открытие.Справочники.ПодразделенияОрганизаций.НайтиПоКоду(Рез.Получить(Ном).РодительКод);
                   //Док = ВыборкаДетали.Ссылка.ПолучитьОбъект().УстановитьПометкуУдаления(Истина);
                   ИначеЕсли ПроверкаНаНаличиеВСистемеУАТ.РодительКод = Рез.Получить(Ном).РодительКод Тогда
                   //ВыборкаДетали.Ссылка.ПолучитьОбъект().Наименование = Открытие.Справочники.ПодразделенияОрганизаций.НайтиПоКоду(Рез.Получить(Ном).РодительКод).Наименование;
                   КонецЕсли;
               КонецЕсли;

Вот весь код


Процедура КнопкаВыполнитьНажатие(Кнопка)
   V8 = Новый COMObject("V81.COMConnector");
   СерверОбмена = "1cserver";
   БазаОбмена = "Autotransport";
   Логин = "Администратор";
   Пароль = "159";
   
   //Открытие = V8.Connect("Srvr="""+СерверОбмена+""";Ref="""+БазаОбмена+""";Usr="""+Логин+""";Pwd="""+Пароль+""";");  
   
   Открытие = V8.Connect("File=""C:\base_1c\vrem\"";Usr="""";Pwd="""";");  
   
   ЗапросПод = Открытие.NewObject("Запрос");
   ЗапросПод.текст =  
   "ВЫБРАТЬ РАЗЛИЧНЫЕ
   |    ПодразделенияОрганизаций.Наименование КАК Наименование,
   |    ПодразделенияОрганизаций.Код,
   |    ПодразделенияОрганизаций.Родитель,
   |    ПодразделенияОрганизаций.Родитель.Код,
   |    ПодразделенияОрганизаций.Владелец,
   |    ПодразделенияОрганизаций.Владелец.Код,
   |    ПодразделенияОрганизаций.Ссылка
   |ИЗ
   |    Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
   |ГДЕ
   |    ПодразделенияОрганизаций.ПометкаУдаления = &Истина
   |
   |УПОРЯДОЧИТЬ ПО
   |    Наименование ИЕРАРХИЯ УБЫВ";
   ЗапросПод.УстановитьПараметр("Истина",Ложь);
   
   РезультатУАТ = ЗапросПод.Выполнить().Выгрузить();
   
   Рез = ПроверкаПодразделенийОрганизаций();
   СпрПодразделенияОрганизации = Открытие.Справочники.ПодразделенияОрганизаций;
   Для Ном = 0 По Рез.Количество() - 1 Цикл
       ПроверкаНаНаличиеВСистемеУАТ = РезультатУАТ.Найти(Рез.Получить(Ном).Код,"Код");
       Если ПроверкаНаНаличиеВСистемеУАТ = Неопределено Тогда
           Нов = СпрПодразделенияОрганизации.СоздатьЭлемент();
           Нов.Код = Рез.Получить(Ном).Код;
           Нов.Наименование = Рез.Получить(Ном).Наименование;
           Нов.Родитель = Открытие.Справочники.ПодразделенияОрганизаций.НайтиПоКоду(Рез.Получить(Ном).РодительКод);
           Нов.Владелец = Открытие.Справочники.Организации.НайтиПоКоду(Рез.Получить(Ном).ВладелецКод);
           Нов.Записать();
       Иначе
           Если ПроверкаНаНаличиеВСистемеУАТ.Наименование = Рез.Получить(Ном).Наименование и ПроверкаНаНаличиеВСистемеУАТ.РодительКод = Рез.Получить(Ном).РодительКод Тогда
               
           Иначе
               ЗапросУдоления = Открытие.NewObject("Запрос");
               ЗапросУдоления.текст =
               "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
               |    ПодразделенияОрганизаций.Ссылка
               |ИЗ
               |    Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
               |ГДЕ
               |    ПодразделенияОрганизаций.Код = &Код";
               ЗапросУдоления.УстановитьПараметр("Код",Рез.Получить(Ном).Код);
               ДокУдол = ЗапросУдоления.Выполнить();
               ВыборкаДетали = ДокУдол.Выбрать();
               ВыборкаДетали.Следующий();
               Если ПроверкаНаНаличиеВСистемеУАТ.Наименование = Рез.Получить(Ном).Наименование Тогда
                   ВыборкаДетали.Ссылка.ПолучитьОбъект().Родитель = Открытие.Справочники.ПодразделенияОрганизаций.НайтиПоКоду(Рез.Получить(Ном).РодительКод);
                   //Док = ВыборкаДетали.Ссылка.ПолучитьОбъект().УстановитьПометкуУдаления(Истина);
                   ИначеЕсли ПроверкаНаНаличиеВСистемеУАТ.РодительКод = Рез.Получить(Ном).РодительКод Тогда
                   //ВыборкаДетали.Ссылка.ПолучитьОбъект().Наименование = Открытие.Справочники.ПодразделенияОрганизаций.НайтиПоКоду(Рез.Получить(Ном).РодительКод).Наименование;
                   КонецЕсли;
               КонецЕсли;
           КонецЕсли;
       КонецЦикла;
       //кон
   КонецПроцедуры
   
   Функция  ПроверкаПодразделенийОрганизаций()
       Запрос = Новый Запрос;
       Запрос.Текст =
       "ВЫБРАТЬ РАЗЛИЧНЫЕ
       |    ПодразделенияОрганизаций.Наименование КАК Наименование,
       |    ПодразделенияОрганизаций.Код,
       |    ПодразделенияОрганизаций.Родитель,
       |    ПодразделенияОрганизаций.Родитель.Код,
       |    ПодразделенияОрганизаций.Владелец,
       |    ПодразделенияОрганизаций.Владелец.Код
       |ИЗ
       |    Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
       |ГДЕ
       |    ПодразделенияОрганизаций.ПометкаУдаления = &Истина
       |
       |УПОРЯДОЧИТЬ ПО
       |    Наименование ИЕРАРХИЯ УБЫВ";
       Запрос.УстановитьПараметр("Истина",Ложь);
       Результат = Запрос.Выполнить().Выгрузить();
       Возврат Результат;
   КонецФункции
12 Homer
 
30.03.10
21:36
а пометка на удаление ставиться.