Есть БД Парус 7.40 в формате DBF.
Подключаемся к ней через внешний источник данных с помощью FoxPro Driver.
Делаем выборку данных с помощью запроса с одним и тем же условием и каждый раз получаем разный результат по числовой колонке.
Если результат запроса поместить в таблицу значений и посчитать итог по колонке (тип: число), то результат каждый раз разный.
Базу DBF прикрепляю к сообщению и БД 1С с процедурой для подключения и запросом.
Количество записей при выполнении запроса одно и тоже.
А вот числовые значения каждый раз разные.
(1) GeterX, в свое время по переносу данных в 1С тоже столкнулся с таким явлением.
Если это нужно только для одноразового переноса данных в 1С, то можно поступить так же как и я.
Сделал временную базу 1С и полностью загрузил все данные в нее. И уже из временной выбирать нужные.
(4) GeterX, нет. Похоже, что не все данные считываются запросом по условию. Как буфер какой ограничен, или время выборки. Но это косяк 1С. Подробно не стал вникать. Но данные каждый раз не полностью выбирались. И самое интересно, каждый раз разное количество.
(3) spacecraft, как ни странно, но такая же фигня и без выборки по условию, даже если полностью загружаем таблицу.
Методом проб и ошибок, нашел как обойти эту ошибку. Такое возникает если в структуре DBF в одной из колонок стоит тип "бинарная строка (двоичная)", почему-то 1С ее неправильно понимает (хоть и идет преобразование по ВИД в строку).
Обойти это можно сменой типа в DBF на строку (Character (binary) -> Character).
При этом в моем случае БД остается работоспособной.
(8) spacecraft, вроде работает так как надо. 100 % пока не скажу.
Изменил так в Visual FoxPro, может кому пригодится. (см.скриншот)
А так жду ответ от тех. поддержки.
(1) GeterX, мне не удалось подружиться или победить "Внешние источники данных". Поэтому взял себе за правило напрямую подключаться к источникам данных.
Пример выборки данных запросом, на основе вышеперечисленных данных:
Процедура КнопкаВыполнитьНажатие(Кнопка)
КолвоЗаписей = 0; СуммаКВыдаче = 0;
НаборСтрок = Новый COMОбъект("ADODB.Recordset");
ТекстЗапроса = "sel ect * FR OM his.dbf WHERE period = '1501'";
//Внимание: "Provider=" - может быть другой см. список источников данных ODBC
// "Initial Catalog=" - путь до файла
СтрокаПодключения = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=his.dbf;Initial Catalog=F:\";
НаборСтрок.Open(ТекстЗапроса,СтрокаПодключения);
Пока Не НаборСтрок.EOF() Цикл
КолвоЗаписей = КолвоЗаписей + 1;
СуммаКВыдаче = СуммаКВыдаче + НаборСтрок.Fields("total").Value;
НаборСтрок.MoveNext();
КонецЦикла;
НаборСтрок.Close();
ЭлементыФормы.Надпись1.Значение = " Сумма: " + СуммаКВыдаче;
ЭлементыФормы.Надпись2.Значение = "Количество: " + КолвоЗаписей;
КонецПроцедуры