|
13.02.2015, 11:36 | #1 |
Участник
|
есть ли готовый метод docuref.create(айди таблицы,refrecid,путь к файлу) ?
То есть стоит задача некоторым документам посадить в docuref такой же файлик как у данного документа. Причем:
И Чтобы эта функция и в docuvalue тоже садила свою запись для каждого документа тоже (иначе файлик пропадет у всех при удалении у кого то одного ) В методах таблицы похожего ничего не нашел ничего. может класс есть какой нибудь. Заранее спасибо |
|
13.02.2015, 12:59 | #2 |
Участник
|
Обычно используют Docu::copy(), при этом DocuValue остается одна на всех.
|
|
27.08.2021, 11:36 | #3 |
Сенбернар
|
Цитата:
То есть sourceDataAreaId != targetDataAreaId. Как-то оно у меня пока не получается, any idea?
__________________
Best Regards, Roman |
|
27.08.2021, 18:19 | #4 |
Banned
|
X++: static void eglaItemAttachment(Args _args) { DocuRef docuRef,docuRefCur; InventTable inventTable,inventTableCur; DocuValue docuValue,docuValueCur; str filePath; int record; ; try { while select inventTableCur where inventTableCur.dataAreaId == '116' && inventTableCur.ItemId like "610*" { while select docuRefCur where docuRefCur.RefRecId == inventTableCur.RecId && docuRefCur.RefCompanyId == inventTableCur.dataAreaId && docuRefCur.RefTableId == inventTableCur.TableId { select firstOnly docuValueCur where docuValueCur.RecId == docuRefCur.ValueRecId; filePath = docuRefCur.completeFilename(); changeCompany('101') { select firstOnly inventTable where inventTable.ItemId == inventTableCur.ItemId && inventTable.dataAreaId == '101'; if (inventTable.RecId) { ttsBegin; docuRef.clear(); buf2Buf(docuRefCur , docuRef ); docuRef.RefRecId = inventTable.RecId; docuRef.RefTableId = inventTable.TableId; docuRef.RefCompanyId = inventTable.dataAreaId; docuRef.ActualCompanyId = inventTable.dataAreaId; docuRef.insert(); record++; if (docuRef.RecId && docuValueCur.RecId) { docuValue.clear(); buf2Buf(docuValueCur , docuValue); docuValue.insert(); if(docuValue.RecId) { ttsBegin; docuRef.selectForUpdate(true); docuRef.ValueRecId = docuValue.RecId; docuRef.update(); docuValue.selectForUpdate(true); docuValue = DocuValue::writeDocuValue(docuref,filePath); docuValue.update(); ttsCommit; } } ttsCommit; } } } } info(strFmt("Total attachments = %1",record)); } catch (Exception::Error) { warning("An attachement could not be added to this item - %1", inventTableCur.ItemId); } } |
|
|
За это сообщение автора поблагодарили: RVS (3). |
28.08.2021, 06:27 | #5 |
Участник
|
Тут бы еще в запрос по InventTable добавить crossCompany. Иначе, если запускаем не из компании '116', то ничего не найдется.
Если же запускаем из '116' и без crosscompany, то смысла указывать компанию нет. Ну а компанию '101' вообще в запрос добавлять не нужно - мы на неё переключились явно. Ну, так как есть while select, то после переключения компании желательно обнулить переменную inventTable, иначе бывают "сюрпризы". Правда это так, замечания, чтобы поворчать. Вопрос про DocuRef, а не про общий подход работы с компаниями. |
|