Добрый день! Помогите решить две проблемы. Создал запрос
[c].[ContractNumber] AS [ContractNumber],
[tbl_Account].[OfficialAccountName] AS [OfficialAccountName],
(SELECT SUM(Amount) FROM tbl_Invoice i WHERE c.ID = i.ContractID GROUP BY i.ContractID) AS [AllInvoiceAmount],
(SELECT SUM(Amount) FROM tbl_Cashflow cs WHERE c.ID = cs.ContractID GROUP BY cs.ContractID) AS [AllCashflowAmount],
((SELECT SUM(Amount) FROM tbl_Cashflow cs WHERE c.ID = cs.ContractID GROUP BY cs.ContractID)
-(SELECT SUM(Amount) FROM tbl_Invoice i WHERE c.ID = i.ContractID GROUP BY i.ContractID)) AS [Ostatok],
(SELECT Amount FROM tbl_Invoice i2
WHERE
InvoiceDate = (SELECT Max(InvoiceDate) FROM tbl_Invoice) AND i2.ContractID = c.ID) AS [LastInvoice],
[tbl_Kladrs].[Name] AS [SubjectName],
[tbl_Account].[Communication1] AS [Communication1],
[tbl_Account].[Communication2] AS [Communication2]
FROM
[dbo].[tbl_Contract] AS [c]
LEFT OUTER JOIN
[dbo].[tbl_Account] AS [tbl_Account] ON [tbl_Account].[ID] = [c].[CustomerID]
LEFT OUTER JOIN
[dbo].[tbl_Kladrs] AS [tbl_Kladrs] ON [tbl_Kladrs].[ID] = [tbl_Account].[SubjectsID]
В данном запросе выбираются все счета и оплаты по договору и разница между ними. Создал по данному запросу датасет в котором создал строковые колонки для числовых данных так как если счета есть а оплат нету по договору то разница получалось 0 что было некорректно для пользователя так как долг получался 0 и он терялся. Было все хорошо но при выгрузке данного реестра в Excel стандартной функцией выгрузки на значек "Дискеты" в полях Excel перед числом ставиться опостров что не позволяет работать с числами. Как можно решить данную проблему??? Есть вариант сделать свою выгрузку в Excel но возможно есть другой вариант?
Нравится
Иван, я так понимаю, Вы используете CustomSQL-колонку в запросе для подсчёта разницы?
А если попробовать применить для каждой суммы в колонке функцию ISNULL? В результате должно получиться примерно так:
SELECT [c].[ContractNumber] AS [ContractNumber], [tbl_Account].[OfficialAccountName] AS [OfficialAccountName], (SELECT SUM(Amount) FROM tbl_Invoice i WHERE c.ID = i.ContractID GROUP BY i.ContractID) AS [AllInvoiceAmount], (SELECT SUM(Amount) FROM tbl_Cashflow cs WHERE c.ID = cs.ContractID GROUP BY cs.ContractID) AS [AllCashflowAmount], ((SELECT ISNULL(SUM(Amount), 0) FROM tbl_Cashflow cs WHERE c.ID = cs.ContractID GROUP BY cs.ContractID) -(SELECT ISNULL(SUM(Amount), 0) FROM tbl_Invoice i WHERE c.ID = i.ContractID GROUP BY i.ContractID)) AS [Ostatok], (SELECT Amount FROM tbl_Invoice i2 WHERE InvoiceDate = (SELECT Max(InvoiceDate) FROM tbl_Invoice) AND i2.ContractID = c.ID) AS [LastInvoice], [tbl_Kladrs].[Name] AS [SubjectName], [tbl_Account].[Communication1] AS [Communication1], [tbl_Account].[Communication2] AS [Communication2] FROM [dbo].[tbl_Contract] AS [c] LEFT OUTER JOIN [dbo].[tbl_Account] AS [tbl_Account] ON [tbl_Account].[ID] = [c].[CustomerID] LEFT OUTER JOIN [dbo].[tbl_Kladrs] AS [tbl_Kladrs] ON [tbl_Kladrs].[ID] = [tbl_Account].[SubjectsID]
Потом в датасете заменить строковое поле на поле с дробным значением, и в Excel сразу будет экспортироваться числовое значение.
Спасибо Олег! Стыдно стало но я не знал что есть такая функция.:smile:
И еще вопрос к это же теме. Созданное для этого запроса окно почему то не сохраняет индивидуальные настройки колонок. То есть я убираю некоторые колонки закрываю окно вновь открываю и они сново появляются. Есть как я понял механизм сохранения настроек??
Вы установили этому окну свойство UseProfile равным true?
Олег что то функция IsNull не работает. Версия сервера MS SQL 2008 ?
А я понял надо перед select поставить
ISNULL((select SUM(AMOUNT) ....),0)- ISNULL(...)
Первая проблема решена. А по поводу сохранение окна установил свойство UseProfile равным true но это не помогло.
Вызов происходит вот так
function amiInvoiceInCashfloweOnExecute(ActionMenuItem, Sender) { var InvoiceInCashfloweWin = Services.GetNewItemByUSI('wnd_InvoiceInCashflowe'); InvoiceInCashfloweWin.Prepare(); InvoiceInCashfloweWin.Show() }
Попробуйте заменить Services.GetNewItemByUSI('wnd_InvoiceInCashflowe') на GetSingleItemByCode('wnd_InvoiceInCashflowe'). Services.GetNewItemByUSI создаёт новый экземпляр объекта по шаблону из конфигурации, соответственно, набор колонок всегда будет таким, как его сохранили в Terrasoft Administrator.