powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Номер экземпляра (копии) документа
25 сообщений из 26, страница 1 из 2
Номер экземпляра (копии) документа
    #37527053
onyx2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день всем.

У меня немного нубский вопрос: печатаю документ из PB в нескольких экземплярах и нужно на каждой копии указывать ее номер. То есть если перед печатью я указываю 3 копии, то на каждом документе должен быть соответствующий номер (1, 2, 3).

Долго гуглил, пытаясь найти что-нибудь вроде функции page(), которую можно указать в вычисляемом поле, но не нашел.

Подскажите, как можно это сделать?
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37527183
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посылать не три копии на печать, а одну три раза... перед каждым разом гдето в отчете вручную проставлять нужную цифру
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37527308
onyx2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VanoRпосылать не три копии на печать, а одну три раза... перед каждым разом гдето в отчете вручную проставлять нужную цифру
Смысл как раз в том, чтобы все было автоматически. Получается, что это невозможно?
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37527354
Shtuckenshnuder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно попробовать перед отправкой на печать делать копии строк в это же DW. А потом их удалять. И всё это крутить в режиме SetRedraw(False)
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37527377
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onyx2012VanoRпосылать не три копии на печать, а одну три раза... перед каждым разом гдето в отчете вручную проставлять нужную цифру
Смысл как раз в том, чтобы все было автоматически. Получается, что это невозможно?
Ну, так и автоматизируйте то, что вам предложили.
Создайте функцию с входным параметром "количество копий"(N), в которой в цикле N раз будет запускаться процесс печати 1-ой копии.
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37527388
onyx2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AISonyx2012пропущено...

Смысл как раз в том, чтобы все было автоматически. Получается, что это невозможно?
Ну, так и автоматизируйте то, что вам предложили.
Создайте функцию с входным параметром "количество копий"(N), в которой в цикле N раз будет запускаться процесс печати 1-ой копии.

Да, я понимаю. Тут загвостка в том, что нужно предоставлять пользователю привычное окно печати, в котором по умолчанию кол-во копий = 3 и при желании он смог бы его изменять.
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37527479
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну так предоставьте окно юзеру один раз, а печать вызывайте столько, сколько там выбрал пользователь... не пойму в чем проблема
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37527518
onyx2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо, сделал, как вы сказали (пускаю на печать через цикл).

