Ошибка в FastReport ТОРГ-12

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Ошибка в FastReport ТОРГ-12

Сообщение savov »

Здравствуйте! Пытаюсь печатать ТОРГ-12 (сбыт) в формате FastReport. Вылетает с ошибкой типа "Memo168: '2345.0000000000000000' is not a valid floating point value"
Что это такое? кто-то встречал? (перевод на русский мне понятен, а вот почему в стандартном отчете ошибка и в чем ее причина - нет)
ilshat
Местный житель
Сообщения: 222
Зарегистрирован: 04 июн 2008, 14:35
Откуда: Стерлитамак
Контактная информация:

Сообщение ilshat »

Разве сие удивительно в контексте Гали?
На счетах фактурах тоже самое было у нас. В этот мемо не такое уж важное поле у нас было, которое всегда практически пустым было. Мы просто мемо почистили. А так то есть подозрение, что в потоке вам вместо float подсунули string форматированный. Поиграйтесь с этим полем преобразуя встроенными функциями фаста.
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Сообщение savov »

К сожалению, поля важные - стоимость, общее количество по накладной, да и количество по позициям хотелось бы отформатировать. Там вроде получается OleStr объект, я пробовал преобразовать в String, а потом форматировать, но в String преобразуется (не ругается по крайней мере), а вот дальше - фиг вам, идет упомянутая выше ошибка (Пробовал StrToInt, StrToFloat - все ведет к ошибке!).
ilshat
Местный житель
Сообщения: 222
Зарегистрирован: 04 июн 2008, 14:35
Откуда: Стерлитамак
Контактная информация:

Сообщение ilshat »

Тут проблема похоже в децимал сеператоре. Замените, после конвертирования в стринг, точку на запятую (или наоборот в зависимости что там изначально лежит). Если есть много свободного времени можете в ПИР зарегить.
ilshat
Местный житель
Сообщения: 222
Зарегистрирован: 04 июн 2008, 14:35
Откуда: Стерлитамак
Контактная информация:

Сообщение ilshat »

Вот так вроде можно извратиться:
было:

Код: Выделить всё

StrToFloat(<FR_DOCSPECIF."KOL_GRM_S">)
стало:

Код: Выделить всё

StrToFloat(
Copy(<FR_DOCSPECIF."KOL_GRM_S">,1,Pos('.',<FR_DOCSPECIF."KOL_GRM_S">)-1)+','+      
Copy(<FR_DOCSPECIF."KOL_GRM_S">,Pos('.',<FR_DOCSPECIF."KOL_GRM_S">)+1,Length(<FR_DOCSPECIF."KOL_GRM_S">))
)
По сути меняем точку на запятую. Функции ReplaceStr не нашел.
LaaLaa

Сообщение LaaLaa »

Добрый день! Извините за задержку ответа. Упустил ваше сообщение из виду.

Задачу перевода числа в произвольном строковом виде (с запятыми, с точками, с разделителями тысяч) в числовой формат можно решить примерно следующим образом. В отчет FastReport на закладку «код» поместить функцию:

Код: Выделить всё

function myStrToExtended(s : string):extended;
var
  i: Integer;
begin
  Result := 0;

  // удалить разделители тысяч - на всякий случай                                                                                                                
  while Pos(' ', s) <> 0 do
    Delete(s, Pos(' ', s), 1);

  try
    // попробовать конвертацию для точки                                                                        
    for i := 1 to Length(s) do
      if s[i] in [',', '.'] then
        s[i] := '.';
          
    Result := StrToFloat(s);
  except
    // если не получилось  попробовать конвертацию для запятой                                                                                                     
    for i := 1 to Length(s) do
      if s[i] in [',', '.'] then
        s[i] := ',';
          
    Result := StrToFloat(s);
  end;                            
end;   


В отчете ее можно использовать следующим образом

Код: Выделить всё

[myStrToExtended('12345.678')]  и [myStrToExtended('12345,678')]
Пример отчета в файле: http://forum.galaktika.by/download/file ... 68dd2b7ca9
ilshat
Местный житель
Сообщения: 222
Зарегистрирован: 04 июн 2008, 14:35
Откуда: Стерлитамак
Контактная информация:

Сообщение ilshat »

LaaLaa, а может в галко функции видимые в фаст отчетах ReplaceStr выдадите? Думаю было б удобно.
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Сообщение savov »

Большое спасибо всем за подробную консультацию! Действительно, проблема была со знаком разделителя.
LaaLaa

Сообщение LaaLaa »

ilshat писал(а):LaaLaa, а может в галко функции видимые в фаст отчетах ReplaceStr выдадите? Думаю было б удобно.
В ПИР зарегил позже сделаю.
ilshat
Местный житель
Сообщения: 222
Зарегистрирован: 04 июн 2008, 14:35
Откуда: Стерлитамак
Контактная информация:

Сообщение ilshat »

Только по большому счету все эти решения не более чем "костыли". Проблему лучше решать в корне: поток фаста должен отдавать данные в тех типах в которых они в базе. Преобразование числа в форматированную строку делают в отчетах ибо неизвестно какой формат мне может понадобиться.
Это в общем то касается всех всех всех отчетов. Не в первый раз наступаем на грабельки фисла форматированного в строку.
Polimer
Местный житель
Сообщения: 489
Зарегистрирован: 27 янв 2006, 12:46
Откуда: Москва

Сообщение Polimer »

Хмм. А стандартная ТОРГ-12 в ФР сейчас работает у кого-нибудь?
Обе колонки с количеством неправильные.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

а много кто использует стандартные формы?! :grin:
у нас почти все отчеты переделаны
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

Алексей
для внутреннего документооборота ни одной! даже отраслевые не подходят - переделывали. Стандартные используем только для анализа данных при принятии важных и эффективных управленческих решений, гы
Ответить