Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Ошибка получения остатка по АДО из 1С 7.7 база DBF (число прочтений - 4201 )
logarifm
Junior Member
**
Отсутствует



Сообщений: 92
Местоположение: Украина
Зарегистрирован: 29. Марта 2007
Пол: Мужской
Ошибка получения остатка по АДО из 1С 7.7 база DBF
21. Июля 2011 :: 14:23
Печать  
Переношу данные, вот решил встряхнуть старинной и сделать все одной обработинной в самой восьмере. Не могу по АДО срезать остатки на период, хотя в разрезе все выводится, вот примеры кода и результаты.

Код
Выбрать все

//Функция открывает ADO-соединение к базе по ODBC драйверу
//
Функция ОткрытьADOОСоединение() Экспорт

	Если ЗначениеЗаполнено(ADODBConnection) Тогда
		Возврат ADODBConnection;
	КонецЕсли;

	СтатусВозврата = Неопределено;

	Если НЕ ЗначениеЗаполнено(СтрокаСоединения) Тогда
		Сообщить("Не указана строка соединения",СтатусСообщения.Важное);
	КонецЕсли;

	Connection = Новый COMОбъект("ADODB.Connection");
	Catalog = Новый COMОбъект("ADOX.Catalog");
	СтрокаПодключения = СокрЛП(СтрокаСоединения);

	//СтрокаПодключения = rror_0";

	Попытка
		Connection.ConnectionString = СокрЛП(СтрокаПодключения);
		Catalog.ActiveConnection = СокрЛП(СтрокаПодключения);
		Connection.Open(СокрЛП(СтрокаПодключения));

		СтатусВозврата = Новый Структура("АДОСоединение,Catalog");
		СтатусВозврата.Вставить("Connection",Connection);
		СтатусВозврата.Вставить("Catalog",Catalog);
	Исключение
		#Если Клиент Тогда
			Сообщить(ОписаниеОшибки(),СтатусСообщения.Важное);
		#КонецЕсли
	КонецПопытки;

	ADODBConnection = СтатусВозврата;
	Возврат СтатусВозврата;
КонецФункции

//Функция выполняет запрос и возвращает его обход
// Входные параметры: текст запроса; ADOОСоединение
//
Функция ВыполнитьADOЗапрос(ADOОСоединение,ТекстЗапроса) Экспорт

	RecordSet = Неопределено;
	Попытка
		Command = Новый COMОбъект("ADODB.Command");
		Command.ActiveConnection = ADOОСоединение;
		Command.CommandText = ТекстЗапроса;
		//Command.CommandType = ТипКоманды("adCmdUnknown");

		//RecordSet = Новый COMОбъект("ADODB.RecordSet");
		RecordSet = Command.Execute(); //Выполнение и получение набора данных
	Исключение
		#Если Клиент Тогда
			Сообщить(ОписаниеОшибки(),СтатусСообщения.Важное);
		#КонецЕсли
	КонецПопытки;

	Возврат RecordSet;

КонецФункции

Процедура ЗакрытьADOСоединение(Соединение,флСообщений=Ложь) Экспорт

	Если Соединение = Неопределено Тогда
		Если флСообщений Тогда
			Предупреждение("Ошибка подключения к серверу, программа не готова!");
		КонецЕсли;
		Возврат;
	КонецЕсли;

	//нужно закрыть сесии
	Connection    = Соединение.Connection;
	Catalog       = Соединение.Catalog;

	Попытка
		//Connection.Close();
		Если флСообщений Тогда
			Предупреждение("Инициализация успешно завершена!");
		КонецЕсли;
	Исключение
		Если флСообщений Тогда
			Сообщить(ОписаниеОшибки());
		КонецЕсли;
	КонецПопытки;

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


