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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.12.2011, 02:44   #1  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
О сломанных шестеренках в большом моторе
С высоты 12 лет работы с AX и с чувством внутреннего превосходства практика над теоретиками хочется пофилософствовать о том, как мельчайшая недоделка делает невнедряемыми целые модули.

Самый вопиющий пример - это глобальная адресная книга в AX2009. Кажется, я уже об этом писал. Идея была неплохой: вести для большого концерна общие справочники клиентов и поставщиков, где каждый адрес, каждый телефон будет вводиться единственный раз. Был потрачен явно не один человеко-месяц на написание монструозной функциональности - и все коту под хвост из-за того, что в сердце адресов сидит одна до предела денормализованная таблица почтовых индексов.

Стоит уважающему себя концерну открыть отделение в соседней стране, как выясняется, что один и тот же город называется одновременно Москва и Moscow в зависимости от местоположения грузоотправителя. Кроме того, сам номер почтового индекса зависит от того, идет ли отгрузка на внутренний рынок или зарубеж: полякам, отсылающим товар полякам, не нужно ставить префикс PL-30111 в начале индекса, как если бы это делали организации за пределами Польши.

Ситуация исправилась только в AX2012, где появились таблицы городов итд. и получили раздельные коды и названия.
Старый 14.12.2011, 03:03   #2  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Другая прелестная функция - это импорт курса ЦБ РФ. Отличная, компактная программка. Запускается в пакетном режиме и навечно снимает головную боль бухгалтеру по задумке ее изобретателей. Поставив ее в пакетный режим, дату "До" оставляем пустой, чтобы каждый день программка без участия человека получала новые курсы.

Тонкость в том, однако, что в середине дня "сегодня" ЦБ РФ выдает курсы на "завтра". Программист же решил отличиться и заполняет пустую дату "До" сегодняшней датой, заведомо исключая публикуемые днем курсы. Получается, что программку надо настроить на чуть позже полночи по Москве и надеяться, что никто не примется отгружать или проводить что-либо в промежуток времени от полночи до момента запуска программки.
Старый 14.12.2011, 07:05   #3  
ViV is offline
ViV
Axapta Retail User
Самостоятельные клиенты AX
Axapta Retail User
 
200 / 79 (3) ++++
Регистрация: 14.09.2005
Цитата:
Сообщение от EVGL Посмотреть сообщение
Другая прелестная функция - это импорт курса ЦБ РФ. Отличная, компактная программка. Запускается в пакетном режиме и навечно снимает головную боль бухгалтеру по задумке ее изобретателей. Поставив ее в пакетный режим, дату "До" оставляем пустой, чтобы каждый день программка без участия человека получала новые курсы.

Тонкость в том, однако, что в середине дня "сегодня" ЦБ РФ выдает курсы на "завтра". Программист же решил отличиться и заполняет пустую дату "До" сегодняшней датой, заведомо исключая публикуемые днем курсы. Получается, что программку надо настроить на чуть позже полночи по Москве и надеяться, что никто не примется отгружать или проводить что-либо в промежуток времени от полночи до момента запуска программки.
А когда я на программе встречи клиентов с Microsoft задала этот вопрос мне четко сказали - что закачиваются все курсы, которые выложены на сайте (в т.ч. и на завтра). Получается сами не знают. Нам например критично курс на завтра нужен уже сегодня (проводится ряд документов, который его уже учитывать должен).
Старый 14.12.2011, 12:01   #4  
ALES is offline
ALES
Участник
Злыдни
 
220 / 45 (2) +++
Регистрация: 11.08.2004
Не стреляйте в пианиста он играет как умеет =)
Цитата:
Сообщение от EVGL Посмотреть сообщение
Другая прелестная функция - это импорт курса ЦБ РФ. ...

Программист же решил отличиться ...
Тут скорей не в программисте дело.. а в постановщиках и тестерах... Стоит запустить эту прелестную функцию при основной валюте отличной от рублей и будет очевидно, что локализация распространяется лишь на ту функциональность системы с которой локализаторы сталкивались
Старый 14.12.2011, 17:36   #5  
Morpheus is offline
Morpheus
Участник
Аватар для Morpheus
Соотечественники
 
602 / 167 (7) ++++++
Регистрация: 30.03.2005
Адрес: Київ-København-Düsseldorf
Цитата:
Сообщение от ALES Посмотреть сообщение
Тут скорей не в программисте дело.. а в постановщиках и тестерах...
Зри в корень! Менеджеры ж...лизы гонят ребят в шею... Главный критерий для их успеха- deadline.
За это сообщение автора поблагодарили: AlexSD (3), Bega (1), gene (2).
Старый 14.12.2011, 22:14   #6  
AlexSD is offline
AlexSD
Microsoft Dynamics
Сотрудники Microsoft Dynamics
 
257 / 302 (11) ++++++
Регистрация: 14.10.2003
Цитата:
Сообщение от ALES Посмотреть сообщение
Стоит запустить эту прелестную функцию при основной валюте отличной от рублей
Эм... Как бы не для того эта функциональность была задумана. ЦБ дает курсы по отношении к рублю. Зачем грузить такие курсы, если у вас основная валюта отлична от рублей?
Старый 14.12.2011, 22:11   #7  
AlexSD is offline
AlexSD
Microsoft Dynamics
Сотрудники Microsoft Dynamics
 
257 / 302 (11) ++++++
Регистрация: 14.10.2003
Цитата:
Сообщение от EVGL Посмотреть сообщение
Программист же решил отличиться
Откуда сведения?
Если бы не упомянутый программист не отличился бы, никакого пакетного режима загрузки курсов не было бы в помине.
Старый 14.12.2011, 09:47   #8  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от EVGL Посмотреть сообщение
... мельчайшая недоделка делает невнедряемыми целые модули...
Вы сгущаете краски. Если недоделка действительно мельчайшая, то и исправляется она легко и на внедряемость модуля не влияет.
Имейте снисхождение к разработчикам. С первого раза даже блины комом получаются.
За это сообщение автора поблагодарили: Bega (1).
Старый 14.12.2011, 10:03   #9  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
Вы сгущаете краски. Если недоделка действительно мельчайшая, то и исправляется она легко и на внедряемость модуля не влияет.
Имейте снисхождение к разработчикам. С первого раза даже блины комом получаются.
С первого? Уже 5-я версия и 7-й роллап.
Старый 14.12.2011, 10:07   #10  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Bega Посмотреть сообщение
С первого? Уже 5-я версия и 7-й роллап.
Ага, а ГАК что с Ax 1.0 в системе существует ?
Старый 14.12.2011, 11:07   #11  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
Ага, а ГАК что с Ax 1.0 в системе существует ?
Если говорить в целом о разработке бизнес-логики, "пекут блины" давно. Это у меня на клиенте что-то может получаться криво, не универсально. У MS огромные ресурсы, примеры для анализа и обобщения. Должны функционал делать без таких недостатков. В другой теме согласен с fed, лучше бы бизнес-логику развивали, а не занимались таким количеством технологических улучшений.
За это сообщение автора поблагодарили: Logger (1), Axal (1).
Старый 14.12.2011, 10:04   #12  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Кстати, при работе с ГАК может проявиться баг ядра при работе с виртуальными компаниями.
Предположим, табличка адресов address является виртуальной, тогда при выполнении запроса
X++:
        select crosscompany:dataAreaidList addressRelationshipMapping
            join partyAddressRelationship
                 where partyAddressRelationship.PartyId == _partyId && partyAddressRelationship.IsPrimary &&
                 (partyAddressRelationship.ValidFromDateTime <= _transDateTime) &&
                 (partyAddressRelationship.ValidToDateTime > _transDateTime) &&
                 partyAddressRelationship.RecId == addressRelationshipMapping.PartyAddressRelationshipRecId
            join address
                 where address.RecId        == addressRelationshipMapping.AddressRecId &&
                       address.DataAreaId   == addressRelationshipMapping.RefCompanyId;
тут
\Classes\DirPartyAddress\findPrimaryAddress

