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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.11.2003, 15:48   #1  
dyatlowsky is offline
dyatlowsky
Участник
 
45 / 10 (1) +
Регистрация: 13.11.2003
? автозаполнение настройки номенклатуры
Необходимо заполнить настройку номенклатуры полным списком складов (Номенклатурные единицы, кнопка Настройки - Местонахождение номенклатуры - Обзор). Список номенклатуры больше 9 тыс. ед., складов больше 100 шт.

Помогите, кто может!!!

Заранее большое спасибо!
Старый 19.11.2003, 16:00   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
О!
и что по вашем мнению может сделать сообщество ахфорума?

Выберите партнера, заплатите деньги и спите спокойно.

Если вы обратились сюда просто за моральной поддержкой, то...
Да. Вам тяжело. 9 тыщ... 100 складов... Это же 900 тыщ. записей! Да... (качая головой и цокая языком)

У вас в чем проблема?
Почему вы решили, что записи в местонахождении номенклатуры надо создавать для КАЖДОГО склада?
Проблема том, что записей много, или в том, что вы не знаете какой склад выбрать? а какой оставить по-умолчанию? Ну... тут вам никто кроме вас самих помочь не сможет. Тут обследование проводить надо

Или у вас проблема в том, что вы набивать руками эту прорву записей хотите?
Воспользуйтесь импортом. http://axapta.mazzy.ru/hints/import/

Или в увас проблема в том, что вы сгенерировать эти данные в текстовый файл не можете?
Старый 19.11.2003, 18:19   #3  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
А может людям нужен Job по заполнению InvenItemLocation нужными комбинациями...
Старый 20.11.2003, 00:58   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
ключевое слово "нужными"?
кому и по каким критериям?

комбинациями? т.е. даже не склады, а комбинации?
не думаю, что настолько продвинутые требования у dyatlowsky...

кто хочет написать job, который создает для каждой номелклатуры в InvenItemLocation записи со всеми складами?

кто нибудь хочет написать аналогичный job, но который может безболезненно запускаться повторно?

кто-нибудь знает где живет этот самый Факуард?
Старый 20.11.2003, 10:35   #5  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Решил рискнуть и написать такой Job
Для Axapta 3.0

PHP код:
static void Fill_InventItemLocation(Args _args)
{
    
SysOperationProgress    progressDlg;
    
InventItemLocation      InventItemLocation;
    
InventLocation          InventLocation;
    
InventDimSetup          InventDimSetup;
    
InventTable             InventTable;
    
InventBatch             InventBatch;
    
ConfigTable             ConfigTable;
    
InventColor             InventColor;
    
InventSize              InventSize;
    
InventDim               InventDim;
    
boolean                 _Config_Color_SizeLoopConfigLoopColorLoopSize;
    ;
    
#aviFiles

    
if (box::yesNo("Заполнить InventItemLocation?",DialogButton::No,"Сделайте выбор","") == DialogButton::Yes)
    {
        
progressDlg = new SysOperationProgress();
        
progressDlg.setAnimation(#AviFormLetter);
        
progressDlg.setCaption("Подождите...");
        
progressDlg.setText("Заполняется InventItemLocation");
        
progressDlg.setCount(1);

        while 
select InventTable where InventTable.ItemType != ItemType::Service
        
{
            while 
select InventLocation
            
{
                
_Config InventDimSetup::find(InventTable.DimGroupId,fieldname2id(tablename2id("InventDim"),"ConfigId")).Active;
                
_Color  InventDimSetup::find(InventTable.DimGroupId,fieldname2id(tablename2id("InventDim"),"InventColorId")).Active;
                
_Size   InventDimSetup::find(InventTable.DimGroupId,fieldname2id(tablename2id("InventDim"),"InventSizeId")).Active;

                
LoopConfig true;
                
LoopColor  true;
                
LoopSize   true;

                
select ConfigTable where ConfigTable.ItemId == InventTable.ItemId;
                while (
LoopConfig)
                {
                    
select InventColor where InventColor.ItemId == InventTable.ItemId;
                    while (
LoopColor)
                    {
                        
select InventSize where InventSize.ItemId == InventTable.ItemId;
                        while (
LoopSize)
                        {
                            
InventDim.clear();
                            if (
_ConfigInventDim.configId      ConfigTable.ConfigId;
                            if (
_Color)  InventDim.InventColorId InventColor.InventColorId;
                            if (
_Size)   InventDim.InventSizeId  InventSize.InventSizeId;
                            
InventDim.InventLocationId InventLocation.InventLocationId;
                            
InventDim InventDim::findOrCreate(InventDim);

                            
select InventItemLocation where InventItemLocation.ItemId      == InventTable.ItemId &&
                                                            
InventItemLocation.inventDimId == InventDim.inventDimId;
                            if (
InventItemLocation.RecId == 0)
                            {
                                
InventItemLocation.clear();
                                
InventItemLocation.ItemId       InventTable.ItemId;
                                
InventItemLocation.InventDimId  InventDim.InventDimId;
                                
InventItemLocation.insert();
                            }

                            
progressDlg.incCount();

                            
LoopSize = (InventSize.RecId != 0);
                            if (
LoopSizenext InventSize;
                        }
                        
LoopColor = (InventColor.RecId != 0);
                        if (
LoopColornext InventColor;
                    }
                    
LoopConfig = (ConfigTable.RecId != 0);
                    if (
LoopConfignext ConfigTable;
                }
            }
        }
    }

Старый 20.11.2003, 13:55   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
отлично.

==================
хотя вместо "select InventItemLocation where InventItemLocation"
лучше было сделать InventItemLocation::find
тогда код можно было бы упростить.

================
кроме того, если уж вы попытались сделать комбинации...
код учитыват только некоторые стандартные складские аналитики.

Вы не учитываете, что:
1. в системе есть инвентаризация партии. Т.е. вполне возможно стоит делать записи и по партиям
2. в системе можно добавить свои складские аналитики
3. в 3.0, для каждой номенклатуры, есть список допустимых комбинаций. И по идее надо бы заполнять не все комбинации, а только допустимые

==============
А почему вы не на query делали?
Я, конечно, могу ошибаться, но мне кажется, это упростило бы код и добавило возможность указывать диапазоны.

Кто нибудь хочет еще написать более оптимальный код?
Старый 20.11.2003, 14:58   #7  
Михаил Андреев is offline
Михаил Андреев
Участник
Компания АМАНД
Лучший по профессии 2009
 
1,295 / 239 (10) ++++++
Регистрация: 09.11.2001
Адрес: Химки, Московская область
Цитата:
Изначально опубликовано mazzy
Кто нибудь хочет еще написать более оптимальный код?
Вопрос: а зачем? Автор первого сообщения еще не сказал, что он хочет и зачем. А тут уже конкурс объявляется на лучшее решение...
__________________
Михаил Андреев
https://www.amand.ru
Старый 20.11.2003, 14:58   #8  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
2 mazzy
Цитата:
хотя вместо "select InventItemLocation where InventItemLocation"
лучше было сделать InventItemLocation::find
тогда код можно было бы упростить.
Там внутри find сложный код, котрый вносит замедление, решил его обойти.


Цитата:
кроме того, если уж вы попытались сделать комбинации...
код учитыват только некоторые стандартные складские аналитики.
Не спорю, но в InventItemLocation кажется только они используются.

Цитата:
А почему вы не на query делали?
Я, конечно, могу ошибаться, но мне кажется, это упростило бы код и добавило возможность указывать диапазоны.
Пытался написать одноразовый механизм (из спортивного интереса).
Главная сложность в том, что не известно какие номенклатурные аналитики у текущей номенклатуры активны.

Интересно, что было нужно автору топика (dyatlowsky)...
dyatlowsky, отзовитесь...
Старый 20.11.2003, 21:03   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано Михаил Андреев
Вопрос: а зачем?
А почему бы и нет?
Старый 20.11.2003, 21:11   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Re: 2 mazzy
Прежде всего, разрешите поблагодарить вас, Raz.
Вы сгенерировали РАБОТАЮЩЕЕ решение.
Пусть неоптимальное. Но оно работает. Не у всех это получается. А у вас получилось. Причем достаточно быстро.

Дальше в качестве брюзжания...
Цитата:
Изначально опубликовано raz
Там внутри find сложный код, котрый вносит замедление, решил его обойти.
Замедление стало быть?
Стало быть в стандартной функциональности навешали ненужных рюшек?

Цитата:
Изначально опубликовано raz
Пытался написать одноразовый механизм (из спортивного интереса).
Почему я против программирования?
Потому, что "одноразовые" механизмы делаются не только из спортивного интереса. К сожалению, одноразовые механизмы делаются в реальных внедрениях под давлением сроков, денеги и других неодолимых препятствий.
Хотя программировать люблю.

Цитата:
Изначально опубликовано raz
Главная сложность в том, что не известно какие номенклатурные аналитики у текущей номенклатуры активны.
Кому неизвестна? Аксапта это очень хорошо знает. Просто надо уметь к ней обращаться

Цитата:
Изначально опубликовано raz
Интересно, что было нужно автору топика (dyatlowsky)...
dyatlowsky, отзовитесь...
А какая разница?
Задача то все равно хорошая. Сама по себе. И очень-очень реальная.

Неужели никто не хочет попробовать?
Заодно проверите свои силы. Наверняка, узнаете много нового.
И узнаете каково это - программировать реальные задачи на Аксапте.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Планирование номенклатуры с типом Основное средство AlexeyBP DAX: Функционал 19 29.01.2009 07:42
Не могу изменить название номенклатуры slava09 DAX: Функционал 14 21.03.2007 18:01
Импорт списка номенклатуры Роман Кошелев DAX: База знаний и проекты 2 15.06.2006 16:52
Список допустимых комбинаций для номенклатуры ola DAX: Функционал 3 22.12.2004 17:58
Проблемы настройки прав доступа пользователям axot DAX: Администрирование 25 16.05.2002 10:47

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

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

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