#0
by struch
Доброго времени суток, может кто поможет... В 1с предприятие - Торговля+склад, редакция 9.2 возникла такая ситуация когда открываю "Остатки ТМЦ" выбираю фирму, остатки, цены. При формировании выдает следующею ошибку, ПечКол = ПечКол / ТЗ.ПечЕд.Коэффициент; {Отчет.ОстаткиТМЦ.Форма.Модуль}: Деление на 0 Как можно исправить? С 1с знаком на уровне администратора. Спасибо!
#2
by Rie
У какой-то из единиц для какой-то номенклатуры кто-то указал в качестве коэффициента 0. Найти, у какой, исправить на что-то более естественное.
#5
by Rie
Не стоит так делать. От того, что отчёт выведется внешне пристойно - ошибка ведь никуда не исчезнет.
#7
by Икогнито
С СокрЛП(ТЗ.ПечЕд) можешь извратиться так СокрЛП(ТЗ.ПечЕд)+" "+СокрЛП(ТЗ.ПечЕд.Владелец) Если прокатит
#8
by Rie
Ну и зачем эти извращения, замедляющие часто используемый отчёт непонятно ради какой цели?
#9
by Икогнито
глупый пользователь увидит, где не проставлен коэффициент единицы измерения, а сисадмин довольный пойдет домой. А программер, который это не предусмотрел получит двойку.
#10
by Rie
А не проще ли искать ошибочные ситуации специальным отчётом (внешним) и не ковыряться в конфигурации, замедляя работу штатных средств?
#12
by Икогнито
а админу могу посоветовать вставить этот код с попыткой. Исправить ошибки, которые он сообщит, потом вернуть первоначальный код )
#13
by Злопчинский
а насколько Попытка замедлит выполнение при выводе большого количества строк? имхается что более существенным будет скорость отрисовки готовой таблицы на экране...
#14
by Икогнито
можешь привести вычисления, насколько конструкция попытка - исключение затормозит выполнение сего отчета?
#15
by Злопчинский
это все потому, что объекты и код манипуляции этими объектами никак с собой не связаны... длаешь как там еее эту.. инкапсуляцию!
#18
by Rie
Конечно, скорость вывода таблицы - куда существеннее. Но зачем лепить заведомо замедляющий выполнение (пусть и ненамного) ненужный код?
#20
by struch
Приятно удивлен таким активным форумом, завтра попробую все выше написанное и сообщу, что получилось т.к. у нас уже за полночь.
#24
by Икогнито
патамушто уборщица скажет, что тяжелее швабры ничего не держала, а сантехник пошлет их на юг
#27
by Злопчинский
+1 Простой код из 10 операторов показал, что использование Попытки замедляет выполнение примерно на 10%... так что от того что отчет формируется 60 минут, или 66 минут - разницы никакой... надо еще учесть что эти 10% - это при услвоии соотношения операторов Попытка к прочим операторам примерно 1/3.. так что на реальных отчетах, где всякие итоги считаются и порчая лабудень - заведомо меньший вклад будет... конечно если особые умники внутрь попытки не загонят сто тыщ мильенов операторов...
#28
by Злопчинский
А! блин! дятел программист может вообще назомутать и ПечЕд не заполнить.. и чего - будем проверять все возможные варианты? я давно в критичных участках 1-2 оператора в попытку загоняю, когда не могу предусмотреть или времени нет защиту от дурака делать...
#30
by Rie
, 10% - это на самом деле довольно много. Расставь всего лишь 10 Попыток - и время выполнения удвоится. И пользователь-то - не один, тормозить он будет всех прочих (наблюдается в небольших конторах: бухгалтер строит отчёты - остальные тихо матерятся). А насчёт "дятел программист может нахомутать" - может. Но в таком случае надо исправить ошибки дятла-программиста, а не перегружать код лишними проверками. В речь шла о типовой Торговле, где стоит контроль на заполнение коэффициента ПриЗаписи единицы. Так что 0 там может возникнуть только "нештатным" способом. И, появившись раз - может воспроизводиться снова и снова, пока не будет исправлена ошибка, его порождающая (а она _не_ будет исправлена, пока её существование будет скрыто Попытками). И, как верно замечено в - эта ошибка скажется не только в отчёте (где её можно обработать таким способом), но и в куче других мест.
#31
by Икогнито
ход мысли ясен, мол сисадмин не лезь в код, а позови меня, я за бабосы все поправлю )))) Франч?
#32
by Rie
Разумеется, некошерно. Но в типовой, при штатной работе, такой ошибки не возникнет. Следовательно, надо не стремится к информативности сообщений пользователю (ему эти сообщения ничем особо не помогут), а искать причину, по которой появился 0 или единица оказалась не заполнена (есть ведь и такой вариант).
#36
by Икогнито
насколько мне память не изменяет, в типовых переменную ПечЕд на печать выводят, а не делят и умножают )))
#37
by Rie
Ах, да, видя трещину в стене, советовать повесить картину, чтобы вид не портился - это, разумеется, не подвиг. Это по другому называется. :-)
#42
by Rie
Да, зануда. Предпочитаю находить ошибки и их исправлять, а не прятать голову в песок, делая вид, что их нет.
#49
by Икогнито
Если так принципиально на Попытку Исключение реагируешь, то объясни мне зачем тебе повисшая на 60 сек. транзакция к базе данных в процедуре ПриЗаписи?
#52
by ado
Чувак, здесь как раз все предлагают исправить ошибку в коде, а ты предлагаешь оставить все как есть "чтобы не перегружать лишними проверками".
#53
by Rie
А где ошибка в коде? В отчёте ОстаткиТМЦ? Или в том месте, где единица получила коэффициент 0 или была не задана? (Кстати, какой из вариантов имеет место быть? Предлагаемый код с Попыткой их не различает).
#56
by Песец
Найти самый извратный способ решения проблемы (пошло-банально-тривиальный способ одинэсина сама написала).
#58
by Песец
Кто заставит юзеров проапгрейдить процы компутеров до йййй...елерон ХХХХХ терагерц и заработает откат от Интела :)
#59
by ado
Ошибка в том, что при определенных данных отчет вываливается в RTE. Если данные некорректны, отчет должен внятно об этом сообщать, а не ругаться непонятными юзеру словами.
#60
by Torquader
На самом деле, оператор попытки действительно занимает много времени, но никто не требует использовать этот оператор в самом цикле, так как исключение можно отловить и на самом верхнем уровне, а там оператор попытки будет исполняться только один раз! И действительно, сообщение пользователю должно выглядеть более позволяющим ему самому решить проблему своих кривых рук, нежели уповать на помощь такого же криворукого программиста. Кстати, а ТЗ.ПечЕд - это что ? Это же поле в какой-то таблице значений, и надо смотреть откуда оно заполняется.
#63
by Cthulhu
: это не "ПриЗаписи" выполняется в транзакции, это накоженное принудительно включено в транзакцию - почувствуй разницу, Цугундер.. )))
#64
by Икогнито
а в чем же? Если у одного юзера ПриЗаписи у другого ПриЗаписи, они одновременно запишутся? Да?
#66
by Cthulhu
: а ты к тому же и упрямый ламер... и лезешь с советами... не, нучо, характерно. приколись: в транзакции выполняется только проведение документов (транзакция на уровне движка)... ну и код, программно включаемый в транзакцию. ;)
#67
by Torquader
Любая запись в базу данных системой выполняется в мини-транзакции, так как происходит блокировка таблицы, в которую производится запись - в этом случае все остальные ждут. Но, если один пользователь пишет в одну таблицу, а другой в другую, то они могут выполнить запись одновременно (причём даже если "умник-программист" напишет в процедуре при записи "НачатьТранзакцию").
#69
by Torquader
Вообще говоря - да (так как некоторые сервера SQL умеют выполнять несколько транзакций одновременно) - поэтому я и написал "мини-транзакция", чтобы не нарушать терминологию.
#70
by Rie
Общее у блокировок и транзакций - по сути, лишь то, что блокировка может служить механизмом обеспечения транзакции. Я не вижу смысла искусственно вводить некую новую терминологию, тем более, что и понятие транзакции, и понятие блокировки используются в 1С во вполне определённом смысле.
#71
by Torquader
В 1С всё просто - блокировка объекта - это защита объекта от изменений. Транзакция - это гарантия правильного исполнения алгоритма чтения и изменения данных и исключение влияния других пользователей на этот алгоритм. 1С блокирует элемент справочника, если он открывается на редактирование или если мы явно вызываем установку блокировки. Но блокировка и захват файлов для выполнения записи - это совершенно другое действие, никак не связанное ни с блокировкой ни с транзакцией.
#74
by Rie
"Внутри" себя транзакция не является, естественно, неделимой. С точки зрения "внешней" транзакции - вложенная транзакция является (неделимой) транзакцией. С точки зрения ещё более "внешней" - какие-такие вложенные транзакции?
#75
by Cthulhu
: а с точки зрения 1с77 - вложенных транзакций не существует (в документации для описания этого факта используется эвфемизм "не поддерживаются")..
#76
by Torquader
В 1С транзакция - это внутренний флаг режима доступа к данным. Соответственно, можно пытаться установить этот флаг более одного раза (и никакой ошибки при этом не возникает), но и снимать его придётся столько же раз. При этом, отрабатывается только окончательное снятие флага (Зафиксировать или Отменить) в остальных случаях - только уменьшение счётчика.
#79
by Cthulhu
для поиграться вложенными транзакциями: (пароль = семь семёрок). : ну не поддерживает она (семёрка) хоть ты наизнанку вывернись... ;)
#80
by Torquader
Я знаю, что она не поддерживает. Точнее, поддерживается одна транзакция - остальные только "изображаются".
#81
by AhtungG
>> в типовой, при штатной работе, такой ошибки не возникнет. НЕправда!!. Возникает, хотя проверка на ПустоеЗначение(Коэффициент)=1 у элемента Единицы на месте. В двух разных местах ТиС поддерживаю, и в обоих пришлось это же место доработать
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- Проверка почты из командной строки
- Поиск по таблице значений части строки
- УПП: Ограничение прав пользователей по подразделениям
- Расчёты в условных единицах
- Факторинг в УТ
- Как безболезненно подготовиться к сдаче 1с специалист по платформе?
- Как программно открыть Журнал Регистрации?
- регламентное задание на восстановление последовательности
- v7: где есть журнал регистрации кассовых документов (форма КО-3)
- СКД: Как программно поменять цвет фона поля при выводе отчета использующего СКД в 1с 8.1?
- выбрать по условию строки из Excel
- Не выгружаются объекты по ссылкам
- как перейти в конец табличного поля программно?
- Как зациклить выполнение скрипта rasdial? {Решен}
- Как программно скрыть служебные окна: панель состояния и панель окон?
- VBA: дописать в открытый файл из вордовского файла
- конвртация2.0. Получить значение из входящих данных?
- ошибка СУБД: Microsoft OLE DB Provider for SQL Server
- Кто нибудь добавлял (менял) память в ноутбуках, поделитесь опытом.
- v7: Не формируется ОСВ