Страница 1 из 1

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

Добавлено: 15 фев 2010, 16:05
savov
Здравствуйте! Пытаюсь печатать ТОРГ-12 (сбыт) в формате FastReport. Вылетает с ошибкой типа "Memo168: '2345.0000000000000000' is not a valid floating point value"
Что это такое? кто-то встречал? (перевод на русский мне понятен, а вот почему в стандартном отчете ошибка и в чем ее причина - нет)

Добавлено: 16 фев 2010, 09:03
ilshat
Разве сие удивительно в контексте Гали?
На счетах фактурах тоже самое было у нас. В этот мемо не такое уж важное поле у нас было, которое всегда практически пустым было. Мы просто мемо почистили. А так то есть подозрение, что в потоке вам вместо float подсунули string форматированный. Поиграйтесь с этим полем преобразуя встроенными функциями фаста.

Добавлено: 16 фев 2010, 10:49
savov
К сожалению, поля важные - стоимость, общее количество по накладной, да и количество по позициям хотелось бы отформатировать. Там вроде получается OleStr объект, я пробовал преобразовать в String, а потом форматировать, но в String преобразуется (не ругается по крайней мере), а вот дальше - фиг вам, идет упомянутая выше ошибка (Пробовал StrToInt, StrToFloat - все ведет к ошибке!).

Добавлено: 16 фев 2010, 12:41
ilshat
Тут проблема похоже в децимал сеператоре. Замените, после конвертирования в стринг, точку на запятую (или наоборот в зависимости что там изначально лежит). Если есть много свободного времени можете в ПИР зарегить.

Добавлено: 16 фев 2010, 12:57
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 не нашел.

Добавлено: 02 мар 2010, 13:16
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

Добавлено: 03 мар 2010, 08:50
ilshat
LaaLaa, а может в галко функции видимые в фаст отчетах ReplaceStr выдадите? Думаю было б удобно.

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

Добавлено: 03 мар 2010, 17:34
LaaLaa
ilshat писал(а):LaaLaa, а может в галко функции видимые в фаст отчетах ReplaceStr выдадите? Думаю было б удобно.
В ПИР зарегил позже сделаю.

Добавлено: 04 мар 2010, 08:48
ilshat
Только по большому счету все эти решения не более чем "костыли". Проблему лучше решать в корне: поток фаста должен отдавать данные в тех типах в которых они в базе. Преобразование числа в форматированную строку делают в отчетах ибо неизвестно какой формат мне может понадобиться.
Это в общем то касается всех всех всех отчетов. Не в первый раз наступаем на грабельки фисла форматированного в строку.

Добавлено: 19 мар 2010, 14:14
Polimer
Хмм. А стандартная ТОРГ-12 в ФР сейчас работает у кого-нибудь?
Обе колонки с количеством неправильные.

Добавлено: 19 мар 2010, 14:43
Алексей
а много кто использует стандартные формы?! :grin:
у нас почти все отчеты переделаны

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