AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.01.2010, 12:46   #1  
memo is offline
memo
Участник
 
5 / 10 (1) +
Регистрация: 30.09.2008
Добрый день. Я новичек в Navision и в программировании на C/AL.
Есть некая таблица в базе с Фамилиями сотрудников, Кодами начислений и суммами самих начислений. Коды начислений имеют тип Option в таблице. Задача состоит в том, чтобы вывести это всё в файл Excel, при этом вывод должен быть в разрезе кодов начислений на соотв. страницу (sheet) одной книги. Т.е. для каждого Кода начисления в книге должна создаваться своя страница и соотв. на эту страницу выноситься данные.

Решение я вижу в прохождении этого отчёта и получая каждый раз новую запись в цикле, проверять на Код элемента и выносить эту запись на соответствующий лист. Проблема в том, что я не знаю, как в одной книге сделать несколько листов. В 370-й таблице есть метод CreateSheet, в котором всё просто, но проблема, в том, что он вызывается уже после того, как данные выведены в буфер.
Надеюсь понятно изложил суть проблемы)

Клиент Navision 3.7
Старый 28.01.2010, 14:11   #2  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
лучше отсортировать по кодам (создать в табличке ключик) и обработать их последовательно
Старый 28.01.2010, 14:57   #3  
memo is offline
memo
Участник
 
5 / 10 (1) +
Регистрация: 30.09.2008
Цитата:
Сообщение от Sancho Посмотреть сообщение
лучше отсортировать по кодам (создать в табличке ключик) и обработать их последовательно
Я создам ключ, отсортирую таблицу (точнее, порядок её обработки в триггеру AfterGetRecord), но у меня остаётся проблема с выводом данных на разные Листы одной книги. Нашёл подобную тему на форуме http://forum.mazzy.ru/index.php?show...B&fromsearch=1, но там используют другой способ вывода, с которым я не знаком. У себя в базе я находил подобные отчёты, которые используют DataItem = Integer, но я не очень понимаю как они работают, а из документации у меня только "Объекты Navision" и "Программирование на языке C/AL", но в них про вывод в Excel ни слова. Если есть где то пример, ткните пож-та) или если есть возможность, выложите .fob)
Старый 28.01.2010, 15:25   #4  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Делаете Ключ.
Сортируете по нему записи в отчете.
Выводите на текущий лист.
Как только меняется значение в контрольном поле (другой код начислений) добавляете в экселе лист, меняете его название, делаете его активным.
Отчет проодлжает свою работу, выводя записи на текущий лист экселя.

Функции при работе с эксель можно отрабатывать, создавая макрос в экселе и подсматривая затем в его коде какие команды зовутся.
Старый 08.02.2010, 15:02   #5  
memo is offline
memo
Участник
 
5 / 10 (1) +
Регистрация: 30.09.2008
Спасибо всем, сделал как в теме 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  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
делаем переменную типа Record со ссылкой на Employee
так ее и назовем.
в нужном месте пишем:
IF Employee.GET(EmployeeID) THEN
xxx := Employee.FIO

<table>.GET(<первичный ключ>)
это как
SELECT * FROM <table> WHERE <условия на первичный ключ>
Старый 08.02.2010, 15:28   #7  
memo is offline
memo
Участник
 
5 / 10 (1) +
Регистрация: 30.09.2008
Цитата:
Сообщение от Sancho Посмотреть сообщение
делаем переменную типа Record со ссылкой на Employee
так ее и назовем.
в нужном месте пишем:
IF Employee.GET(EmployeeID) THEN
xxx := Employee.FIO

<table>.GET(<первичный ключ>)
это как
SELECT * FROM <table> WHERE <условия на первичный ключ>
спасибо, всё оказывается просто)
Старый 09.03.2010, 17:06   #8  
memo is offline
memo
Участник
 
5 / 10 (1) +
Регистрация: 30.09.2008
Т.к. я продолжаю работу над этим отчётом возникло несколько вопросов. Буду очень благодарен, если мне разъяснят несколько вещей.
Во-первых, возможно ли в 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;
Где TempGLAcc3 определена в С/AL Globals
Код:
Name		DataType	Subtype	Length
TempGLAcc3	Record		G/L Account
AnalysisViewEntry2 определена в Locals даннай функции как
Код:
Name			DataType	Subtype	Length
AnalysisViewEntry2	Record		Analysis View Entry
Так вот в Блоке 1 мне непонятно, что происходит, зачем в AnalysisViewEntry2 копируется содержимое записи AnalysisViewEntry, ведь AnalysisViewEntry2 должна содержать тоже, что и AnalysisViewEntry, или я не прав и AnalysisViewEntry2 не содержит никаких данных?
И такой же вопрос по Блоку 2, здесь похоже все данные из таблицы G/L Account(GLAcc), переносятся в TempGLAcc3, при этом GLAcc определена в Locals как
Код:
Name	DataType	Subtype	Length
GLAcc	Record		G/L Account
т.е. так же, как AnalysisViewEntry2 до этого, опять же вопрос, зачем это делается?
А самый главный вопрос, где взять документацию, чтобы я больше подобных вопросов не задавал?)
Заранее спасибо!
Старый 09.03.2010, 18:32   #9  
.Quattro. is offline
.Quattro.
Участник
Лучший по профессии 2009
 
194 / 22 (1) +++
Регистрация: 22.05.2006
Цитата:
Сообщение от 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;
Где TempGLAcc3 определена в С/AL Globals
Код:
Name		DataType	Subtype	Length
TempGLAcc3	Record		G/L Account
AnalysisViewEntry2 определена в Locals даннай функции как
Код:
Name			DataType	Subtype	Length
AnalysisViewEntry2	Record		Analysis View Entry
Так вот в Блоке 1 мне непонятно, что происходит, зачем в AnalysisViewEntry2 копируется содержимое записи AnalysisViewEntry, ведь AnalysisViewEntry2 должна содержать тоже, что и AnalysisViewEntry, или я не прав и AnalysisViewEntry2 не содержит никаких данных?
И такой же вопрос по Блоку 2, здесь похоже все данные из таблицы G/L Account(GLAcc), переносятся в TempGLAcc3, при этом GLAcc определена в Locals как
Код:
Name	DataType	Subtype	Length
GLAcc	Record		G/L Account
т.е. так же, как AnalysisViewEntry2 до этого, опять же вопрос, зачем это делается?
А самый главный вопрос, где взять документацию, чтобы я больше подобных вопросов не задавал?)
Заранее спасибо!
Как в SQL создать временную таблицу нужной структуры нельзя.
Но есть понятие временной тблицы на основании существующей. В приведенном Вами примере, если встать на TempGLAcc3 и нажать "свойства" (Shift+F4), то увидите такое свойство, как Temporary = Yes. Это означает, что работаем не с живыми данными, а используем только структуру, данные хранятся в оперативной памяти клиента.

Почитать можно по F1 из редактора кода, либо поискать руководство разработчика.
Старый 19.03.2010, 13:25   #10  
Storkich is offline
Storkich
Участник
 
149 / 10 (1) +
Регистрация: 08.03.2007
А если нужно чтоб две временные таблицы содеражали одно и тоже, например вложенный цикл по временной таблице, то нужно объявить временную таблицу как массив.
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:56.