Андрей Луконькин
Очередное собрание ошибок
Прочитай и не делай так
Непосредственное удаление
Чаще всего ошибка встречается в «самописных» (не типовых) конфигурациях. Несмотря на имеющуюся возможность, которую предлагает платформа, я бы рекомендовал отключать у пользователей права на непосредственное (интерактивное) удаление справочников и документов, даже у роли «Полные права». Не всегда пользователь точно знает, что удаляемый объект не связан ни с какими другими объектами базы данных (если не произведет поиск ссылок на объект). Поэтому в базе могут появляться некорректные записи, нарушающие целостность данных. Например, записи такого вида:
<Объект не найден> (103:ad3d0015176230fe11de4a92be828136) |
Важно! Если у роли убраны также права «Удаление» и «Интерактивное удаление помеченных», то станет невозможным использование штатного механизма удаления помеченных объектов.
Ошибочное указание в проводке счета, являющегося группой
Актуально для «1С:Предприятия 7.7». При описании проводок документа иногда ошибочно указывает не счет, а группу счетов, что не допустимо.
Например:
Операция.НоваяПроводка();
Операция.Дебет.Счет=СчетПоКоду("23");
Операция.Дебет.Затраты=Затраты;
Операция.Кредит.Счет=СчетПоКоду("10");
Операция.Кредит.Материалы=Материалы;
Операция.Кредит.МестаХранения=МестаХранения;
Операция.Количество=Количество;
Операция.Записать();
Здесь счет по кредиту задан 10-й (материалы). Правильно было бы указать счет, корреспондирующий со счетом, не являющимся группой – 10.1 или 10.6.
В «1С:Предприятие 8» ситуация с проводками несколько иная. У каждого счета есть признак «Запретить использовать в проводках», которым может управлять сам пользователь. Поэтому ограничением для использования счета в проводках является только данный признак.
Ошибся – повтори ввод снова
Интересную ситуацию я обнаружил в вопросе пользователя на одном из форумов. Оказывается, не всегда платформа корректно отрабатывает ввод текста программы. Приведу конкретный пример.
Отбoр = НoвыйСтруктура("Номенклатура",ЭлементНоменклатуры);
Видим явную ошибку, после оператора «Новый» по ошибке пропущен пробел. Казалось бы, куда уж проще вставить пробел. Но нет, добавление пробела не приводит к нужному результату! Получаем строку кода, написанную корректно с точки зрения синтаксиса, но платформа не воспринимает оператор «Новый» как зарезервированное слово.
Отбoр = Нoвый Структура("Номенклатура",ЭлементНоменклатуры);
Синтаксический контроль выдаёт ошибку:
Отбoр=Нoвый<<?>>Структура("Номенклатура",ЭлементНоменклатуры); |
Остаётся только удалить и набрать снова вручную
«Новый», и только после этого получаем желаемый результат:
Отбoр = Нoвый Структура("Номенклатура",ЭлементНоменклатуры);
Платформа должна быть однообразной
Не раз я слышал фразы вроде «Да какая разница, какая платформа, ведь работает же!». В «1С:Предприятии 8» этот вопрос практически закрыт, т.к. отслеживаются версии платформы при подключении к одной базе данных. В «1С:Предприятии 7.7» иногда используют одновременно 25 и 27 релиз платформы. Чем это чревато?
В принципе сюрпризов можно ждать где угодно. Начиная от внезапного пропадания документов и заканчивая невозможностью использования отчетов, созданных на 27-й платформе, на клиентах с установленной 25-й платформой. Кроме того, различие платформ неблагоприятно сказывается при работе с распределенными базами данных:
DistUplErr 5 "SQL State: 23000 Native: 2601 Message:
[Microsoft][ODBC SQL Server Driver][SQL Server]
Невозможно вставить повторяющуюся ключевую строку в объект
""dbo.CJ5959"" с уникальным индексом ""ID"".
SQL State: 01000 Native: 3621 Message:
[Microsoft][ODBC SQL Server Driver][SQL Server]
|
Выполнение данной инструкции было прервано.
Если вы не желаете видеть подобные ошибки, то не поленитесь, установите на всех компьютерах одинаковые платформы.