Имя: Пароль:
1C
1С v8
Импорт данным из 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 и т. д. Чтобы лишний раз не дергать семерошную базу.

Ну и плюс как вариант писал вышел. Код и наименование в типизированную ТЗ восьмерошную, ее потом параметром в запрос и в запросе соответствие искать через левое соединение. Так побыстрее будет наверное.
Закон Брукера: Даже маленькая практика стоит большой теории.