мы в результате ничего не получим.
Причина в том, что ядро при использовании директивы crosscompany: изменяет запрос к БД таким образом, что вместо одной записи с кодом виртуальной компании в address.DataAreaId, подзапрс вернет несколько записей, в каждой из которых address.DataAreaId стоит код невиртуаьной компании, входящей в виртуальную.
А к полю addressRelationshipMapping.RefCompanyId по которому идет джоин, такого преобразования не выполняется. в результате запрос работает неправильно.

X++:
SELECT A.ADDRESSRECID,A.REFCOMPANYID,A.PARTYADDRESSRELATIONSHIPRECID,A.MODIFIEDDATETIME,A.MODIFIEDBY,A.MODIFIEDTRANSACTIONID,A.CREATEDDATETIME,A.CREATEDBY,A.CREATEDTRANSACTIONID,A.DATAAREAID,A.RECVERSION,A.RECID,B.PARTYID,B.ISPRIMARY,B.STATUS,B.VALIDTODATETIME,B.VALIDTODATETIMETZID,B.VALIDFROMDATETIME,B.VALIDFROMDATETIMETZID,B.SHARED,B.MODIFIEDDATETIME,B.MODIFIEDBY,B.MODIFIEDTRANSACTIONID,B.CREATEDDATETIME,B.CREATEDBY,B.CREATEDTRANSACTIONID,B.DATAAREAID,B.RECVERSION,B.RECID,C.ADDRTABLEID,C.ADDRRECID,C.LINENUM,C.TYPE,C.NAME,C.ADDRESS,C.PHONE,C.TELEFAX,C.COUNTRYREGIONID,C.ZIPCODE,C.STATE,C.COUNTY,C.TELEX,C.URL,C.PHONELOCAL,C.CELLULARPHONE,C.EMAIL,C.TAXGROUP,C.CITY,C.STREET,C.PAGER,C.SMS,C.LATITUDE,C.LONGITUDE,C.SALESCALENDARID,C.TIMEZONE,C.DLVTERM,C.DLVMODE,C.SHIPCARRIERID,C.SHIPCARRIERBLINDSHIPMENT,C.SHIPCARRIERACCOUNT,C.SHIPCARRIERACCOUNTCODE,C.SHIPCARRIERRESIDENTIAL,C.TOWNID_RU,C.SETTLEMENTID_RU,C.STREETID_RU,C.FLAT_RU,C.BUILDING_RU,C.ESTATE_RU,C.GRD_ACCOUNTNUMOPTIMUMEX,C.GRD_TRANSPORTZONEID,C.GRD_RADIUS,C.GRD_COORDY,C.GRD_COORDX,C.GRD_ADDRESSREGNUM,C.GRD_ISBLOCKED,C.GRD_PARENTADDRESS,C.GRD_SOTYPEID,C.GRD_ADDRDESCRIPTION,C.GRD_ADDRID,C.GRD_KPP,C.GRD_CMCZONEID,C.GRD_SHOPTOTALAREA,C.GRD_DELIVERYTIME,C.GRD_DELIVERYTIMEDESCRIPTION,C.GRD_ABC,C.GRD_SELFSERVICE,C.GRD_FORWARDINGCOST,C.GRD_PICKINGQUEUE,C.GRD_FOR1C,C.GRD_SHOPNUM,C.GRD_SALESOUTLETSIGN,C.GRD_MARKETTYPEID,C.DEL_GRD_MONITORING,C.GRD_CUSTITEMGROUPID,C.GRD_TTCLOSEREASONID,C.GRD_STAMP,C.GRD_MARKETID,C.GRD_MAINADDRESSREGNUM,C.GRD_FAKTADDRESS,C.GRD_GLN,C.GRD_EXTID,C.GRD_DELIVERYDATE4DUEDATE,C.GRD_OPENDATE,C.GRD_COSMZONE,C.GRD_DELIVERYPERIOD,C.GRD_DELIVERYTIMEFROM,C.GRD_DELIVERYTIMETO,C.MODIFIEDDATETIME,C.DEL_MODIFIEDTIME,C.MODIFIEDBY,C.CREATEDDATETIME,C.DEL_CREATEDTIME,C.CREATEDBY,C.DATAAREAID,C.RECVERSION,C.RECID FROM (SELECT VIRT.ID AS DATAAREAID ,A.ADDRESSRECID,A.REFCOMPANYID,A.PARTYADDRESSRELATIONSHIPRECID,A.MODIFIEDDATETIME,A.MODIFIEDBY,A.MODIFIEDTRANSACTIONID,A.CREATEDDATETIME,A.CREATEDBY,A.CREATEDTRANSACTIONID,A.RECVERSION,A.RECID FROM DIRPARTYADDRESSRELATIONSHI1066 A INNER JOIN VIRTUALDATAAREALIST VIRT ON SUBSTR(NLS_LOWER(A.DATAAREAID),1,4) = SUBSTR(NLS_LOWER(VIRT.VIRTUALDATAAREA),1,4) WHERE (SUBSTR(NLS_LOWER(A.DATAAREAID),1,4) IN (NLS_LOWER(:in1),NLS_LOWER(:in2),NLS_LOWER(:in3),NLS_LOWER(:in4),NLS_LOWER(:in5),NLS_LOWER(:in6),NLS_LOWER(:in7),NLS_LOWER(:in8),NLS_LOWER(:in9),NLS_LOWER(:in10),NLS_LOWER(:in11),NLS_LOWER(:in12),NLS_LOWER(:in13),NLS_LOWER(:in14),NLS_LOWER(:in15),NLS_LOWER(:in16),NLS_LOWER(:in17),NLS_LOWER(:in18),NLS_LOWER(:in19),NLS_LOWER(:in20),NLS_LOWER(:in21),NLS_LOWER(:in22),NLS_LOWER(:in23),NLS_LOWER(:in24),NLS_LOWER(:in25),NLS_LOWER(:in26),NLS_LOWER(:in27),NLS_LOWER(:in28),NLS_LOWER(:in29),NLS_LOWER(:in30),NLS_LOWER(:in31),NLS_LOWER(:in32),NLS_LOWER(:in33),NLS_LOWER(:in34),NLS_LOWER(:in35),NLS_LOWER(:in36),NLS_LOWER(:in37),NLS_LOWER(:in38),NLS_LOWER(:in39),NLS_LOWER(:in40),NLS_LOWER(:in41),NLS_LOWER(:in42),NLS_LOWER(:in43),NLS_LOWER(:in44),NLS_LOWER(:in45),NLS_LOWER(:in46),NLS_LOWER(:in47),NLS_LOWER(:in48),NLS_LOWER(:in49),NLS_LOWER(:in50),NLS_LOWER(:in51),NLS_LOWER(:in52),NLS_LOWER(:in53),NLS_LOWER(:in54),NLS_LOWER(:in55),NLS_LOWER(:in56),NLS_LOWER(:in57),NLS_LOWER(:in58),NLS_LOWER(:in59),NLS_LOWER(:in60),NLS_LOWER(:in61),NLS_LOWER(:in62),NLS_LOWER(:in63),NLS_LOWER(:in64),NLS_LOWER(:in65),NLS_LOWER(:in66),NLS_LOWER(:in67),NLS_LOWER(:in68),NLS_LOWER(:in69),NLS_LOWER(:in70),NLS_LOWER(:in71),NLS_LOWER(:in72),NLS_LOWER(:in73),NLS_LOWER(:in74),NLS_LOWER(:in75),NLS_LOWER(:in76),NLS_LOWER(:in77),NLS_LOWER(:in78),NLS_LOWER(:in79),NLS_LOWER(:in80),NLS_LOWER(:in81),NLS_LOWER(:in82),NLS_LOWER(:in83),NLS_LOWER(:in84),NLS_LOWER(:in85),NLS_LOWER(:in86),NLS_LOWER(:in87),NLS_LOWER(:in88),NLS_LOWER(:in89),NLS_LOWER(:in90),NLS_LOWER(:in91),NLS_LOWER(:in92),NLS_LOWER(:in93),NLS_LOWER(:in94),NLS_LOWER(:in95),NLS_LOWER(:in96),NLS_LOWER(:in97),NLS_LOWER(:in98),NLS_LOWER(:in99),NLS_LOWER(:in100),NLS_LOWER(:in101),NLS_LOWER(:in102),NLS_LOWER(:in103),NLS_LOWER(:in104),NLS_LOWER(:in105),NLS_LOWER(:in106),NLS_LOWER(:in107),NLS_LOWER(:in108),NLS_LOWER(:in109),NLS_LOWER(:in110),NLS_LOWER(:in111),NLS_LOWER(:in112),NLS_LOWER(:in113),NLS_LOWER(:in114),NLS_LOWER(:in115),NLS_LOWER(:in116),NLS_LOWER(:in117),NLS_LOWER(:in118),NLS_LOWER(:in119),NLS_LOWER(:in120),NLS_LOWER(:in121),NLS_LOWER(:in122)) ) UNION ALL SELECT A.DATAAREAID ,A.ADDRESSRECID,A.REFCOMPANYID,A.PARTYADDRESSRELATIONSHIPRECID,A.MODIFIEDDATETIME,A.MODIFIEDBY,A.MODIFIEDTRANSACTIONID,A.CREATEDDATETIME,A.CREATEDBY,A.CREATEDTRANSACTIONID,A.RECVERSION,A.RECID FROM DIRPARTYADDRESSRELATIONSHI1066 A INNER JOIN DATAAREA DAT ON (SUBSTR(NLS_LOWER(A.DATAAREAID),1,4) = SUBSTR(NLS_LOWER(DAT.ID),1,4) AND DAT.ISVIRTUAL = 0) WHERE (SUBSTR(NLS_LOWER(A.DATAAREAID),1,4) IN (NLS_LOWER(:in123),NLS_LOWER(:in124),NLS_LOWER(:in125),NLS_LOWER(:in126),NLS_LOWER(:in127),NLS_LOWER(:in128),NLS_LOWER(:in129),NLS_LOWER(:in130),NLS_LOWER(:in131),NLS_LOWER(:in132),NLS_LOWER(:in133),NLS_LOWER(:in134),NLS_LOWER(:in135),NLS_LOWER(:in136),NLS_LOWER(:in137),NLS_LOWER(:in138),NLS_LOWER(:in139),NLS_LOWER(:in140),NLS_LOWER(:in141),NLS_LOWER(:in142),NLS_LOWER(:in143),NLS_LOWER(:in144),NLS_LOWER(:in145),NLS_LOWER(:in146),NLS_LOWER(:in147),NLS_LOWER(:in148),NLS_LOWER(:in149),NLS_LOWER(:in150),NLS_LOWER(:in151),NLS_LOWER(:in152),NLS_LOWER(:in153),NLS_LOWER(:in154),NLS_LOWER(:in155),NLS_LOWER(:in156),NLS_LOWER(:in157),NLS_LOWER(:in158),NLS_LOWER(:in159),NLS_LOWER(:in160),NLS_LOWER(:in161),NLS_LOWER(:in162),NLS_LOWER(:in163),NLS_LOWER(:in164),NLS_LOWER(:in165),NLS_LOWER(:in166),NLS_LOWER(:in167),NLS_LOWER(:in168),NLS_LOWER(:in169),NLS_LOWER(:in170),NLS_LOWER(:in171),NLS_LOWER(:in172),NLS_LOWER(:in173),NLS_LOWER(:in174),NLS_LOWER(:in175),NLS_LOWER(:in176),NLS_LOWER(:in177),NLS_LOWER(:in178),NLS_LOWER(:in179),NLS_LOWER(:in180),NLS_LOWER(:in181),NLS_LOWER(:in182),NLS_LOWER(:in183),NLS_LOWER(:in184),NLS_LOWER(:in185),NLS_LOWER(:in186),NLS_LOWER(:in187),NLS_LOWER(:in188),NLS_LOWER(:in189),NLS_LOWER(:in190),NLS_LOWER(:in191),NLS_LOWER(:in192),NLS_LOWER(:in193),NLS_LOWER(:in194),NLS_LOWER(:in195),NLS_LOWER(:in196),NLS_LOWER(:in197),NLS_LOWER(:in198),NLS_LOWER(:in199),NLS_LOWER(:in200),NLS_LOWER(:in201),NLS_LOWER(:in202),NLS_LOWER(:in203),NLS_LOWER(:in204),NLS_LOWER(:in205),NLS_LOWER(:in206),NLS_LOWER(:in207),NLS_LOWER(:in208),NLS_LOWER(:in209),NLS_LOWER(:in210),NLS_LOWER(:in211),NLS_LOWER(:in212),NLS_LOWER(:in213),NLS_LOWER(:in214),NLS_LOWER(:in215),NLS_LOWER(:in216),NLS_LOWER(:in217),NLS_LOWER(:in218),NLS_LOWER(:in219),NLS_LOWER(:in220),NLS_LOWER(:in221),NLS_LOWER(:in222),NLS_LOWER(:in223),NLS_LOWER(:in224),NLS_LOWER(:in225),NLS_LOWER(:in226),NLS_LOWER(:in227),NLS_LOWER(:in228),NLS_LOWER(:in229),NLS_LOWER(:in230),NLS_LOWER(:in231),NLS_LOWER(:in232),NLS_LOWER(:in233),NLS_LOWER(:in234),NLS_LOWER(:in235),NLS_LOWER(:in236),NLS_LOWER(:in237),NLS_LOWER(:in238),NLS_LOWER(:in239),NLS_LOWER(:in240),NLS_LOWER(:in241),NLS_LOWER(:in242),NLS_LOWER(:in243),NLS_LOWER(:in244)) )) A,(SELECT VIRT.ID AS DATAAREAID ,B.PARTYID,B.ISPRIMARY,B.STATUS,B.VALIDTODATETIME,B.VALIDFROMDATETIME,B.SHARED,B.MODIFIEDDATETIME,B.MODIFIEDBY,B.MODIFIEDTRANSACTIONID,B.CREATEDDATETIME,B.CREATEDBY,B.CREATEDTRANSACTIONID,B.RECVERSION,B.RECID,B.VALIDTODATETIMETZID,B.VALIDFROMDATETIMETZID FROM DIRPARTYADDRESSRELATIONSHIP B INNER JOIN VIRTUALDATAAREALIST VIRT ON SUBSTR(NLS_LOWER(B.DATAAREAID),1,4) = SUBSTR(NLS_LOWER(VIRT.VIRTUALDATAAREA),1,4) WHERE (SUBSTR(NLS_LOWER(B.DATAAREAID),1,4) IN (NLS_LOWER(:in245),NLS_LOWER(:in246),NLS_LOWER(:in247),NLS_LOWER(:in248),NLS_LOWER(:in249),NLS_LOWER(:in250),NLS_LOWER(:in251),NLS_LOWER(:in252),NLS_LOWER(:in253),NLS_LOWER(:in254),NLS_LOWER(:in255),NLS_LOWER(:in256),NLS_LOWER(:in257),NLS_LOWER(:in258),NLS_LOWER(:in259),NLS_LOWER(:in260),NLS_LOWER(:in261),NLS_LOWER(:in262),NLS_LOWER(:in263),NLS_LOWER(:in264),NLS_LOWER(:in265),NLS_LOWER(:in266),NLS_LOWER(:in267),NLS_LOWER(:in268),NLS_LOWER(:in269),NLS_LOWER(:in270),NLS_LOWER(:in271),NLS_LOWER(:in272),NLS_LOWER(:in273),NLS_LOWER(:in274),NLS_LOWER(:in275),NLS_LOWER(:in276),NLS_LOWER(:in277),NLS_LOWER(:in278),NLS_LOWER(:in279),NLS_LOWER(:in280),NLS_LOWER(:in281),NLS_LOWER(:in282),NLS_LOWER(:in283),NLS_LOWER(:in284),NLS_LOWER(:in285),NLS_LOWER(:in286),NLS_LOWER(:in287),NLS_LOWER(:in288),NLS_LOWER(:in289),NLS_LOWER(:in290),NLS_LOWER(:in291),NLS_LOWER(:in292),NLS_LOWER(:in293),NLS_LOWER(:in294),NLS_LOWER(:in295),NLS_LOWER(:in296),NLS_LOWER(:in297),NLS_LOWER(:in298),NLS_LOWER(:in299),NLS_LOWER(:in300),NLS_LOWER(:in301),NLS_LOWER(:in302),NLS_LOWER(:in303),NLS_LOWER(:in304),NLS_LOWER(:in305),NLS_LOWER(:in306),NLS_LOWER(:in307),NLS_LOWER(:in308),NLS_LOWER(:in309),NLS_LOWER(:in310),NLS_LOWER(:in311),NLS_LOWER(:in312),NLS_LOWER(:in313),NLS_LOWER(:in314),NLS_LOWER(:in315),NLS_LOWER(:in316),NLS_LOWER(:in317),NLS_LOWER(:in318),NLS_LOWER(:in319),NLS_LOWER(:in320),NLS_LOWER(:in321),NLS_LOWER(:in322),NLS_LOWER(:in323),NLS_LOWER(:in324),NLS_LOWER(:in325),NLS_LOWER(:in326),NLS_LOWER(:in327),NLS_LOWER(:in328),NLS_LOWER(:in329),NLS_LOWER(:in330),NLS_LOWER(:in331),NLS_LOWER(:in332),NLS_LOWER(:in333),NLS_LOWER(:in334),NLS_LOWER(:in335),NLS_LOWER(:in336),NLS_LOWER(:in337),NLS_LOWER(:in338),NLS_LOWER(:in339),NLS_LOWER(:in340),NLS_LOWER(:in341),NLS_LOWER(:in342),NLS_LOWER(:in343),NLS_LOWER(:in344),NLS_LOWER(:in345),NLS_LOWER(:in346),NLS_LOWER(:in347),NLS_LOWER(:in348),NLS_LOWER(:in349),NLS_LOWER(:in350),NLS_LOWER(:in351),NLS_LOWER(:in352),NLS_LOWER(:in353),NLS_LOWER(:in354),NLS_LOWER(:in355),NLS_LOWER(:in356),NLS_LOWER(:in357),NLS_LOWER(:in358),NLS_LOWER(:in359),NLS_LOWER(:in360),NLS_LOWER(:in361),NLS_LOWER(:in362),NLS_LOWER(:in363),NLS_LOWER(:in364),NLS_LOWER(:in365),NLS_LOWER(:in366)) ) UNION ALL SELECT B.DATAAREAID ,B.PARTYID,B.ISPRIMARY,B.STATUS,B.VALIDTODATETIME,B.VALIDFROMDATETIME,B.SHARED,B.MODIFIEDDATETIME,B.MODIFIEDBY,B.MODIFIEDTRANSACTIONID,B.CREATEDDATETIME,B.CREATEDBY,B.CREATEDTRANSACTIONID,B.RECVERSION,B.RECID,B.VALIDTODATETIMETZID,B.VALIDFROMDATETIMETZID FROM DIRPARTYADDRESSRELATIONSHIP B INNER JOIN DATAAREA DAT ON (SUBSTR(NLS_LOWER(B.DATAAREAID),1,4) = SUBSTR(NLS_LOWER(DAT.ID),1,4) AND DAT.ISVIRTUAL = 0) WHERE (SUBSTR(NLS_LOWER(B.DATAAREAID),1,4) IN (NLS_LOWER(:in367),NLS_LOWER(:in368),NLS_LOWER(:in369),NLS_LOWER(:in370),NLS_LOWER(:in371),NLS_LOWER(:in372),NLS_LOWER(:in373),NLS_LOWER(:in374),NLS_LOWER(:in375),NLS_LOWER(:in376),NLS_LOWER(:in377),NLS_LOWER(:in378),NLS_LOWER(:in379),NLS_LOWER(:in380),NLS_LOWER(:in381),NLS_LOWER(:in382),NLS_LOWER(:in383),NLS_LOWER(:in384),NLS_LOWER(:in385),NLS_LOWER(:in386),NLS_LOWER(:in387),NLS_LOWER(:in388),NLS_LOWER(:in389),NLS_LOWER(:in390),NLS_LOWER(:in391),NLS_LOWER(:in392),NLS_LOWER(:in393),NLS_LOWER(:in394),NLS_LOWER(:in395),NLS_LOWER(:in396),NLS_LOWER(:in397),NLS_LOWER(:in398),NLS_LOWER(:in399),NLS_LOWER(:in400),NLS_LOWER(:in401),NLS_LOWER(:in402),NLS_LOWER(:in403),NLS_LOWER(:in404),NLS_LOWER(:in405),NLS_LOWER(:in406),NLS_LOWER(:in407),NLS_LOWER(:in408),NLS_LOWER(:in409),NLS_LOWER(:in410),NLS_LOWER(:in411),NLS_LOWER(:in412),NLS_LOWER(:in413),NLS_LOWER(:in414),NLS_LOWER(:in415),NLS_LOWER(:in416),NLS_LOWER(:in417),NLS_LOWER(:in418),NLS_LOWER(:in419),NLS_LOWER(:in420),NLS_LOWER(:in421),NLS_LOWER(:in422),NLS_LOWER(:in423),NLS_LOWER(:in424),NLS_LOWER(:in425),NLS_LOWER(:in426),NLS_LOWER(:in427),NLS_LOWER(:in428),NLS_LOWER(:in429),NLS_LOWER(:in430),NLS_LOWER(:in431),NLS_LOWER(:in432),NLS_LOWER(:in433),NLS_LOWER(:in434),NLS_LOWER(:in435),NLS_LOWER(:in436),NLS_LOWER(:in437),NLS_LOWER(:in438),NLS_LOWER(:in439),NLS_LOWER(:in440),NLS_LOWER(:in441),NLS_LOWER(:in442),NLS_LOWER(:in443),NLS_LOWER(:in444),NLS_LOWER(:in445),NLS_LOWER(:in446),NLS_LOWER(:in447),NLS_LOWER(:in448),NLS_LOWER(:in449),NLS_LOWER(:in450),NLS_LOWER(:in451),NLS_LOWER(:in452),NLS_LOWER(:in453),NLS_LOWER(:in454),NLS_LOWER(:in455),NLS_LOWER(:in456),NLS_LOWER(:in457),NLS_LOWER(:in458),NLS_LOWER(:in459),NLS_LOWER(:in460),NLS_LOWER(:in461),NLS_LOWER(:in462),NLS_LOWER(:in463),NLS_LOWER(:in464),NLS_LOWER(:in465),NLS_LOWER(:in466),NLS_LOWER(:in467),NLS_LOWER(:in468),NLS_LOWER(:in469),NLS_LOWER(:in470),NLS_LOWER(:in471),NLS_LOWER(:in472),NLS_LOWER(:in473),NLS_LOWER(:in474),NLS_LOWER(:in475),NLS_LOWER(:in476),NLS_LOWER(:in477),NLS_LOWER(:in478),NLS_LOWER(:in479),NLS_LOWER(:in480),NLS_LOWER(:in481),NLS_LOWER(:in482),NLS_LOWER(:in483),NLS_LOWER(:in484),NLS_LOWER(:in485),NLS_LOWER(:in486),NLS_LOWER(:in487),NLS_LOWER(:in488)) )) B,(SELECT VIRT.ID AS DATAAREAID ,C.ADDRTABLEID,C.ADDRRECID,C.LINENUM,C.TYPE,C.NAME,C.ADDRESS,C.PHONE,C.TELEFAX,C.COUNTRYREGIONID,C.ZIPCODE,C.STATE,C.COUNTY,C.TELEX,C.URL,C.PHONELOCAL,C.CELLULARPHONE,C.EMAIL,C.TAXGROUP,C.CITY,C.STREET,C.PAGER,C.SMS,C.LATITUDE,C.LONGITUDE,C.SALESCALENDARID,C.TIMEZONE,C.DLVTERM,C.DLVMODE,C.SHIPCARRIERID,C.SHIPCARRIERBLINDSHIPMENT,C.SHIPCARRIERACCOUNT,C.SHIPCARRIERACCOUNTCODE,C.SHIPCARRIERRESIDENTIAL,C.TOWNID_RU,C.SETTLEMENTID_RU,C.STREETID_RU,C.FLAT_RU,C.BUILDING_RU,C.ESTATE_RU,C.GRD_ACCOUNTNUMOPTIMUMEX,C.GRD_TRANSPORTZONEID,C.GRD_RADIUS,C.GRD_COORDY,C.GRD_COORDX,C.GRD_ADDRESSREGNUM,C.GRD_ISBLOCKED,C.GRD_PARENTADDRESS,C.GRD_SOTYPEID,C.GRD_ADDRDESCRIPTION,C.GRD_ADDRID,C.GRD_KPP,C.GRD_CMCZONEID,C.GRD_SHOPTOTALAREA,C.GRD_DELIVERYTIME,C.GRD_DELIVERYTIMEDESCRIPTION,C.GRD_ABC,C.GRD_SELFSERVICE,C.GRD_FORWARDINGCOST,C.GRD_PICKINGQUEUE,C.GRD_FOR1C,C.GRD_SHOPNUM,C.GRD_SALESOUTLETSIGN,C.GRD_MARKETTYPEID,C.DEL_GRD_MONITORING,C.GRD_CUSTITEMGROUPID,C.GRD_TTCLOSEREASONID,C.GRD_STAMP,C.GRD_MARKETID,C.GRD_MAINADDRESSREGNUM,C.GRD_FAKTADDRESS,C.GRD_GLN,C.GRD_EXTID,C.GRD_DELIVERYDATE4DUEDATE,C.GRD_OPENDATE,C.GRD_COSMZONE,C.GRD_DELIVERYPERIOD,C.GRD_DELIVERYTIMEFROM,C.GRD_DELIVERYTIMETO,C.MODIFIEDDATETIME,C.DEL_MODIFIEDTIME,C.MODIFIEDBY,C.CREATEDDATETIME,C.DEL_CREATEDTIME,C.CREATEDBY,C.RECVERSION,C.RECID FROM ADDRESS C INNER JOIN VIRTUALDATAAREALIST VIRT ON SUBSTR(NLS_LOWER(C.DATAAREAID),1,4) = SUBSTR(NLS_LOWER(VIRT.VIRTUALDATAAREA),1,4) WHERE (SUBSTR(NLS_LOWER(C.DATAAREAID),1,4) IN (NLS_LOWER(:in489),NLS_LOWER(:in490),NLS_LOWER(:in491),NLS_LOWER(:in492),NLS_LOWER(:in493),NLS_LOWER(:in494),NLS_LOWER(:in495),NLS_LOWER(:in496),NLS_LOWER(:in497),NLS_LOWER(:in498),NLS_LOWER(:in499),NLS_LOWER(:in500),NLS_LOWER(:in501),NLS_LOWER(:in502),NLS_LOWER(:in503),NLS_LOWER(:in504),NLS_LOWER(:in505),NLS_LOWER(:in506),NLS_LOWER(:in507),NLS_LOWER(:in508),NLS_LOWER(:in509),NLS_LOWER(:in510),NLS_LOWER(:in511),NLS_LOWER(:in512),NLS_LOWER(:in513),NLS_LOWER(:in514),NLS_LOWER(:in515),NLS_LOWER(:in516),NLS_LOWER(:in517),NLS_LOWER(:in518),NLS_LOWER(:in519),NLS_LOWER(:in520),NLS_LOWER(:in521),NLS_LOWER(:in522),NLS_LOWER(:in523),NLS_LOWER(:in524),NLS_LOWER(:in525),NLS_LOWER(:in526),NLS_LOWER(:in527),NLS_LOWER(:in528),NLS_LOWER(:in529),NLS_LOWER(:in530),NLS_LOWER(:in531),NLS_LOWER(:in532),NLS_LOWER(:in533),NLS_LOWER(:in534),NLS_LOWER(:in535),NLS_LOWER(:in536),NLS_LOWER(:in537),NLS_LOWER(:in538),NLS_LOWER(:in539),NLS_LOWER(:in540),NLS_LOWER(:in541),NLS_LOWER(:in542),NLS_LOWER(:in543),NLS_LOWER(:in544),NLS_LOWER(:in545),NLS_LOWER(:in546),NLS_LOWER(:in547),NLS_LOWER(:in548),NLS_LOWER(:in549),NLS_LOWER(:in550),NLS_LOWER(:in551),NLS_LOWER(:in552),NLS_LOWER(:in553),NLS_LOWER(:in554),NLS_LOWER(:in555),NLS_LOWER(:in556),NLS_LOWER(:in557),NLS_LOWER(:in558),NLS_LOWER(:in559),NLS_LOWER(:in560),NLS_LOWER(:in561),NLS_LOWER(:in562),NLS_LOWER(:in563),NLS_LOWER(:in564),NLS_LOWER(:in565),NLS_LOWER(:in566),NLS_LOWER(:in567),NLS_LOWER(:in568),NLS_LOWER(:in569),NLS_LOWER(:in570),NLS_LOWER(:in571),NLS_LOWER(:in572),NLS_LOWER(:in573),NLS_LOWER(:in574),NLS_LOWER(:in575),NLS_LOWER(:in576),NLS_LOWER(:in577),NLS_LOWER(:in578),NLS_LOWER(:in579),NLS_LOWER(:in580),NLS_LOWER(:in581),NLS_LOWER(:in582),NLS_LOWER(:in583),NLS_LOWER(:in584),NLS_LOWER(:in585),NLS_LOWER(:in586),NLS_LOWER(:in587),NLS_LOWER(:in588),NLS_LOWER(:in589),NLS_LOWER(:in590),NLS_LOWER(:in591),NLS_LOWER(:in592),NLS_LOWER(:in593),NLS_LOWER(:in594),NLS_LOWER(:in595),NLS_LOWER(:in596),NLS_LOWER(:in597),NLS_LOWER(:in598),NLS_LOWER(:in599),NLS_LOWER(:in600),NLS_LOWER(:in601),NLS_LOWER(:in602),NLS_LOWER(:in603),NLS_LOWER(:in604),NLS_LOWER(:in605),NLS_LOWER(:in606),NLS_LOWER(:in607),NLS_LOWER(:in608),NLS_LOWER(:in609),NLS_LOWER(:in610)) ) UNION ALL SELECT C.DATAAREAID ,C.ADDRTABLEID,C.ADDRRECID,C.LINENUM,C.TYPE,C.NAME,C.ADDRESS,C.PHONE,C.TELEFAX,C.COUNTRYREGIONID,C.ZIPCODE,C.STATE,C.COUNTY,C.TELEX,C.URL,C.PHONELOCAL,C.CELLULARPHONE,C.EMAIL,C.TAXGROUP,C.CITY,C.STREET,C.PAGER,C.SMS,C.LATITUDE,C.LONGITUDE,C.SALESCALENDARID,C.TIMEZONE,C.DLVTERM,C.DLVMODE,C.SHIPCARRIERID,C.SHIPCARRIERBLINDSHIPMENT,C.SHIPCARRIERACCOUNT,C.SHIPCARRIERACCOUNTCODE,C.SHIPCARRIERRESIDENTIAL,C.TOWNID_RU,C.SETTLEMENTID_RU,C.STREETID_RU,C.FLAT_RU,C.BUILDING_RU,C.ESTATE_RU,C.GRD_ACCOUNTNUMOPTIMUMEX,C.GRD_TRANSPORTZONEID,C.GRD_RADIUS,C.GRD_COORDY,C.GRD_COORDX,C.GRD_ADDRESSREGNUM,C.GRD_ISBLOCKED,C.GRD_PARENTADDRESS,C.GRD_SOTYPEID,C.GRD_ADDRDESCRIPTION,C.GRD_ADDRID,C.GRD_KPP,C.GRD_CMCZONEID,C.GRD_SHOPTOTALAREA,C.GRD_DELIVERYTIME,C.GRD_DELIVERYTIMEDESCRIPTION,C.GRD_ABC,C.GRD_SELFSERVICE,C.GRD_FORWARDINGCOST,C.GRD_PICKINGQUEUE,C.GRD_FOR1C,C.GRD_SHOPNUM,C.GRD_SALESOUTLETSIGN,C.GRD_MARKETTYPEID,C.DEL_GRD_MONITORING,C.GRD_CUSTITEMGROUPID,C.GRD_TTCLOSEREASONID,C.GRD_STAMP,C.GRD_MARKETID,C.GRD_MAINADDRESSREGNUM,C.GRD_FAKTADDRESS,C.GRD_GLN,C.GRD_EXTID,C.GRD_DELIVERYDATE4DUEDATE,C.GRD_OPENDATE,C.GRD_COSMZONE,C.GRD_DELIVERYPERIOD,C.GRD_DELIVERYTIMEFROM,C.GRD_DELIVERYTIMETO,C.MODIFIEDDATETIME,C.DEL_MODIFIEDTIME,C.MODIFIEDBY,C.CREATEDDATETIME,C.DEL_CREATEDTIME,C.CREATEDBY,C.RECVERSION,C.RECID FROM ADDRESS C INNER JOIN DATAAREA DAT ON (SUBSTR(NLS_LOWER(C.DATAAREAID),1,4) = SUBSTR(NLS_LOWER(DAT.ID),1,4) AND DAT.ISVIRTUAL = 0) WHERE (SUBSTR(NLS_LOWER(C.DATAAREAID),1,4) IN (NLS_LOWER(:in611),NLS_LOWER(:in612),NLS_LOWER(:in613),NLS_LOWER(:in614),NLS_LOWER(:in615),NLS_LOWER(:in616),NLS_LOWER(:in617),NLS_LOWER(:in618),NLS_LOWER(:in619),NLS_LOWER(:in620),NLS_LOWER(:in621),NLS_LOWER(:in622),NLS_LOWER(:in623),NLS_LOWER(:in624),NLS_LOWER(:in625),NLS_LOWER(:in626),NLS_LOWER(:in627),NLS_LOWER(:in628),NLS_LOWER(:in629),NLS_LOWER(:in630),NLS_LOWER(:in631),NLS_LOWER(:in632),NLS_LOWER(:in633),NLS_LOWER(:in634),NLS_LOWER(:in635),NLS_LOWER(:in636),NLS_LOWER(:in637),NLS_LOWER(:in638),NLS_LOWER(:in639),NLS_LOWER(:in640),NLS_LOWER(:in641),NLS_LOWER(:in642),NLS_LOWER(:in643),NLS_LOWER(:in644),NLS_LOWER(:in645),NLS_LOWER(:in646),NLS_LOWER(:in647),NLS_LOWER(:in648),NLS_LOWER(:in649),NLS_LOWER(:in650),NLS_LOWER(:in651),NLS_LOWER(:in652),NLS_LOWER(:in653),NLS_LOWER(:in654),NLS_LOWER(:in655),NLS_LOWER(:in656),NLS_LOWER(:in657),NLS_LOWER(:in658),NLS_LOWER(:in659),NLS_LOWER(:in660),NLS_LOWER(:in661),NLS_LOWER(:in662),NLS_LOWER(:in663),NLS_LOWER(:in664),NLS_LOWER(:in665),NLS_LOWER(:in666),NLS_LOWER(:in667),NLS_LOWER(:in668),NLS_LOWER(:in669),NLS_LOWER(:in670),NLS_LOWER(:in671),NLS_LOWER(:in672),NLS_LOWER(:in673),NLS_LOWER(:in674),NLS_LOWER(:in675),NLS_LOWER(:in676),NLS_LOWER(:in677),NLS_LOWER(:in678),NLS_LOWER(:in679),NLS_LOWER(:in680),NLS_LOWER(:in681),NLS_LOWER(:in682),NLS_LOWER(:in683),NLS_LOWER(:in684),NLS_LOWER(:in685),NLS_LOWER(:in686),NLS_LOWER(:in687),NLS_LOWER(:in688),NLS_LOWER(:in689),NLS_LOWER(:in690),NLS_LOWER(:in691),NLS_LOWER(:in692),NLS_LOWER(:in693),NLS_LOWER(:in694),NLS_LOWER(:in695),NLS_LOWER(:in696),NLS_LOWER(:in697),NLS_LOWER(:in698),NLS_LOWER(:in699),NLS_LOWER(:in700),NLS_LOWER(:in701),NLS_LOWER(:in702),NLS_LOWER(:in703),NLS_LOWER(:in704),NLS_LOWER(:in705),NLS_LOWER(:in706),NLS_LOWER(:in707),NLS_LOWER(:in708),NLS_LOWER(:in709),NLS_LOWER(:in710),NLS_LOWER(:in711),NLS_LOWER(:in712),NLS_LOWER(:in713),NLS_LOWER(:in714),NLS_LOWER(:in715),NLS_LOWER(:in716),NLS_LOWER(:in717),NLS_LOWER(:in718),NLS_LOWER(:in719),NLS_LOWER(:in720),NLS_LOWER(:in721),NLS_LOWER(:in722),NLS_LOWER(:in723),NLS_LOWER(:in724),NLS_LOWER(:in725),NLS_LOWER(:in726),NLS_LOWER(:in727),NLS_LOWER(:in728),NLS_LOWER(:in729),NLS_LOWER(:in730),NLS_LOWER(:in731),NLS_LOWER(:in732)) )) C WHERE (SUBSTR(NLS_LOWER(A.DATAAREAID),1,4) IN (NLS_LOWER(:in733),NLS_LOWER(:in734),NLS_LOWER(:in735),NLS_LOWER(:in736),NLS_LOWER(:in737),NLS_LOWER(:in738),NLS_LOWER(:in739),NLS_LOWER(:in740),NLS_LOWER(:in741),NLS_LOWER(:in742),NLS_LOWER(:in743),NLS_LOWER(:in744),NLS_LOWER(:in745),NLS_LOWER(:in746),NLS_LOWER(:in747),NLS_LOWER(:in748),NLS_LOWER(:in749),NLS_LOWER(:in750),NLS_LOWER(:in751),NLS_LOWER(:in752),NLS_LOWER(:in753),NLS_LOWER(:in754),NLS_LOWER(:in755),NLS_LOWER(:in756),NLS_LOWER(:in757),NLS_LOWER(:in758),NLS_LOWER(:in759),NLS_LOWER(:in760),NLS_LOWER(:in761),NLS_LOWER(:in762),NLS_LOWER(:in763),NLS_LOWER(:in764),NLS_LOWER(:in765),NLS_LOWER(:in766),NLS_LOWER(:in767),NLS_LOWER(:in768),NLS_LOWER(:in769),NLS_LOWER(:in770),NLS_LOWER(:in771),NLS_LOWER(:in772),NLS_LOWER(:in773),NLS_LOWER(:in774),NLS_LOWER(:in775),NLS_LOWER(:in776),NLS_LOWER(:in777),NLS_LOWER(:in778),NLS_LOWER(:in779),NLS_LOWER(:in780),NLS_LOWER(:in781),NLS_LOWER(:in782),NLS_LOWER(:in783),NLS_LOWER(:in784),NLS_LOWER(:in785),NLS_LOWER(:in786),NLS_LOWER(:in787),NLS_LOWER(:in788),NLS_LOWER(:in789),NLS_LOWER(:in790),NLS_LOWER(:in791),NLS_LOWER(:in792),NLS_LOWER(:in793),NLS_LOWER(:in794),NLS_LOWER(:in795),NLS_LOWER(:in796),NLS_LOWER(:in797),NLS_LOWER(:in798),NLS_LOWER(:in799),NLS_LOWER(:in800),NLS_LOWER(:in801),NLS_LOWER(:in802),NLS_LOWER(:in803),NLS_LOWER(:in804),NLS_LOWER(:in805),NLS_LOWER(:in806),NLS_LOWER(:in807),NLS_LOWER(:in808),NLS_LOWER(:in809),NLS_LOWER(:in810),NLS_LOWER(:in811),NLS_LOWER(:in812),NLS_LOWER(:in813),NLS_LOWER(:in814),NLS_LOWER(:in815),NLS_LOWER(:in816),NLS_LOWER(:in817),NLS_LOWER(:in818),NLS_LOWER(:in819),NLS_LOWER(:in820),NLS_LOWER(:in821),NLS_LOWER(:in822),NLS_LOWER(:in823),NLS_LOWER(:in824),NLS_LOWER(:in825),NLS_LOWER(:in826),NLS_LOWER(:in827),NLS_LOWER(:in828),NLS_LOWER(:in829),NLS_LOWER(:in830),NLS_LOWER(:in831),NLS_LOWER(:in832),NLS_LOWER(:in833),NLS_LOWER(:in834),NLS_LOWER(:in835),NLS_LOWER(:in836),NLS_LOWER(:in837),NLS_LOWER(:in838),NLS_LOWER(:in839),NLS_LOWER(:in840),NLS_LOWER(:in841),NLS_LOWER(:in842),NLS_LOWER(:in843),NLS_LOWER(:in844),NLS_LOWER(:in845),NLS_LOWER(:in846),NLS_LOWER(:in847),NLS_LOWER(:in848),NLS_LOWER(:in849),NLS_LOWER(:in850),NLS_LOWER(:in851),NLS_LOWER(:in852),NLS_LOWER(:in853),NLS_LOWER(:in854)) ) AND (((((SUBSTR(NLS_LOWER(B.PARTYID),1,20)=NLS_LOWER(:in855)) AND (B.ISPRIMARY=:in856)) AND (B.VALIDFROMDATETIME<=:in857)) AND (B.VALIDTODATETIME>:in858)) AND (B.RECID=A.PARTYADDRESSRELATIONSHIPRECID AND (SUBSTR(NLS_LOWER(B.DATAAREAID),1,4) = SUBSTR(NLS_LOWER(A.DATAAREAID),1,4)))) AND ((SUBSTR(NLS_LOWER(C.DATAAREAID),1,4) IN (NLS_LOWER(:in859),NLS_LOWER(:in860),NLS_LOWER(:in861),NLS_LOWER(:in862),NLS_LOWER(:in863),NLS_LOWER(:in864),NLS_LOWER(:in865),NLS_LOWER(:in866),NLS_LOWER(:in867),NLS_LOWER(:in868),NLS_LOWER(:in869),NLS_LOWER(:in870),NLS_LOWER(:in871),NLS_LOWER(:in872),NLS_LOWER(:in873),NLS_LOWER(:in874),NLS_LOWER(:in875),NLS_LOWER(:in876),NLS_LOWER(:in877),NLS_LOWER(:in878),NLS_LOWER(:in879),NLS_LOWER(:in880),NLS_LOWER(:in881),NLS_LOWER(:in882),NLS_LOWER(:in883),NLS_LOWER(:in884),NLS_LOWER(:in885),NLS_LOWER(:in886),NLS_LOWER(:in887),NLS_LOWER(:in888),NLS_LOWER(:in889),NLS_LOWER(:in890),NLS_LOWER(:in891),NLS_LOWER(:in892),NLS_LOWER(:in893),NLS_LOWER(:in894),NLS_LOWER(:in895),NLS_LOWER(:in896),NLS_LOWER(:in897),NLS_LOWER(:in898),NLS_LOWER(:in899),NLS_LOWER(:in900),NLS_LOWER(:in901),NLS_LOWER(:in902),NLS_LOWER(:in903),NLS_LOWER(:in904),NLS_LOWER(:in905),NLS_LOWER(:in906),NLS_LOWER(:in907),NLS_LOWER(:in908),NLS_LOWER(:in909),NLS_LOWER(:in910),NLS_LOWER(:in911),NLS_LOWER(:in912),NLS_LOWER(:in913),NLS_LOWER(:in914),NLS_LOWER(:in915),NLS_LOWER(:in916),NLS_LOWER(:in917),NLS_LOWER(:in918),NLS_LOWER(:in919),NLS_LOWER(:in920),NLS_LOWER(:in921),NLS_LOWER(:in922),NLS_LOWER(:in923),NLS_LOWER(:in924),NLS_LOWER(:in925),NLS_LOWER(:in926),NLS_LOWER(:in927),NLS_LOWER(:in928),NLS_LOWER(:in929),NLS_LOWER(:in930),NLS_LOWER(:in931),NLS_LOWER(:in932),NLS_LOWER(:in933),NLS_LOWER(:in934),NLS_LOWER(:in935),NLS_LOWER(:in936),NLS_LOWER(:in937),NLS_LOWER(:in938),NLS_LOWER(:in939),NLS_LOWER(:in940),NLS_LOWER(:in941),NLS_LOWER(:in942),NLS_LOWER(:in943),NLS_LOWER(:in944),NLS_LOWER(:in945),NLS_LOWER(:in946),NLS_LOWER(:in947),NLS_LOWER(:in948),NLS_LOWER(:in949),NLS_LOWER(:in950),NLS_LOWER(:in951),NLS_LOWER(:in952),NLS_LOWER(:in953),NLS_LOWER(:in954),NLS_LOWER(:in955),NLS_LOWER(:in956),NLS_LOWER(:in957),NLS_LOWER(:in958),NLS_LOWER(:in959),NLS_LOWER(:in960),NLS_LOWER(:in961),NLS_LOWER(:in962),NLS_LOWER(:in963),NLS_LOWER(:in964),NLS_LOWER(:in965),NLS_LOWER(:in966),NLS_LOWER(:in967),NLS_LOWER(:in968),NLS_LOWER(:in969),NLS_LOWER(:in970),NLS_LOWER(:in971),NLS_LOWER(:in972),NLS_LOWER(:in973),NLS_LOWER(:in974),NLS_LOWER(:in975),NLS_LOWER(:in976),NLS_LOWER(:in977),NLS_LOWER(:in978),NLS_LOWER(:in979),NLS_LOWER(:in980)) ) AND ((C.RECID=A.ADDRESSRECID AND (SUBSTR(NLS_LOWER(C.DATAAREAID),1,4) = SUBSTR(NLS_LOWER(A.DATAAREAID),1,4))) AND (SUBSTR(NLS_LOWER(C.DATAAREAID),1,4)=SUBSTR(NLS_LOWER(A.REFCOMPANYID),1,4) AND (SUBSTR(NLS_LOWER(C.DATAAREAID),1,4) = SUBSTR(NLS_LOWER(A.DATAAREAID),1,4)))))
Пока не нашел ничего лучше кроме как разорвать запрос на 2.
отдельно выполнить
X++:
            select crosscompany:dataAreaidList addressRelationshipMapping
                where   addressRelationshipMapping.RefCompanyId == GRD_address.dataAreaId
                join    tableId
                from    partyAddressRelationship
                where   partyAddressRelationship.RecId              ==  addressRelationshipMapping.PartyAddressRelationshipRecId
                    &&  partyAddressRelationship.PartyId            ==  _partyId
                    &&  partyAddressRelationship.IsPrimary
                    &&  partyAddressRelationship.ValidFromDateTime  <=  _transDateTime
                    &&  partyAddressRelationship.ValidToDateTime    >   _transDateTime
А затем отдельно в нужной компании начитать address
За это сообщение автора поблагодарили: macklakov (5), lev (5), gl00mie (7).
Старый 14.12.2011, 14:19   #13  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Отчасти согласен с EVGL, правда не настолько категорично , отчасти с другими участниками поста. Слишком много уж багов в AX2009 как в функционале, так и в области разработки (у нас только SysSetupFormRun вовсю пестрит usr слоем, до AX2009 мы его ни разу не трогали). В тройке я такого количества багов не припомню. Конечно, EVGL про невнедряемость модулей приукрасил . Просто не приятно, когда приходиться допиливать/исправлять вещи/баги, которые должны были встретиться во время тестирования. А вот как проходит тестирование в MS, лично для меня пока не понятно. Хотя это уже и другая ветка. Вспомните про баг в корректировке налога Заказа на продажу? Он тихо мирно сидел и никому не показывался когда в строках заказа была всего одна строчка. Как только 2-е и более бага тук как тут. И обнаружили его не тестеры MS, а пользователи в режиме рабочей эксплуатации. Сразу видно, что тестирование производилось не так тщательно. Я считаю, что нужно более ответственно и скрупулезно относиться к тестированию. Хотя тут есть один интересный разворот событий. Хорошо, если во время теста обнаружилась не значительная ошибка, допустим вычислительная. С этим мне примерно все понятно. Подходим к программисту, рассказываем, исправляем. А как поступят, если во время теста (т.е. после потраченного времени на постановку и программирование) обнаружилась глобальная ошибка? Ошибка, по которой будет видно, что логика постановки изначально была неверна или не до конца точна. Куда пойдут к программисту или постановщику, и пойдут ли куда-нибудь вообще не знаю?
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
За это сообщение автора поблагодарили: Logger (3).
Старый 14.12.2011, 14:38   #14  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Цитата:
Сообщение от Pustik Посмотреть сообщение
... обнаружили его не тестеры MS, а пользователи в режиме рабочей эксплуатации...
В некоторых компаниях - разработчиках это считается нормальной практикой. "Лучший тестер - это конечный пользователь". И бесплатный совершенно, добавлю

NP
__________________
Best Regards,
Roman
Старый 14.12.2011, 15:09   #15  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Pustik Посмотреть сообщение
Вспомните про баг в корректировке налога Заказа на продажу? Он тихо мирно сидел и никому не показывался когда в строках заказа была всего одна строчка. Как только 2-е и более бага тук как тут. И обнаружили его не тестеры MS, а пользователи в режиме рабочей эксплуатации. Сразу видно, что тестирование производилось не так тщательно.
Можно подробнее рассказать ?
Очень интересно.
Старый 14.12.2011, 15:16   #16  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Не работает корректировка налога в стандартной AX2009
В последних двух роллапах уже исправлено, исправление несколько сложнее, чем у Pustik'а.
За это сообщение автора поблагодарили: Logger (15).
Старый 14.12.2011, 16:52   #17  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
VendInvoiceInfoTable и "трехстороннее сопоставление"
Еще один кошмарный образчик неудавшейся функциональности - это т.н. "трехсторонее сопоставление": проверка отклонений по цене и количеству при разноске счета от поставщика. Основывается это на предварительной разноске отгрузочной накладной. В силу особенностей локализации в России это практически не используется, поэтому здесь присутствующие не смогли сполна насладиться мощью этого решения.

Суть в том, что в AX2009 появилась возможность разноски счета (RU: накладной) с количеством из предварительно оприходованной накладной (RU: отборочной накладной, по сути - акт прихода на склад). Раньше нам рассказывали, что такая возможность совершенно ни к чему - разнести накладную с проверкой по акту прихода. Когда они эту возможность предоставили, этот метод разноски почему-то сразу оказался режимом по умолчанию.


Одновременно была добавлена возможность попытаться разнести заново счет, в котором были ошибки. Недоразнесенный счет попадает в таблицу VendInvoiceInfoTable, а его связи с отборочными накладными сохраняются в таблице VendInvoiceInfoSubTable и -Line. На тех же данных основана и проверка количества/цены - пресловутое "трехстороннее сопоставление".

Комбинация этих двух фичей породила монстра. В каких-то особых ситуациях VendInvoiceInfoTable переходит в статус Ожидание, пробивая при этом границы транзакции, и зависает навсегда, причем заново ввести счет невозможно: его источник - отборочная накладная - считается заблокированной и ждущей обработки другим пользователем. Форма разноски счета просто остается навсегда пустой и не выбирает больше закупку.

Теоретически, из клинча можно выйти через форму РсП / Места / Необработанные заказы на покупку - накладные, однако разрабочики избрали оригинальный способ взаимодействия с пользователем: если форма не пустая, а параметр "Трехсторонне сопоставление..." в параметрах модуля неактивен, пользователю предлагается продолжить работу в дебаггере (Debug::assert() прямо из источника данных). Можете представить себе мое злорадство, когда как-то раз представитель Microsoft сам нарвался на эту мину, теперь уже в версии AX2012.

Результат: у пользователя вообще нет шанса вырваться из порочного круга. Консультанту же рекомендуется залезть в обозреватель таблиц и стереть все, что начинается на VendInvoiceInfo*.

Можете теперь представить мое недоверие к самой функции "трехстороннего сопоставления", теоретически очень важной и полезной. Мне просто страшно лезть в этот ящик Пандоры.
За это сообщение автора поблагодарили: Pustik (5), miaa (1), Ivanhoe (3), AraraT® (2).
Старый 14.12.2011, 23:23   #18  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от EVGL Посмотреть сообщение
Еще один кошмарный образчик неудавшейся функциональности - это т.н. "трехсторонее сопоставление":
Ага, а еще это "многостороннее сопоставление" убило возможность корректировки входящего НДС. Ведь исходящий НДС мы должны посчитать по ставке 18% (ну или по той ставке, которой надо) - а входящий по большому счету - мы не считать должны, а должны забить таким, каким он к нам пришел в счет-фактуре, даже если он отличается от расчетного.
Возможно, конечно - что виновато в этом не это сопоставление - но, учитывая схему его работы - ручная корректировка входящего НДС совершенно не вписывается в идеологию сопоставления. А проанализировав код, который лишил возможности корректировать НДС - я все-таки пришел к выводу - что отключили эту функциональность исключительно ради функциональности трехстороннего сопоставления.

Речь идет о форме Настройка-Налог из заказов на покупку. Вкладка Корректировка появляется только для исходящего налога (форма TaxTmpWorkTrans).

Вот что на форме прописано в методе init (особенно порадовало - КАК это написано - formstr и название формы с апострофами):
X++:
......     
        switch (callerForm.name())
        {
            case formstr('PurchTable') :

                regulationTab.visible(false);
                tmpTaxRegulation_ds.allowCreate(false);
                tmpTaxRegulation_ds.allowDelete(false);
                break;
......
Здесь - relulationTab - как раз та самая закладка Коррекция

Метод setAllowEdit той же формы:
X++:
    if (callerForm)
    {
        if (callerForm.name() == formstr('PurchTable'))
        {
            purchaseOrderForm = true;
        }
    }

    if (sourceSingleLine || (!taxRegulation.taxLinesExist() && !invoiceRegister)
        || purchaseOrderForm == true)
    {
        tmpTaxRegulation_ds.allowEdit(false);
        taxRegulationField.allowEdit(false);
Что любопытно:
1. "Врезки" с упоминанием PurchTable сделаны аккуратно. Если их также аккуратно убрать - то функционал корректировки входящего НДС появляется. Правда в этом случае начинает (как и ожидалось) крышу сносить у трехстороннего сопоставления - НДС-то уже "не тот" . Я имею в виду конечно вариант, когда цена включает НДС.
2. Код формы TaxTmpWorkTrans в 4.0 SP2 отличается от кода формы в 2009 RU6 исключительно этими вставками
3. То, КАК было написано название формы в коде позволяет сделать вывод о гхм... сравнительно небольшом опыте работы в АХ разработчика, писавшего этот код. Неудивительно - что он "поломал" функциональность корректировки - он просто мог не знать для чего она нужна....

А теперь самое интересное. В официальных тренингах от МС корректировка входящего НДС описана как работающая функциональность, которую нужно показывать слушателям (ну, само собой, трехстороннее сопоставление тоже должно показываться). Правда, налоги рассказываются в курсе по финансам (Финансы 1, глава 6; Корректировка на стр. 6-62), а сопоставление - в курсе по логистике (Логистика 1, глава 3 на стр. 3-64) .
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 14.12.2011 в 23:47.
За это сообщение автора поблагодарили: mazzy (2), Pustik (2), Logger (5), lev (2), Bega (1).
Старый 14.12.2011, 17:15   #19  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
А я VendInvoiceInfoTable использовал для импорта накладных от поставщика, чтобы пользователям в разноске накладной автоматически накладные собирались из строк закупок А оно оказывается еще и в контроле используется (который мы сразу выключили в связи с его нежизнеспособностью).. )

Ошибка "подвисшей" накладной повторяется, к сожалению, даже когда отключен контроль и не используются отборочные накладные. По наблюдениям - действительно при каких то условиях транзакция отмены разноски отрабатывает некорректно.
__________________
Ivanhoe as is..
За это сообщение автора поблагодарили: Bega (1).
Старый 15.12.2011, 11:04   #20  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Ошибка "подвисшей" накладной повторяется, к сожалению, даже когда отключен контроль и не используются отборочные накладные. По наблюдениям - действительно при каких то условиях транзакция отмены разноски отрабатывает некорректно.
Коллеги, поделитесь, как в результате решали на проектах проблему с "подвисшими" накладными?
Теги
gab, virtual company, виртуальные компании, глобальная адресная книга

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Работа с длительными операциями Maxim Gorbunov DAX: База знаний и проекты 2 27.04.2006 12:06
Lookupы при большом количестве записей выводимой таблицы Pavlo AKA Panok DAX: Программирование 9 07.05.2002 22:02

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

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

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