Процедура ВыполнитьЗапрос()

	Соединение = ОткрытьADOОСоединение();

	Если НЕ Соединение = Неопределено Тогда
		ADOСоединение = Соединение.Connection;
	КонецЕсли;

	Состояние("Ждем выполнение запроса...");
	RecordSet = ВыполнитьADOЗапрос(ADOСоединение,вПолучитьТекстЗапроса(Истина));

	Попытка
		RecordSet.MoveFirst();

		ОбъявитьТаблицу(RecordSet);
		Пока RecordSet.EOF() = 0 Цикл

			Состояние("Заполняются данные...");
			ОбработкаПрерыванияПользователя();

			НовСтр = РезультатТаблица.Добавить();
			Для А = 0 По РезультатТаблица.Колонки.Количество()-1 Цикл
				НовСтр[А] = RecordSet.Fields.Item(А).Value;
			КонецЦикла;

			//-- переход на следующую запись основного цикла
			RecordSet.MoveNext();
			Если ЗаполнятьТаблицуСОбновлением Тогда
				ЭлементыФормы.ТаблицаРезультата.СоздатьКолонки();
			КонецЕсли;
		КонецЦикла;

	Исключение
		Сообщить(ОписаниеОшибки(),СтатусСообщения.ОченьВажное);
		Сообщить("Данные по запросу отсутсвуют или ошибка в запросе!");
	КонецПопытки;

	Если Не ЗаполнятьТаблицуСОбновлением Тогда

	КонецЕсли;

	ЗакрытьADOСоединение(Соединение);
	ЭлементыФормы.ТаблицаРезультата.СоздатьКолонки();

КонецПроцедуры // ВыполнитьЗапрос()

такой текст запроса, возвращает данные по всем периодам:
select
	TabRegOst.PERIOD,
	TabRegOst.SP124 As Фирма,
	TabRegOst.SP126 As Склад,
	TabRegOst.SP125 As Товар,
	sum(TabRegOst.SP127) As КвоКонОст

 from RG123 As TabRegOst

 group by
 	TabRegOst.PERIOD,
 	TabRegOst.SP124,
 	TabRegOst.SP126,
 	TabRegOst.SP125

PERIOD	           Фирма    	Склад	Товар	КвоКонОст
01.08.2011	     1	                  R8UC0	   17Q	    1
01.08.2011	     1	                  R9UC0	   2A1	    2

 



Такой же код, не возвращает остатка вообще:
Код
Выбрать все
WHERE
 	TabRegOst.PERIOD = CONVERT(DateTime, '20110801',112)
 



или так:
Код
Выбрать все
WHERE
 	TabRegOst.PERIOD = '20110801'
 



Помогите...
  

я переписал бы мир, но Бог не дает мне исходники...
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Ошибка получения остатка по АДО из 1С 7.7 база DBF
Ответ #1 - 21. Июля 2011 :: 15:50
Печать  
на созданном соединении выполни инструкцию
SET DATEFORMAT dmy
  

1&&2&&3
Наверх
 
IP записан
 
logarifm
Junior Member
**
Отсутствует



Сообщений: 92
Местоположение: Украина
Зарегистрирован: 29. Марта 2007
Пол: Мужской
Re: Ошибка получения остатка по АДО из 1С 7.7 база DBF
Ответ #2 - 22. Июля 2011 :: 09:09
Печать  
не помогает Печаль
  

я переписал бы мир, но Бог не дает мне исходники...
Наверх
IP записан
 
vivm
Full Member
***
Отсутствует



Сообщений: 159
Местоположение: Новосибирск
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Ошибка получения остатка по АДО из 1С 7.7 база DBF
Ответ #3 - 01. Августа 2011 :: 14:29
Печать  
На точку актуальности попробуй так:

Код
Выбрать все
WHERE (TabRegOst.PERIOD = (Select MAX(PERIOD) from RG123 )) 

  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Ошибка получения остатка по АДО из 1С 7.7 база DBF
Ответ #4 - 01. Августа 2011 :: 18:43
Печать  
logarifm писал(а) 22. Июля 2011 :: 09:09:
не помогает Печаль

я не увидел что dbf Смущённый
  

1&&2&&3
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Ошибка получения остатка по АДО из 1С 7.7 база DBF
Ответ #5 - 02. Августа 2011 :: 06:01
Печать  
WHERE TabRegOst.PERIOD  = {d '2011-01-01'}
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать