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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.10.2010, 10:09   #1  
Pudd is offline
Pudd
Участник
 
34 / 10 (1) +
Регистрация: 31.03.2010
Импорт из Excel и номерные серии
Добрый день
Возник вопрос пытаюсь импортировать данные из Экселя одно из полей - код (1с) при импорте его надо заменить номерной серией из аксапты серия уже есть и использовалась в этом месте
Вопрос можно как то стандартно загрузить без программировния
Или нужно обязательно писать код под это?
Старый 14.10.2010, 10:18   #2  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Pudd Посмотреть сообщение
Добрый день
Возник вопрос пытаюсь импортировать данные из Экселя одно из полей - код (1с) при импорте его надо заменить номерной серией из аксапты серия уже есть и использовалась в этом месте
Вопрос можно как то стандартно загрузить без программировния
Или нужно обязательно писать код под это?
т.е. если я правильно понял, у Вас есть в табличке кодовое поле, которое заполняется автоматом при создании записи из номерной серии. Далее при импорте из экселя в эту таблицу Вам нужно что бы это поле так же как и обычно заполнилось из номерной серии?

тут все зависит от двух нюансов:

1. Как у Вас написан импорт из экселя. Если там уже прописано, что это кодовое поле заполняется из конкретного поля экселя, то без программирования не обойтись.
2. Как у вас реализовано выделение номера из серии в кодовое поле. Если только на форме при создании, то без программирования не обойтись. Если в инсерте таблички выполняется проверка на заполненность этого поля и в случае, если оно пустое, выполняется его заполнение по номерной серии, тогда можно без программирования.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 14.10.2010, 10:36   #3  
Pudd is offline
Pudd
Участник
 
34 / 10 (1) +
Регистрация: 31.03.2010
Может я слегка не до конца пояснил суть
Код который находится в екселе вообще может не учитыватся
в место него при импорте должна подставятся номерная серия (значения номерной серии могут быть просто подряд)
Я пытаюсь импортировать через Администрирование \Импорт из эксель
те создаю группу опеределения и д
Старый 14.10.2010, 10:52   #4  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,508 / 432 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от lev Посмотреть сообщение
Если в инсерте таблички выполняется проверка на заполненность этого поля и в случае, если оно пустое, выполняется его заполнение по номерной серии, тогда можно без программирования.
А там не doInsert ли отрабатывает? Я когда-то с похожей проблемой сталкивался...
__________________
С уважением,
Вячеслав
Старый 14.10.2010, 11:21   #5  
Pudd is offline
Pudd
Участник
 
34 / 10 (1) +
Регистрация: 31.03.2010
Цитата:
Сообщение от lev Посмотреть сообщение
Если в инсерте таблички выполняется проверка на заполненность этого поля и в случае, если оно пустое, выполняется его заполнение по номерной серии, тогда можно без программирования.
Если я правильно понял это в таблицы должен быть перекрыт метод insert
и там должен быть код обращения к номерной серии
у меня этот метод не перекрыт
т е в инсерте должно быть так
"ЕСЛИ поле пустое ТО
взять номерную серию
прибавить 1
вставить в поле "
Как, то что я щас написал сделать в аксапте? Пример бы
Старый 14.10.2010, 11:37   #6  
tricky is offline
tricky
Участник
 
140 / 64 (3) ++++
Регистрация: 03.05.2005
Адрес: Гуково
Цитата:
Сообщение от Pudd Посмотреть сообщение
Если я правильно понял это в таблицы должен быть перекрыт метод insert
и там должен быть код обращения к номерной серии
у меня этот метод не перекрыт
т е в инсерте должно быть так
"ЕСЛИ поле пустое ТО
взять номерную серию
прибавить 1
вставить в поле "
Как, то что я щас написал сделать в аксапте? Пример бы
Если упрощенно, то примерно вот так:
X++:
public void insert()
{
    NumberSeq           numberSeq;
;
    if (!this.MyCodeField)
    {
        numberSeq = numberSeq::newGetNumFromCode("MySeqCode",
                                                 true,
                                                 false);
        this.MyCodeField =  numberSeq.num();
    }
    super();
}
Но тут нужно проверить, если действительно pitersky прав, этот метод не отработает.
Старый 14.10.2010, 11:46   #7  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
никогда не залезал в код стандартного импорта из экселя. проверьте что там вызывается, если doInsert то исправьте на insert.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 14.10.2010, 12:07   #8  
Pudd is offline
Pudd
Участник
 
34 / 10 (1) +
Регистрация: 31.03.2010
попробовал я insert при нажатии Ctr+N на таблице он не срабртывает
срабатывает initValue но это вроде не то
а doinsert в таблице нет (т е его нельзя перекрыть)
Старый 14.10.2010, 12:16   #9  
diessever is offline
diessever
Участник
 
19 / 11 (1) +
Регистрация: 27.11.2002
Адрес: г.Пенза
Попробуйте использовать в группе определений закладку "Конвертация", там можно написать код генерирующий номерную серию, для вашего поля и поставить флаг запустить преобразование. Генерация серии описана чуть выше.
X++:
numberSeq = numberSeq::newGetNumFromCode("MySeqCode", true, false);
  =  numberSeq.num();
За это сообщение автора поблагодарили: Ivanhoe (1).
Старый 14.10.2010, 12:16   #10  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Ох уж эти программисты лишь бы попрограммировать.
При стандартном импорте можно написать дополнительное преобразование. Откройте группу определения, откройте настройку таблицы, на второй вкладке поставьте что-нибудь такое:
X++:
;
dimensions.num = NumberSeq::newGetNum(NumberSeqReference::findReference(typeId2ExtendedTypeId(typeid(CustomJournalId_RU))),false).num();
В моем примере загружается таблица Dimensions и заполняется его поле Num значением по номерной серии, настроенной на типе CustomJournalId_RU. Поменяйте на ваши значения и все заработает
__________________
Ivanhoe as is..
Старый 14.10.2010, 12:23   #11  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Pudd Посмотреть сообщение
попробовал я insert при нажатии Ctr+N на таблице он не срабртывает
срабатывает initValue но это вроде не то
а doinsert в таблице нет (т е его нельзя перекрыть)
insert срабатывает когда вы нажимаете Ctr+S (или переходите на другую строчку), т.е. сохраняете запись, тогда и происходит вставка строки в базу. Нажимая Ctr+N Вы просто создаете строчку, для того что бы заполнить в ней нужные поля

судя по этому посту советую вам почитать книгу по MorphX.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 14.10.2010, 12:53   #12  
titov is offline
titov
Участник
 
73 / 87 (3) ++++
Регистрация: 23.12.2005
Адрес: Казань
Цитата:
Сообщение от Pudd Посмотреть сообщение
Вопрос можно как то стандартно загрузить без программировния
Или нужно обязательно писать код под это?
Вот уж действительно лишь бы покодить.

Если у вас номерная серия, например, имеет формат "N######" и следующий номер = 20

откройте Excel файл - встаньте на первую строку импорта на поле и введите
"N000021", а ниже ячйку "N000022" - мышкой пометьте обе ячейки и тяните вниз включив автозаполнение - автоматом "N000023" ... "N0001001"

потом в аксапту - импорт из файла стандарт
потом в номерную серию и ставьте след номер = 1002 - делов на 5 мин

желательно сделать, когда нет пользователей или вы уверены, что номерную серию не тронут из сессии Аксапты

если формат "N######M" - сложнее, но тоже можно через формулу в Excel...

ps непрерывность не учитывается естественно

Последний раз редактировалось titov; 14.10.2010 в 12:56.
За это сообщение автора поблагодарили: EAlex (1).
Старый 14.10.2010, 12:56   #13  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от titov Посмотреть сообщение
Вот уж действительно лишь бы покодить.

Если у вас номерная серия, например, имеет формат "N######" и следующий номер = 20

откройте Excel файл - встаньте на первую строку импорта на поле и введите
"N000021", а ниже ячйку "N000022" - мышкой пометьте обе ячейки и тяните вниз включив автозаполнение - автоматом "N000023" ... "N0001001"

потом в аксапту - импорт из файла стандарт
потом в номерную серию и ставьте след номер = 1002 - делов на 5 мин

желательно сделать, когда нет пользователей или вы уверены, что номерную серию не тронут из сессии Аксапты

если формат "N######M" - сложнее, но тоже можно через формулу в Excel...
опасно так делать, номер из серии надо генерить в аксапте - так надежнее.
95% кто нибудь что нибудь тронет и поедет все коту под хвост.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 14.10.2010, 13:03   #14  
titov is offline
titov
Участник
 
73 / 87 (3) ++++
Регистрация: 23.12.2005
Адрес: Казань
Цитата:
Сообщение от lev Посмотреть сообщение
опасно так делать, номер из серии надо генерить в аксапте - так надежнее.
95% кто нибудь что нибудь тронет и поедет все коту под хвост.
Я понял так, что это "временная, одноразовая операция заливки справочника из 1с" при начале проекта и участник процесса НЕ владеет программированием.

А насчет опасности - дополню тогда 100% вариант - поставить перед импортом следующий номер = 1, проверить, что "N000001" есть в базе и номерная серия не непрерывная или нет списка не использованных номеров ==> тогда НИКТО не тронет. У пользователей Аксапты будет ошибка без использования номера.
Старый 14.10.2010, 13:10   #15  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от titov Посмотреть сообщение
Я понял так, что это "временная, одноразовая операция заливки справочника из 1с" при начале проекта и участник процесса НЕ владеет программированием.

А насчет опасности - дополню тогда 100% вариант - поставить перед импортом следующий номер = 1, проверить, что "N000001" есть в базе и номерная серия не непрерывная или нет списка не использованных номеров ==> тогда НИКТО не тронет. У пользователей Аксапты будет ошибка без использования номера.
имхо, ни к чему такое, когда прям при импорте, можно написать одну строчку и спать спокойно (благо пример был дан):

Цитата:
При стандартном импорте можно написать дополнительное преобразование. Откройте группу определения, откройте настройку таблицы, на второй вкладке поставьте что-нибудь такое:
X++:

dimensions.num = NumberSeq::newGetNum(NumberSeqReference::findReference(typeId2ExtendedTypeId(typeid(CustomJournalId_RU))),false).num();
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 14.10.2010, 15:18   #16  
Pudd is offline
Pudd
Участник
 
34 / 10 (1) +
Регистрация: 31.03.2010
не выдаеёт ошибку Не удалось скомпилировать run buffer.
код на закладке конвертация такой VehicleTrafficRoad.TrafficRoadId=NumberSeq::newGetNum(NumberSeqReference::findReference(typeId2ExtendedTypeId(typeid(VehicleTrafficRoadId))),false).num();
Старый 14.10.2010, 15:24   #17  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Ой, в моем примере пропала ";" в начале кода )
Цитата:
;
VehicleTrafficRoad.TrafficRoadId=NumberSeq::newGetNum(NumberSeqReference::findReference(typeId2ExtendedTypeId(typeid(VehicleTrafficRoadId))),false).num();
Кстати, символ был скушан тегом XPP.
__________________
Ivanhoe as is..
За это сообщение автора поблагодарили: Pudd (1).
Старый 14.10.2010, 16:03   #18  
Pudd is offline
Pudd
Участник
 
34 / 10 (1) +
Регистрация: 31.03.2010
Спасибо,все получилось
Старый 06.09.2011, 10:05   #19  
niksen is offline
niksen
Участник
Самостоятельные клиенты AX
 
284 / 28 (1) +++
Регистрация: 05.07.2011
Адрес: Татарстан
хм. Интересна другая ситуация: а если мы будем грузить допустим из 1с с кодом 1с, причём импорт у нас - это какой-то job, как нам узнать, какую неизменную часть нужно добавить из номерной серии, относящейся к данному объекту? Причём нам нужно грузить потом из аксапты в 1с, то есть эту неизменную часть нужно будет снова убирать, т.к. в 1с её нет (почему 1сники до сих пор об этом не догадаются, это же так удобно...). Как это должно выглядеть в коде? Какие классы смотреть?
Теги
excel, импорт данных, импорт файла

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Импорт из Excel S.A.M DAX: Администрирование 2 17.07.2008 13:01
Импорт из 'офисной БД' (Excel, Access) Gustav DAX: База знаний и проекты 4 07.06.2008 17:17
Номерные серии в новом учетном периоде sda_1978 DAX: Функционал 4 21.12.2006 10:55
Номерные серии для Контактных лиц в Axapta CRM Alex-bs DAX: Функционал 2 10.02.2006 11:29
Толстый - Тонкий и номерные серии renat DAX: Администрирование 9 22.05.2003 11:20

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

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

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