05.07.2007, 11:27
|
#23
|
Участник
Регистрация: 28.11.2005
Адрес: Москва
|
Цитата:
Сообщение от 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). |