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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.01.2007, 11:27   #1  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Проблема заключается в том, что внутри метода ты никак, никоим образом, не сможешь узнать КОГДА был создан этот номер. В каком процессе. Не физическом, а логическом.
я бы сказал, что это очень сильное утверждение. Возможно, это сложно сделать, но наверное как-то извратиться можно.

например использовать вот это: AxPath://AOT/System%20Documentation/Classes/xApplication/curTransactionId
Старый 26.01.2007, 12:21   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,713 / 1201 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от belugin Посмотреть сообщение
я бы сказал, что это очень сильное утверждение. Возможно, это сложно сделать, но наверное как-то извратиться можно.

например использовать вот это: AxPath://AOT/System%20Documentation/Classes/xApplication/curTransactionId
Из описания не ясно, что собственно возвращает curTransactionId (у меня AXAPTA 2.5), но, судя по названию, это некий идентификатор транзакции? Т.е. нечто, настроенное ВНЕ процедуры. Причем Вы исходите из предположения, что сама транзакция имеет место быть. На каком основании?

Предположим, Вы обрабатываете последовательно 2 записи. Вы можете, находясь внутри процедуры обработки ОДНОЙ записи ответить на вопрос:

Сколько записей всего было обработано по этому же самому документу Excel?

Вы вообще обрабатываете НОВЫЙ документе Excel (первая строка этого документа) или же очередную строку того же самого документа Excel?

Каким образом знание идентификатора транзакции поможет ответить на этот вопрос?

Главная проблема данной задачи - это узнать первую или НЕ первую запись файла Excel сейчас обрабатываем. Дальше все просто. Но КАК находясь внутри процедуры обработки ОДНОЙ записи это узнать? Никак! Нужен внешний счетчик уже обработанных записей.
Старый 26.01.2007, 12:44   #3  
DTD is offline
DTD
Участник
 
183 / 18 (1) ++
Регистрация: 09.08.2005
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Главная проблема данной задачи - это узнать первую или НЕ первую запись файла Excel сейчас обрабатываем. Дальше все просто. Но КАК находясь внутри процедуры обработки ОДНОЙ записи это узнать? Никак! Нужен внешний счетчик уже обработанных записей.
Так это жe и есть оригинальный вопрос ...

Вставил код перед тем как вызывается эта функция .. просто решение не идеальное так как теоретически возможны конфликты между пользователями.

У меня есть еще несколько идей как это преодолеть, просто больше програмирования, можeт как нибудь потом попробую:

1. Сделать отдельную таблицу с полями: требуемый ID и какой нибудь уникальный идентификатор сессии. Просто писать только одно значнеие на сессию.

2. Этот код хранится в таблице в виде текста, возможно можно модифицировать его, меняя константу там перед вызовом цикла обработчика записай. . Таблица выглядит так как будто запись создается для каждого запуска импорта, т.е. конфликтов не должно быть.
__________________
_databaseTransDelete ... bl@$ !
Старый 26.01.2007, 13:04   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,713 / 1201 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от DTD Посмотреть сообщение
1. Сделать отдельную таблицу с полями: требуемый ID и какой нибудь уникальный идентификатор сессии. Просто писать только одно значнеие на сессию.
Вы запустили процедуру импорта первый раз - все замечательно.

Затем, не выходя из AXAPTA, находясь в той же сессии, запустили процедуру импорта еще раз.

И вот тут-то и проблема. Все идентификаторы те же самые, но импорт ДРУГОЙ. Нужен НОВЫЙ код. А Вы возьмете старое значение из того, что было сохранено.

Цитата:
Сообщение от DTD Посмотреть сообщение
2. Этот код хранится в таблице в виде текста, возможно можно модифицировать его, меняя константу там перед вызовом цикла обработчика записай. . Таблица выглядит так как будто запись создается для каждого запуска импорта, т.е. конфликтов не должно быть.
Т.е. каждая запись будет иметь свой идентификатор? Генерация кода происходит для каждой записи в отдельности или для всей процедуры импорта (всех записей) одного файла Excel?
Старый 26.01.2007, 13:48   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Вы запустили процедуру импорта первый раз - все замечательно.

Затем, не выходя из AXAPTA, находясь в той же сессии, запустили процедуру импорта еще раз.

И вот тут-то и проблема. Все идентификаторы те же самые, но импорт ДРУГОЙ. Нужен НОВЫЙ код. А Вы возьмете старое значение из того, что было сохранено.
По моему, здесь остается единственный вопрос - сброс сохраненного значения перед началом импорта (или после окончания).

В общем-то, для этого можно воспользоваться тем же классом Info - добавить в обработчик таймера (addTimeOut) свой класс, в котором сбрасывать сохраненный параметр. Параметр idle = true. Время срабатывания - минимальное.

Схема работы будет такая.
Сохраняем требуемый нам параметр и идентификатор таймера.
При запуске проверяем, что парамерт не установлен устанавливаем его. Запускаем таймер. Значение таймера сохраняем так же как параметр. Если при запуске таймер установлен, сбрасываем его.

В результате, как только импорт отработает, запустится метод по таймеру и сбросит сохраненный параметр.
__________________
Axapta v.3.0 sp5 kr2
Старый 26.01.2007, 15:27   #6  
DTD is offline
DTD
Участник
 
183 / 18 (1) ++
Регистрация: 09.08.2005
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Вы запустили процедуру импорта первый раз - все замечательно.

Затем, не выходя из AXAPTA, находясь в той же сессии, запустили процедуру импорта еще раз.

И вот тут-то и проблема. Все идентификаторы те же самые, но импорт ДРУГОЙ. Нужен НОВЫЙ код. А Вы возьмете старое значение из того, что было сохранено.
Это было понятно с самого начала и решено путем сбрасывания значения после каждого импорта, посмотрите пост #4 -" ...и инициализации / сбрасыванием его перед/после импортом таблицы в SysDataImportExcel/importTable"
__________________
_databaseTransDelete ... bl@$ !
Старый 26.01.2007, 15:31   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,713 / 1201 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от DTD Посмотреть сообщение
Это было понятно с самого начала и решено путем сбрасывания значения после каждого импорта, посмотрите пост #4 -" ...и инициализации / сбрасыванием его перед/после импортом таблицы в SysDataImportExcel/importTable"
У Вас произошла ошибка в процессе импорта. Флаг установился, но не сбросился. Ваши действия?

==============
Минуточку!

SysDataImportExcel/importTable относится к импорту ВСЕЙ таблицы? Не одной строки, а именно ВСЕХ строк? Если вот в этом методе и формировать твое значение NEW_PriceDiscId и записывать в спец.поле таблицы или переменную класса Global, а в методе разбора одной строки просто считывать это значение?

Последний раз редактировалось Владимир Максимов; 26.01.2007 в 15:40. Причина: Сразу не понял
Старый 26.01.2007, 18:50   #8  
DTD is offline
DTD
Участник
 
183 / 18 (1) ++
Регистрация: 09.08.2005
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
SysDataImportExcel/importTable относится к импорту ВСЕЙ таблицы? Не одной строки, а именно ВСЕХ строк? Если вот в этом методе и формировать твое значение NEW_PriceDiscId и записывать в спец.поле таблицы или переменную класса Global, а в методе разбора одной строки просто считывать это значение?


Гениально !
__________________
_databaseTransDelete ... bl@$ !
Старый 26.01.2007, 13:35   #9  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Главная проблема данной задачи - это узнать первую или НЕ первую запись файла Excel сейчас обрабатываем. Дальше все просто. Но КАК находясь внутри процедуры обработки ОДНОЙ записи это узнать? Никак! Нужен внешний счетчик уже обработанных записей.
Насколько я знаю ( AxPath://AOT/Classes/SysDataImport/importData?line=113&pos=13 ) импорт осуществляется в одной транзации. Таким образом зная ее идентификатор, можно запомнить его в глобальном кеше для клиента и а потом проверять не отличается ли он от предыдущего.

Это не точно. Надо проверить.
Теги
импорт, импорт из excel, критерии

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Экспорт стандартных отчетов в Excel ? ena_ax DAX: Программирование 14 12.04.2010 14:16
Экспорт в Excel exodus DAX: Программирование 1 23.01.2008 09:35
Экспорт из Excel... soin DAX: Администрирование 10 24.01.2007 21:32
Экспорт в Excel. Проблема с '\n' axaLearner DAX: Программирование 12 17.04.2006 18:43
Экспорт в Excel через WorkBooks.OpenText() Владимир Максимов DAX: Программирование 2 09.04.2004 17:16

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

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

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