ТиС 927: Ошибка в глобальном модуле! #152683


#0 by twilight5023
Нашли серьезную ошибку при пересчете цен в документе реализации при смене контрагента. Чтобы ни у кого не возникало сомнений, что ошибка действительно присутствует, ниже я приведу подробную схему действий того, как ее можно воспроизвести. Все эксперименты проводились на чистой типовой ТиС 927. Итак, начальные условия: 1. Создаем двух контрагентов "ИП Иванов" и "ИП Петров", в свойствах договора указываем для Иванова указываем тип цен по-умолчанию - "Цены для Иванова", у Петрова в договоре - "Цены для Петрова", естественно предварительно создав их в справочнике цен. 2. Далее в справочнике номенклатуры создаем новый товар ("Товар"), указываем в качестве базовой единицы штуку. Затем открываем справочник единиц для "Товар" и заносим туда, например, ящик, с коэффициентом пересчета количества 30. Т.е. имеем 30 штук товара в ящике. Далее в справочнике "Цены номенклатуры" для этого товара устанавливаем два типа цен, те, которые для Иванова - 5 руб., для Петрова - 10 руб за шт. 3. Делаем приход товара / ввод начальных остатков, вообщем смысл в том, чтобы товар появился на складе (склады у нас оптовые). 4. И теперь кульминация... Создаем документ реализации на Иванова. В подборе выбираем "Товар", 1 ящик, соответственно в табличной части получаем, что отписали мы ему ящик (30 штук) на сумму 150 рублей. Документ не проводим, потому что на самом деле мы хотели выписать этот товар Петрову. Переходим в шапку и меняем контрагента на Петрова. 5. Естественно выскакивает предупреждение, мол, "Договор с контрагентом предусматривает параметы взаиморасчетов, отличные от указанных в документе. Тип цен документа: "Цены для Иванова", договора "Цены для Петрова". Пересчитать документ в соответствии с договором?". Ну естественно, что мы хотим пересчитать, жмем "Да". По-идее, так как контрагент теперь выбран правильно и цены пересчитаны, можно проводить документ, отпускать товар со склада и т.п. 6. Но мы же люди дотошные, поэтому решаем проверить, а правильно ли он пересчитал цены? Заходим в табличную часть и ужасаемся. Там стоит 1 ящик по цене 10 рублей за ящик (!!!), т.е. он изменил цену, но поставил цену штуки для ящика, а в ящике их между прочим 30. Т.о. мы продаем 30 штук по цене одной, т.е. коэффициент пересчета количества в этом случае просто напросто НЕ УЧИТЫВАЕТСЯ! БУДЬТЕ ВНИМАТЕЛЬНЫ! 7. Мы работаем с 927 достаточно давно, сегодня написал обработку для просмотра всех накладных за все время работы, на предмет поиска подобной ошибки (строго говоря у меня просто сравнивается цена в документе и цена в справочнике цен на день документа, если отличается, то обработка выводит реквизиты документа, строку, ну и собственно отличия, т.е. показывает какая цена стоит в документе и какая в справочнике, одновременно подсчитывая общую сумму "подарка" клиенту). Оказывается некоторым клиентам мы все же так отпустили, ящики / коробки по цене за штуку. Хорошо хоть не составами торгуем. Теперь собственно мои мысли на счет как это все исправить: 1. Самое простое, запретить смену контрагента в самом документе, либо обязать операторов при смене контрагента, пересчитывать цены самостоятельно. Т.е. находясь в табличной части вручную жмем "Цены", меняем их снова на Иванова, перессчитываем, потом меняем на обратно на Петрова, в результате цена будет корректной. Но здесь присутствует человеческий фактор, поэтому это не выход. 2. Вариант второй. Найти все-таки где криворукие программисты забыли умножить цену на коэффициент пересчета. Покопавшись в глобальном модуле нашел следующее (обратите внимание на комментарий "если изменился тип цен, тогда изменим цены"): [Глобальный модуль] А теперь посмотрим на обработку "ИнформацияОценах", она вызывается когда мы просто пересчитываем цены, находясь в табличной части документа. Заметили разницу? Там цены приводятся к одной единице, чтобы понять смысл этого, лучше прогнать оба куска кода (из глобального модуля и этой обработки) под отладчиком: [Обработка.ИнформацияОценах.Форма] Предлагаю следующий вариант исправления ошибки: [Глобальный модуль]
#1 by smaharbA
А единицы измерения ?
#2 by twilight5023
Что "а единицы измерения"? А единицы измерения там учитываются в строке ЦенаЦены = (ЦенаЦены * Конт.Коэффициент) / ЕдЦены.Коэффициент, я же говорил, что лучше посмотреть этот кусок кода под отладчиком, чтобы ясно себе представлять какие переменные за что отвечают. Вообщем у себя мы уже поправили - все замечательно, ну а тем, кто до сих пор пользуется 927 или более ранними релизами ТиС'а без исправлений - я не завидую, т.к. шанс отпустить коробку / ящик по цене одной штуки очень велик. Кстати, посмотрел тут 939 - там уже все поправлено, с какого именно релиза внесены исправления - не знаю.
#3 by Simod
9.27 Ээээ... Начало 2004, если не ошибаюсь. Может имеет смысл обновиться?
#4 by twilight5023
Там столько разнообразных дописок, что это мягко говоря проблематично. К тому же в этой базе учет за три года, вообще конечно есть планы поставить 939, постепенно перенести в нее все изменения, которые у нас в 927, остатки, долги контрагентов, но это планы будущее.
#5 by twilight5023
Судя по моим наблюдениям люди и с более ранними релизами до сих пор работают, просто хотел рассказать о найденной ошибке, мало ли кто еще с ней работает, а ошибка-то серьезная.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С