Динамическая таблица в отчет

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

Нравится

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

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

Так и сделано...Вехняя строка в колонке -название ,в следующей строке данные из набора данных. Одно окно в наборе данных соответствует одной ячейке в таблице. Как сделать чтобы из одного окна данных можно было вводить некоторое количество данных, которые распределялись в одной колонке но в разных строках, по порядку ввода? Поменять в пользовательском поле тип данных на перечисление?

Вы имеете ввиду отображение одной записи из набора данных таким образом, чтобы в некоторых столбцах было по одному значению, а в некоторых - по несколько? В таком случае средствами построения отчетов по пользовательскому запросу Вам не получится осуществить эту цель.

Сделал таблицу как деталь (по примеру "Создание новой детали в разделе"с сайта)

при запуске -("BaseWorkspase"-определения отсутствуют),подскажите в чем проблема?

Скорее всего Вы использовали фрагмент кода, который ссылается на объект базового раздела, которого, в свою очередь, в данном контексте нет. Вам нужно проверить, где используется BaseWorkspase и переписать код, чтобы этого обращения не было.

Вот скрипт который я дописал в сервисе scr_DocumentWorkspace.

В функции RefreshDetails() в конец добавить код по обновлению детали:
function RefreshDetails() {

...

} else

if (pcDetails.ActivePage.Name == pgContactRegDocDetail.Name) {

RefreshCommonDetail(BaseWorkspace, wndContactRegDocDetail, 'DocumentID', 'DocumentID');

}

}
Этот скрипт вообще не дописывать или в нем нужно что-то поменять?

В этом месте проблем не должно быть. Активируйте отладчик и посмотрите, действительно ли на этой строчке возникает проблема? Возможно Вы добавили указанный код, а проблема в другом месте? Еще вариант - поставить перед вызовом RefreshCommonDetail debugger и выполнить вызов функции, проверив перед этим, что параметры заполнены, особенно BaseWorkspace.

Решил сделать все сначала ( делал первый раз и скорее всего чтото пропустил) дошел до окна wnd_<имя>Edit.
При выборе назначения элементам управления значения свойства DataFieldName ,в полях TextDataControl Появляются названия перед полями для ввода, а в случаях выбора IntegerDataControl - перед полями для ввода ничего не появляется...

Что я упустил, подскажите пожалуйста...

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

СПАСИБО!
Все заработало...

Единственный недостаток, при запуске клиентского приложения активируется Microsoft Script Debugger ( Пустой) подскажите пожалуйста (если можно поподробнее) как правильно запускать отладчик для просмотра ошибок ...

Лучше всего установить Microsoft Visual Studio. Более простой вариант - активировать отладчик, который входит в состав Microsoft Office. (нужно изменить компоненты и включить веб-отладку в веб-сценариях). После этого отладчик должен работать более удобно.

Спасибо, буду пробовать..

При запуске Debugger выдает:

function CheckCondition(Condition, ErrorStr) {
if (Condition) {
return true;
} else {
var ErrorArg = CopyArguments(arguments, 2);
Log.Write(lmtError, FormatStr(ErrorStr, ErrorArg));
return false;
}
}

function CheckAssigned(Object, ObjectName) {
if (!Assigned(Object)) {
var ErrorMgs = FormatStr(ObjectNotAssignedError, ObjectName);
throw ErrorMgs;

throw ErrorMgs- выделено цветом

Подскажите пожалуста - что не так?

Это значит, что проверка на то, присвоен ли объект, не прошла и отсылается сообщение об ошибке. Вы можете в момент, когда возникла ошибка, проверить по стеку вызова (call stack), откуда идет вызов функции CheckAssigned и посмотреть по коду, почему может быть не присвоен передаваемый объект. Нужно проанализировать, при каких условиях возникает проблема.

Виталий, это сообщение выпадает при запуске программы - открывается окно Debugger , пока я не закрою это окно ,окно террасофта не читаемо. После закрытия Debuggerа - открывается террасофт ,деталь которую я создал я вижу,но работать дальше я не решаюсь пока не устраню ошибку. Можно чуть по подробнее - как это сделать.

Да, я понимаю. Но все же Вам нужно установить причину возникновения проблемы. По предоставленному Вами фрагменту кода видно, что какой-то объект не присвоен. Чтобы понять, какой именно, нужно перейти в функцию, из которой была вызвана CheckAssigned (а возможно и еще выше) и проверить, какой именно объект передается, и почему он у Вас не присвоен. Лучше это делать не с помощью Script Debugger, а хотя бы с помощью Script Editor (входит в состав Microsoft Office) или Visual Studio.

Поставил Visual Studio - при старте вываливается окно "Ошибка выполнения Microsoft JScript: Исключение брошено и не поймано"

А, скорее всего проблема связана с неправильным включением фильтра в запросе на выборку детали. Нужно проверить, чтобы в запросе на выборку детали был создан параметр и его название в точности совпадало с фильтром сравнения. Для Вашего случая это скорее всего DocumentID.

Виталий, добрый день!

С таблицей все получилось, но теперь когда я пытаюсь изменить шаблон отчета , в момент когда я пытаюсь вставить деталь в отчет у меня идет сообщение об ошибке;
// ----------------------------------------------------------------------------
// Plugin Functions
// ----------------------------------------------------------------------------
далее
function DoInsertTableTag(Selection, FieldTextArray) {
SendToBackMainWindow();
if ((Selection.Rows.Count == 1) && (Selection.Columns.Count == 1)) {
var Row = Selection.Rows(1);
var Column = Selection.Columns(1);

последняя указанная мной строка выделена цветом.

Причем в сделанную таблицу из набора деталей2 все вставляется без ошибок ,

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

Виталий, добрый день!

Спасибо за советы - поставил Script Editor стало по проще.
У меня опять проблема с новой деталью в этот же документ.
Я создал деталь по подобию первой, деталь вставляется в шаблон таблицей, сверху заголовки- под ними поля для данных. Однако когда я заполняю деталь в документе данные заносятся в поля наполнения детали, но документе отображается только шапка таблицы с названиями, а сами данные в документе не видны (нет даже ячеек).Однако в самой детали эти данные остаются.
Подскажите пожалуйста в чем проблема?

При попытке удалить эти записи - выскакивает сообщение "запись удалена", хотя сама запись остается. Удалить записи из детали возможно удалив весь документ целиком.

Может есть ,помимо Виталия, кто в состоянии ответи на мой вопрос?

Александр здравствуйте,
Можете пожалуйста уточнить несколько моментов, вы создали запрос, на основании этого запроса вы формируете отчет, отчет какого типа вы формируете ? (Excel, Word, FastReport)
Я предполагаю что вы создаете отчет Word.
"деталь вставляется в шаблон таблицей" вы создали таблицу в отчете Word, написали заголовки таблицы, написали макросы, для поставление данных с запроса в отчет.
Теперь вы получаете результат, в отчете только шапка таблицы, в запросе данные отображаются ?

Создается отчет WORD.
По этому примеру (http://community.terrasoft.ru/developer/solutions/1904)
создается деталь, которая потом вставляется в шаблон отчета.
В документе все данные становятся на свои места при заполнении,кроме этой созданной детали. От детали в документе видно только шапку таблицы.
Но в полях детали (В оболочке клиента, не в документе) эти данные есть.
При попытке удалить эти записи - выскакивает сообщение "не удалено 1 из 1 записей.Нет доступа:1"
Удалить записи из детали возможно удалив весь документ целиком

По данному вопросу был заведен инцидент 087381, как только будет предоставлено полное решение, опишем его в этой теме.

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