|
14.10.2010, 10:09 | #1 |
Участник
|
Импорт из Excel и номерные серии
Добрый день
Возник вопрос пытаюсь импортировать данные из Экселя одно из полей - код (1с) при импорте его надо заменить номерной серией из аксапты серия уже есть и использовалась в этом месте Вопрос можно как то стандартно загрузить без программировния Или нужно обязательно писать код под это? |
|
14.10.2010, 10:18 | #2 |
Ищущий знания...
|
Цитата:
Сообщение от Pudd
Добрый день
Возник вопрос пытаюсь импортировать данные из Экселя одно из полей - код (1с) при импорте его надо заменить номерной серией из аксапты серия уже есть и использовалась в этом месте Вопрос можно как то стандартно загрузить без программировния Или нужно обязательно писать код под это? тут все зависит от двух нюансов: 1. Как у Вас написан импорт из экселя. Если там уже прописано, что это кодовое поле заполняется из конкретного поля экселя, то без программирования не обойтись. 2. Как у вас реализовано выделение номера из серии в кодовое поле. Если только на форме при создании, то без программирования не обойтись. Если в инсерте таблички выполняется проверка на заполненность этого поля и в случае, если оно пустое, выполняется его заполнение по номерной серии, тогда можно без программирования.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
14.10.2010, 10:52 | #3 |
северный Будда
|
А там не doInsert ли отрабатывает? Я когда-то с похожей проблемой сталкивался...
__________________
С уважением, Вячеслав |
|
14.10.2010, 11:21 | #4 |
Участник
|
Цитата:
и там должен быть код обращения к номерной серии у меня этот метод не перекрыт т е в инсерте должно быть так "ЕСЛИ поле пустое ТО взять номерную серию прибавить 1 вставить в поле " Как, то что я щас написал сделать в аксапте? Пример бы |
|
14.10.2010, 11:37 | #5 |
Участник
|
Цитата:
Сообщение от Pudd
Если я правильно понял это в таблицы должен быть перекрыт метод insert
и там должен быть код обращения к номерной серии у меня этот метод не перекрыт т е в инсерте должно быть так "ЕСЛИ поле пустое ТО взять номерную серию прибавить 1 вставить в поле " Как, то что я щас написал сделать в аксапте? Пример бы X++: public void insert() { NumberSeq numberSeq; ; if (!this.MyCodeField) { numberSeq = numberSeq::newGetNumFromCode("MySeqCode", true, false); this.MyCodeField = numberSeq.num(); } super(); } |
|
14.10.2010, 10:36 | #6 |
Участник
|
Может я слегка не до конца пояснил суть
Код который находится в екселе вообще может не учитыватся в место него при импорте должна подставятся номерная серия (значения номерной серии могут быть просто подряд) Я пытаюсь импортировать через Администрирование \Импорт из эксель те создаю группу опеределения и д |
|
14.10.2010, 11:46 | #7 |
Ищущий знания...
|
никогда не залезал в код стандартного импорта из экселя. проверьте что там вызывается, если doInsert то исправьте на insert.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
14.10.2010, 12:07 | #8 |
Участник
|
попробовал я insert при нажатии Ctr+N на таблице он не срабртывает
срабатывает initValue но это вроде не то а doinsert в таблице нет (т е его нельзя перекрыть) |
|
14.10.2010, 12:16 | #9 |
Участник
|
Попробуйте использовать в группе определений закладку "Конвертация", там можно написать код генерирующий номерную серию, для вашего поля и поставить флаг запустить преобразование. Генерация серии описана чуть выше.
X++: numberSeq = numberSeq::newGetNumFromCode("MySeqCode", true, false); = numberSeq.num(); |
|
|
За это сообщение автора поблагодарили: Ivanhoe (1). |
14.10.2010, 12:23 | #10 |
Ищущий знания...
|
Цитата:
судя по этому посту советую вам почитать книгу по MorphX.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
14.10.2010, 12:53 | #11 |
Участник
|
Цитата:
Если у вас номерная серия, например, имеет формат "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 | #12 |
Ищущий знания...
|
Цитата:
Сообщение от titov
Вот уж действительно лишь бы покодить.
Если у вас номерная серия, например, имеет формат "N######" и следующий номер = 20 откройте Excel файл - встаньте на первую строку импорта на поле и введите "N000021", а ниже ячйку "N000022" - мышкой пометьте обе ячейки и тяните вниз включив автозаполнение - автоматом "N000023" ... "N0001001" потом в аксапту - импорт из файла стандарт потом в номерную серию и ставьте след номер = 1002 - делов на 5 мин желательно сделать, когда нет пользователей или вы уверены, что номерную серию не тронут из сессии Аксапты если формат "N######M" - сложнее, но тоже можно через формулу в Excel... 95% кто нибудь что нибудь тронет и поедет все коту под хвост.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
14.10.2010, 13:03 | #13 |
Участник
|
Цитата:
А насчет опасности - дополню тогда 100% вариант - поставить перед импортом следующий номер = 1, проверить, что "N000001" есть в базе и номерная серия не непрерывная или нет списка не использованных номеров ==> тогда НИКТО не тронет. У пользователей Аксапты будет ошибка без использования номера. |
|
14.10.2010, 12:16 | #14 |
Участник
|
Ох уж эти программисты лишь бы попрограммировать.
При стандартном импорте можно написать дополнительное преобразование. Откройте группу определения, откройте настройку таблицы, на второй вкладке поставьте что-нибудь такое: X++: ; dimensions.num = NumberSeq::newGetNum(NumberSeqReference::findReference(typeId2ExtendedTypeId(typeid(CustomJournalId_RU))),false).num();
__________________
Ivanhoe as is.. |
|
14.10.2010, 15:18 | #15 |
Участник
|
не выдаеёт ошибку Не удалось скомпилировать run buffer.
код на закладке конвертация такой VehicleTrafficRoad.TrafficRoadId=NumberSeq::newGetNum(NumberSeqReference::findReference(typeId2ExtendedTypeId(typeid(VehicleTrafficRoadId))),false).num(); |
|
14.10.2010, 15:24 | #16 |
Участник
|
Ой, в моем примере пропала ";" в начале кода )
Цитата:
;
VehicleTrafficRoad.TrafficRoadId=NumberSeq::newGetNum(NumberSeqReference::findReference(typeId2ExtendedTypeId(typeid(VehicleTrafficRoadId))),false).num();
__________________
Ivanhoe as is.. |
|
|
За это сообщение автора поблагодарили: Pudd (1). |
14.10.2010, 16:03 | #17 |
Участник
|
Спасибо,все получилось
|
|
06.09.2011, 10:05 | #18 |
Участник
|
хм. Интересна другая ситуация: а если мы будем грузить допустим из 1с с кодом 1с, причём импорт у нас - это какой-то job, как нам узнать, какую неизменную часть нужно добавить из номерной серии, относящейся к данному объекту? Причём нам нужно грузить потом из аксапты в 1с, то есть эту неизменную часть нужно будет снова убирать, т.к. в 1с её нет (почему 1сники до сих пор об этом не догадаются, это же так удобно...). Как это должно выглядеть в коде? Какие классы смотреть?
|
|