Книга знаний

1С:Предприятие / v8 / Приемы программирования

v8: Типичные ошибки на 1С 80

Показаны узкие места системы, не сразу видные невооруженным глазом новичкаАвтор статьи:
Последняя редакция №1 от 27.04.06
URL: http://kb.mista.ru/article.php?id=182

Ключевые слова: программирование,чайник


Коллекции объектов, а не ссылок



Не стоит увлекаться коллекциями, содержащими объекты. Помните, что объект - это участок памяти, содержащий все реквизиты объекта. Поэтому он занимает многократно больше места, чем ссылка на него.
Я часто увлекался в логах хранением не ссылок, а объектов, в результате чего после некоторого числа итераций система сначала тормозила, а потом висла из-за переполнения памяти.

Слишком длинные таблицы в форме



Не стоит увлекаться слишком большими таблицами в форме. Если вы действительно хотите вывести очень большую таблицу, лучше выводите ее порциями, или с помощью фильтра. 1С падает на очень больших таблицах, отображаемых в форме.

Одинаковые имена



Это достаточно разнообразная тема. Суть ее в том, что вы ожидаете, что работаете с одной переменной, а на самом деле работаете с другой.

Разные языки

Сумма=2;
Сумма=""+Cумма+"1";
Сообщить(Сумма);


Как вы думаете, какой результат получится? 21? Не угадали, "1". Дело в том, что во второй строчке вторая буква С - латинская.

Часто такая ошибка сводит с ума.

Глобальные и локальные переменные

Пусть у нас объявлена глобальная переменная Счетчик.
Если мы в процедуре будем использовать Счетчик, то мы обращаемся не к локальной переменной Счетчик, а к глобальной переменной. Поэтому все локальные переменные желательно объявлять в процедуре, дабы избежать возможной путаницы. Также желательно глобальным переменным давать имена, которые явно указывают на их глобальность, например глСчетчик.

Реквизиты формы

Иногда вы пишите Контрагент=Неопределено и думаете, что присваиваете значение локальной переменной Контрагент, но если этот код записан в модуле или форме документа, у которого есть реквизит Контрагент, то на самом деле присвоение идет этому реквизиту.

Способ борьбы с этой багой такой же - обязательное объявление всех используемых локальных переменных. Тогда присвоение все же будет идти в локальную переменную.

Номер и дата документа



Номер документа нужно устанавливать после установки даты документа, т.к. иначе 1С не может проверить уникальность номера и может ругаться по этому поводу.

Смена отбора



Нарваться на ошибку можно и когда вы меняете вид отбора.

Например: пусть в отборе стоит вариант отбора в списке, отбор активен, значение отбора - некий список.

Потом я хочу поменять отбор на другой вид отбора - например на отбор по значению, пусть так как это сделано в коде:

Форма.СправочникСписок.Отбор.ВидСклада.Значение= Перечисления.ВидыСкладов.НеавтоматизированнаяТорговаяТочка;
Форма.СправочникСписок.Отбор.ВидСклада.Использование=Истина;
Форма.СправочникСписок.Отбор.ВидСклада.ВидСравнения=ВидСравнения.НеРавно;


Отсюда мораль - прежде чем менять отбор, нужное го отключать, т.е. правильный код такой:

Форма.СправочникСписок.Отбор.ВидСклада.Использование=Ложь;
Форма.СправочникСписок.Отбор.ВидСклада.Значение= Перечисления.ВидыСкладов.НеавтоматизированнаяТорговаяТочка;
Форма.СправочникСписок.Отбор.ВидСклада.Использование=Истина;
Форма.СправочникСписок.Отбор.ВидСклада.ВидСравнения=ВидСравнения.НеРавно;


Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика