Деталь документы в разделе Контрагент

Добрый день!
В карточке документов было создано поле "Вендор", которое подтягивает контрагентов с типом "Вендор". Т.е. получилось 2 поля с контрагентами Контрагенты(стандартное) и Вендор.
В разделе "Контрагенты" -> деталь "Документы". В стандартном функционале данные о документах подтягиваются у тех контрагентов, которые были указаны в карточке документов в поле "Контрагенты". Нужно реализовать точно такой же функционал(что бы подтягивалась информация о документах) и для тех контрагентов, что были указаны в поле "Вендор"(карточка документов) на этой же детали "Документы".
Подскажите как это можно сделать?
Заранее спасибо!!

Нравится

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

в sq_Document создайте новы набор фильтров с логическим оператором OR:

в нем создайте два фильтра сравнения:
tbl_Document.AccountID = AccountID2 (parameter) с названием AccountID2 (главное чтобы не AccountID, т.к. такой уже существует)
tbl_Document.VendorID = VendorID (parameter) с названием VendorID

и соответствующие параметры
сделайте активным оба или только VendorID - главное не сам набор.

в scr_AccountsWorkspace
найдите место

/* MODULE DOCUMENTS */
	if (pcDetails.ActivePage.Name == pgDocumentsDetail.Name) {

и после него поменяйте второй AccountID на AccountID2
должно получиться:

/* MODULE DOCUMENTS */
	if (pcDetails.ActivePage.Name == pgDocumentsDetail.Name) {
		RefreshCommonDetail(BaseWorkspace, wndDocumentsDetail, 
			'AccountID', 'AccountID2');
	} else
/* ENDMODULE DOCUMENTS */

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

Добрый день Николай!!!

для решения вашего вопроса вам требуется сделать следующее:

1. в скрипте wnd_DocumentsGridArea, в DataGrid "grdData" добавить новый "DataGridView". к примеру назвать его "gvDocumentsVendor". Определить поля. На закладке Свойства, установить курсор FilterSetCode и присвоить Имя к примеру "DocumentsVendor"
2. открыть запрос sq_Document и добавить "Compare Filter" c именем "DocumentsVendor" и условием к примеру  tbl_Document.VendorID = :VendorID
3. в скрипте scr_AccountsWorkspace добавить следующий код

изменить функцию RefreshDetails() и добавить следующий код:

function RefreshDetails() {
        ...
/* MODULE DOCUMENTS */
	if (pcDetails.ActivePage.Name == pgDocumentsDetail.Name) {
		SetAttribute(wndDocumentsDetail.Window, 'ParentDataset', BaseWorkspace.GridDataset);  
		SetAttribute(wndDocumentsDetail.Window, 'ParentItemID', BaseWorkspace.GridDataset.ValAsStr('ID'));
		RefreshCommonDetail(BaseWorkspace, wndDocumentsDetail, 
			'AccountID', 'AccountID');
	} else
/* ENDMODULE DOCUMENTS */
        ...

4. в скрипте scr_DocumentsGridArea добавить следующий код

в самом начале скрипта

var DocumentsGridArea = new Object();

изменить функцию Initialize(Window) и добавить в начало функции следующий код:

function Initialize(Window) {
      DocumentsGridArea.ParentItemID = GetAttribute(Window, 'ParentItemID');
      ...
}

изменить функцию dlDataOnDatasetBeforeOpen(Dataset, DoOpen) и добавить следующий код:

function dlDataOnDatasetBeforeOpen(Dataset, DoOpen) {
      ...
      if (grdData.ActiveView.Name == gvDocumentsVendor.Name) {
            Dataset.Close();
            ApplyDatasetFilter(Dataset, 'DocumentsVendor', DocumentsGridArea.ParentItemID, true);
            Dataset.Open();
      } else {
            EnableDatasetFilters(Dataset, false, 'DocumentsVendor');
      }
 
      if (grdData.ActiveView.Name == dgvData.Name) {
            Dataset.Close();
            ApplyDatasetFilter(Dataset, 'AccountID', DocumentsGridArea.ParentItemID, true);
            Dataset.Open();
      } else {
            EnableDatasetFilters(Dataset, false, 'AccountID');
      }
      ...
}

вот и все и ваша задача будет решена.

Добрый день
Первое решение не дало результатов, контрагенты подтягиваются, а те кто стоят в вендорах нет.
Второе решение выдаёт ошибку что стек переполнен. Debugger прошёл, не входит в
if (grdData.ActiveView.Name == gvDocumentsVendor.Name) {
Может я что не так сделал в wnd_DocumentsGridArea. скрин прилагаю

"Арефьев Николай Николаевич" написал:Первое решение не дало результатов

действительно)
надо было tbl_Document.VendorID = AccountID :redface:

"Андросов Дмитрий" написал:
Арефьев Николай Николаевич пишет:

Первое решение не дало результатов

действительно)

надо было tbl_Document.VendorID = AccountID :redface:

Поменял, всё равно ничего.... скрин в аттаче

блин, простите :exclaim:
tbl_Document.VendorID = AccountID2

"Андросов Дмитрий" написал:

блин, простите :exclaim:

tbl_Document.VendorID = AccountID2

Огромное спасибо!!!) Получилось!)

Только теперь не показывает документы у контрагентов(((

не совсем понятно, я проверил у себя - все работает.
попробуйте очистить кеш, сначала удалить, а потом опять создать заново набор фильтров, фильтры и параметр AccountID2, попробуйте не включать фильтр AccountID2

"Андросов Дмитрий" написал:

не совсем понятно, я проверил у себя - все работает.

попробуйте очистить кеш, сначала удалить, а потом опять создать заново набор фильтров, фильтры и параметр AccountID2, попробуйте не включать фильтр AccountID2


Всё) понял в чём проблема была, надо было везде AccountID2 выставить как параметр!) Всё ещё раз спасибо!)

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