![]() |
![]() |
|
Помогите с 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
|
а пометка на удаление ставиться.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |