gifts2017

Прямой доступ к базе данных 77 из 8ки

Опубликовал OldthiefXXX OldthiefXXX (OldthiefXXX) в раздел Обмен - Перенос данных из 1С7.7 в 1C8.X

Иногда бывает необходимость  получить какие-то  данные из 77 для того чтобы видеть всю историю работы до перехода на в 8ку. Вот один из моих вариантов получения  данных из архивных баз 77.
База данных 77 на SQL.
P.S.   77-Комплексная
Перем СоединениеБазы    Экспорт;

Процедура КнопкаСформироватьНажатие(Кнопка)
    СоединениеБазы = Новый COMОбъект("ADODB.Connection");
    driver="SQL Server";
    server="192.168.0.251";
    login="sasa";
    password="password";
    base="dbase77";
    ConnectionString = "driver={"+driver+"}; Server="+server+"; uid="+login+"; Pwd="+password+"; Database ="+base+";";
    успешныйконект=ложь;
    Попытка
        СоединениеБазы.Open(ConnectionString);
        успешныйконект=истина;
    Исключение
        успешныйконект=ложь;
    КонецПопытки;
КонецПроцедуры

Процедура Кнопка1Нажатие(Элемент)
    БДдбоКН="dbase77.dbo.";
    Command = Новый COMОбъект("ADODB.Command");
    Command.ActiveConnection = СоединениеБазы;
    ТзЗапроса= Новый ТаблицаЗначений;
    Артикул="1.1.1";
    НачалоПериода="01.01.2010";
    КонецПериода="01.12.2010";
    query="SELECT Журнал.DOCNO Документ_ном
    |, NullIf(Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime), '17530101') Документ_дата
    |, Заявка.sp15113 Контрагент
    |, Контрагенты.DESCR КонтрагентыНаименование
    |, Номенклатура.sp19714 Артикул
    |, ЗаявкаСтроки.IDDOC Ссылка
    |, ЗаявкаСтроки.sp15118 Товар
    |, ЗаявкаСтроки.sp15119 Количество
    |, ЗаявкаСтроки.sp15122 Цена
    |, ЗаявкаСтроки.sp19743 Сумма
    |, ПоступлениеТоваров.IDDOC ПоступлениеТоваровСсылка
    |, РеализацияПродукции.IDDOC РеализацияПродукцииСсылка
    |, РеализацияПродукцииСтроки.sp2993 РеализацияПродукцииСтрокиТовар
    |, РеализацияПродукцииСтроки.sp2994 КоличествоПродано
    |, РеализацияПродукцииСтроки.sp2995 ЦенаРеал
    |, РеализацияПродукцииСтроки.sp3028 СуммаРеал
    |FROM "+БДдбоКН+"dt15124 AS ЗаявкаСтроки With (NOLOCK)
    |INNER JOIN"+БДдбоКН+"_1SJOURN AS Журнал With (NOLOCK) ON ЗаявкаСтроки.IDDOC = Журнал.IDDOC
    |INNER JOIN "+БДдбоКН+"dh15124 AS Заявка With (NOLOCK) ON ЗаявкаСтроки.IDDOC = Заявка.IDDOC
    |INNER JOIN "+БДдбоКН+"sc4089 AS Номенклатура With (NOLOCK) ON ЗаявкаСтроки.sp15118 = Номенклатура.ID
    |INNER JOIN "+БДдбоКН+"sc488 AS Контрагенты With (NOLOCK) ON Заявка.sp15113 = Контрагенты.ID
    |LEFT OUTER JOIN "+БДдбоКН+"dh2975 AS ПоступлениеТоваров With (NOLOCK) ON ' BO4' + ЗаявкаСтроки.IDDOC = ПоступлениеТоваров.sp17090
    |RIGHT OUTER JOIN "+БДдбоКН+"dh2988 AS РеализацияПродукции With (NOLOCK) ON РеализацияПродукции.sp17090 = ' 2AN' + ПоступлениеТоваров.IDDOC
    |FULL OUTER JOIN"+БДдбоКН+"dt2988 AS РеализацияПродукцииСтроки With (NOLOCK) ON РеализацияПродукции.IDDOC = РеализацияПродукцииСтроки.IDDOC AND ЗаявкаСтроки.sp15118 = РеализацияПродукцииСтроки.sp2993
    |LEFT OUTER JOIN"+БДдбоКН+"_1SJOURN AS Журнал1 With (NOLOCK) ON РеализацияПродукции.IDDOC = Журнал1.IDDOC
    |WHERE (Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) >= N'"+НачалоПериода+"')
    |AND (Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) <= N'"+КонецПериода+"')
    |AND ((Журнал.CLOSED & 1) = 1)
    |AND (Журнал.ISMARK = 0)
    |AND (Номенклатура.sp19714 = N'"+Артикул+"')
    |AND ((Журнал1.CLOSED & 1) = 1)
    |AND (Журнал1.ISMARK = 0)";
    Command.CommandText = query; // текст надо фильтровать на недопустимые символы         
    RecordSet = Новый COMОбъект("ADODB.RecordSet"); // Подготавливаем записи
    RecordSet = Command.Execute(); //Выполнение и получение набора данных 
    Если RecordSet.EOF() Тогда
    иначе
        RecordSet.MoveFirst(); 
        инд=-1;
        Пока RecordSet.EOF() = 0 Цикл
            инд=инд+1;
            Заказать=СокрЛП(RecordSet.Fields(RecordSet.Fields.Item("Количество").Name).Value);
            Попытка 
                Заказать=Число(Заказать); 
            Исключение 
                Заказать=0;
            Конецпопытки;
            ДатаДокумента=СокрЛП(RecordSet.Fields(RecordSet.Fields.Item("Документ_дата").Name).Value);
            СтрРасшифровки=ТзЗапроса.Добавить();
            СтрРасшифровки.Заказано=Заказать;
            RecordSet.MoveNext();  
        КонецЦикла;
    КонецЕсли;
    RecordSet.Close(); // После того, как набор записей уже не нужен, его нужно закрыть         
    RecordSet = Неопределено;
    Command = Неопределено;