Остался последний вопрос: как в datawindow (там, где sql запрос) обратиться к функции и получить нужную переменную?
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37528180
yaCooler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Передавайте номер в качестве retrival argument`a и используйте его в селекте
Код: plaintext
1.
2.
select
  :ai_report_number as report_number,
  ...

2) <DW Control Name>.Modify("<Textname>.Text = 'Номер'")
3) <DW Control Name>.Object.<Textname>.Text = 'Номер'
4) Если используете логирование печати - берите номер из таблицы с логом печати
5)...

Вариантов много
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37528649
onyx2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yaCooler3) <DW Control Name>.Object.<Textname>.Text = 'Номер'

Пытаюсь делать по этому варианту. Пишу:

data_w_nakl.copy_num.text = ll_copies (где ll_copies - число)

но ругается Undefined variable: data_w_nakl

Я неправильно обращаюсь к DataWindow?
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37528846
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onyx2012Я неправильно обращаюсь к DataWindow?

А что такое у Вас data_w_nakl ? Наверное dataobject, а не объект DataWindow на окне? Обращаться надо к объекту на окне.

Примерно так:

<ваш_datawindow> .Object. copy_num.text = ll_copies
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37528853
onyx2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ikaronyx2012Я неправильно обращаюсь к DataWindow?

А что такое у Вас data_w_nakl ? Наверное dataobject, а не объект DataWindow на окне? Обращаться надо к объекту на окне.

Примерно так:

<ваш_datawindow> .Object. copy_num.text = ll_copies

Да-да, я опечатался
data_w_nakl - это DataWindow, а обращаюсь я именно так: data_w_nakl.Object.copy_num.text = ll_copies

Но появляется эта ошибка
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37528921
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может все-таки string(ll_copies)?
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37528942
onyx2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spas2001Может все-таки string(ll_copies)?
Я дико извиняюсь, но с PB совершенно не дружу. Не могли бы вы более развернуто описать этот метод или причину, по которой компилятор ругается на обращение к DataWindow?
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37528946
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onyx2012ll_copies (где ll_copies - число)
А должно быть - строка
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37528951
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще data_w_nakl - это DataWindow, а как контрол в окне называется в котором выводится dw?
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37528991
onyx2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spas2001И еще data_w_nakl - это DataWindow, а как контрол в окне называется в котором выводится dw?
DataWindow data_w_nakl вызывается из Window w_nakl, если я правильно понял?
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37529215
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onyx2012 ,
диагноз такой - не указан номер строки, из которой в столбце берется(устанавливается?!) значение, поэтому делайте так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
/*1-й вариант*/
long ll_copies  //тип переменной должен совпадать с типом столбца!!!
/*устанавливаем значение в столбец "copy_num" в строке <номер строки>*/
<ваш_datawindow>.Object.copy_num[<номер строки>] = ll_copies
/*получаем значение из столбеца "copy_num" в строке <номер строки>*/
ll_copies = <ваш_datawindow>.Object.copy_num[<номер строки>]

/*2-й вариант через функцию или такие же, но под друние типы данных (GetItemString,и т.п.)*/
<ваш_datawindow>.GetItemNumber(<номер строки>, "copy_num")
P.S. Если же у вас не столбец, а compute_field, то получать и устанавливать значение в поле надо по другому.
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37529256
onyx2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS,

Спасибо, но в DataWindow у меня нет столбцов, там только текстовые элементы. В один из них нужно запихнуть то самое число, которое не удается передать.
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37529280
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onyx2012 ,
тогда используйте такую конструкцию:
Код: plaintext
1.
2.
3.
/*для текстового элемента*/
<ваш_datawindow>.Modify("copy_num.text = ~'" + string(ll_copies) + "~'")
/*для compute_field*/
<ваш_datawindow>.Modify("copy_num.Expression = ~'" + string(ll_copies) + "~'")
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37529298
onyx2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS onyx2012 ,
тогда используйте такую конструкцию:
Код: plaintext
1.
2.
3.
/*для текстового элемента*/
<ваш_datawindow>.Modify("copy_num.text = ~'" + string(ll_copies) + "~'")
/*для compute_field*/
<ваш_datawindow>.Modify("copy_num.Expression = ~'" + string(ll_copies) + "~'")


Пытаюсь, но компилятор всегда ругается

Warning C0014: Undefined variable: data_w_nakl
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37529381
yaCooler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделайте на вашем окне edit source правой кнопкой мыши в дереве, и выложите текст (с самого начала до слов type variables) сюда под спойлер.
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37529384
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я и говорю, что сама dw как объект - data_w_nakl, а в окне она вствлена в контрол dW и называется dw_1 к примеру
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37529401
onyx2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spas2001,

long ll_copies
s_printjob lstr_print
w_vivz_docum lw_sheet

lw_sheet = This.of_get_sheet('w_vivz_docum')

if IsValid(lw_sheet) then
if ib_printsetup then
OpenWithParm(etfc_w_print, ii_copies)
if not IsValid(Message.PowerObjectParm) then
if not ib_viewenable then
Close(lw_sheet)
end if
Return
end if
lstr_print = Message.PowerObjectParm
if lstr_print.b_collate then
lw_sheet.dw_vivz_docum.Object.DataWindow.Print.Collate = "Yes"
else
lw_sheet.dw_vivz_docum.Object.DataWindow.Print.Collate = "No"
end if
lw_sheet.dw_vivz_docum.Object.DataWindow.Print.Copies = lstr_print.i_copies
lw_sheet.dw_vivz_docum.Object.DataWindow.Print.Page.Range = lstr_print.s_range
lw_sheet.dw_vivz_docum.Object.DataWindow.Print.Page.RangeInclude = lstr_print.i_include
else
lw_sheet.dw_vivz_docum.Object.DataWindow.Print.Copies = ii_copies
end if
//НАЧАЛО
if lw_sheet.dw_vivz_docum.DataObject = 'data_w_nakl' then
lw_sheet.dw_vivz_docum.Object.DataWindow.Print.Copies = 1
ll_copies = 1
do while ll_copies <= lstr_print.i_copies
data_w_nakl.Modify("copy_num.text = ~'" + string(ll_copies) + "~'")
lw_sheet.dw_vivz_docum.Print(True)
ll_copies++
loop
else
lw_sheet.dw_vivz_docum.Print(True)
end if
//КОНЕЦ

if ib_closereport then
Close(lw_sheet)
end if
end if


Отметил НАЧАЛО и КОНЕЦ в коде
...
Рейтинг: 0 / 0
Номер экземпляра (копии) документа
    #37529430
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lw_sheet.dw_vivz_docum.Object.copy_num.text = string(ll_copies)
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Номер экземпляра (копии) документа
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]