Для точного ответа на надо иметь Вашу базу и знать за какой период и по какому сотруднику формируется справка. Скорее всего за указанный в карточке запроса период у сотрудника не существует больничных листов. Попробуйте в карточке запроса в параметре "Период начисления б/л" указать период соответствующий больничному листу.
Если переменную часть Вы хотите выводить непосредственно в мемо-поле, то в редакторе текста мемо-поля надо написать (например для счет-фактуры) [DATETIMEINWORDS([DialogForm.shapka."ДАТА_СЧЕТАФАКТУРЫ"],'mmmm yyyy года', Nominative)]
Если вывод будет осуществляться через переменную, то cExtraPrim:= [DATETIMEINWORDS([DialogForm.shapka."ДАТА_СЧЕТАФАКТУРЫ"],'mmmm yyyy года', Nominative)] (имя переменной может быть любое) и далее уже работать с текстовой переменной, добавляя ее к основной части текста.
Да, использование массивов так же решает эту задачу.
В этом случае на событие OnBeforePrint бенда MasterData надо сформировать массив из строк документа с учетом группировки. После этого установить бенду DetailData количество строк равное кол-ву элементов массива (dd.datasource:= <кол-во элементов массива>).
Не забудьте что FR2 поддерживает только одномерные массивы, поэтому для каждого столбца необходимо будет создавать свой массив.
Кнопка сохранения отчета не может перестать работать при выборе поля из источника. Попробовали проделать описанные действия у нас - шаблон отчета без проблем сохраняется. Возможно Вы после изменения шаблона УЖЕ выполнили его сохранение и кнопка стала недоступной для повторного нажатия, либо произвели ещё какие-то действия. Если у Вас ситуация стабильно повторяется, опишите её нам максимально подробно, что бы и мы смогли повторить. И напишите, на каком хотфиксе это получается?
Для того, чтобы выполнить группировку строк в УПД по полям ГРУППА+НОМЕНКЛАТУРА, необходимо дорабатывать источник. В шаблоне этого сделать НЕЛЬЗЯ, т.к. шаблон содержит в себе помимо одиночной печати еще и групповую печать документа. Доработка источника требует создание пользовательского источника на основе системного. В пользовательский источник для класса form_tax_sf необходимо добавить параметр "группировка строк", а в процедуру select_stroki дописать алгоритм по группировке.
В том шаблоне, который Вы прикрепили, в событии OnBeforePrint секции отчета GH1, НЕТ написанного выше программного кода. После добавления этого кода в шаблон на моей базе все пустые акты подавились за исключением самого последнего. Его подавить только путем правок шаблона полностью не получится. Можно в этом случае у всех секций отчета установить свойство Visible := False, но пустой лист все равно будет печататься.
А название контрагента никуда не пропадает. Возможно при вставке программного кода в событие OnBeforePrint Вы допустили какие-то синтаксические ошибки, из-за которых выполнение скрипта в месте ошибки "молча" прерывалось и не выполнялся последующий код, где происходит инициализация переменной с именем контрагента: Name_an := [DialogForm.DataPartner."ПОЛНОЕ_НАИМЕНОВАНИЕ"];
(Может быть при вставке в конце пропустили оператор end;)
Клавиша "Группа партнеров" неактивна в том случае, когда в списке партнёров есть отмеченные партнёры, потому что формировать отчет можно либо по Группе партнёров, либо по отмеченным партнёрам в списке, но НЕ то и другое одновременно.
Снимите все галочки в списке, и тогда клавиша "Группа партнеров" будет доступна.
Запрограммировать возможно примерно таким образом.
В событии OnBeforePrint секции отчета GH1 в самом начале надо написать следующее:
lVisible := False;
while (not reestr.EOF) and (lVisible = False) do begin
nRecno := Reestr.Recno;
cGrAnl := [DialogForm.reestr."GRANL"];
while (not reestr.EOF) and (cGrAnl = [DialogForm.reestr."GRANL"]) do begin
if ([DialogForm.reestr."SALDO_DT"] <> 0) or ([DialogForm.reestr."SALDO_KT"] <> 0) or
([DialogForm.reestr."SUMD_DT"] <> 0) or ([DialogForm.reestr."SUMD_KT"] <> 0) then begin
lVisible := True;
end;
reestr.Next;
end;
if lVisible = True then begin
while (not reestr.BOF) and (nRecno <> Reestr.Recno) do begin
reestr.Prior;
end;
end;
end;
ничего не меняется (messagebox(qdo.sql) выдает тот-же текст sql)
обращение типа qDo.sql[3] ничего не возвращает и выдает ошибку, в Б4 все работало, в хелпе к Б5 этот синтаксис описан
что я делаю не так?
В Б5 работает такой вариант:
qDo.Close;
qDo.SQL := 'select ...';
MessageBox(qDo.SQL);
То есть прямое присвоение свойству SQL текстовой строки.
С точки зрения чистого программирования сделать это, конечно, можно. Но внесения изменений в отчетные формы, и в особенности в унифицированные формы, решается НЕ программистами. Напишите Ваше предложение в раздел форума "БЭСТ-5".
1. При помощи объекта ExternalView менять поля в базах данных БЭСТ-5 НЕЛЬЗЯ. Этот объект
используется во внешней отчетности, для сохранения данных по рассчитанной форме в архив, для последующего просмотра и выгрузки в электронном виде.
2. В "Запросе к БЭСТ" поддерживается синтаксис оператора SELECT из языка программирования Microsoft Visual FoxPro версии 7.
Указание индексов через конструкцию "WITH (INDEX(RBOOKM_G))" там не допускается.
Чтобы ответить на Ваш , надо конкретно посмотреть на результаты правок. Заархивируйте Ваш шаблон отчета и источник с "неудачными" исправлениями, и прикрепите архив к сообщению.
Подробную инструкцию можно посмотреть в меню
"Справка -> Разработчикам -> Разработка источников на FoxPro"
Там есть и пример создания пользовательского источника данных.
Конечно, для создания источников желательно изучить Microsoft Visual FoxPro и уметь работать с классами и библиотеками классов в этой среде разработки.
В настройках параметров приложения "Продажи клиенты", есть параметр "Ед.изм.прайс листа". Попробуйте такой вариант, возможно он вас устроит. В этом случае для источника Stroki поле "Коэффицент_R" будет соответствовать тому коэффициенту, который идет для единицы измернения. Если нет, то для ускорения отчета необходимо добавлять поле в источник, т.е. создавать пользовательский источник на основе системного. Подчиненные источники всегда работают медленно и с этим ничего не сделаешь.
У Вас во втором шаблоне поле Memo27 (в котором выводится номер по порядку [LinePP] ) вылезло за границы секции DetailData1.
Установите у Memo27 значение свойства Top = 384 и номер будет выводится.
Дизайнер по всему приложению может не запускаться в тех разделах меню, где нет отчетов для печати в целом по приложению. Например, в пунктах Настройка->Базы данных, Финансы->Бюджетирование, Логистика->Мобильная торговля. Там, где есть пункт меню "Формирование отчетов" или с другим аналогичным названием, дизайнер отчетов в режиме "По всему приложению" запускаться должен.
С прикреплением файлов на сайте действительно есть проблемы - сейчас с ними разбираемся...
Порядковый номер выводится через переменную LinePP, которая в Расчетной ведомости Т-51 увеличивалась в событии OnBeforePrint секции DetailData таким образом:
if ltnum<>[DialogForm.DS_SheetCalcStr."TNUM"] then begin
ltnum:=[DialogForm.DS_SheetCalcStr."TNUM"];
LinePP:=LinePP+1;
end;
Проверте наличие этого скрипта, и если он есть, то попробуйте после строки
LinePP:=LinePP+1;
написать
MessageBox([LinePP]);
При запуске отчета в момент формирования каждой строки должно будет выводиться сообщение с номером этой строки.
Если такие "манипуляции" не помогут понять в чем проблема - прикрепите в сообщении файл шаблона отчета.
Путём изменения только системного шаблона отчета, сортировку по фактическому адресу сделать невозможно. Надо создавать свой источник данных на основе системного (bdf.sprav.sprav_partner), прописывать в нём нужную сортировку и на основе этого источника делать пользовательский шаблон отчета.
Для установки сортировки по фактическому адресу в источнике данных можно, например, перед оператором
SEL ECT * Fr om Itog &cJoin &cSort INTO CURSOR (GENERATE_OWNED_ALIAS) READWRITE
жестко задать значение переменной
cSort = "ORDER BY Адрес_фактический"