Показать сообщение отдельно
Старый 05.07.2007, 11:27   #31  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от belugin Посмотреть сообщение
Вопрос про ЕК такой: что вы делаете когда он меняется? Например был клиент "Светик" а стал "Мотылек"? Или изменилось структура групп номенклатуры вместо
ПЛ0001 (Группа "плюшевые игрушки", изделие 0001 "Медвежонок "Миша"")
МЛ0001 (Группа "плюшевые игрушки для младшего возраста", , изделие 0001 "Медвежонок "Миша"")
переименовываете первичный ключ, даже если он участвует в InventTrans и иногда его надо сопоставлять с распечатанными год назад документами?
Была схожая задача, связанная с миграцией данных по номенклатуре из 1С и необходимостью поддерживать связь с 1С по кодам номенклатуры для выгрузки данных в бухгалтерию. В 1С у номенклатуры был код из одних цифр (от 00001 до 20000, к примеру) и название, в котором было по историческим причинам «зашифровано» 4-5 нечетко формализованных группировочных признаков номенклатуры. Причем алгоритм составления таких названий - не просто конкатенация: в зависимости от значений одних группировочных признаков другие могли не попадать в название или кодироваться иначе. На это все накладывалась еще одна особенность, связанная с тем, что для одной номенклатуры необходимо поддерживать три различных названия: бухгалтерское, управленческое для AX, схожее с тем, что пишут поставщики в своих документах, и управленческое для 1С, к которому привыкли все кладовщики и другого понимать они не хотят. Причем алгоритм формирования управленческих названий разный для каждого из нескольких направлений деятельности и связанной с ними номенклатуры (хотя группировочные признаки одни и те же). Так вот, решение было выбрано такое:
  • для номенклатур используются те же цифровые ничего не значащие коды, что и в 1С, и эти коды никодга не меняются для номенклатуры. В любом случае, коды ПЛ0001 или МЛ0001 imho ничуть не лучше просто 00001, который не обязан меняться вместе со структурой групп;
  • отказались от иерархического справочника номенклатуры в пользу плоской таблицы с фильтрами и сортировкой по любому группировочному признаку;
  • реализованы методы на InventTable, которые умееют генерить все нужные названия по разным алгоритмам в зависимости от значений группировочных признаков номенклатуры (на каждый группировочный признак есть отдельная таблица с несколькими полями, участвующими в формировании различных названий);
  • сгенеренные названия сохраняются в InventTxt, причем бухгалтерское - с кодом текущего используемого языка (русского), а управленческие - с дополнительно заведенными в LanguageTable кодами userDefined-"языков" по одному на каждый вид управленческих названий;
  • в ряд форм, таких как PurchQuickQuote/SalesQuickQuote, для поиска и фильтрации были выведены эти группировочные признаки номенклатуры, в другие формы просто через display-методы выведены соответствующие управленческие названия.
Цитата:
Сообщение от belugin Посмотреть сообщение
По факту многие (и я сам в том числе) пишут вот такие дисплей методы:
X++:
display InventName inventName()
{
      return InventTable::find(this.ItemID).Name;
}
Был создан вспомогательный класс, который, во-первых, отвечает за обновление названий (дергается из InventTable при изменении кодов группировочных признаков и из таблиц самих признаков при изменении записей в них), а во-вторых, вызываясь из display-методов на нужных таблицах (SalesLine/PurchLine, к примеру), по itemId и languageId возвращает нужное управленческое название из InventTxt, что работает довольно быстро с учетом настроек кэширования для этой таблицы.
Да, еще приходилось в заголовках форм выводить управленческие названия вместо TitleField2...

Последний раз редактировалось gl00mie; 05.07.2007 в 11:33. Причина: typo
За это сообщение автора поблагодарили: belugin (3).