Добрый день!

Достаточно тривиальная задача, но не могу разобраться с разбегу.

Создаю пользовательское окно фильтрации FastReport, само окно зависит от выбранного элемента.

Собственно, внимание вопрос: как получить ID выбранного элемента в окне фильтрации?

Нравится

4 комментария

Вы хотите выбрать в гриде запись и по ней строить отчёт?
Может, grdData.SelectedIDs?

Нет, не совсем. Запись уже строится, я редактирую пользовательское окно фильтрации FastReport.

То есть, запись УЖЕ выбрана и отчёт по ней УЖЕ строится стандартными средствами, но для фильтрации мне нужно поймать ID этой записи.

Логика запуска построения отчёта по выбранной записи определена в функции ReportMenuItemExecute в скрипте scr_ReportUtils. Насколько вижу, там вызывается одна функция ShowSelectedRecordsReport для отчёта по выбранным записям, но без окна фильтрации, а другая ShowReport — по всем записям, но с окном.

Можно специально для Вашего отчёта дописать третий случай — и с окном, и с выбранными записями. Например, передавать в окно отчёта wnd_BaseFastReportPreview ID записи или IDs записей, а затем в scr_BaseFastReportPreview передавать их в окно фильтрации.

Я сначала несколько удивился тому, что в окно не передаётся ID выбранных записей. Потом почитал исходники и выяснил, что таки передаются. ID банально берутся из Атрибута Self.

Показать все комментарии

Добрый день!
Подскажите, пожалуйста, почему не высчитывается сумма по столбцу?
В MasterData вывожу итоговую сумму столбца DetailData.
[SUM([ds_RD07_AP_ProjectManHour."EstimatedManHour"], DetailData2)]

Нравится

2 комментария

Оказалось, по какой-то причине, нельзя вывести итоги в МasterData. В Footer они вывелись.

Для корректного вычисления необходимо написать скрипт:
[SUM([<ds_RD07_AP_ProjectManHour."EstimatedManHour">], DetailData2)]

Ссылка на документацию Fast Report по агрегатным функциям: Aggregate functions

Показать все комментарии

Итак, Есть ли возможность создания отчета с выборкой данных на основе представлений в бд?
Если да, то как это сделать?

Нравится

2 комментария

Здравствуйте, Николь!

Создание отчета на основе представления в БД возможно. Для этого необходимо создать в БД представление. Далее создать в Конфигурации объект, где установить признак для свойства [Представление в БД]:
[IMG]http://s012.radikal.ru/i319/1505/52/ada72265755d.jpg[/IMG]
Для отчета использовать этот объект.
Важно, объект в Конфигурации должен иметь такое же название, как и представление в БД.
Для примера, в системе есть объекты, имя которых начинается на "VW..."

Я так понимаю вопрос по 3.х?
Если да, то в принципе почти также как и в 5.х, 7.х:

создаете сервис таблицы, называете его так, как представление в БД, и _обязательно_ на вопрос "Сохранить изменения в БД?" отвечаете "Нет". Это необходимо, что бы не была создана таблица на уровне БД,

Ну а далее стандартный механизм.

Показать все комментарии

Итак, Есть ли возможность создания отчета с выборкой данных на основе представлений в бд?
Если да, то как это сделать?

Нравится

3 комментария

Здравствуйте, Николь!

Создание отчета на основе представления в БД возможно. Для этого необходимо создать в БД представление. Далее создать в Конфигурации объект, где установить признак для свойства [Представление в БД]:
[IMG]http://s012.radikal.ru/i319/1505/52/ada72265755d.jpg[/IMG]
Для отчета использовать этот объект.
Важно, объект в Конфигурации должен иметь такое же название, как и представление в БД.
Для примера, в системе есть объекты, имя которых начинается на "VW..."

А где находится этот признак?

Признак появился начиная с версии 5.х. Комментарий выше дан без учета этого нюанса :)))

вот здесь кратенько написано как сделать представление... это для версии 3.х

Показать все комментарии

У нас реализована раздельная автоматическая нумерация счетов и документов для разных юр.лиц нашей компании. То есть, если юр. лицо Xxx, то по маске для Xxx документам и счетам присваивается присваиваются соответствующие номера с префиксом X. Если Yyy - то с префиксом Y.
Для счетов в src_InvoiceEditScript по событию OKClick обрабатываем функцию btnOKOnClick(), где в зависимости от значения поля 'SupplierID' (поставщик) вызываем SetItemSystemNumber() с разными значениями.

function btnOKOnClick(Control) {
        var Dataset = dlData.Dataset;
        var DefaultValues = GetAttribute(Self, 'DefaultValues');
        var WorkflowItemID = Dataset.ValAsStr('WorkflowItemID');
        if (Dataset.State != dstInsert) {
                if (!ClearVises('InvoiceVises', 'InvoiceID', Dataset('ID'))) {
                        return;
                }
        }
    var oDate = new Date();
    var DYear = oDate.getYear();
    DYear = DYear - 2000;
    var SYear = DYear.toString();
        if (Dataset.Values('InvoiceNumber') == null) {         
                if (Dataset.Values('SupplierID') == '{7F8B1E5C-C450-47C6-B770-1AF0CBCAF591}') {
                //ShowConfirmationDialog(Dataset.Values('SupplierID'));
            SetItemSystemNumber('InvoicePro', Dataset, 'InvoiceNumber');
            } else
                if (Dataset.Values('SupplierID') == '{933958B9-E358-4A98-8A02-5BAD9AC869A8}') {
            SetItemSystemNumber('InvoiceIp', Dataset, 'InvoiceNumber');
            } else
            if (Dataset.Values('SupplierID') == '{61773DB2-980C-49F2-881D-8BD59EC1A0AA}') {
            SetItemSystemNumber('InvoiceTch', Dataset, 'InvoiceNumber');
            } else
            if (Dataset.Values('SupplierID') == '{006B2B81-D597-40E9-A4EC-73171D224F5C}') {
            SetItemSystemNumber('InvoiceBLD', Dataset, 'InvoiceNumber');
            } else
                if (Dataset.Values('SupplierID') == '{084FA6BB-4421-4E23-9641-1E8D11D407C8}') {
                SetItemSystemNumber('InvoiceGms', Dataset, 'InvoiceNumber');
            } else {
            SetItemSystemNumber('Invoice', Dataset, 'InvoiceNumber');
            }
            var GeneratedNumber = Dataset.Values('InvoiceNumber') + '/' + SYear;
                  Dataset.Values('InvoiceNumber') = GeneratedNumber;
        }      
        InvoiceEdit.IsCompleting = true;
        if (CheckItemNumberDuplicate('Invoice', Dataset, 'InvoiceNumber',
                "Счет")){
                if (!scr_BaseDBEdit.btnOKOnClick(Control)) {
                        return;
                }
        }
        var IsCreatedByDocumentID = Self.Attributes('IsCreatedByDocumentID');
        if (IsCreatedByDocumentID) {
                if (ShowConfirmationDialog("Перейти к созданному счету?") == wmrYes) {
                        GotoWorkspace('wnd_InvoicesWorkspace', BaseDBEdit.RecordID);
                }
        }
        if (Self.IsVisible) {
                return;
        }
        ProcessWorkflowItem(WorkflowItemID);
}

Аналогичным реализована работа с названиями для документов в src_DocumentEditScript:

