28.01.2010, 12:46 | #1 |
Участник
|
Добрый день. Я новичек в Navision и в программировании на C/AL.
Есть некая таблица в базе с Фамилиями сотрудников, Кодами начислений и суммами самих начислений. Коды начислений имеют тип Option в таблице. Задача состоит в том, чтобы вывести это всё в файл Excel, при этом вывод должен быть в разрезе кодов начислений на соотв. страницу (sheet) одной книги. Т.е. для каждого Кода начисления в книге должна создаваться своя страница и соотв. на эту страницу выноситься данные. Решение я вижу в прохождении этого отчёта и получая каждый раз новую запись в цикле, проверять на Код элемента и выносить эту запись на соответствующий лист. Проблема в том, что я не знаю, как в одной книге сделать несколько листов. В 370-й таблице есть метод CreateSheet, в котором всё просто, но проблема, в том, что он вызывается уже после того, как данные выведены в буфер. Надеюсь понятно изложил суть проблемы) Клиент Navision 3.7 |
|
28.01.2010, 14:11 | #2 |
Administrator
|
лучше отсортировать по кодам (создать в табличке ключик) и обработать их последовательно
|
|
28.01.2010, 14:57 | #3 |
Участник
|
Цитата:
|
|
28.01.2010, 15:25 | #4 |
Участник
|
Делаете Ключ.
Сортируете по нему записи в отчете. Выводите на текущий лист. Как только меняется значение в контрольном поле (другой код начислений) добавляете в экселе лист, меняете его название, делаете его активным. Отчет проодлжает свою работу, выводя записи на текущий лист экселя. Функции при работе с эксель можно отрабатывать, создавая макрос в экселе и подсматривая затем в его коде какие команды зовутся. |
|
08.02.2010, 15:02 | #5 |
Участник
|
Спасибо всем, сделал как в теме http://forum.mazzy.ru/index.php?show...B&fromsearch=1, всё работает, с выводом напрямую в Excel тоже разобрался от туда же. Появился другой вопрос - в данной таблице, для каждого Кода начисления в записи сопоставлен EmployeeID, каким образом мне по этому EmployeeID получить из другой таблицы (таблица Employee) соотв. данные для этого EmployeeID, получить всю запись (набор записей) или какое-либо поле, меня интересующее (например ФИО)? Т.е. нужно, что-то как в MSSQL SELECT ... INNER JOIN ... ON table.EmployeeID = Employee.EmployeeID WHERE EmployeeID = x.
|
|
08.02.2010, 15:08 | #6 |
Administrator
|
делаем переменную типа Record со ссылкой на Employee
так ее и назовем. в нужном месте пишем: IF Employee.GET(EmployeeID) THEN xxx := Employee.FIO <table>.GET(<первичный ключ>) это как SELECT * FROM <table> WHERE <условия на первичный ключ> |
|
08.02.2010, 15:28 | #7 |
Участник
|
спасибо, всё оказывается просто)
|
|
09.03.2010, 17:06 | #8 |
Участник
|
Т.к. я продолжаю работу над этим отчётом возникло несколько вопросов. Буду очень благодарен, если мне разъяснят несколько вещей.
Во-первых, возможно ли в Navision, так же как MS SQL, создать временную таблицу (или переменную типа таблица): DECLARE @MyTable Table (EmployeeID int, Description varchar(30)), с типами данных столбцов которые мне требуются? Во-вторых, рассматривая CU 424 - Export Analasis View, встречаю подобный пример в функции CreateFile Код: // Блок1 AnalysisViewEntry2.COPY(AnalysisViewEntry); AnalysisView.GET(AnalysisViewEntry2."Analysis View Code"); // Блок2 IF GLAcc.FIND('-') THEN REPEAT TempGLAcc3.COPY(GLAcc); TempGLAcc3.INSERT; UNTIL GLAcc.NEXT = 0; Код: Name DataType Subtype Length TempGLAcc3 Record G/L Account Код: Name DataType Subtype Length AnalysisViewEntry2 Record Analysis View Entry И такой же вопрос по Блоку 2, здесь похоже все данные из таблицы G/L Account(GLAcc), переносятся в TempGLAcc3, при этом GLAcc определена в Locals как Код: Name DataType Subtype Length GLAcc Record G/L Account А самый главный вопрос, где взять документацию, чтобы я больше подобных вопросов не задавал?) Заранее спасибо! |
|
09.03.2010, 18:32 | #9 |
Участник
|
Цитата:
Сообщение от memo
Т.к. я продолжаю работу над этим отчётом возникло несколько вопросов. Буду очень благодарен, если мне разъяснят несколько вещей.
Во-первых, возможно ли в Navision, так же как MS SQL, создать временную таблицу (или переменную типа таблица): DECLARE @MyTable Table (EmployeeID int, Description varchar(30)), с типами данных столбцов которые мне требуются? Во-вторых, рассматривая CU 424 - Export Analasis View, встречаю подобный пример в функции CreateFile Код: // Блок1 AnalysisViewEntry2.COPY(AnalysisViewEntry); AnalysisView.GET(AnalysisViewEntry2."Analysis View Code"); // Блок2 IF GLAcc.FIND('-') THEN REPEAT TempGLAcc3.COPY(GLAcc); TempGLAcc3.INSERT; UNTIL GLAcc.NEXT = 0; Код: Name DataType Subtype Length TempGLAcc3 Record G/L Account Код: Name DataType Subtype Length AnalysisViewEntry2 Record Analysis View Entry И такой же вопрос по Блоку 2, здесь похоже все данные из таблицы G/L Account(GLAcc), переносятся в TempGLAcc3, при этом GLAcc определена в Locals как Код: Name DataType Subtype Length GLAcc Record G/L Account А самый главный вопрос, где взять документацию, чтобы я больше подобных вопросов не задавал?) Заранее спасибо! Но есть понятие временной тблицы на основании существующей. В приведенном Вами примере, если встать на TempGLAcc3 и нажать "свойства" (Shift+F4), то увидите такое свойство, как Temporary = Yes. Это означает, что работаем не с живыми данными, а используем только структуру, данные хранятся в оперативной памяти клиента. Почитать можно по F1 из редактора кода, либо поискать руководство разработчика. |
|
19.03.2010, 13:25 | #10 |
Участник
|
А если нужно чтоб две временные таблицы содеражали одно и тоже, например вложенный цикл по временной таблице, то нужно объявить временную таблицу как массив.
|
|