|  09.09.2004, 14:07 | #1 | 
| Участник | Закрытие и коррекция 
			
			Доброго времени суток! Сегодня столкнулся со следующей проблемой: - необходимо выполнить закрытие склада, себестоимость считается по средней; - переливаю все данные с рабочей компании в тестовую (SQL Server и AOS тестовой компании расположены на отдельном сервере с более слабой конфигурацией, чем рабочий); - на всякий случай делаю синхронизацию и реиндексацию таблиц на тестовом сервере; - выполняю закрытие в тестовой компании; - выполняю закрытие в рабочей компании; - условия закрытия одни и те же: минимальная пропускная способность - 100, минимальная коррекция пропускной способности - 1; минимальный процент сопоставляемого количества - 10; минимальная сумма сопоставления - 5; минимальное среднее количество при закрытии - 0,1. - после выполнения закрытия обнаруживаю внушительную разницу по рассчитанной себестоимости в тестовой и рабочей компаниях (сумма на 90 счете) - примерно 0,02%; - в ходе выяснения обнаруживаю, что возникает разница из-за того, что суммы коррекции в тестовой и рабочей компании отличаются по некоторым проводкам примерно на 5-10 рублей вне зависимости от суммы проводки; - после это еще раз проверил исходные данные - вся информация перекачалась в тестовую компанию нормально, обороты полностью совпадают. У кого какие предположения могут быть по этому поводу? | 
|  | 
|  09.09.2004, 14:39 | #2 | 
| Участник | 
			
			Может приложения различаются?
		 | 
|  | 
|  09.09.2004, 14:57 | #3 | 
| Участник | 
			
			Может расхождение в рабочей и тестовой логике приложения появились? Попробуйте с рабочей логику на тестовую тоже копировать, помимо данных. Но это так предположение...
		 
				__________________ Уточните значение слов и вы избавите человечество от половины его заблуждений. (Рене Декарт) / Axapta 2.5 | 
|  | 
|  09.09.2004, 14:58 | #4 | 
| Участник | Цитата: 
		
			Изначально опубликовано Hezl  Может приложения различаются?   
				__________________ Уточните значение слов и вы избавите человечество от половины его заблуждений. (Рене Декарт) / Axapta 2.5 | 
|  | 
|  09.09.2004, 15:15 | #5 | 
| Участник | Цитата: 
		
			Может расхождение в рабочей и тестовой логике приложения появились? Попробуйте с рабочей логику на тестовую тоже копировать, помимо данных. Но это так предположение...
		
	 Повторная заливка данных и пересчет ничего не дал - те же результаты. Быть может, на расчет себестооимости влияют ресурсы? В одно случая считается с одной точностью, в других - сдругой? А как у Вас обстоят дела с закрытием идентичных компаний на разных серверах? Неужели все закрывают склад сразу в рабочей компании? | 
|  | 
|  09.09.2004, 15:42 | #6 | 
| Участник | 
			
			Вот было бы здорово, чтоб Аксапта была такой умной, чтоб в зависимости от оборудования меняла бы логику работы! Надо в МБС идейку подкинуть   | 
|  | 
|  10.09.2004, 15:29 | #7 | 
| Участник | Цитата: 
		
			Вот было бы здорово, чтоб Аксапта была такой умной, чтоб в зависимости от оборудования меняла бы логику работы!
		
	 | 
|  | 
|  10.09.2004, 15:38 | #8 | 
| Участник | 
			
			Было дело...  наверно...  я клиппер в то время обошёл стороной. Так ведь "не работали"! Припомните случай, чтоб "работали, но по другому"  Может, просто дело в алгоритме закрытия? Может, результат неустойчив относительно порядка обработки? Т.е. при перезаливке данных меняется порядок следования данных, а где-то в алгоритме нет принудительной сортировки какой-нить таблицы - и данные выгребаются в другом порядке? Для "спокойствия" забэкапьте и поднимите всю базу средствами MSSQL и убедитесь в идентичности результата... Ээхх..  Килппер... Были времена....   | 
|  | 
|  10.09.2004, 15:46 | #9 | 
| Участник | 
			
			2  xonix  Цитата: 
		
			Для "спокойствия" забэкапьте и поднимите всю базу средствами MSSQL и  убедитесь в идентичности результата... | 
|  | 
|  10.09.2004, 16:55 | #10 | 
| Участник | 
			
			Продолжение истории. Создал вторую компанию на рабочем сервере. Залил в нее архив, сделанный до пересчета. Закрыл склад. Проверил с данными рабочей компании на этом же сервере. Все сходится. Ладно, значит, данные не корректировались после того как был сделан архив. Теперь снова заливаю архив в ту же компанию на рабочем сервере. Делаю бэкап рабочей базы данных средствами SQL Server. Поднимаю его на тестовом сервере. Переливаю математику с рабочего сервера. Закрываю склад. Проверяю с данными рабочей компании - опять та же самая разница! Мистика какая-то.. | 
|  | 
|  10.09.2004, 18:23 | #11 | 
| Moderator | 
			
			1. Проверьте все-таки идентичность приложений. Хотя бы путем копирования приложения с одного сервера на другой. 2. Если приложения одинаковые, а погрешность небольшая - наверное, можно попробовать списиать это на особенности "интерпретатора" Аксапты и архитектуру процессора. В моей практике было несколько случаев, когда одна и таже программа выдавала различный результат на разных машинах - в частности, на foxpro-шных програмах. Кроме того, довольно известная "ошибка" - любая программа на Pascal скомпилированная на Pentium и запущенная на Pentium2 вылетает с runtime ошибкой. Если же, эту же программу перекомпилировать на Pentium2 (тем же самым компилятором) - то она корректно работает на обеих машинах. То есть, я готов предположить, что на различных машинах, с различными процессорами, а тем более архитектурами Аксапта порождает различный машинных код из одного и того же X++ кода. Например, рассовывает переменные по разным регистрам, принимает различные решения о распределение переменных в стеке/регистрах/памяти и т.д., что теоритически может привести к некоторым погрешностям. | 
|  | 
|  10.09.2004, 18:41 | #12 | 
| Участник | 
			
			2 Andre Вы это серъёзно, или прикалываетесь? | 
|  | 
|  10.09.2004, 18:43 | #13 | 
| Moderator | 
			
			Про что именно ?  Процитируйте, пожалуйста.
		 | 
|  | 
|  10.09.2004, 18:50 | #14 | 
| Участник | 
			
			Про то, что есть связь между размером погрешности и архитектурой процессора?  Разный результат, который выдавала программка - это не пример к данному случаю. Что за программка и какой результат был неустойчив? Мож там программка специально мерила производительность системы и меняла алгоритм (я и говорю, мож и аксапта такая продвинутая?) Я Не верю, что на разных архитектурах результат может даваться с разной точностью на одном и том-же алгоритме. Либо работает - либо нет (это случай с Runtime). | 
|  | 
|  10.09.2004, 18:54 | #15 | 
| Moderator | Цитата: 
		
			Про то, что есть связь между размером погрешности и архитектурой процессора?
		
	 Цитата: 
		
			Мож там программка специально мерила производительность системы и меняла алгоритм
		
	 Цитата: 
		
			я и говорю, мож и аксапта такая продвинутая?
		
	 Цитата: 
		
			Я Не верю, что на разных архитектурах результат может даваться с разной точностью на одном и том-же алгоритме.
		
	 | 
|  | 
|  11.09.2004, 13:12 | #16 | 
| Moderator | 
			
			Перечитал еще раз свое сообщение.  Прошу прощения, похоже я вот здесь неточно выразился и сбил всех с толку: Цитата: 
		
			Если приложения одинаковые, а погрешность небольшая
		
	 Более того, я на 99,99% уверен в том, что в данном случае высказанное мною предположение не имеет отношения к описанной выше проблеме.  На те же самые 99,99% я уверен, что у человека отличаются либо приложения, либо данные, либо настройки. Но если он с этим не соглашается, и убеждает что все идентично, то в рамках оставшихся 0,01% я могу высказать любую гиппотезу, которая может иметь отношения к данному случаю. Вот только не надо забывать про вероятность того, что дело именно в этом   | 
|  | 
|  13.09.2004, 09:58 | #17 | 
| Участник | 
			
			2 Андре и Xonix Спасибо за поддержку :-) Для очистки совести запустил сейчас глобальную компиляцию на тестовом сервере. После чего перелью данные из архива рабочего сервера и закрою склад еще раз. Этим, я надеюсь, смогу окончательно развеять сомнения в идентичности математики приложений. Во всем остальном никаких различий не должно быть, поскольку: 1. Данные не изменялись после создания архива, т.к. закрытие склада во второй компании на рабочем сервере дало теже результаты, что и первое закурытие на этом сервере. 2. Серверные базы данные тождественны, т.к. получены путем серверного Backup и Restore. 3. Математика не должна различаться, т.к. была просто скопирована с рабочего AOS на тестовый. Продолжение следует... | 
|  | 
|  13.09.2004, 12:09 | #18 | 
| Участник | 
			
			Глобальная перекомпиляция не изменила ситуацию. Различие то же самое, что и первоначально, - где-то в районе 0,02%. Для больших оборотов это выглядит внушительно, но только для тех, кто знает о различии в расчетах :-)
		 | 
|  | 
|  13.09.2004, 13:24 | #19 | 
| Moderator | 
			
			Есть еще такая гипотеза: При загрузке проводок по inventTrans при закрытии склада, система сортирует их по индексу openItemIdx (там valueOpen и itemId) (то есть скорее всего соритрует - там в запросе стоит фраза index hint, а не index  . В принципе - если при переливке данных с сервера на сервер изменился порядок ключей в индексе (уж не знаю как там MS SQL индексные страницы сортирует при переброске бэкапа) то и порядок обработки проводок мог изменится. Ну а порядок этот на довольно много всяких вещей влияет. (Мне несколько лениво тут все возможные случаи расписывать) В общем - попробуй в этот индекс в конец добавить поле recId и в методе load класса inventCostItemDim поменять фразу index hint OpenItemIdx На фразу index OpenItemIdx Если после всего этого у тебя склад все равно будет по разному закрываться - останется только списывать все на гремлинов живущих в сервере   | 
|  | 
|  13.09.2004, 14:07 | #20 | 
| Участник | 
			
			2 Fed Спасибо. Я так понял, большинство склоняется к этому варианту. Сейчас попробую проверить. Единственное, что могу сказать сразу - даже когда открываешь таблицу InventTrans через репозитарий в рабочей и тестовой компании - порядок записей различен. Ну это и понятно, т.к. индекса по полям ValueOpen + ItemID явно недостаточно для создания жесткой последовательности. | 
|  |