Передача даты начала задачи в пользовательское поле
Здравствуйте! Добавил пользовательское поле в карточку "Продукт в Продаже" - тип Дата. Как сделать настройку, чтобы при добавлении продукта в детали продукты Раздела "Продажи" при открытии карточки "Продукт в продаже" вышеназванное пользовательское поле заполнялось значением из поля "Дата начала" этой Продажи.
Нравится
Здравствуйте!
Реализовать такой функционал с помощью пользовательских полей - нельзя.
Вам необходимо:
1) Удалить это пользовательское поле.
2) Создать поле с типом дата в таблице этой карточки - tbl_Offering, используя Террасофт Администратор
3) Добавить это поле в сервис select query этой карточки - sq_OfferingInTask.
4) Добавить это поле в датасет - ds_OfferingInTask
5) Добавить это поле в карточку - wnd_OfferingInTaskEdit
5) На событии OnPrepare этой карточки прописать следующую логику:
if(Window.Attributes('IsNew') == true) { var ParentTaskID = Self.Attributes('ParentRecordID'); var TaskDS = Services.GetNewItemByUSI('ds_Task'); ApplyDatasetIDFilter(TaskDS, ParentTaskID, true); TaskDS.Open(); var MyDate = TaskDS('MyDateFromTask'); edtMyDateField.DataField.Value = MyDate; TaskDS.Close(); }
где MyDateFromTask - имя поля с датой из реестра задач;
edtMyDateField - имя контрола с датой в карточке редактирования продукта в задаче;
Извиняюсь, спутал разделы. Правильный текст ниже.
Здравствуйте! Добавил пользовательское поле в карточку "Продукт в Продаже" - тип Дата. Как сделать настройку, чтобы при добавлении продукта в детали продукты Раздела "Продажи" при открытии карточки "Продукт в продаже" вышеназванное пользовательское поле заполнялось значением из поля "Дата начала" этой Продажи.
Этот же алгоритм применять?
Александр, здравствуйте!
Да, опять таки с помощью пользовательского поля этот функционал реализовать не получится.
Создайте это поле через ТС Администратор по алгоритму в первом сообщении, и далее на событии OnPrepare карточки продукта в продаже:
if(Window.Attributes('IsNew') == true) { var ParentOpportunityID = Self.Attributes('ParentRecordID'); var OpportunityDS = Services.GetNewItemByUSI('ds_Opportunity'); ApplyDatasetIDFilter(OpportunityDS, ParentOpportunityID, true); OpportunityDS.Open(); var MyDate = OpportunityDS('MyDateFromOpportunity'); edtMyDateField.DataField.Value = MyDate; OpportunityDS.Close(); }
где MyDateFromOpportunity - имя поля "Дата начала" в датасете продаж (ds_Opportunity),
edtMyDateField - имя контрола добавленного поля в карточку "продукты в продаже" с датой.
Дмитрий, сделал всё по Вашему алгоритму, но после внесенных изменений при нажатии кнопки "Добавить" на детали "Продукты"в разделе Продажи открывается окно, где все реквизиты недоступны для редактирования. В файле скрин окна карточки продукта. Может что то не так сделал?
Явно что-то не так сделали. Причем мой код не мог "задисейблить" все поля карточки в принципе.
Попробуйте откатить изменения, воспроизведется ли ошибка?
Также, предоставьте, пожалуйста, полный исходный код карточки.
Откатил изменения - убрал с события OnPrepare карточки продукта в продаже скрипт.
Карточка заработала.
Дмитрий, прошу прощения за нелогичное изложение проблемы, но дело в том, что изменения нужно внести в программу Terrasoft Sales версии 3.3.1.104. Вышеназванные рекомендации пробовал вносить в версии CRM 3.3.4.
Когда же открыл администратор в Terrasoft Sales версии 3.3.1.104, то оказалось, что wnd_OfferingInOpportunityDetailEdit в этой версии нет. При добавлении продукта в Sales открывается окно wnd_OfferingDetailEdit. Вопрос остается прежним. Как в программе Terrasoft Sales версии 3.3.1.104 в карточку Продукта в продаже передать значение даты из Продажи?
Здравствуйте.
Вам необходимо в таблицу tbl_OfferingInOpportunity добавить новое поле с типом Дата, к примеру, NewDate.
Далее, добавьте выборку этого поля в сервисе sq_OfferingInOpportunity.
Далее, добавьте данное поле в источник данных ds_OfferingInOpportunity.
Далее, откройте карточку wnd_OfferingDetailEdit и добавьте новое поле DateTimeDataControl. Свойство DatasetLink
заполните как dlData, а в свойство DataFieldName вручную впишите имя добавленного поля - NewDate.
Далее, перейдите на событие OnPrepare этой карточки и в конец функции обработчика этого события добавьте следующий код:
if(Window.Attributes('IsNew') == true) { var ParentOpportunityID = Self.Attributes('ParentItemID'); var OpportunityDS = Services.GetNewItemByUSI('ds_Opportunity'); ApplyDatasetIDFilter(OpportunityDS, ParentOpportunityID, true); OpportunityDS.Open(); var MyDate = OpportunityDS('StartDate'); edtNewDate.DataField.Value = MyDate; OpportunityDS.Close(); }
Но, обращаю внимание, что карточка редактирования общая для продукта в документе, счете, продаже и т.д. А добавленное поле в карточку работать будет лишь для продукта в продаже. Соответсвенно, будет логичным написание доп. логикы для отображения данного поля только для того случая, если добавляемая(или открываемая) запись - это продукт в продаже.
Добрый день! Внес изменения, в разделе Продажи все отменно работает! Спасибо!
Единственное, как Вы правильно заметили, Дмитрий, логика скрипта не срабатывает, например в разделе счета. Выдает ошибку:
Ошибка выполнения метода 'wnd_OfferingDetailEditOnPrepare'. 'edtStartDateInOpportunity.DataField' - есть null или не является объектом.
Было бы замечательно, если бы посоветовали как победить эту беду.
Здравствуйте еще раз, Александр.
Замените код на следующий:
if(Window.Attributes('IsNew') == true ) { var ParentOpportunityID = Self.Attributes('ParentItemID'); var OpportunityDS = Services.GetNewItemByUSI('ds_Opportunity'); ApplyDatasetIDFilter(OpportunityDS, ParentOpportunityID, true); OpportunityDS.Open(); var MyDate = OpportunityDS('StartDate'); try{ edtNewDate.IsVisible = true; edtNewDate.DataField.Value = MyDate;} catch(e) { edtNewDate.IsVisible = false; }; OpportunityDS.Close(); }
Здравствуйте, Дмитрий! Всё работает! Большое спасибо за добрый совет и помощь! Очень приятно работать с Terrasoft!