Версия для печати темы (https://pro1c.org.ua/index.php?s=2830ab5e22a3ebb3e8e7857ef3a1d419&showtopic=3458)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Не наши статьи _ Прямой доступ к базе данных 77 из 8ки

Автор: mister-x 21.04.11, 14:38

Иногда бывает необходимость, получить какие то данные из 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 = Неопределено;

КонецПроцедуры



Стаття http://pro1c.org.ua/redirect.php?http://infostart.ru/public/84312/

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua