|   |   | 
| 
 | Импорт данным из 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 и т. д. Чтобы лишний раз не дергать семерошную базу. Ну и плюс как вариант писал вышел. Код и наименование в типизированную ТЗ восьмерошную, ее потом параметром в запрос и в запросе соответствие искать через левое соединение. Так побыстрее будет наверное. | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |