Имя: Пароль:
1C
1C 7.7
v7: Регистр букв в прямом запросе.
,
0 Andreyyy
 
30.03.15
15:24
Есть запрос:

ТекстЗапроса = "
          |select DISTINCT
        |$СпрТовары." + Реквизит + " as [Артикул]
          |from $Справочник.Товары as СпрТовары";
          
          Если Поставщик.ТекущаяСтрока() <> 1 Тогда
            ВыбПоставщик = Поставщик.ПолучитьЗначение(Поставщик.ТекущаяСтрока());
            ТекстЗапроса = ТекстЗапроса + "
            |WHERE
            |СпрТовары.ParentExt = :ВыбПоставщик";
        КонецЕсли;
          
        RecordSet.УстановитьТекстовыйПараметр("ВыбПоставщик", ВыбПоставщик);
        
          RecordSet.SetDatabase(DataBase);
          RecordSet.Отладка(0);
        Если RecordSet.Открыть(ТекстЗапроса) = 0 Тогда
            Ошибка = RecordSet.ПолучитьОписаниеОшибки();
            Если ПустоеЗначение(Ошибка) = 0 Тогда
                Сообщить(Ошибка);
            КонецЕсли;
        КонецЕсли;
      
        RecordSet.ПолучитьРезультатыВ_ТЗ(ТаблицаАртикулов, 1);

Если есть товары с артикулами "ТРУСЫ" и "Трусы", то попадают в таблицу только "Трусы".
Можно как-то еще "ТРУСЫ" достать ?
1 kosts
 
30.03.15
15:25
Попробуй использовать Подобно.
2 Ёпрст
 
30.03.15
15:26
А где в этом запросе условие на артикул ?
И где ты видишь, что попадает не всё ?
3 Salimbek
 
30.03.15
15:27
(0) А как к базе подключаешься? И откуда эта база взялась? Коллейшн на ней правильный стоит?
4 Ёпрст
 
30.03.15
15:27
А вообще, товары подчиненные поставщику...это зачет.
5 Salimbek
 
30.03.15
15:29
(2) А... внимательней посмотрел - дык все правильно, база запускается с игнорированием регистра букв. В том числе это значит, что Трусы и ТРУСЫ для базы - одно и то же, вот оно тебе Дистинктом и сворачивает их в одно
6 Ёпрст
 
30.03.15
15:34
(5) ага точняк..
7 Salimbek
 
30.03.15
15:36
+(5) У меня была подобная задачка, но только с одним символом (КодОперации), решил через Группировку по коду символа. Тут задача аналогичная - надо получить небуквенный идентификатор. Для SQL2005 можно попробовать решить через CHECKSUM($СпрТовары." + Реквизит + " )
8 Ёпрст
 
30.03.15
15:38
ну.. тут то проще, просто получить id справочника в запросе
9 Andreyyy
 
30.03.15
15:38
(1) Вместо "DISTINCT" так и написать "ПОДОБНО" ?
(2) В итоговой таблице вижу.
(3) DataBase  = СоздатьОбъект("ODBCDatabase");
    RecordSet  = СоздатьОбъект("ODBCRecordset");
    Путь = КаталогИБ();
    Состояние("Подключаемся к базе данных");
    Рез = DataBase.Соединение("DRIVER=Microsoft Visual FoxPro Driver;Deleted=Yes;Null=Yes;Collate=RUSSIAN;BackgroundFetch=Yes;Exclusive=No;SourceType=DBF;SourceDB=" + Путь);
(4) 10 лет назад казалось хорошей идеей)
(3) Как запустить без игнорирования ? (если вообще возможно)
10 Andreyyy
 
30.03.15
15:45
(8) Можно для чайников разжевать ?
11 Ёпрст
 
30.03.15
15:47
(10)

|select DISTINCT
|СпрТовары.id [Элементик $Справочник.Товары],
|$СпрТовары." + Реквизит + " as [Артикул]
|from $Справочник.Товары as СпрТовары";
12 Andreyyy
 
30.03.15
16:05
(11) Может еще смекалку нужно было проявить, но:
State 42S22, native 806, message [Microsoft][ODBC Visual FoxPro Driver]SQL: Column 'ЭЛЕМЕНТИК_1C_TYPE_СПРАВОЧНИК_1C_DOT_ТОВАРЫ' is not found.
13 Salimbek
 
30.03.15
16:06
(11) Дык, оно же все равно свернет все МаЛость отличающиеся реквизиты у одного элемента и не свернет 100% одинаковые реквизиты по разным элементам.
14 Andreyyy
 
30.03.15
16:14
(13) Вариант (7) только для SQL ? У меня без вариантов ?
15 Ёпрст
 
30.03.15
16:18
(12) запрос к левой базе что ле ?
Ну выкини типизацию, сделай просто

|select DISTINCT
|СпрТовары.id ,
|$СпрТовары." + Реквизит + " as [Артикул]
|from $Справочник.Товары as СпрТовары";
16 Ёпрст
 
30.03.15
16:18
хотя не пойдет.. тебе же разные артикулы нужны.. а тут тебе всех выдаст, вообще.
17 Ёпрст
 
30.03.15
16:25
Так спробуй

|select DISTINCT
|$СпрТовары." + Реквизит + " Collate Cyrillic_General_CS_AS as [Артикул]
|from $Справочник.Товары as СпрТовары";
18 Andreyyy
 
30.03.15
16:35
State 42000, native 219, message [Microsoft][ODBC Visual FoxPro Driver]Command contains unrecognized phrase/keyword.
19 Andreyyy
 
30.03.15
16:35
(18) к (17)
20 Salimbek
 
30.03.15
16:36
(18) Поставь драйвер оледб 9-й
21 Andreyyy
 
30.03.15
16:37
(20) Страшно, как бы не сломать. Можно правильную ссылку ?
Строка подключения поменяется ?
22 Andreyyy
 
30.03.15
16:37
ОС Server 2003
23 Andreyyy
 
30.03.15
16:37
x32
24 Ёпрст
 
30.03.15
16:38
(18) к какой базе подключаешься ? к дбф что ле ?
25 Andreyyy
 
30.03.15
16:39
(24) Да.
26 Ёпрст
 
30.03.15
16:39
:))
27 Andreyyy
 
30.03.15
16:39
28 Andreyyy
 
30.03.15
16:40
(26) Типа бесполезно ?
29 Ёпрст
 
30.03.15
16:40
заместо odbc рекомендовано использовать oledb
30 Ёпрст
 
30.03.15
16:40
это для начала
31 Andreyyy
 
30.03.15
16:41
(29) Я не осилю запрос переписать)))) Что нашел на просторах, то и впилил.
32 Salimbek
 
30.03.15
16:41
(29) Кстати да...
33 Salimbek
 
30.03.15
16:43
(31) Драйвер ODBC просто древнейший и с кучей ошибок и тормозов. Обновлялся у мелкософтов только OLE DB.
34 Andreyyy
 
30.03.15
16:44
Подскажите какие мануалы читать, начиная с подключения, заканчивая запросом ?
35 Andreyyy
 
30.03.15
16:52
Оно ? ADODBConn = CreateObject("ADODB.Connection");
    ConnectString = "
    |Provider=VFPOLEDB.1;
    |Deleted=-1;
    |Null = Yes;
    |Exclusive = No;
    |SourceType = DBF;
    |Data Source=D:\LeOV\_Bases1C_\TIS\DemoDB;
    |Mode=ReadWrite;
    |Extended Properties="""";
    |User ID="""";
    |Password="""";
    |Mask Password=False;
    |Collating Sequence=MACHINE;
    |DSN=""""";
    ADODBConn.ConnectionString = ConnectString;
    ADODBConn.Open();
    Для i=0 по ADODBConn.Properties().Count-1 Цикл
        Сообщить(СокрЛП(i)+" | Property.Name: " + ADODBConn.Properties(i).Name+ "| Property.Type: " +  ADODBConn.Properties(i).Type);
        Если ADODBConn.Properties(i).Type = 19 Тогда
            //Сообщить("Property.Value: " +  СокрЛП(ADODBConn.Properties(i).Value));
            Сообщить("Property.Attributes: " +  Число(ADODBConn.Properties(i).Attributes));
        Иначе
            Сообщить("Property.Value: " +  ADODBConn.Properties(i).Value);
            Сообщить("Property.Attributes: " +  ADODBConn.Properties(i).Attributes);
        КонецЕсли;
    КонецЦикла;
    ADODBConn.Close();
    ADODBConn = 0;

Вместо юзерID и пассворд указать логин и пароль к базе ? Или так надо, что пусто.
36 Salimbek
 
30.03.15
16:53
(35) Жуть какая...
37 Ёпрст
 
30.03.15
16:53
Сам провайдер:

http://www.microsoft.com/downloads/details.aspx?FamilyId=E1A87D8F-2D58-491F-A0FA-95A3289C5FD4&displaylang=en

подключение:

    ОлеДБ = СоздатьОбъект("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')");
38 Salimbek
 
30.03.15
16:55
Еще полезно почитать: http://www.1cpp.ru/forum/YaBB.pl?num=1148038411/24#24
39 Andreyyy
 
30.03.15
16:57
Спасибо, буду разбираться.
40 Ёпрст
 
30.03.15
16:57
+ сам запрос будет как в (0)..
будет регистрозависимым..
41 Ёпрст
 
30.03.15
16:58
ну и выполнение -
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
ТЗ.ВыбратьСтроку()
42 Andreyyy
 
30.03.15
17:18
Работает !
43 Ёпрст
 
30.03.15
17:19
аминь
44 varelchik
 
31.03.15
09:42
(42)Еще бы!
Чтоб у Ёпрст не работало...