function dlDataOnDatasetBeforePost(Dataset, DoPost) {
    var oDate = new Date();
    var DYear = oDate.getYear();
    var DMonth = oDate.getMonth()+1;
    var DDate = oDate.getDate();
    DYear = DYear - 2000;    
    var SYear = DYear.toString();
    if (DMonth10)
     {
      var SMonth = '0' + DMonth.toString();
     }
    else {
          var SMonth = DMonth.toString();
         }
        if (DDate10)
         {
          var SDate = '0' + DDate.toString();
         }
        else {
          var SDate = DDate.toString();
         }  
    var DocumentTypeID = Dataset('DocumentTypeID');    
        if (Dataset.Values('DocumentNumber') == null) {
            if (DocumentTypeID == '{D8525E18-F8FE-4583-9E54-CA43A7129C45}' || DocumentTypeID == '{DE983B1A-6CF3-4A79-AF34-DCB6A2D0DB76}') /* Акт и Торг12 */
             {
                  var InvoiceID = Dataset.Values('InvoiceID');
              if (InvoiceID != null) {
                        var InvoiceDataset = Services.GetNewItemByUSI('ds_Invoice');
                    ApplyDatasetFilter(InvoiceDataset, 'ID', InvoiceID, true);
                    InvoiceDataset.Open();
                    var InvoiceSupplierID = InvoiceDataset('SupplierID');
                    InvoiceDataset.Close();
                  }
                  else {
                        MessageBox("Нет привязанного счета!");
                  }
                  if (InvoiceSupplierID == '{7F8B1E5C-C450-47C6-B770-1AF0CBCAF591}') {
                SetItemSystemNumber('DocumentPro', Dataset, 'DocumentNumber');
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              } else
                  if (InvoiceSupplierID == '{006B2B81-D597-40E9-A4EC-73171D224F5C}') {
                SetItemSystemNumber('DocumentBLD', Dataset, 'DocumentNumber');
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              } else
                  if (InvoiceSupplierID == '{933958B9-E358-4A98-8A02-5BAD9AC869A8}') {
                SetItemSystemNumber('DocumentIp', Dataset, 'DocumentNumber');
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              } else
              if (InvoiceSupplierID == '{61773DB2-980C-49F2-881D-8BD59EC1A0AA}') {
                SetItemSystemNumber('DocumentTch', Dataset, 'DocumentNumber');
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              } else
              if (InvoiceSupplierID == '{084FA6BB-4421-4E23-9641-1E8D11D407C8}') {
                SetItemSystemNumber('DocumentBgm', Dataset, 'DocumentNumber');
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              } else {
                SetItemSystemNumber('Document', Dataset, 'DocumentNumber');
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              }
             }    
            else if (DocumentTypeID == '{584720AE-7F93-461B-BE79-AFA15A4D85D4}') /* Входящий */
             {
              SetItemSystemNumber('DocumentVI', Dataset, 'DocumentNumber');
              var ii = 0;
              var array = Dataset.Values('DocumentNumber').split("");
              for(var i = 0; i array.length; i++)
               {
                if (array[i] == '№')
                 {
                  var ii = 1;
                 }
                   }
              if (ii != 1)
               {
                var GeneratedNumber = 'ВХ-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;    
               }
             }
            else if (DocumentTypeID == '{EFFB172C-B755-4E77-BFC8-3B121140C74F}') /* Исходящий */
             {
              SetItemSystemNumber('DocumentVI', Dataset, 'DocumentNumber');
              var ii = 0;
              var array = Dataset.Values('DocumentNumber').split("");
              for(var i = 0; i array.length; i++)
               {
                if (array[i] == '№')
                 {
                  var ii = 1;
                 }
                   }
              if (ii != 1)
               {
                var GeneratedNumber = 'ИСХ-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;    
               }
             }
            else if (DocumentTypeID == '{DD6B6F0E-FD7B-42EF-95D0-486A2EFC02B3}') /* Счет-фактура */
             {
                  var InvoiceID = Dataset.Values('InvoiceID');
              if (InvoiceID != null) {
                        var InvoiceDataset = Services.GetNewItemByUSI('ds_Invoice');
                    ApplyDatasetFilter(InvoiceDataset, 'ID', InvoiceID, true);
                    InvoiceDataset.Open();
                    var InvoiceSupplierID = InvoiceDataset('SupplierID');
                    InvoiceDataset.Close();
                  }
                  else {
                        MessageBox("Нет привязанного счета!");
                  }
                  if (InvoiceSupplierID == '{7F8B1E5C-C450-47C6-B770-1AF0CBCAF591}') {
                        SetItemSystemNumber('DocumentIF', Dataset, 'DocumentNumber');
                var GeneratedNumber = 'СФ-БПР-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;
              } else
                  if (InvoiceSupplierID == '{933958B9-E358-4A98-8A02-5BAD9AC869A8}') {
                        SetItemSystemNumber('DocumentIF', Dataset, 'DocumentNumber');
                var GeneratedNumber = 'СФ-ДНБ-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;
              } else                                                                      
                  if (InvoiceSupplierID == '{006B2B81-D597-40E9-A4EC-73171D224F5C}') {
                        SetItemSystemNumber('DocumentIF', Dataset, 'DocumentNumber');
                var GeneratedNumber = 'СФ-БЛД-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;
              } else                                                                      
              if (InvoiceSupplierID == '{61773DB2-980C-49F2-881D-8BD59EC1A0AA}') {
                        SetItemSystemNumber('DocumentIF', Dataset, 'DocumentNumber');
                var GeneratedNumber = 'СФ-ТЧК-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;
              }                                                                          
              if (InvoiceSupplierID == '{084FA6BB-4421-4E23-9641-1E8D11D407C8}') {
                    SetItemSystemNumber('DocumentIfBgm', Dataset, 'DocumentNumber');
                var GeneratedNumber = 'СФ-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;
              }                                                                          
              else {
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              }    
             }
            else {
              SetItemSystemNumber('Document', Dataset, 'DocumentNumber');
              var GeneratedNumber = Dataset.Values('DocumentNumber');
             }
             var GeneratedNumber = Dataset.Values('DocumentNumber') + '/' + SYear;
             Dataset.Values('DocumentNumber') = GeneratedNumber;
     }
}

Так было заведено несколько юр. лиц и для них всё замечательно работало. Сейчас я добавил ещё одно юр. лицо. Раздельная автоматическая нумерация с нужным префиксом по маске работает замечательно, но в отчётах по документам и счетам (ТОРГ-12, счет-фактуры, счтеа и др.) выводится только футер (там только одно статическое поле memo не связанное не получающие никаких данных ни из каких датасетов).

Есть подозрение, что нужно было поправить ещё где-то. но я совершенно не помню где ещё.
Подскажите, что я забыл?

Нравится

2 комментария

что-то я не уловил связи между нумерацией и отчетами


но в отчётах по документам и счетам выводится только футер

И? Тоже не понял в чем проблема. В отчетах номер не выводится вообще или как?

Показать все комментарии

Добрый день
Подскажите почему когда в документе Word создаю отчет и в таблицу вставляю поле из Детали Запроса
при формировании отчета вместо числовых данных выходит значение
#Деталь 3.Номинальная ставка вознаграждения, %>

Нравится

14 комментариев

уберите % из названия поля

"Андросов Дмитрий" написал:

уберите % из названия поля

не помогает

<#Деталь 3.Номинальная ставка вознаграждения>

уже не помню, но по-моему в тройке при парсинге шаблоне для ворда не читается большинство небуквенных символов в названии полей, в т.ч. пробел (у меня все отчеты сделаны без пробелов)

сделать это надо как в шаблоне, так и в настройке запроса для отчета (см скриншоты)

увы.. и это не помогает
убрал пробелы

<#Деталь 3.Номинальная_ставка_вознаграждения>

что о совсем ничего не могу понять
таблица из двух ячеек
если первой стоит
название ячейки Ставка то выводиться <#Деталь 3.Номинальная_ставка_вознаграждения>
а если в первой стоит другое поле
<#Деталь 3.Сумма кредита> то выводиться нормальное значение 0,00

все примеры документации просмотрел все делаю по описаниям.
что не так???

главное что в этом же отчете чуть выше таблицы заполняются аналогично и никаких проблем

у вас что-то не так с именно этим полем (Номинальная_ставка_вознаграждения), попробуйте его "вытащить" в настройках заново, покажите скрины вашего шаблона и настроек запроса

уже пробовал и заново и все удалил.
может быть какие то тонкости есть в рисовании таблицы и вставки полей?

скрины прилагаю

вы правы, тонкость есть - поля детали должны быть в одной таблице, а, как я вижу по скрину, две нижних ячейки - это другая таблица. Добавьте строку в таблицу выше и вставьте поля туда

добавил строку и вставил, не помогает
скрин прикрепил

идеи заканчиваются)
последние варианты:
1)попробуйте сократить название поля (не забудьте про запрос)
2) а поле у вас, случаем, не вычисляемое?

поле не вычисляемое
и длинна по сути тоже не влияет
такое ощущение что какие то неполадки именно с вставкой в таблицу значения
но не могу понять что именно.
ведь верхняя часть работает же.
и это поле отображается если слева в ячейку вставить другое поле...

в общем, надо лезть в парсер шаблона и смотреть, что там не отрабатывает (через дебаггер, например, если умозрительно сложно)
а пока еще варианты из разряда шаманства:
- уберите объединение полей в верхних строках таблицы
- вставьте еще одну строку последней
- вы уверены, что ворд не вставляет какой-нибудь символ при переносе строки внутри ячейки?

Добрый день
вот пробовал шаманить в итоге поле "Сроком на" перестало работать а "Ставка" отображается
посмотрите в прикрепленном файле настройки шаблона и результат

Добрый день, Евгений!

Если вопрос актуален, вышлите данные на support@terrasoft.ru

Показать все комментарии

Добрый день!
Создаю запрос для отчета Word
Добавил Деталь1 перетащил на нее нужные поля,
теперь добавляю Деталь 2 и при попытке перетащить туда поля из таблицы списка Обратные связи
выдается ошибка Поле __ID__ не активно (файл прилагаю )

В запросе галочка поля ID "Всегда выбирать в запросе" установлена

В чем может быть проблема?

Нравится

5 комментариев

Добрый день, Евгений!

Вам необходимо перейти в расширенный режим, перетащить на деталь колонку "ID", после чего попробовать добавить нужный Вам набор полей. Если ошибка не устранится, пожалуйста, уточните версию Ваших бинарных файлов, возможно необходимо будет произвести их обновление.

ошибка не устранилась, при попытке перенести колjнку ID
выдается та же ошибка
версия 3.3.2.294

Евгений, для анализа проблемы прошу уточнить все Ваши действия пошагово. Также, пожалуйста, уточните для какой таблицы создается запрос, какие поля Вы добавляете на детали, какой продукт используете и при возможности прикрепите скриншот с более высоким разрешением.

может быть удобнее будет предоставить доступ онлайн?

Евгений, пожалуйста, напишите на адрес support@terrasoft.ru название Вашей компании, контактный телефон и при возможности Ваш Customer ID.

Показать все комментарии

Не могу найти источник ошибки. При при просмотре после редактирования расходной открывается окно ошибки:
Could not convert variant of type (Null( into type (OleStr)
Unknown variable or datafield: lblTotalAmountWithMessage

Нравится

2 комментария

Здравствуйте, Наталия.

Прошу прикрепить скриншот, а также подробно описать последовательность воспроизведения ошибки.

Также уточните, под всеми пользователями воспроизводится ошибка или под некоторыми.

Попробуйте воспроизвести под администратором Terrasoft.

Все ок, справилась сама

Показать все комментарии

Проблема с отчетами!
Все время возникает три копии master data, header и detail data в счете в отчете FR. Признак количества копий = 1. Свойство distinct не помогает.
И в конце, при подсчете 'всего' считает сумму за три одинаковых продукта, вместо суммы за один.

Нравится

1 комментарий

Здравствуйте, Наталья!

Насколько я понял, в сформированном отчете у Вас дублируется несколько раз его содержимое.

Вероятно, проблема в некорректно построенном запросе.

Посмотрите в SQL Profiler, какой запрос идет в базу данных в момент формирования отчета.

Этот же запрос выполнение вручную в SQL Management Studio.

На основе полученной информации можно сделать выводы о причинах подобного поведения отчета.

Показать все комментарии

Добрый день.
Подскажите, можно ли каким нибудь образом использовать custom query в качестве запроса для выборки dataset-а?

Нравится

7 комментариев

Здравствуйте, Михаил.

Custom Query использовать для выборки датасета нельзя.

Но в чем состоит Ваша бизнес-задача?

Что Вы не можете вытащить в SelectQuery, что хотите использовать CustomQuery?

Мне кажется просто удобнее написать запрос в management Studio > ctrl+c > ctrl+v. Датасет готов.
Но да - cq для датасета нельзя использовать :)

Возможно, подойдёт это.

Зато можно использовать View. Причем, не только из базы TS

Спасибо всем за ответы.

"Олейник Дмитрий" написал:

Мне кажется просто удобнее написать запрос в management Studio > ctrl+c > ctrl+v. Датасет готов.

Но да - cq для датасета нельзя использовать :)

С уважением,

Олейник Дмитрий


Для отчетов было бы не плохо иметь такую возможность.
"Владимир Соколов" написал:

Зато можно использовать View. Причем, не только из базы TS


Спасибо.
В моем случае речь идет про отчет, по этому не очень хочется идти по такому пути.
А что значит "не только из базы TS"?

"Кобышев Михаил" написал:А что значит "не только из базы TS"?

Видимо, во вьюхе можно написать join таблиц базы Terrasoft с таблицами других баз.

"Зверев Александр" написал:Видимо, во вьюхе можно написать join таблиц базы Terrasoft с таблицами других баз.

Да, оказалось очень удобно реализовывать детали с помощью User query с помощью такой минимальной интеграции

Показать все комментарии