Метки записи: |
Добрый день! подскажите создал отчет с шаблоном в Word нужно просклонять в родительный падеж ФИО и должность руководителя. Видел есть библиотека склонения в каком то посте на Community но не знаю как сделать именно для отчета Word???
Комментарии
здесь было http://community.terrasoft.ua/developer/solutions/4800
Иван, отчёт строится на основании пользовательского запроса?
Если да, в таком случае можно поступить так, например:
1) Создать в таблице контактов дополнительные поля для родительного падежа ФИО и должности.
2) Перед сохранением записи (например, в обработчике dlDataOnDatasetBeforePost) заполнять эти поля, используя функцию склонения.
3) Для уже существующих записей создать действие в Terrasoft или MS SQL, заполняющее эти поля для каждого контакта, и разово его выполнить.
4) Использовать эти поля в пользовательском запросе для отчёта.
Если Вы строите отчёт с помощью другого механизма (например, полностью формируете его в своём скрипте), можно использовать функции склонения непосредственно перед записью в соответствующее поле отчёта.
С уважением,
Олег Лабьяк,
инженер-программист,
группа компаний Terrasoft.
Олег я тоже думал по поводу дополнительных полей. Буду делать тогда так. просто я думал можно где то в скрипте формирования отчета в Word что нибудь изменить.
Конфигурация:
TSCRM 3.3.1.67
Microsoft SQL Server 2008 R2 (v.10.50.1600.1)
ClientOS: Windows XP
ServerOS: Windows 2008 Server
Единственная проблема что всем пользователям на разных машинах придется библиотеку ставить.
Конфигурация:
TSCRM 3.3.1.67
Microsoft SQL Server 2008 R2 (v.10.50.1600.1)
ClientOS: Windows XP
ServerOS: Windows 2008 Server
Добрый день, Иван.
Ставить библиотеку каждому пользователю не так уж сложно. Помещаете ее в папку Bin, указываете ее в файле RunSettings.xml, и при регистрации библиотек данная библиотека будет так же зарегистрирована. Подробно процедура описана по ссылке выше.
А можно ли данную библиотеку каким нибудь образом прикрутить к самому MS SQL Server и в триггере или с помощью какого либо другого механизма вставлять значения в поле??
Конфигурация:
TSCRM 3.3.1.67
Microsoft SQL Server 2008 R2 (v.10.50.1600.1)
ClientOS: Windows XP
ServerOS: Windows 2008 Server
погуглив http://technet.microsoft.com/ru-ru/library/ms164653.aspx
надо только библиотеку свою видимо сделать, которая обращалась бы к Padeg.dll... а потом ее и вызывать
я нашел как это сделать. уже есть готовая библиотека
вот ссылка кому может пригодиться http://www.delphikingdom.com/zip/pd_Sample.zip
Осталось придумать как сделать триггер который бы вставлял значение в зависимости от введенного ФИО и пола?
Конфигурация:
TSCRM 3.3.1.67
Microsoft SQL Server 2008 R2 (v.10.50.1600.1)
ClientOS: Windows XP
ServerOS: Windows 2008 Server
Если делать доп. поле то можно и триггер на Update и Insert в tbl_Contact, или ХП, вызываемую при сохранении карточки контакта.
вот у меня пока обратиться к ней из ХП не получилось...
Можно создать триггер For Update для таблицы tbl_Contact, который будет содержать условие:
BEGIN
...
END
а внутри условия вызывать функции из библиотеки.
С уважением,
Олег Лабьяк,
инженер-программист,
группа компаний Terrasoft.
вот тут самое интересное:)
Я очень плохо знаком с созданием триггеров. Помогите сориентироваться
ON tbl_Contact
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF UPDATE(Name) OR UPDATE(GenderID)
/// здесь как то нужно получить если это Ж то 2 если М то 1
Exec [master].dbo.GetFIOPadegFS 'Значение поля ФИО', 1, 2, @res output
/// и как то присвоить занчение в новое поле
END
GO
данный триггер будет работать при добавлении и изменении данных? и как поправить триггер согласно комментариям??
Конфигурация:
TSCRM 3.3.1.67
Microsoft SQL Server 2008 R2 (v.10.50.1600.1)
ClientOS: Windows XP
ServerOS: Windows 2008 Server
Думаю, примерно так:
ON tbl_Contact
FOR UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF UPDATE(Name) OR UPDATE(GenderID)
BEGIN
/// здесь как то нужно получить если это Ж то 2 если М то 1
declare @GenderNum int
declare @GenderID uniqueidentifier
declare @Name nvarchar(250)
SET @GenderID = (SELECT GenderID FROM [Inserted])
SET @Name = (SELECT Name FROM [Inserted])
IF @GenderID = '{<Здесь вставить ID для мужского пола>}' SET @GenderNum = 1
ELSE SET @GenderNum = 2
Exec [master].dbo.GetFIOPadegFS @Name, @GenderNum, 2, @res output
/// и как то присвоить занчение в новое поле
UPDATE tbl_Contact SET NameGen = @res
WHERE tbl_Contact.ID = [Inserted].[ID]
END
END
GO
Триггер точно будет работать при изменении данных. Думаю, для добавления можно создать такой же, только FOR INSERT и без условия IF UPDATE(...)
С уважением,
Олег Лабьяк,
инженер-программист,
группа компаний Terrasoft.
ругается на строку tbl_Contact.ID = [Inserted].[ID]
Сообщение 4104, уровень 16, состояние 1, процедура UpdateNameGenetive, строка 27
Не удалось привязать составной идентификатор "Inserted.ID".
Конфигурация:
TSCRM 3.3.1.67
Microsoft SQL Server 2008 R2 (v.10.50.1600.1)
ClientOS: Windows XP
ServerOS: Windows 2008 Server
Извиняюсь, попробуйте так:
FROM [Inserted]
WHERE tbl_Contact.ID = [Inserted].[ID]
С уважением,
Олег Лабьяк,
инженер-программист,
группа компаний Terrasoft.
Спасибо Олег заработало. Я думаю еще нужно добавить проверку на пустые значения пола ?
Конфигурация:
TSCRM 3.3.1.67
Microsoft SQL Server 2008 R2 (v.10.50.1600.1)
ClientOS: Windows XP
ServerOS: Windows 2008 Server
Извиняюсь ошибочка вышла. триггер создался без ошибок но при обновлении записи пишет что первый параметр функции не является строкой??
Конфигурация:
TSCRM 3.3.1.67
Microsoft SQL Server 2008 R2 (v.10.50.1600.1)
ClientOS: Windows XP
ServerOS: Windows 2008 Server
Да, будет не лишней :). Либо можно обрабатывать пустой пол как мужской. Но для этого придётся заменить строки
ELSE SET @GenderNum = 2
на такие:
ELSE SET @GenderNum = 1
С уважением,
Олег Лабьяк,
инженер-программист,
группа компаний Terrasoft.
Все разобрался. нужно за место
написать
всем спасибо
Конфигурация:
TSCRM 3.3.1.67
Microsoft SQL Server 2008 R2 (v.10.50.1600.1)
ClientOS: Windows XP
ServerOS: Windows 2008 Server
А можно выбирать значения с присоединенной таблицы?? мне еще же нужно должность просклонять а название должности находиться в справочники tbl_Job
LEFT OUTER JOIN
tbl_Job AS j ON j.ID = [Inserted].JobID )
Конфигурация:
TSCRM 3.3.1.67
Microsoft SQL Server 2008 R2 (v.10.50.1600.1)
ClientOS: Windows XP
ServerOS: Windows 2008 Server
Да, Вы можете использовать любые другие таблицы системы и строить различные запросы, как обычно. Просто в триггере есть дополнительная возможность получать только что вставленные значения (из таблицы Inserted) и те, которые были до изменения (из таблицы Deleted).
С уважением,
Олег Лабьяк,
инженер-программист,
группа компаний Terrasoft.
Запустил триггер в рабочую базу. А нельзя ли изменить как нибудь старые значения которые уже были забиты в БД??
Конфигурация:
TSCRM 3.3.1.67
Microsoft SQL Server 2008 R2 (v.10.50.1600.1)
ClientOS: Windows XP
ServerOS: Windows 2008 Server
Можно курсором пройтись по всем записям в таблице и обновить значения в поле. Например, так:
declare @ContactName varchar(250)
declare @GenderID uniqueidentifier
declare @GenderNum int
declare @res varchar(250)
declare c_Contact cursor FOR
SELECT ID, Name, GenderID FROM tbl_Contact
open c_Contact
while 1 = 1
begin
fetch next FROM c_Contact INTO @ContactID, @ContactName, @GenderID
IF @@fetch_status = -1 break
IF @@fetch_status = -2 continue
IF @GenderID = '{<Здесь вставить ID для женского пола>}' SET @GenderNum = 2
else SET @GenderNum = 1
Exec [master].dbo.GetFIOPadegFS @ContactName, @GenderNum, 2, @res output
UPDATE tbl_Contact SET NameGen = @res
WHERE tbl_Contact.ID = @ContactID
end
close c_Contact
deallocate c_Contact
С уважением,
Олег Лабьяк,
инженер-программист,
группа компаний Terrasoft.
Спасибо большое все получилось!
Конфигурация:
TSCRM 3.3.1.67
Microsoft SQL Server 2008 R2 (v.10.50.1600.1)
ClientOS: Windows XP
ServerOS: Windows 2008 Server
Небольшой update темы. Данное решение не удалось запустить на Windows 2003 64 bit
Судя по странице авторов, нужно пересобирать padeg.dll и "обертку" xp_padeg.dll
Обратите внимание - ссылка изменилась: http://www.community.terrasoft.ru/developer/faq/4800
С уважением, Анна Алимова
Специалист II линии технической поддержки Terrasoft