Имя: Пароль:
1C
1C 7.7
v7: 77, 1с++ и updts
,
0 ДенисЧ
 
25.09.15
08:49
Понимаю, что выгляжу не очень, но....
Дайте примеры, у кого есть
а) подключения 1с++ к _файловой_ 1с
б) получения объекта из updts по тамошним данным и нужному коду периферийки...

А то из памяти уже всё давно и прочно вылетело....
1 varelchik
 
25.09.15
08:50
Упс.
1sqlite.
2 varelchik
 
25.09.15
08:50
может работать и в монопольном режиме.
3 ДенисЧ
 
25.09.15
08:51
(1) такие страшные слова я знаю...
Мне бы конкретно... с кусками кода...
4 oslokot
 
25.09.15
08:57
Ишь чего захотел, продавец СП
5 ДенисЧ
 
25.09.15
08:57
(4) В СП нет таких примеров кода )))
6 varelchik
 
25.09.15
09:03
(0)
Структура 1supdts
dbsign код базы.
typeid ид объекта (число)
objid ид объекта.
Это то что тебе надо.
7 varelchik
 
25.09.15
09:04
хотя где тута было даже без 1с++ разборка данных из 1supdts.
поищи по урбд.
8 ДенисЧ
 
25.09.15
09:04
(6) структуру я знаю.
(7) меня в гугле забанили... (
9 varelchik
 
25.09.15
09:14
стучись в аську пообщаемся.
10 ДенисЧ
 
25.09.15
09:16
(9) Вот динозварт-то нашёлся... Где ж я её возьму?
Просто пару кусков кода приведи... Я в отдельных местах умный, разберусь...
11 varelchik
 
25.09.15
09:22
12 ДенисЧ
 
25.09.15
09:25
(11) Ссылка весёлая, если бы не одно но
XBase к живой базе с пользователями - не подключится.
13 varelchik
 
25.09.15
09:26
Блин.
ну так переведи все на прямые запросы.
тебе что все разжовывать?
14 varelchik
 
25.09.15
09:26
ты просил пример.
15 ДенисЧ
 
25.09.15
09:35
(13) Мне всё не надо.
Мне нужно только периодически читать обновления урбд...

Вот такое написал

    DataBase = СоздатьОбъект("ODBCDatabase");
    DataBase.Attach1C();

    RecordSet = СоздатьОбъект("ODBCRecordSet");
    RecordSet.SetDatabase(DataBase);
    
    Если Recordset.Открыть("SELECT * FROM 1supdts") = 0 Тогда
        Ошибка = Recordset.ПолучитьОписаниеОшибки();
        Если ПустоеЗначение(Ошибка) = 0 Тогда
            Сообщить(Ошибка);
        КонецЕсли;
    КонецЕсли;

    
    тз = СоздатьОбъект("ТаблицаЗначений");
    Recordset.ПолучитьРезультатыВ_ТЗ(тз, 1);
    
    тз.ВыбратьСтроку();


тз пустая.
Хотя глазами смотрю - записи есть.
Где я не прав?

Ошибок при исполнении нет
16 Ёпрст
 
25.09.15
09:44
(15) >>>Где я не прав?
1.ODBCRecordSet
2.ПолучитьРезультатыВ_ТЗ

це дбф, тут нужен как минимум, другой провайдер
17 ДенисЧ
 
25.09.15
09:45
(16) Хорошо.
Ты можешь показать простейший пример подключения? По сайту 1спп я не смог сделать такого...
А с табличкой - ладно, уж сам разберусь...
18 oslokot
 
25.09.15
09:49
Пример запроса с дбф нужен чтоли?
Вот, покопался в своих старых записях

Процедура ОтфильтроватьНоменклатуруПриСжатииПоМаркам(СодержитТМ)
    Попытка
        базаДанных = СоздатьОбъект("SQLiteBase");
    Исключение
        ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
        базаДанных = СоздатьОбъект("SQLiteBase");
    КонецПопытки;
    базаДанных.Открыть(":memory:");

    запрос = базаДанных.НовыйЗапрос();
    запрос.ВыполнитьЗапрос("create virtual table Товары using dbeng(Справочник.Номенклатура)");

    СтрокаСодержит = СодержитТМ;

    Текст="SELECT
    |descr Наименование,
    |id [Номенклатура :Справочник.Номенклатура]
    |FROM Товары
    |WHERE isfolder=2 and ismark <> '*' ";
    Если ПустаяСтрока(СтрокаСодержит) = 0 Тогда
        текст=текст+"
        |AND (";
        Для Номер = 1 По СтрЧислоВхождений(СтрокаСодержит, ";") Цикл
            Значение = СтрокаСодержит;
            Если Найти(Значение, ";") > 0 Тогда
                Значение = Сред(Значение, 1, Найти(Значение, ";") - 1);
                СтрокаСодержит  = Сред(СтрокаСодержит, Найти(СтрокаСодержит, ";") + 1);
                Если ПустоеЗначение(Значение)=0 Тогда
                    Текст = Текст + "
                    |descr LIKE '%"+Значение+"%'";
                
                    Если Номер < СтрЧислоВхождений(СодержитТМ, ";") Тогда
                        // Есть еще строка после разделителя ; добавляем оператор в условие
                        Текст = Текст + " OR ";
                    КонецЕсли;    
                
                КонецЕсли;
                
            КонецЕсли;
        КонецЦикла;
        Текст = Текст + ") ";
    КонецЕсли;
    Текст = Текст + "
        |ORDER BY descr";

    Попытка
        тз=запрос.ВыполнитьЗапрос(текст);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    тз.Выгрузить(ТЗ_ТН);
    тпТН.ОбновитьСтроки();
    
КонецПроцедуры // ОтфильтроватьНоменклатуруПриСжатииПоМаркам
19 Ёпрст
 
25.09.15
09:50
(17)
    ОлеДБ = СоздатьОбъект("OLEDBData");
    Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Collating Sequence=MACHINE";
    Рез = ОлеДБ.Соединение(Соединение);
    Запрос = ОлеДБ.СоздатьКоманду();
    Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");
    Запрос.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')");
    Запрос.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')");
    Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')");
    Запрос = ОлеДБ.СоздатьКоманду();
    ТекстЗапроса = " SELECT * FROM 1supdts";
    ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
    ТЗ.ВыбратьСтроку();
20 Ёпрст
 
25.09.15
09:50
(18) да уж...
21 oslokot
 
25.09.15
09:50
эт прямой запрос к справочнику, с кое-какими условиями
22 ДенисЧ
 
25.09.15
09:51
(19)     База = СоздатьОбъект("OLEDBData");
    Соединение = "Provider=VFPOLEDB.1;Deleted=Yes;Data Source=""" + КаталогИБ()+ """;";
    сообщить(соединение);
    Рез = База.Соединение(Соединение);
    Запрос = База.СоздатьКоманду();


FAILED! IDataInitialize::GetDataSource(): Формат строки инициализации не соответствует спецификации OLE DB.
23 oslokot
 
25.09.15
09:51
(20) о да, эт мой первый прямой запрос))) 5 летней выдержки
24 Ёпрст
 
25.09.15
09:53
(22) скачай vfpoledb провайдер, для начала
25 Ёпрст
 
25.09.15
09:55
26 ДенисЧ
 
25.09.15
09:58
(24) (25) дык того уже давно. И установил.
27 Ёпрст
 
25.09.15
09:59
И ?
28 Ёпрст
 
25.09.15
09:59
прям тот, что в (25) установил ?
29 Ёпрст
 
25.09.15
10:00
+ в (22) как бэ не совсем та строка, что в (19).
:)
30 Ёпрст
 
25.09.15
10:01
ибо кавычек там поболее будет.
31 Ёпрст
 
25.09.15
10:01
ну и коллэйшен не указан
32 ДенисЧ
 
25.09.15
10:03
(28) Именно тот. ещё раз даже специально переустановил...
33 Ёпрст
 
25.09.15
10:05
(32) ну, тогда копипасте того что (19) пробуй, сперва
34 ДенисЧ
 
25.09.15
10:05
(30) убрал кавычки (просто у меня в пути пробелы), поставил коллейшн.
Всё то же самое.
35 Ёпрст
 
25.09.15
10:06
ну не верю :)
36 ДенисЧ
 
25.09.15
10:06
(33) Ей что, deleted не понравилась? Вот ведь...
37 Ёпрст
 
25.09.15
10:07
если че, у меня в пути тоже есть пробелы и русские символы и (19) работает
38 ДенисЧ
 
25.09.15
10:07
(37) Ну, то заработало... Что ей не нравилось?
39 Ёпрст
 
25.09.15
10:08
(38) делетед видать :)
40 ДенисЧ
 
25.09.15
10:10
Ладно, усем спасибо.
Вроде начало работать.

дальше уже сам.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший