|
Импорт данным из 7 в 8.2. текст запроса 8.2. | ☑ | ||
---|---|---|---|---|
0
isabel_morley
29.08.11
✎
16:19
|
ВнешняяБаза=Новый COMОбъект("V82.COMConnector");
Попытка //ВнешняяБаза=ВнешняяБаза.Connect("File=""C:\TanuSHa\1SBDB\""; Usr=""Новый1"";"); Пользователь = ""; Пароль = ""; V7 = НОВЫЙ COMОбъект("V77.Application"); // Соединичться с базой Открыта=V7.Initialize(V7.RMTrade,"/d"+"C:\TanuSHa\work\скч\"+" /N"+Пользователь+" /P"+Пароль,"NO_SPLASH_SHOW") ; Исключение Предупреждение("Ошибка открытия базы!!!"); Сообщить(ОписаниеОшибки()); ВнешняяБаза=Неопределено; Возврат; КонецПопытки; Если Открыта Тогда Сообщить("Подключились к 1с 7.7"); СПР= v7.CreateObject("Справочник.Контрагенты"); КонецЕсли; === База подцепляется. Скажите как выполнить через Запрос к 7.7. БД. либо перебор справочника. |
|||
1
izekia
29.08.11
✎
16:24
|
используй 1С++ и прямые запросы
|
|||
2
hhhh
29.08.11
✎
16:34
|
(0) ну как обычно в 7.7 пишете, так и здесь. Только если какие переменные передать в запрос, там могут быть проблемы.
|
|||
3
Rovan
гуру
29.08.11
✎
16:36
|
(0) Запрос7 = v7.CreateObject("Запрос");
|
|||
4
isabel_morley
29.08.11
✎
16:58
|
текПользователь = "Новый1";
текПароль = ""; ПутьКБД="c:\TanuSHa\work\скч"; strApp = "/D "+ПутьКБД+" /N "+ТекПользователь+" /P "+ТекПароль; Открыта=V7.Initialize(V7.RMTrade,strApp,"NO_SPLASH_SHOW") ; === а сейчас не цепляется =(((((((( |
|||
5
isabel_morley
29.08.11
✎
17:20
|
(3) а запос на 7-рочном языке писать
типа Обрабатывать НеПомеченныеНаУдаление; ТекущийЭлемент = Справочник.Контрагенты.ТекущийЭлемент; Группировка ТекущийЭлемент без групп; |
|||
6
isabel_morley
29.08.11
✎
17:23
|
2,3)
Запрос =v7.CreateObject("Запрос");; Запрос.Текст= "//{{ЗАПРОС(Сформировать) |Обрабатывать НеПомеченныеНаУдаление; |ТекущийЭлемент = Справочник.Контрагенты.ТекущийЭлемент; |Группировка ТекущийЭлемент без групп; |"//}}ЗАПРОС ; |
|||
7
isabel_morley
29.08.11
✎
17:32
|
хелп
|
|||
8
viktor_vv
29.08.11
✎
17:40
|
Так и писать.
|
|||
9
isabel_morley
29.08.11
✎
18:25
|
(8)Метод объекта не обнаружен (выполнить)
Запрос = v7.CreateObject("запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |КодТМЦ = Справочник.Контрагенты.Код; |Группировка КодТМЦ без групп; |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; |
|||
10
viktor_vv
29.08.11
✎
18:28
|
Попробуй так
Запрос = v7.EvalExpr("СоздатьОбъект(""Запрос"")"); |
|||
11
isabel_morley
29.08.11
✎
18:43
|
(10)
Сообщить("Подключились к 1с 7.7"); //Запрос = v7.CreateObject("запрос"); запрос= v7.EvalExpr("СоздатьОбъект(""Запрос"")"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |КодТМЦ = Справочник.Контрагенты.Код; |Группировка КодТМЦ без групп; |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; тз=запрос.выгрузить(); а так число какое-то выгружает |
|||
12
isabel_morley
29.08.11
✎
18:46
|
Сообщить("Подключились к 1с 7.7");
//Запрос = v7.CreateObject("запрос"); запрос= v7.EvalExpr("СоздатьОбъект(""Запрос"")"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Контрагент = Справочник.Контрагенты.ТекущийЭлемент; |Группировка Контрагент без групп; |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; тз=запрос.выгрузить(); |
|||
13
isabel_morley
29.08.11
✎
18:54
|
результат выгружает числовой какой-то
|
|||
14
Artful Den
29.08.11
✎
19:30
|
(13) А какой по твоему он должен быть?
|
|||
15
Rie
29.08.11
✎
19:38
|
(12) В 7-ке
Запрос.Выгрузить(ТЗ); Вот только с ТЗ поосторожней :-) А почему не хочешь просто перебирать: Пока Запрос.Группировка("Контрагент")=1 Цикл |
|||
16
isabel_morley
30.08.11
✎
00:20
|
(14) таблицу значений должен, а не число возвращать
(15) тз больше нравится |
|||
17
viktor_vv
30.08.11
✎
08:35
|
Он тебе возвращает результат выполнения метода Выгрузить() - число 1 если успешно, 0 - неудачно .
См (15). Лучше сделай нормальную типизированную ТЗ и обходом запроса ее заполняй. Потом передашь в восьмерочный запрос параметром и найдешь соотвествия в своем справочнике. Или при обходе запроса ищи в справочнике соотвествия. Если я правильно понял, что тебе надо. |
|||
18
isabel_morley
30.08.11
✎
23:20
|
вопрос по подключению.
При повторном подключении Бд не цепляется,если через диспетчер задач вырубить 7.7. до начинает подключаться. Как мне после подключения закрыть 7.7. что б потом моно бло подключить |
|||
19
isabel_morley
30.08.11
✎
23:23
|
и можно ли не только прочитать данные в 7.7. но и изминить их после прочтения ?
|
|||
20
viktor_vv
31.08.11
✎
00:25
|
(18) v7 = "" ;
Хотя непонятно почему после выполнения она сама не закрывается. (19) Можно. Реквизиты с примитивными типами данных легко пишутся, с агрегатными сложнее. СпрНоменклатура77 = V7.EvalExpr("СоздатьОбъект(""Справочник.Номенклатура"")"); СпрНоменклатура77.ВыбратьЭлементы(); Пока СпрНоменклатура77.ПолучитьЭлемент()= 1 Цикл СпрНоменклатура77.РеквизитСТипомЧисло = 22 ; СпрНоменклатура77.Записать(); КонецЦикла ; |
|||
21
isabel_morley
31.08.11
✎
00:37
|
(20)
{Справочник.Контрагенты.Форма.ФормаСписка.Форма(88)}: Ошибка при вызове метода контекста (EvalExpr) ВрмСправочник = v7.EvalExpr("СоздатьОбъект(""Справочники.Контрагенты"")"); |
|||
22
viktor_vv
31.08.11
✎
01:01
|
Ну так тогда.
ВрмСправочник = v7.CreateObject("Справочники.Контрагенты") ; |
|||
23
viktor_vv
31.08.11
✎
01:02
|
Не заметил.
СпрНоменклатура77 = V7.EvalExpr("СоздатьОбъект(""Справочник.Номенклатура"")"); Сравни. ВрмСправочник = v7.EvalExpr("СоздатьОбъект(""Справочники.Контрагенты"")"); |
|||
24
Икогнито
31.08.11
✎
01:06
|
(0) Командир, не проще ли из 7.7 делать то же самое, что нужно тебе от Платформы №8?
т.е. наоборот. Выигрыш: получаешь офигенные возможности |
|||
25
Икогнито
31.08.11
✎
01:08
|
+(24) Популярно: открылась семерочка, подключилась к восьмерочке и встроенным языком 8.1 сделала в 8-ке то, что нужно?
|
|||
26
GreyK
31.08.11
✎
01:10
|
(18) Объяви переменные обработки для комобъекта, тогда при вылетах по ошибке, они будут обнулятся.
|
|||
27
Amiralnar
31.08.11
✎
03:55
|
А параметры в запрос 7.7 как передавать то?
|
|||
28
viktor_vv
31.08.11
✎
08:01
|
(27) Какие именно? Примитивные просто формируешь в текст запроса. Например дата так.
|Период с '"+Строка(пПараметры.фдДатаНач)+"' по '"+Строка(пПараметры.фдДатаПо)+"' ; фдДатаНач - реквизит обработки типа дата, состав даты - Дата. С агрегатными тебе нужен идентифицирующий признак, например код справочника. Запрос.Текст= "//{{ЗАПРОС(Сформировать) |Обрабатывать НеПомеченныеНаУдаление; |КодКонтр = Справочник.Контрагенты.Код ; |ТекущийЭлемент = Справочник.Контрагенты.ТекущийЭлемент; |Условие (КодКонтр = """+лсПеременнаяСКодомСтроковым+"""); |Группировка ТекущийЭлемент без групп; |"//}}ЗАПРОС ; |
|||
29
Amiralnar
31.08.11
✎
14:27
|
Круто. А как передать список объектов в условие запроса 7.7?
|
|||
30
viktor_vv
31.08.11
✎
14:54
|
(29) Еще раз уточню, то что тут писал это для ОЛЕ. А смысл передавать объекты.
Если объеты передавать, тебе их все равно по ОЛЕ из 77 получить надо по какому-то признаку примитивного типа. Так в запрос передавать тогда список этих признаков. Я вот правда не пробовал, но можешь поэкспериментировать. лспСписок77 = v7.EvalExpr("СоздатьОбъект(""СписокЗначений"")"); лспКодыКлиентов77.ДобавитьЗначений("0001"); лспКодыКлиентов77.ДобавитьЗначений("0002"); лспКодыКлиентов77.ДобавитьЗначений("0003"); В запросе. |КодКонтр = Справочник.Контрагенты.Код ; |ТекущийЭлемент = Справочник.Контрагенты.ТекущийЭлемент; |Условие (КодКонтр в лспКодыКлиентов77); |
|||
31
isabel_morley
31.08.11
✎
15:38
|
мне нужно сделать в интерфейсе 8 организовать, т.к. это не одноразовый обмен
|
|||
32
viktor_vv
31.08.11
✎
15:44
|
Может тогда в сторону КД смотреть.
|
|||
33
isabel_morley
31.08.11
✎
15:55
|
(32) пока надо без КД
|
|||
34
isabel_morley
31.08.11
✎
15:57
|
(20)а можно ли сразу спозиционироваться на определённый код ?
типа метода НайтиПоКоду() |
|||
35
viktor_vv
31.08.11
✎
16:57
|
(34) Почему типа ? Им как раз и можно спозиционироваться :).
|
|||
36
isabel_morley
31.08.11
✎
17:22
|
огромное СПАСИБО
|
|||
37
isabel_morley
31.08.11
✎
18:06
|
Можно ли оптимизировать код ?
// Соединичться с базой Попытка V7 = НОВЫЙ COMОбъект("V77.Application"); текПользователь = "Новый1"; текПароль = ""; //ПутьКБД="c:\TanuSHa\work\скч\"; //strApp = " /D "+ПутьКБД+" /N "+ТекПользователь+" /P" +ТекПароль; //Открыта=V7.Initialize(V7.RMTrade,strApp,"NO_SPLASH_SHOW") ; // Открыта= V7.Initialize(V7.RMTrade,"/d"+"C:\TanuSHa\1SBDB\"+" /N"+текПользователь+" /P"+текПароль,"NO_SPLASH_SHOW") ; Открыта= V7.Initialize(V7.RMTrade,"/d"+"C:\TanuSHa\work\скч\"+" /N"+текПользователь+" /P"+текПароль,"NO_SPLASH_SHOW") ; Исключение Предупреждение("Ошибка открытия базы!!!"); Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Если Открыта Тогда Сообщить("Подключились к 1с 7.7"); ВрмСправочник = v7.EvalExpr("СоздатьОбъект(""Справочник.Контрагенты"")"); запрос= v7.EvalExpr("СоздатьОбъект(""Запрос"")"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Обрабатывать НеПомеченныеНаУдаление; |Контрагент = Справочник.Контрагенты.ТекущийЭлемент; |Служебный = Справочник.Контрагенты.Служебный; |Группировка Контрагент упорядочить по Контрагент.Код без групп; |Условие(Служебный = 0); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Пока Запрос.Группировка("Контрагент") = 1 Цикл //================== Сообщить(Запрос.Контрагент.Наименование); ТекКонтр=Справочники.Контрагенты.НайтиПоНаименованию(СокрЛП(Запрос.Контрагент.Наименование)); если (ТекКонтр=Неопределено)или (ТекКонтр=Справочники.Контрагенты.ПустаяСсылка()) тогда НовЭлемент=Справочники.Контрагенты.СоздатьЭлемент(); Попытка НовЭлемент.Код=СокрлП(Запрос.Контрагент.Код); Исключение //автоматом пусть будет КонецПопытки; НовЭлемент.Наименование=СокрлП(Запрос.Контрагент.Наименование); НовЭлемент.НаименованиеПолное=СокрлП(Запрос.Контрагент.ПолнНаименование); НовЭлемент.Код77=СокрлП(Запрос.Контрагент.Код); НовЭлемент.Записать(); Сообщить("Добавле новыый контрагент "+Запрос.Контрагент.Наименование); Иначе Если ПустаяСтрока(ТекКонтр.Код77)=Истина Тогда ОбъектКонтр=ТекКонтр.ПолучитьОбъект(); ОбъектКонтр.Код77=СокрлП(Запрос.Контрагент.Код); ОбъектКонтр.Записать(); Иначе //сверяем коды Если СокрЛП(ТекКонтр.Код77)<> СокрлП(Запрос.Контрагент.Код)тогда Сообщить("Несоответствие кодов в элементе с кодом = "+ТекКонтр.Код); КонецЕсли; КонецЕсли; КонецЕсли ; //помеч"ем что д"нный элемент уже з"гружен Если ВрмСправочник.НайтиПоКоду(СокрлП(Запрос.Контрагент.Код))=1 тогда ВрмСправочник.Служебный=1; ВрмСправочник.Записать(); Сообщить("В программе 1с:7.7 контрагент "+Запрос.Контрагент.Код+" помечен записанным"); КонецЕсли; Конеццикла; V7 = Неопределено; КонецЕсли; почему-то очень медленно подключается к БД 7.7 |
|||
38
viktor_vv
31.08.11
✎
18:13
|
|Обрабатывать НеПомеченныеНаУдаление;
|Контрагент = Справочник.Контрагенты.ТекущийЭлемент; |Наименование77 = Справочник.Контрагенты.Наименование; |Код77 = Справочник.Контрагенты.Код; |Служебный = Справочник.Контрагенты.Служебный; Ну и обращаться Запрос.Наименование77 и т. д. Чтобы лишний раз не дергать семерошную базу. Ну и плюс как вариант писал вышел. Код и наименование в типизированную ТЗ восьмерошную, ее потом параметром в запрос и в запросе соответствие искать через левое соединение. Так побыстрее будет наверное. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |