Добрый день. Помогите, пожалуйста в решении следующего вопроса.

Есть продажа, на основании которой создан документ(в таблице документа указан ID продажи, на основании которой он создан). В карточке документа отображается стадия это продажи (создан запрос и датасет, который отображает стадию продажи, тип поля датасета "Поле справочника", источник - датасет Стадий, колонка - ID стадии из таблицы продажи).

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

Спасибо.

Нравится

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

Здравствуйте, Дмитрий!

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

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

Пример описан в соседней теме: http://www.community.terrasoft.ua/forum/topic/6516

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

Спасибо. Описанный способ знаю.
Поле добавлено как справочник

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

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

А возможен ли вывод трех независимых значений одного справочника в документе?

Нравится

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

Конечно. Самый простой способ в этом убедится - создать 3 пользовательских поля со ссылкой на один справочник.

Создаватся три поля создаются, но в документе у всех трех одно значение показывают. Может есть какая хитрость при создании.

А где показывают одно и то же значение, в гриде или форме редактирования?
Если действительно добавили три поля, то видимо колонки грида или компоненты на форме редактирования у вас связаны с одним и тем же полем.

Лабитек
Центр разработки приложений

До "компонентов на форме" я еще не дошел. Это Main Grid. Поля разные проверил в SQL Server Management Studio Express

А как вообще создаете поля, вручную или через меню "Пользовательские поля" ?

Если вручную, то проверьте сервис sq_ - может там выбираете одно поле из таблицы под разными псевдонимами.

Лабитек
Центр разработки приложений

В меню пункта "Пользовательские поля" у меня нет. (я предполагаю это поля которые я создаю в стандартной конфигурации?) Создаю при нажатии правой кнопки мыши по существующему полю и выбираю "Поле". В сервисе "sq_Document" выбираю разные поля, по аналогии с другими справочниками формирую сервисы "ds_Document" и "wnd_DocumentEdit". Но при всех потугах удаеться только либо все три поля в документе одинаковые или два последних не работают вообще.

Попробуйте сначала одно поле добавить, чтобы оно заработало как надо.
Также рекомендую посмотреть вебинар для разработчиков, чтобы понимать основы - на этой странице:
http://community.terrasoft.ua/webinar
Возможности платформы Terrasoft (для разработчиков).

Лабитек
Центр разработки приложений

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

Здравствуйте,

в разделе Документы в закладках Подчиненный/Родительский документ при добавлении нового документа необходимо в карточке выбора документа отобразить колонку "Контрагент".

Как это сделать?

Нравится

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

В скрипте wnd_DocumentInDocumentGridAreaScript есть функция AddDocument(), внутри нее вызывается AddData(), первым параметром которой и передаются отображаемые поля. Вам нужно указать 'Title;AccountID'.

Спасибо, Ольга!
Небольшая поправочка: указать AccountID нужно уже внутри AddData(), а именно вот здесь:

function AddData(DisplayFieldName, SubjectFieldName, SelectDataDatasetUSI) {
var DisplayFieldNames =
		FormatStr('%1;OwnerID;AccountID', DisplayFieldName);
	var SearchFieldNames =
		FormatStr('%1;OwnerID;AccountID', DisplayFieldName);
...

www.informicus.ru

В этом случае колонка появится и в окнах выбора подчиненных/ родительских счетов и договоров, а Вы спрашивали про документы.

Ну это лишним не будет.
А при добавлении AccountID в параметр у меня ошибки вылетали.

www.informicus.ru

Прошу прощения, не учла, что SearchFieldName в AddData() нужно по-другому вычислять.

var SearchFieldName = DisplayFieldNames.substr(0, DisplayFieldNames.indexOf(';'));

Да-да, оно.спасибо!

www.informicus.ru

"Раловец Ольга" написал:В этом случае колонка появится и в окнах выбора подчиненных/ родительских счетов и договоров, а Вы спрашивали про документы

Полностью согласен! Лучше добавить по-отдельности поля в AddDocument, AddInvoice и AddContract - так при изменении каких либо полей можно легко изменять параметр для каждого дока:smile:
Спасибо за вопрос и ответ:twisted:

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

Во многих компаниях, ведущих интенсивную работу с документами, существует потребность в сканировании документов прямо из системы Terrasoft. Для решения такой бизнес задачи в компании Лабитек была разработана специальная библиотека, которая может быть быстро добавлена в любой раздел системы.

Данная библиотека использует для полученного документа стандартную закладку "файлы". При этом для добавления сканирования Вам будет необходимо добавить всего одну строку кода!

Например:
function btnScanOnClick(Control) {
Scan('iq_FileInDocument', 'DocumentID', dlData.Dataset.Values('ID'));
}

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

Нравится

Поделиться

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

Как можно получить эту библиотеку?

Приложил библиотеку к сообщению в блоге. Также информация по сканированию (альтернативный вариант) доступна по ссылке: http://community.terrasoft.ua/node/2324

Горелов Виталий
Компания Лабитек

Виталий,
а библиотека от Лабитек потдерживает какие-то определённые сканеры?
Просто хотелось бы определится с выбором (Лабитек или WIA).
В компании три сканера, два новеньких самсунга и один древненький МФУ XEROХ...
--------------------
UPDATE:
В первом посте вложена версия для X15
Покопавшись немного выкладываю адаптированный сервис под 3.3.х

Позволю себе ответить за Виталия - библиотека использует TWAIN, а со сканерами обычно ставится драйвер поддержки, скорее всего и для древненького есть :) В общем пробуйте.
--------------------------------------------
Лабитек
Центр разработки приложений

2Валерий, спасибо большое)
Уже разобрался когда копался с переделкой...
---
Конфигурация:
TSCRM 3.3.1.59
Firebird 2.0 (v.2.0.3.12981)
ClientOS: Vista Home Premium
ServerOS: Windows 2003 Server

А, извиняюсь, не сообразил :)
--------------------------------------------
Лабитек
Центр разработки приложений

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

Здравствуйте!!
в террасофте реализована следующая функциональность:
1. В разделе Продукты есть вкладка Цены, на которой можно указать оптовую и розничную цену (в деньгах)
2. В разделе Контрагенты есть вкладка Типы цен, на которой можно указать оптовую и розничную цену в датах
3. В раздел Счета добавить новый счет и указать дату, которая бы попадала в какой либо из промежутков дат, указанных в разделе Контрагенты. Затем создать на вкладке счетов Продукты новую запись. В результате в атрибут Цена карточки Продукты по счету автоматически подставляется тот тип цены из раздела Продукты, дата которого указана в карточке счета...

Мне нужно реализовать тоже только для раздела Документ. Подскажите какие скрипты и функции смотреть, где это реализовано для счета.

С уважением, Гашникова Екатерина

Нравится

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

Добрый день!

Спасибо за Ваш вопрос.

Для того, чтобы реализовать запрашиваемую Вами функциональность Вам необходимо сделать изменения в скрипте scr_OfferingUtils в функции SetValuesByPriceType по аналогии c реализацией для раздела Счета.
В разделе Счета данная функциональность реализована в функции DataChange, которая вызывается на событие SelfOnDatasetDataChange для ds_OfferingInInvoiceScript.

В функции SetValuesByPriceType реализована функциональность работы с ценами для разделов Счета, Проекты, а именно работа с ценами на закладке Продукты Менеджера деталей соответствующего раздела.

Будем рады ответить на все Ваши вопросы.

Terrasoft Support Team

так поняла, что за вставку цен в продукт по счету отвечает функция SetValuesByPriceType внутри scr_OfferingUtils.
для решения своей задачи попробовала заменить везде в этой функции InvoiceID на DocumentID.
получилось следующее:
function SetValuesByPriceType(Dataset, ScriptObject) {
if (ScriptObject.WorkspaceFieldName == 'DocumentID') {
if (!Assigned(scr_OfferingUtils.AccountIDDocument)) {
var DocumentID = Dataset.Values('DocumentID');
scr_OfferingUtils.AccountIDDocument = GetDocumentParameterByDocumentID(
DocumentID,'AccountID');//CustomerID
scr_OfferingUtils.CurrenDateDocument = GetDocumentParameterByDocumentID(
DocumentID,'Date');
}
var AccountID = scr_OfferingUtils.AccountIDDocument;
var CurrentDate = scr_OfferingUtils.CurrenDateDocument;
} else if (ScriptObject.WorkspaceFieldName == 'OpportunityID') {
if (!Assigned(scr_OfferingUtils.AccountIDOpportunity)) {
var OpportunityID = Dataset.Values('OpportunityID');
scr_OfferingUtils.AccountIDOpportunity = GetOpportunityParameterByOpportunityID(
OpportunityID,'CustomerID');
scr_OfferingUtils.CurrenDateOpportunity = GetOpportunityParameterByOpportunityID(
OpportunityID,'StartDate');
}
var AccountID = scr_OfferingUtils.AccountIDOpportunity;
var CurrentDate = scr_OfferingUtils.CurrenDateOpportunity;
} else
return false;
var PriceCategoryID = GetPriceTypeOfferingByAccountID(AccountID, CurrentDate);
if (!IsEmptyValue(PriceCategoryID)) {
var ResultArray = GetOfferingPriceByPriceCategoryID(PriceCategoryID,
Dataset.Values('OfferingID'));
if (!IsEmptyValue(ResultArray)) {
SetOfferingValues(Dataset, ResultArray, ScriptObject);
return true;
}
}
var ResultArray = GetOfferingPriceByMainPrice(Dataset.Values('OfferingID'));
if (!IsEmptyValue(ResultArray)) {
SetOfferingValues(Dataset, ResultArray, ScriptObject);
return true;
}
return false;
}

Открываю раздел Документы, добавляю новый продукт, выбираю дату из любого промежутка, заданного в разделе Контрагенты на закладке Типы цен. Захожу на закладку Продукты по документам, добавляю новую карточку и при выборе продукта выдается ошибка 'Ошибка выполнения метода 'SelfOnDatasetDataChange'. Предполагается наличие объекта'

Скажите по правильному ли я пошла пути и если да, то как исправить ошибку?

Гашникова Екатерина

Добрый день.

Для того, чтобы реализовать требуемую функциональность Вам необходимо в scr_OfferingUtils добавить функцию

function GetDocumentParameterByDocumentID(DocumentID, Parameter) {
 
            var DocumentDataset = GetSingleItemByCode('ds_Document', 'scr_OfferingUtils');
 
            EnableDatasetFilters(DocumentDataset, false);
 
            ApplyDatasetIDFilter(DocumentDataset, DocumentID, true);
 
            DocumentDataset.Open();
 
            var Result = null;
 
            if (!IsDatasetEmpty(DocumentDataset)) {
 
                        Result = DocumentDataset.Values(Parameter);
 
            }
 
            DocumentDataset.Close();
 
            return Result;
 
}

Откорректировать функцию SetValuesByPriceType в скрипте scr_OfferingUtils необходимо таким образом

function SetValuesByPriceType(Dataset, ScriptObject) {
 
            if (ScriptObject.WorkspaceFieldName == 'InvoiceID') {
 
                        if (!Assigned(scr_OfferingUtils.AccountIDInvoice)) {
 
                                   var InvoiceID = Dataset.Values('InvoiceID');
 
                                   scr_OfferingUtils.AccountIDInvoice = GetInvoiceParameterByInvoiceID(
 
                                               InvoiceID,'CustomerID');
 
                                   scr_OfferingUtils.CurrenDateInvoice = GetInvoiceParameterByInvoiceID(
 
                                               InvoiceID,'InvoiceDate');
 
                        }
 
                        var AccountID = scr_OfferingUtils.AccountIDInvoice;
 
                        var CurrentDate = scr_OfferingUtils.CurrenDateInvoice;
 
            } else if (ScriptObject.WorkspaceFieldName == 'OpportunityID') {
 
                        if (!Assigned(scr_OfferingUtils.AccountIDOpportunity)) {
 
                                   var OpportunityID = Dataset.Values('OpportunityID');
 
                                   scr_OfferingUtils.AccountIDOpportunity = GetOpportunityParameterByOpportunityID(
 
                                               OpportunityID,'CustomerID');
 
                                   scr_OfferingUtils.CurrenDateOpportunity = GetOpportunityParameterByOpportunityID(
 
                                               OpportunityID,'StartDate');
 
                        }
 
                        var AccountID = scr_OfferingUtils.AccountIDOpportunity;
 
                        var CurrentDate = scr_OfferingUtils.CurrenDateOpportunity;
 
            } else if (ScriptObject.WorkspaceFieldName == 'DocumentID') {
 
                        if (!Assigned(scr_OfferingUtils.AccountIDDocument)) {
 
                                   var DocumentID = Dataset.Values('DocumentID');
 
                                   scr_OfferingUtils.AccountIDDocument = GetDocumentParameterByDocumentID(
 
                                               DocumentID,'AccountID');
 
                                   scr_OfferingUtils.CurrenDateDocument = GetDocumentParameterByDocumentID(
 
                                               DocumentID,'Date');
 
                        }
 
                        var AccountID = scr_OfferingUtils.AccountIDDocument;
 
                        var CurrentDate = scr_OfferingUtils.CurrenDateDocument;
 
            } else
 
                        return false;
 
            var PriceCategoryID = GetPriceTypeOfferingByAccountID(AccountID, CurrentDate);
 
            if (!IsEmptyValue(PriceCategoryID))        {
 
                        var ResultArray = GetOfferingPriceByPriceCategoryID(PriceCategoryID,
 
                                   Dataset.Values('OfferingID'));
 
                        if (!IsEmptyValue(ResultArray)) {
 
                                   SetOfferingValues(Dataset, ResultArray, ScriptObject);
 
                                   return true;
 
                        }
 
            }
 
            var ResultArray = GetOfferingPriceByMainPrice(Dataset.Values('OfferingID'));
 
            if (!IsEmptyValue(ResultArray)) {
 
                        SetOfferingValues(Dataset, ResultArray, ScriptObject);
 
                        return true;
 
            }
 
            return false;
 
}

Terrasoft Support Team

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

Здравствуйте!!
когда делала отчет "Акт" в разделе документов, использовала для отображения продуктов акта query "sq_OfferingInDocument", но у меня по акту отображались не конкретные продукты по этому акту, а все продукты (по всем актам). Таким образом я поставила галочку в разделе Where на фильтре DocumentID и у меня все заработало как надо, НО теперь возникла другая проблема: не отображаются продукты на детали продуктов в разделе документов. Попробовала убрать галочку, которую поставила в запросе - не помогло...причем продукты в базу добавляются,так как при формировании отчета "Акт", все вновь добавленные продукты там присутствуют.
Подскажите пожалуйста в чем дело?
С уважением, Гашникова Екатерина

Нравится

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

Здравствуйте, Екатерина.
Для решения возникшей проблемы можем Вам посоветовать следующее.
Во-первых, для отчета советуем Вам использовать запрос на выборку sq_ReportDocumentOfferings вместо sq_OfferingInDocument. В том случае если каких-либо полей в данном запросе на выборку нет, Вы можете добавить необходимые.
Во-вторых, что касается активации фильтра DocumentID, то наиболее вероятной причиной возникновения данной проблемы является отсутствие перезапуска рабочего приложения после внесенных изменений, сохранений внесенных изменений в кэше. Советуем Вам после внесения изменений в Terrasoft CRM Administrator перезапустить рабочее приложение, протестировать работоспособность системы.

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