Имя: Пароль:
1C
1C 7.7
v7: Перебрать справочник v8 из 1с 7.7
0 kobzon2
 
09.11.15
14:20
Подскажите семерышнику как правильно подключиться к 8-ке и перебрать справочник, или хотя бы найти поКоду элемент справочника.
Делаю так:

//*******************************************
Процедура Сформировать()  
    Перем ПутьКбазе,ИмяПользователяБазы,Пароль;  
    ПутьКБазе = "D:\base1C8\Копии\бухЧ";
    ИмяПользователяБазы = "OLE";    
V8 = СоздатьОбъект("V82.Application");
попытка
V8.Connect("File=""" + ПутьКБазе + """; Usr =""" + ИмяПользователяБазы + """;");
Сообщить("Подключились к базе");  
Выборка = V8.Справочники.Номенклатура.НайтиПоКоду("1103");  
    Сообщить(Выборка.Наименование);
Исключение
Сообщить("Не подключился!!!!");
КонецПопытки;
КонецПроцедуры

База подключается, но почему то все зависает(( И элемент справочника по ходу явно не ищется.
1 Горогуля
 
09.11.15
14:22
>почему то все зависает
в чём это выражается?
2 kobzon2
 
09.11.15
14:24
(1) Продолжает выполняться обработка, ничего сделать нельзя в 7.7. Комп притормаживает.
3 Горогуля
 
09.11.15
14:25
4 kobzon2
 
09.11.15
14:32
(3) Ниче не понял. Это точно то же что и у меня?) Что не так сделал то?
5 Горогуля
 
09.11.15
14:32
это немного совсем не то же
6 cw014
 
09.11.15
14:33
(4) Это как раз таки для тебя
7 cw014
 
09.11.15
14:33
попытка
БАЗА_БЛЕАТЬ = V8.Connect("File=""" + ПутьКБазе + """; Usr =""" + ИмяПользователяБазы + """;");
Сообщить("Подключились к базе");  
Выборка = БАЗА_БЛЕАТЬ.Справочники.Номенклатура.НайтиПоКоду("1103");  
    Сообщить(Выборка.Наименование);
Исключение
Сообщить("Не подключился!!!!");
КонецПопытки;
8 kobzon2
 
09.11.15
14:38
Сообщает и то и то)

Подключились к базе
Не подключился!!!!

И все ровно что-то продолжает обрабатывать бесконечно.
9 cw014
 
09.11.15
14:39
(8) А ты на кой болт к Application то подключаешься?
10 cw014
 
09.11.15
14:39
(8) ComConnector теперь религией тебе запрещен?
11 Горогуля
 
09.11.15
14:40
(8) неужели исключение???
12 kobzon2
 
09.11.15
14:40
(10) Так в первый раз в первый класс.
13 France
 
09.11.15
14:40
(7) убери обработку исключений и почитай сообщение об ошибке..
14 cw014
 
09.11.15
14:41
(11) ))))
(8) И сбрасывай свой Application в неопределено (с ком-коннектором тоже самое)
15 cw014
 
09.11.15
14:41
(13) Сообщения об ошибках читают только младенцы. Тру-программеры вангуют и телепатируют
16 kobzon2
 
09.11.15
14:44
(13) Убрал!

Подключились к базе
Выборка = БАЗА_БЛЕАТЬ.Справочники.Номенклатура.НайтиПоКоду("1103");  
{C:\USERS\АДМИНИСТРАТОР\DESKTOP\К82.ERT(11)}: Значение не представляет агрегатный объект (Справочники)
17 kobzon2
 
09.11.15
14:47
(14) Конконнектор так? V8 = СоздатьОбъект("v82.comconnector");
18 cw014
 
09.11.15
14:48
(17) Почитай матчасть
19 HawkEye
 
09.11.15
14:48
(0) на вот выдержки

Функция глИнициализацияБазы(база, вхФирма) Экспорт
    Если (вхФирма = "") ИЛИ (ПустоеЗначение(вхФирма) = 1) Тогда
        вхФирма = Константа.ФирмаПоУмолчанию;
    КонецЕсли;
    рез = 0;
    Состояние("Подключаемся!");
    ИмяБазы = СокрЛП(вхФирма.ИмяБазы);
    ПутьКБух = СокрЛП(вхФирма.ПутьКБухгалтерии);
    Логин = СокрЛП(вхФирма.ПользовательБух);
    пароль = СокрЛП(вхФирма.ПарольБух);

    Если вхФирма.ВерсияБазы = "8.2" Тогда  
        Если ПутьКБух <> "" Тогда
            КомОбъект = СоздатьОбъект("V82.COMConnector");//Application");//COMConnector");//СоздатьОбъект("V77.Application");
            Если СокрЛП(ИмяБазы) = "" Тогда
                //файловая версия
                База=КомОбъект.Connect("File="""+СокрЛП(ПутьКБух)+""";Usr="""+СокрЛП(Логин)+""";Pwd = """ + СокрЛП(пароль) + """;");  
            Иначе
                //SQL
                База=КомОбъект.Connect("Srvr="""+СокрЛП(ПутьКБух)+""";Ref="""+СокрЛП(ИмяБазы) + """;Usr="""+СокрЛП(Логин)+""";Pwd = """ + СокрЛП(пароль) + """;");  
            КонецЕсли
        Иначе
            Сообщить("Фирма: " + СокрЛП(вхФирма) + " не найдена база!","!");
            Возврат 0;
        КонецЕсли;
    Иначе
        //бла бла бла
    КонецЕсли;
    Состояние("Подключились!");
    Возврат 1;
КонецФункции    
    
    
    
    
  Функция глмВернутьПоКоду8(СамаБаза, самСпр, самКод, имяЭлемента = "", самЭлемент = "") Экспорт
    рез = "";
    Если СокрЛП(СамКод) <> "" Тогда
        спр = самСпр.НайтиПоКоду(самКод);
        Если Спр.Пустая() = -1 ТОгда
            //не нашли
            Сообщить("Не найден элемент с кодом: " + самКод + " в спр. " + самСпр + "  " + имяЭлемента,"!");
        
        Иначе
            //нашли
            рез = спр;    
        КонецЕсли;  
        
    Иначе
        //бла бла бла
        
    Возврат рез;
КонецФункции    



Процедура
    
    
    База = "";  
    Если глИнициализацияБазы(база, 1) = 0 Тогда
        Возврат;
    КонецЕсли;  
//        
    ВидДока = База.Документы.ТребованиеНакладная;
        СоздалиНовый = 0;
    Если СокрЛП(номерБух8) <> "" Тогда
        //есть номер бух
        док = ВидДока.НайтиПоНомеру(номерБух8,ДатаДок);
        Если док.пустая() = -1 Тогда
            создалиновый = 1;  
            ДокБП = ВидДока.СоздатьДокумент();
            ДокБП.Номер = номерБух8;  
        Иначе
            ДокБП = Док.ПолучитьОбъект();  
        КонецЕсли;
    Иначе
        создалиновый = 1;  
        ДокБП = ВидДока.СоздатьДокумент();
    КонецЕсли;////СОЗДАЕМНОВЫЙ

    Если создалиновый = 0 Тогда
        ДокБП.Материалы.Очистить();
    КонецЕсли;    
        
    ДокБП.Дата = ДатаДок;
    ДокБП.Склад = глмВернутьПоКоду8(База, База.Справочники.Склады, МОЛдок.КодСклада8, МОЛдок.Наименование);
    ДокБП.ПодразделениеОрганизации = глмВернутьПоКоду8(База, База.Справочники.ПодразделенияОрганизаций, СкладОткуда.КодВБух8, СкладОткуда.Наименование);
20 France
 
09.11.15
14:54
(16) из твоего кода в 0
V8.Connect("File=""" + ПутьКБазе + """; Usr =""" + ИмяПользователяБазы + """;");
Сообщить("Подключились к базе");  
УДАЛЕННАЯ_БАЗА= V8.Справочники.Номенклатура.НайтиПоКоду("1103");
НАЙДЕМ_ТАК_ПО_КОДУ = УДАЛЕННАЯ_БАЗА.Справочники.Номенклатура.НайтиПоКоду("1103");
    Сообщить(НАЙДЕМ_ТАК_ПО_КОДУ.Наименование);
21 kobzon2
 
12.11.15
15:33
Мужики, подскажите как мне в 8-ке, проверить что элемент справочника отсутствует, чтобы его добавить?
А то получаются спецификации с пустым сырьем, но с заполненным количеством.
НоваяСтрока.Номенклатура =  Справочники.Номенклатура.НайтиПоКоду("000"+Цел(ДокВСемерке.Материал.Код));
Как то через Неопределенно?
22 VikingKosmo
 
12.11.15
15:38
Возвращаемое значение:

Тип: СправочникСсылка.<Имя справочника>; Неопределено.
Если не существует ни одного элемента с требуемым кодом, то будет возвращена пустая ссылка.
Если для справочника код не задан (длина = 0), то будет возвращено Неопределено.

А вообще это привилегия ДенисЧ продавать СП
23 kobzon2
 
12.11.15
15:51
(22) Ага, спасибо. Всё понял, Всё сделал.
Основная теорема систематики: Новые системы плодят новые проблемы.