Поставили задачу всегда выводить просроченные задачи в гриде "все задачи", т.к. не пользователи проверяли просроченные задачи в соответствующей вкладке и теряли их из виду.
Вот как я решил эту проблему:
1. В сервисе sq_Task в ветке where - TaskPeriods - TaskDate выставил логические операторы OR
2. В наборе фильтров TaskDate создал еще два набора фильтров TaskDateNew, с логическим оператором AND, и OverDue - с логическим оператором AND
3. В наборе фильтров TaskDateNew я создал фильтр сравнения TaskStartLessThanToDate с условием tbl_Task.StartDate < Parameter: ToDate
4. В наборе фильтров TaskDateNew создал еще один набор фильтров TaskEndFilter - с логическим оператором OR
5. В наборе фильтров TaskEndFilter создал фильтр сравнения TaskDueDateMoreThanStartDate c условием: tbl_Task.DueDate >= Parametr: StartDate
6. Теперь выводим просроченные задачи. В наборе фильтров TaskDate создаем набор фильтров OverdueTasks с логическим оператором AND
7. В наборе фильтров OverdueTasks создаем 2 фильтра сравнения: TimeOverdue (с условием - tbl_Task.DueDate < Parameter: CurrentDay) и NotFinished ( с условием tbl_Task.IsFinish < > Parameter: IsFinish)
Простая манипуляция, но может кому-то пригодится :)
| snimok-2011-12-05_141419.png | 157.24 кб |
Метки записи: |
Необходимо добавить новый справочник в систему.
Для создания нового справочника необходимо выполнить следующие шаги. Для примера создадим справочник [Предпочтения контактов].
1. Создать группу сервисов в нужном модуле системы, например, в группе Common\Dictionaries.
2. В созданной группе создать таблицу справочника, указать название, например, tbl_ContactPreference. Указать значение свойства «Группа таблиц» = «Все справочники». Создать в таблице поля Name и Description типа строка Unicode, указать заголовки полей. Сохранить и закрыть сервис таблицы.
3. В созданной группе создать запрос sq_ContactPreference, указать From Table = tbl_ContactPreference добавить колонки ID, Name, Description.
Добавить параметр типа «Уникальный идентификатор» с именем ID. Добавить фильтр сравнения с кодом ID и выражением сравнения: в левой части tbl_ContactPreference.ID, в правой параметр ID. Выключить фильтр.
4. Создать сервис набора данных (Dataset) с кодом ds_ContactPreference и заголовком «Предпочтения контакта». Указать запрос на выборку равным sq_ContactPreference. Добавить 3 поля типа Строка – ID, Name, Description. Для поля Name установить признаки «Поле для поиска», «Поле для отображения», для поля Description установить признак «Поле для отображения». Для набора данных установить свойства «Ключевое поле» = ID, Первичное поле для отображения = Name.
5. Зарегистрировать справочник в системе. Для этого запустить клиентское приложение TSCRM.exe, выбрать пункт меню «Файл» - «Справочники» - «Настройка справочников», выбрать нужный пункт списка (например, [Общие справочники]), нажать [Добавить справочник]. Указать значения «Заголовок» = «Предпочтения контактов», «Источник данных» = «Предпочтения контакта».
Для простых справочников с составом полей ID, Name, Description указывать окно редактирования не нужно, будет использовано стандартное окно для таких справочников (wnd_SingleFieldEdit). В случае если Ваш справочник содержит иной состав полей, необходимо создать для него сервис окна редактирования и указать созданное окно в поле «Окно редактирования» карточки регистрации справочника.
6. Перезапустить клиентское приложение, убедиться в наличии и работоспособности справочника.
Данные операции можно осуществить автоматически. В меню «Файл» - «Справочники» - «Настройка справочников» выбрать пункт [Создать справочник], указать необходимые значения и состав полей. В результате требуемый справочник будет создан и зарегистрирован в системе. За подробной инструкцией по использованию механизма автоматизированного создания справочников см. документ «Руководство администратора».
Метки записи: |
Перенос справочников Номенклатуры с ценами и сопутствующими справочниками и контрагентов со всеми сопутствующими данными и справочниками.
Инструкция в прикрепленном файле.
Тем кого заинтересует могу выслать тестовый вариант на е-мейл.
Обработка универсальна и также может быть переделана под нетиповые конфигурации 1С и базы данных Terrasoft.
| Инструкция по использованию обработки.doc | 261.5 кб |
Метки записи: |
Требуется поддерживать интерфейс отраслевого решения на двух (или более) языках.
В общем случае для перевода отраслевого решения на другой язык требуется:
Идея решения такова:
Итак, первый шаг - добавляем в конфигурацию новый сервис-скрипт, в котором определяем функцию инициализации:
Функция создает объект LangResource (который будет храниться в атрибутах объекта Connector), и загружает в него строковые константы в зависимости от языка интерфейса. Обратите внимание на то, что название констант состоит из двух частей, разделенных точкой. Первая часть - код окна/датасета, вторая - код компонента/поля. Кроме того, общие константы имеют префикс Common и CommonDataset соответственно.
Далее, в этом же скрипте определяем функции для локализации окна и датасета:
Эти функции получают на входе ссылку на окно/датасет, и используя глобальный объект LangResource, заменяют заголовки.
Финальный штрих - в скрипте scr_Main надо добавить использование нашего скрипта и вызов функции LocalInit, а в скриптах scr_BaseEdit, scr_BaseDBEdit, scr_BaseGridArea и scr_BaseWorkspace - использование скрипта и вызов функций SetWindowLanguage и SetDatabaseLanguage
Метки записи: |
Необходимо каждые 15 минут забирать с сайта данные о заказах. Информация о заказах хранится на сайте в виде xml файла доступного через http.
Для реализации функционала был создан на сервере job + процедура, написанная на С#, которая забирала данные с сайта.
Текст процедуры
Метки записи: |
Раздел из трех гридов, содержащих дерево.
Так как стандартное дерево не содержит ограничение выводимых строк, а объем данных превышает десятки тысяч, стал актуален вопрос постраничного просмотра дерева, возможность фильтрации и сортировки.
Решение получилось довольно простым.
Создается копия датасета дерева, с ограничением ParentID = null. Все действия производятся над этим датасетом. Датасет дерева на BeforeOpen считывает результат этого датасета, и заполняет IncludeFilter.
Метки записи: |
Задача заключается в выборе нескольких значения из справочника в lookup control. Часто такая задача возникает, если нужно создать свою форму фильтрации для отчета.
Создаем в окне LookupControl и DatasetLink. В свойстве Dataset DatasetLink'а выбираем сервис набора данных, из которого хотим делать выбор. В свойстве LookupDatasetLink LookupControl'а указываем созданный DatasetLink, в свойстве SelectWindowUSI указываем wnd_MultiSelectData. Создаем обработчики события окна OnNotify и события LookupControl'а OnPrepareSelectWindow со следующим наполнением (пример на основе справочника "Ответственные"):
| TestMultiLookup.rar | 2.47 кб |
Метки записи: |
Задача заключалась в том чтобы добавить в раздел "Документы" пользовательские фильтры - все поля раздела "Продукты" (получилось бы что-то около 30 пользовательских фильтров)
Так как фильтры похожи , отличаются только по типу поля , то я написал скрипт который динамически добавил фильтры , а потом сохранил сервис
Метки записи: |
Необходимо, чтобы в основном реестре раздела "Задачи" отражались поля прикреплённого к нему продукта (связь один к одному), т.е. в случае, если пользователь когда-нибудь в будущем создаст пользовательское поле в разделе "Продукты", это поле должно попасть в раздел "Задачи".
Оказалось всё просто:
в сервисе uf_Offerings добавил ds_Task и
wnd_TasksGridArea(grd_Data)соответственно для датасета и окна основного грида раздела "Задачи".
Однако, столкнулся с одной проблемой:
при добавлении полей в SelectQuery раздела "Задачи" поле привязывается к основной таблице SelectQuery, и для справочников таблицы джойнятся на основную таблицу.
Пришлось дописывать базовую логику скрипта scr_WndUserFieldsEdit
Метки записи: |
Очень часто возникает ситуация, когда позарез нужно узнать, какие фильтры есть в запросе или какие поля есть в датасете. Каждый раз пользоваться администратором надоедает хотя бы потому, что оба приложения (администратор и клиент) при одновременном использовании прилично грузят систему.
Как известно, программисты люди большей частью ленивые и нередко думают над тем, как бы сделать это так, чтобы потом ничего не делать. Заглянув в таблицу tbl_Service я не нашел для себя ничего удивительного - вот они, сервисы. Только формат, в котором они хранятся не структурирован.
Ну, что ж делать - лень двигатель прогресса. Пришлось вспоминать азы программирования в среде Visual Studio, но вскоре, я все-таки сделал то, что хотел.
Вуаля - структура как на ладони.

Раздел с набором всех сервисов

Структура сервиса
Метки записи: |
В карточке редактирования wnd_...Edit предлагается выделять Caption визуальных контролов для полей Dataset-а с признаком "Только для чтения" цветом, отличающимся от цвета остальных полей, например, зеленым, или выставлять IsEnabled = false - чтобы пользователи не путались в какое поле можно вводить данные.
Метки записи: |
Достаточно часто возникает потребность выводить в отчете сумму не только в числовой форме, но и прописью. Такой отчет можно непосредственно использовать как приложение к официальным документам без необходимости дополнительной корректировки.
Для выполнения задачи вывода суммы прописью можно воспользоваться скриптом scr_ConvertUtils, функцией AmountToStr(), пример вызова которой представлен ниже:
function
var MyNumber = 3.62;
var MyNumberStr = MyNumber.toString();
Log.Write(1, 'Сумма прописью: ' + AmountToStr(MyNumberStr, 'ru', 'RUR'));
}
В любом скрипте конфигурации можно реализовать данный пример, для запуска достаточно нажать F9. В результате появится окно лога и сообщение "Сумма прописью: Три рубля шестьдесят две копейки".
В обработчике события OnDatasetCalcFields набора данных отчета нужно использовать вызов AmountToStr для получения строкового значения для числа, взятого из поля набора данных, и поместить результат в созданное вычисляемое поле:
function dsMyReportOnCalcFields(Dataset) {
var Value = Dataset.ValAsFloat('MyFloatField');
var ValueStr = Value.toString();
ValueStrRUR = AmountToStr(ValueStr, 'ru', 'RUR'));
Dataset.Values('MyFieldStr') = ValueStrRUR;
}
Скрипт scr_ConvertUtils должен быть включен в состав используемых скриптов в скрипте набора данных отчета.
Метки записи: |
В процессе реализации проектных решений зачастую необходимо формировать индивидуальные формы отчета согласно потребностям Заказчика.
В модуле [Common] создать группу [Reports]
[fr_ReportCitiesByCountry]
Запустить отчет (меню «Отчеты» - «Города в разрезе стран»).
Метки записи: |
В разделе необходимо создать дополнительную деталь.
В качестве примера создания детали продемонстрируем создание детали [Регистрационные документы] в разделе [Контакты]. Данная деталь предназначена для хранения информации о паспортных данных и прочих документах контакта.
Для создания детали необходимо выполнить следующие шаги:
1. В модуле Contacts найти группу Details. Создать в ней группу сервисов RegDocuments.
2. В созданной группе создать таблицу tbl_ContactRegDoc. Добавить поля ContactID (тип «Уникальный идентификатор»), Title (тип Строка Unicode), RegDate (тип Дата), Description (тип Строка Unicode). В списке Relations создать новый внешний ключ, указать поле первичного ключа – tbl_Contact.ID, вторичный ключ – ContactID. Сохранить и закрыть сервис таблицы.
3. В созданной группе создать запрос sq_ContactRegDoc. Указать From Table = tbl_ContactRegDoc, создать колонки ID, ContactID, Title, RegDate, Description. Создать параметры ID и ContactID (оба с типом «Уникальный идентификатор»). Создать два выключенных фильтра сравнения, первый с кодом ID и выражением tbl_ContactRegDoc.ID = параметр ID, второй с кодом ContactID и выражением tbl_ContactRegDoc.ContactID = параметр ContactID.
4. Создать набор данных ds_ContactRegDoc, указать запрос на выборку sq_ContactRegDoc, создать поля ID, ContactID, Title, Description (тип Строка) и RegDate (тип Дата), указать соответствующие полям заголовки. Установить ключевое поле набора данных равным ID.
5. Для реализации окна реестра детали необходимо создать окно с кодом wnd_ContactRegDocGridArea. Указать значение в свойстве TemplateWindowUSI = wnd_BaseGridArea. Сохранить и закрыть сервис окна. Затем открыть сервис окна, в нем появились унаследованные от шаблона wnd_BaseGridArea элементы.
6. На вкладке «Невизуальные» окна редактирования для компонента dlData в свойстве Dataset установить значение ds_ContactRegDoc. Затем на вкладке «Визуальные» для компонента grdData добавить представление DataGridView, нажать правой кнопкой и выбрать пункт [Определить колонки]. В появившемся списке выбрать поля Title, RegDate, Description. Для компонента grdData установить значение свойства ActiveView равным DataGridView.
7. Для окна на вкладке «События» стереть существующий обработчик события OnPrepare и с помощью двойного щелчка мыши создать новый. Реализовать следующий код:
Window.Attributes('EditWindowUSI') = 'wnd_ContactRegDocEdit'
scr_BaseGridArea.wnd_BaseGridAreaOnPrepare(Window);
}
Сохранить и закрыть скрипт и окно реестра детали.
9. На вкладке «Невизуальные» окна редактирования для компонента dlData в свойстве Dataset установить значение ds_ContactRegDoc. Затем на вкладке «Визуальные» для компонента frmData добавить компонент TextDataControl, DateTimeDataControl и еще один TextDataControl. Установить имена компонентам edtTitle, edtRegDate и edtDescription соответственно. Задать элементам управления значения свойства DatasetLink значением dlData. Задать элементам управления значения свойства DataFieldName значениями Title, RegDate и Description соответственно. Задать компонентам значение свойства AlignHorizontal равным alhClient, чтобы компоненты заняли все доступное по горизонтали свободное место на окне.
10. Задать окну значение свойства WindowCaption равным «Регистрационный документ». Сохранить и закрыть сервис окна.
11. Открыть сервис wnd_ContactsWorkspace. Для компонента pcDetails по аналогии с существующими деталями добавить Page, Frame и WindowContainer. Указать имена компонентов pgContactRegDocDetail, fmContactRegDocDetail и wndContactRegDocDetail соответственно. Для компонента pgContactRegDocDetail указать заголовок «Регистрационные документы». Для компонента wndContactRegDocDetail указать свойство Window = wnd_ContactRegDocsGridArea, а также свойства AlignHorizontal и AlignVertical установить в alhClient и alvClient соответственно. В итоге получаем окно реестра регистрационных документов, встроенное в страницу области деталей раздела.
Сохранить и закрыть сервис окна wnd_ContactsWorkspace.
...
} else
if (pcDetails.ActivePage.Name == pgContactRegDocDetail.Name) {
RefreshCommonDetail(BaseWorkspace, wndContactRegDocDetail, 'ContactID', 'ContactID');
}
}
Сохранить и закрыть сервис скрипта. Запустить клиентское приложение, протестировать и при необходимости отладить работу детали.
Метки записи: |
Необходимо загрузить фото в карточку Контакта.
Для реализации задачи отображения фото в карточке контакта необходимо выполнить следующие шаги:
1. Создать в таблице tbl_Contact поле Photo типа «Большой бинарный объект». В запросе sq_Contact необходимо создать колонку Photo, в наборе данных ds_Contact создать поле Photo типа Большой бинарный объект. В поле Photo будет сохраняться изображения фото контакта.
Реализовать обработчик нажатия на кнопку следующим образом:
function btnLoadPhotoOnClick(Control) {
var FileName = GetNewValue();
if (System.OpenDialog(FileName, '', '', '', '')) { // Показ диалога выбора файла с фото
dlData.Dataset.DataFields('Photo').LoadFromFile(FileName.Value); // Загрузка изображения из файла в поле данных
}
}
Теперь при показе окна редактирования в элементе управления ImageDataControl будет отображаться файл с фото контакта в формате JPG. Загрузить новое изображение можно по нажатию на кнопку [Загрузить фото].
Метки записи: |

| Пн | Вт | Ср | Чт | Пт | Сб | Вс |
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | ||||
| Пн | Вт | Ср | Чт | Пт | Сб | Вс |
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | ||||
|
|
Создание конфигураций на базе Terrasoft XRM | |
|
|
Функциональные возможности и Бизнес-внедрение Terrasoft XRM | |
|
|
Online курс по функциональности и внедрению Terrasoft XRM |
|
|
Создание конфигураций на базе Terrasoft XRM | |
|
|
Функциональные возможности и Бизнес-внедрение Terrasoft XRM | |
|
|
Online курс по функциональности и внедрению Terrasoft XRM |