КонецПроцедуры

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Виктор Виктор (virs) 20.04.11 09:07
Код не проверял, но похоже должно работать...
Явно полезная обработка! Молодец!
2. Олег Валуйский (waol) 20.04.11 12:23
ODBC с использованием 1с++ привычней, и удобней на мой взгляд, но это только из 7.7
а это тоже вариант. есть плюс
3. Василий Казьмин (awk) 20.04.11 12:54
(0) А о чем это? С моей точки зрения это набор букво-цифр, а не статья.
4. Banderas Banderas (volsh77) 21.04.11 02:57
Я как то настраивал обмены через OLE 8.1 - > 7.7 , не стабильно работает.
Если процесс виснет не зайдешь. Потом преписал на соединение 7.7 - > 8.1 и полет нормальный.
5. Епрст (Ёпрст) 21.04.11 08:41
Не вкурил
вот такая типизация прокати в 8-ке ?
>>>>Заявка.sp15113 [Контрагент $Справочник.Контрагенты] ????

это вообше будет работать?
6. OldthiefXXX OldthiefXXX (OldthiefXXX) 21.04.11 09:21
Смысл в том что OLE из 8 не стабилен. Работа через 1С++ это надо компоненту загружать и опять же поднимать 1С OLE, а тут нет необходимости. К стати для быстрого написания запроса рекомендую использовать 77 с компонентой 1С++ так как не всегда охота ковыряться в DD файле.

Сервис1С = ОлеБаза77.CreateObject("MetaDataWork")
текстЗапроса="";
Сервис1С.УстановитьТекстовыйПараметр("ПараметрУстановки",Значение);
ТекстSQL=Сервис1С.ОбрМетаСКЛ(текст2);

А также qryConsole для конструирование запроса.
В результате я получил хорошую производительность, и сокращение времени без подсоединении.
7. Епрст (Ёпрст) 21.04.11 09:39
8. OldthiefXXX OldthiefXXX (OldthiefXXX) 21.04.11 10:07
Да работает! в том то и дело!
9. Епрст (Ёпрст) 21.04.11 10:13
10. OldthiefXXX OldthiefXXX (OldthiefXXX) 21.04.11 10:16
Да я пошутил исправил конструкцию!
11. OldthiefXXX OldthiefXXX (OldthiefXXX) 21.04.11 10:17
Писал на скорую руку ссори, блин а как тут раскрасить код? а то в ручную поднадоело, и есть ли такая возможность?
12. Епрст (Ёпрст) 21.04.11 10:39
(11) разукрашек полно , есть онлайн
http://www.ai-mag.ru/1Color.php

есть так:

http://infostart.ru/public/19856/
OldthiefXXX; +1 Ответить
13. Дима Димыч (kazna2011) 22.01.12 15:38
А также qryConsole для конструирование запроса.
В результате я получил хорошую производительность, и сокращение времени без подсоединении.


Странно, и как это могло повлиять на производительность?
14. OldthiefXXX OldthiefXXX (OldthiefXXX) 30.05.12 18:36
Да вот так, 1С ка отрабатывает свой запрос , а qryConsole на прямую без 1Совских нак сказать накладок. Попробуй сам.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа