tech.Solbi

Рабочие заметки программисту 1С (как правильно программировать и оформлять разработки и как не нужно программировать)

Архив за Октябрь, 2013

Подмена понятий при назывании переменных, реквизитов, процедур, функций и т.д….

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

В данном случае под объектом конфигурации нужно понимать не объект базы данных, а именно любой объект самой конфигурации которому программист может дать имя при разработке системы (как сами объекты конфигурации, так и имена переменных, процедур, функций и т.д.).

Возможные варианта подмены понятий:

  1. Абстрагирование (когда назначается абстрактное имя. Например что-то типа «ALFA01»)
  2. Сокращение наименования и аббревиатуры (Примеры: РеализТовУсл, РТУ)
  3. Ложное назначение имени (когда присваиваемое имя прямо противоречит сути объекта)
    Например ОТОБРАЗИТЬ

Читать далее… »


Различные процедуры для получения результатов проведения и непосредственно проведения документов

Что имеется ввиду:

При создании доработок в существующих документах, а также при создании новых документов достаточно часто возникает задача — «обратиться к результатам проведения документа» и что-то с ними сделать.

Две наиболее распространенные задачи ОТОБРАЗИТЬ

При выполнении таких разработок часто возникает соблазн — так сказать «не усложнять» свою работу по разработке документа, а пойти по простому пути — для получения данных проведения — еще раз скопировать часть кода, которая выполняется при расчете данных проведения документа.
Читать далее… »


О пересчете с использованием коэффициента пересчета в документах

Что имеется ввиду (я думаю все знают):
Во всех типовых конфигурациях 1С (да и не только в типовых) в документах есть возможность указывать коэффициент пересчета из количества документа в количество в котором товар числиться на складе. Это может быть как прямое указание коэффициента (по умолчанию он равен 1), так и косвенное, когда указывается единица измерения в документе отличная от единицы измерения хранения остатков на складе.

К чему приводит не соблюдение этого правила
Если, при программирование дополнительных настроек, которые вынуждены брать данные из документов (это могут быть отчеты, изменения в схемах проведениях документов и т.д.) — забыть провести пересчет из количества документа к количеству в единице хранения

Читать далее… »


Стоит ли в программном коде фиксировать договоренности с заказчиком

Что имеется ввиду:

Когда Вы договариваетесь с заказчиком о том как будет работать Ваша доработка, Вы всегда обговариваете некоторый набор ограничений, при которых доработка будет работать.

Пример ОТОБРАЗИТЬ

Как правильно поступать в случае договоренностей (ограничений)
Впишите в программный код — проверки, что пользователь правильно использует Вашу доработку

Пример ОТОБРАЗИТЬ

Что не стоит делать при вставке «ограничений по договоренности»
В примере с построением отчета — не желательно выдавать сообщение о том, что пользователь «не прав» и что он должен указать определенные параметры. Ведь мы строим систему, которая облегчает жизнь пользователя, а не требует от него нажимать как можно больше кнопок. Поэтом если известно, что по умолчанию мы строим отчет за весь период — просто проведем преобразование периода.

К чему приводит отсутствие фиксирования договоренностей в программном коде
Все очень просто: пока с Вашей доработкой работает конкретно тот человек, которому Вы рассказывали про то, какие есть ограничения с доработкой — то всё хорошо и человек «правильно» пользуется Вашими доработки. Но как только человек со стороны пользователя передает Ваши доработки в руки другого человека (в рамках или не в рамках компании-заказчика) то часто он забывает о том, что в системе есть «ограничения по договоренностям» и не рассказывает другому человеку про эти договоренности.
Даже если Вы при разработке учли договоренности в документации, то для нового человека может быть очень много документации и он может просто не обратить внимание, при прочтении документации на то, что ограничения — существенны.
И вот тогда начинается потеря как времени пользователей — они не могут правильно построить отчет, видят не те данные и т.д., так и Вашего времени — поскольку начинают пользователи требовать от программиста внимания, чтобы он исправил эти ошибки!
Примерно как это может происходит рассказано тут.


Что бывает если не задумываться о том, что происходит само собой…

Дело было вечером, делать было есть чего.

Но позвонил заказчик и говорит: Помнишь мы с тобой дорабатывали документ, а теперь отчеты у нас не правильно строятся. Интересно — ведь тестировал собственноручно аж на двух документах 🙂

Постановка задачи и описание сделанного решения ОТОБРАЗИТЬ

А теперь при перепроведении документов меняется картина в отчете по ответственным лицам — кардинально: То Петя отвечает за кастрюли и молотки, то вдруг кастрюли и молотки «перепрыгивают» на Васю, и это только после перепроведения документа перемещения никак не связанного с Петей.

Читать далее… »


Когда переменные не инициализированы перед использованием

Если программист вообще не определил переменную перед использованием

Сходу написал вот так вот:

 Если МояПеременная = 5 Тогда

То тут все понятно: при попытке или сохранить модуль или запустить модуль в котором переменная не определена — 1С выдаст понятную ошибку.

Но вот если программист написал примерно вот такой код

Функция МояФункция(ПараметрФункции)
     Если ПараметрФункции = 1 Тогда
          А = 100;
     КонецЕсли;
     Возврат А;
КонецФункции //МояФункция

И особенно если почти всегда данная функция вызывается с параметром = 1, то тогда при отладке система будет работать без ошибок.
Однако если однажды получиться так, что «ПараметрФункции» не совпадет с 1, то тогда А будет не определено — и что получиться в результате работы программы — совершенно не известно.
Читать далее… »


Что происходит, если осуществлять поиск по справочнику/документу/таблице без проверки на выполнение успешности

Опишу более подробно, что имеется ввиду, к чему это приводит и как написать правильно:

Постановка задачи ОТОБРАЗИТЬ

Написал программист отчет, вот с таким кусочком кода:

....
	СпрПараметров = Справочники.Контрагенты.НайтиПоНаименованию(СпрКонтрагентов.Наименование);
	Параметр1 = СпрПараметров.Параметр1;
	Параметр2 = СпрПараметров.Параметр2;
....

И всё хорошо, заработал отчет, и пользовался им (отчетом) заказчик долго-долго — а ж целых 6 месяцев…..

Лирика ОТОБРАЗИТЬ

И перестал работать отчет… и начал выдавать странные ошибки….
Читать далее… »


Делить на ноль — НЕЛЬЗЯ

Деление на ноль
Программный текст:
всегда нужно проверять что в знаменателе не получится ноль, для того чтоб программа не выдавала критическую ошибку. Это должна быть именно проверка, а не использование конструкции Попытка … Исключение.

Запросы:
опять же всегда нужно проверка что в знаменателе не получится ноль!
использовать конструкцию Выбор

Анекдот ОТОБРАЗИТЬ