gifts2017

Продолжаем сводить с ума!

Опубликовал beigka (beigka) в раздел Программирование - Теория программирования

Это продолжение моей статьи «Как свести с ума тестировщика». Для тех кто не читал предыдущую статью, повторяю – я пишу статью для начинающих программистов. Я не хочу ни кого обидеть, просто хочу, чтобы пользователи и программисты, занимающиеся поддержкой, не встречали такие ляпы в чужой работе.

Коллекция пополнилась 15 отличнейшими экземплярами. Не всех авторов сих чудачеств я знаю лично, некоторые просто увидела в чужих конфигурациях, про некоторые рассказали, как анекдот.

1.       В регистре сведений необходимо применять достаточную периодичность. Если курс валюты меняется раз в день, то часы и минуты когда произошло изменение знать не нужно!

2.       Иногда не нужна возможность вводить отрицательные значения в реквизиты документов и другие места. ОЧЕНЬ НЕ НУЖНА.

3.       Называй объекты по разному. Если ввести вместо кириллической о латинскую o, то конфигуратор конечно скажет что названия разные, но другие программисты кодировки не видят… Еще недавно видела справочник и документ одинаково названные (была мысль, что показалось – ан, нет), и одинаково названные справочники в подсистемах… ну в общем – мрак.

4.       Используй регистраторы для внесения большого количества данных в регистры сведений. Провел документ – есть записи, отменил проведение – нет записей. А когда регистратора нет, что делает пользователь – берет и ручками и глазками несчастненькими крыжыт. Выгода налицо.

5.       Если в документе есть табличная часть и печатная форма, то логично (ну, пользователю так чаще всего кажется, но мы то знаем!:) чтоб данные на печать выводились из формы документа. Если пользователю там ничего менять нельзя – то просто делаем не доступными к редактированию ответствующие реквизиты. Иногда, ну, так бывает, что программисты используют регистры для заполнения печатной формы. То есть пользователь колдует над документом, что-то там делает, а программист (ну типа так быстрее) задумал, что из регистров запросиком информацию лучше тянуть и в документ не глядит почти. Особенно радуют РАЗНЫЕ запросы. Или ошибки и в одном и другом…

6.       Пожалуйста, помни про то, что для проведения по бухгалтерскому и налоговому учету кроме проводок используются еще и регистры. Все движения по одному виду учета (управленческому, бухгалтерскому, налоговому) должны формироваться одним документом. Нельзя чтобы один документ формировал проводки по бух учету, а второй – движения бух регистра. Кто их будет сверять потом, а?

7.       Пожалуйста, помни про регистры. Вообще, не забудь, что такое есть и надо бы пользовать. Не храни информацию в документах. За это ты не только 1С Специалиста не сдашь… Есть уйма не выгодных моментов в таком положении вещей. Например, если данные документа используются каким-то отчетом, то при создании нового документа, оперирующего теми же данными, придется переделывать отчет. Формочки красиво рисуешь? Не хочешь базу раздувать? Лучше озаботься четкой логикой системы. Это вообще, не просто красиво. Это честь и главная гордость программиста, которого можно теперь называть архитектором.

8.       Не храни статус чего либо как реквизит справочника. Если пользователь присвоит какой либо статус (из документа с красивой формочкой) ошибочно, а потом документик присвоивший статус распроведет, то какой будет статус в справочнике? Правильно, не понятно какой.

9.       Если выводишь остатки в отчете, то обычно интересны на конец дня, а не на начало. Ну такие пользователи, не интересно сколько гаек с утра в кладовке было. Вернее не с утра, а в 00-00-00 или около того. Ну а после того как день прошел, работа закончила, вот тогда и интересно сколько там в кладовке осталось. Программисту это странно. Что 00-00-00, что 23-59-59, все равно. Но пользователю не все равно, почему не могу объяснить. Это надо запомнить.

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

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

12.   Иногда база обновляется по несколько раз в день. Но есть хорошее правило – не обновляться перед выходными (люди иногда работают и не найденные ошибки могут не дать возможность закрыть баланс вышедшему в субботу главбуху и это может не понравиться, а вам нужны хорошие отношения).

13.   Еще видела – чтобы создать документ, нужно зайти в форме документа в реквизит создать другой документ, ну а там, что (точно! как вы догадались) в реквизите еще третий документ. В общем 3 документа. Яйцо в утке, утка в зайце, заяц в шоке.

14.   ,Если из документа создаем другой документ (надеюсь, не при записи:) то желательно в обоих документах где-то ссылочку сохранить, они ж родичи:) В общем, очень часто нужно видеть дерево взаимосвязи между документами, созданными один на основании другого. И проверка нужна, с запретом на создание 5 одинаковых на основании. А то одна хозяйка зайдет, суп посолит, потом вторая, третья… И обед уже не обед.

15.   Если вы используете в коде наименования справочника (чего лучше конечно не делать:), то по логике их нужно закрывать к ручному изменению, потому что из-за неправильного формата и лишнего пробела может что-то поломаться. Но лучше конечно придумать какой то другой способ организации информации.

Пока все, дорогие читатели.

 

 

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Александр Рытов (Арчибальд) 18.09.09 14:32
И это правильно. В общем и целом... :)
2. Альтаир (Altair777) 18.09.09 15:12
(0)
п.3 > Если ввести вместо кириллической о латинскую o
Нет, самая опасная это буквы "с". :-)
Они и выгядят одиноково, и на одной кнопке находятся...

п.7 > Лучше озаботься четкой логикой системы
Системы работы фирмы? Увы, очень часто приходится подстраивать программу под отсутствие всякой логики. И тогда появляются всякие исключения, рушащие вся стройность конфигурации.

п.8 > а потом документик присвоивший статус распроведет
А ОбработкаУдаленияПроведения() на что?

п.9 > Программисту это странно. Что 00-00-00, что 23-59-59, все равно.
Странные программисты. Они наверно даже не продполают сколько в этом интервале (23-59-59 и 00-00-00) может документов поместиться...

п.10 очень спорный....

п.11 А где их делать? :-)

3. Андрей Янакаев (YAN) 18.09.09 15:31
(2) по п.10 Согласен
по п.11 в обработчиках ПередЗаписью, там где есть переменная "Отказ"
4. Андрей Янакаев (YAN) 18.09.09 15:33
Я еще добавил к п.3 не называть новый документ "Документ", новый справочник "Справочник", ну и т.д. с регистрами
5. beigka (beigka) 18.09.09 15:33
2 Altair777 ну, исключения возможны и могут быть. просто они должны быть обоснованными. п.7 - это про то что документ не был регистратором ни у одного регистра.
п.8. ну вот и не знаю на что. пусто было в реквизите справочника "статус". наверно чтоб очистить указанный реквизит.
п 10. спорный? что вообще возможно придумать процедуру с тем же названием что и ктото до тебя? при мне так поламали календарь в зарплате:) причем хороший программист поламал.
п. 11. ладно, уговорили. разрешаю делать при проведении делать:) только внимательно!
6. beigka (beigka) 18.09.09 15:34
2 YAN собака по имени Собака, и кошка по имени Кошка:) да, хорошо.
7. Андрей Янакаев (YAN) 18.09.09 15:37
по п.7 "Пожалуйста, помни про регистры. Вообще, не забудь, что такое есть и надо бы пользовать. Не храни информацию в документах."

Аж страшно стало прочитав последнее предложение :)
8. beigka (beigka) 18.09.09 15:38
9. Андрей Янакаев (YAN) 18.09.09 16:00
(4) Да и еще не называть реквизиты и ТЧ в документах "Документ" в справочника "Справочник", т.к. это может привести к ошибкам запросах!
10. Brr (brr) 18.09.09 16:56
Прям заповеди, не возжелай жены ближнего своего!
11. beigka (beigka) 18.09.09 16:57
2 brr :) это скромная колеция глупостей
12. Альтаир (Altair777) 18.09.09 17:37
(5) > п 10. спорный? что вообще возможно придумать процедуру с тем же названием что и ктото до тебя?

Я семерочник. А 8-ке разве можно создать 2 процедуры в одном модуле с одним и тем же названием? :-)
Или там процедура ищется по каким-то непонятным приоритетам? Какую первую нашло, ту и выполнило?
13. Андрей Куканов (KukA.5) 18.09.09 18:15
А еще я видел при открытии формы установка реквизита значением по умолчанию! Это стоит делать или при ЭтоНовый() или "Если Не ЗначениеЗаполнено(НужныйРеквизитФормы) Тогда..."

Прикольно так открыть (документ) и получить модифицированность объекта. А при закрытии формы ведь пользователь обязательно скажет "Даа!Сохранить!" и перепроведет документ 2007 года :)
14. Трактор Трактор (Трактор) 18.09.09 18:43
>> "Даа!Сохранить!" и перепроведет документ 2007 года :)
Не перепроведёт. Дата запрета не позволит.
15. VVV (V_V_V) 18.09.09 18:57
п.10 при включенных галках Тексты модулей/Проверка в Настройках не имеет смысла. При записи конфигуратор обязательно ругнется "Процедура или функция с указанным именем уже определена". При выключенных - Бог в помощь...
16. Алексей Прилепский (IamAlexy) 18.09.09 20:49
(13) а в процедуре которая это делает нужно поставить сброс модифицируемости...

(12) пожалуйста:
1. процедура: РОРА();
2. процедура: POPA();

17. Андрей Куканов (KukA.5) 19.09.09 02:35
(16) для того чтобы не чинить (не делать сброс модифицируемости) - не надо ломать :), или стоит подумать при программировании ЧТО делаем и ЗАЧЕМ - и не делать то, что позволяет получить желаемое (например, заполнить реквизит по умолчанию чем то), но поломать логику нормальной работы - к сожалению такое бывает
18. Алексей Прилепский (IamAlexy) 19.09.09 10:52
(17) ну когда будет стоять перед вами прямая задача "по умолчанию заполнять тем то и тем то" - я сомневаюсь что вы скажате что то типа "....бла бла бла.. признак модифицируемости.. бла бла бла.. не кошерно.. бла бла бла.. каноны православного программирования в 1с... итд итп"

вы просто возьмете и сделаете... а чтобы тупых вопросов про "записать" не возникало - воткнете сброс признака модифицируемости.. вернее не сброс а анализ - какой он был до заполнения реквизитов по умолчанию и ровно такой же выставите после заполнения оных..
19. Андрей Куканов (KukA.5) 19.09.09 15:26
(18) IamAlexy, я с тобой не соглашусь... Ты не тупой программист с кривыми руками, который лепит откровенную лажу (я в это не верю).
20. Алексей Прилепский (IamAlexy) 19.09.09 21:37
(19) ну хорошо.
есть задача: при создании нового документа заполнять форму предопределенными значениями..
причем дать пользователю возможность отказаться от ввода документа и соответственно в последствии не иметь проблем с нумерацией.

ваше решение ?

я бы сделал заполнение и сброс модифицированности.
21. Андрей Куканов (KukA.5) 20.09.09 01:11
(20) ...при создании нового документа ...
...я бы сделал заполнение и сброс модифицированности...
Ооо!
IamAlexy, а вот это уже похоже на "кривые руки" :)


(20) Ну что ж, придеться писать для тебя код....
Уважаемый IamAlexy, я бы сделал так:

Процедура ПриОткрытии()

//1)
// код выполняется ТОЛЬКО (!) ДЛЯ НОВОГО ОБЪЕКТА
Если ЭтоНовый() Тогда
РеквизитКЗаполнению_1 = ПолучитьЗначениеДляЗаполнения(1); //или значение
РеквизитКЗаполнению_2 = ПолучитьЗначениеДляЗаполнения(2); //или значение
...

КонецЕсли;
//новый объект заполняется нужными значениями
//модифицированность сбрасывать вообще нет смысла - ведь он же еще новый!
//пользователь всегда может отказаться от записи объекта
//объект существует пока только на экране...
//с нумерацией проблем быть не должно (не с чего)



//2)
// а этот код выполняется ДЛЯ УЖЕ (!) СУЩЕСТВУЮЩЕГО объекта и
// только если важное поле почему то ЕЩЕ НЕ ЗАПОЛНЕНО
// а оно обязательно к заполнению
// например, такого поля раньше просто не было у документа...
Если НЕ ЗначениеЗаполнено(РеквизитКЗаполнению_1) Тогда
РеквизитКЗаполнению_1 = ПолучитьЗначениеДляЗаполнения(1); //или значение
КонецЕсли;
// и сбрасывать модифицированность объекта в этой ситуации глупо
// ведь объект реально изменился!!! и ЕГО НАДО ПЕРЕЗАПИСАТЬ в БД...
// иначе установленного значения реквизита не останется :) у объекта в БД
22. Алексей Прилепский (IamAlexy) 20.09.09 01:54
я рад что ты знаешь про ЭтоНовый() но смысл то не в том - когда именно заполнять реквизиты "по умолчанию" - у нового втупую влоб а у старого проверяя заполненость...

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

1. мог отказаться от работы с документом и не задавался вопросом "я же ничего не ввел и ничего не поменял - почему оно меня спрашивает про сохранение"

2. мог контролировать изменение данных (модифицированность показанную звездочкой в заголовке) совершая осмысленные действия САМОСТОЯТЕЛЬНО

23. Виктор Рыков (Мастер1С) 20.09.09 18:03
Н-да...
Был у нас препод по тензорному анализу, бааальшой мастак лепить глупости,
но что бы так...
24. inse0f (inse0f) 21.09.09 01:12
(22) +1, народ похоже не вдупляет)))
25. Алексей Прилепский (IamAlexy) 21.09.09 01:21
(24) угу.. думать и кодить это не синонимы
26. Артем Гусаров (Flashback1979SE) 21.09.09 04:10
От прочтения сего была вызвана процедура "ВызватьКультурныйШок(ЖертваЧтения)".

Описание процедуры: крошит моск наффик, убивая нейронный траффик:-))))))
27. larissa builova (larisab) 21.09.09 06:24
(24) Народ давно вдупляет :)
23 коммент посмотри в http://www.infostart.ru/projects/5879/index.php?p=2&id=5879%2F#comm (про геометрические объекты) и все ясно станет.
28. Андрей Скляров (coder1cv8) 21.09.09 12:09
Меня тоже раздражает, когда ПриОткрытии() что-то устанавливают, а Модифицированность не сбрасывают!
Еще некоторые писатели используют для установки реквизитов ПриЗаписи(), вместо ПередЗаписью() - тогда после сохранения опять получаем этот лишний диалог...
29. sound sound (sound) 21.09.09 22:43
Тоже вспомнился универ и некоторые преподы :)
30. beigka (beigka) 21.09.09 23:05
2 sound (29) больше стажеры вспоминаются пока что.
31. Петров Петр (lexkex) 23.09.09 11:43
Вы бы еще при открытии в регистрах сведений проведенного документа что-нибудь поменяли бы :D
32. Андрей Куканов (KukA.5) 27.09.09 00:29
(23) Мастер1С - рейтинг 0 и это за 2,5 года, смени ник ;)
(24) inse0f - рейтинг за программы 0 (за год)
(25) IamAlexy - рейтинг за программы всего то = 40 (за 2 с лишним года)
(26) Flashback1979SE - рейтинг за программы 0
(27) larisab ...ну что можно сказать на ХАМСТВО ОТ ЖЕНЩИНЫ!


(28) coder1cv8 пишет: ...Меня тоже раздражает, когда ПриОткрытии() что-то устанавливают, а Модифицированность не сбрасывают!....

Уважаемый coder1cv8, из твоего заявления следует, что ты выдающийся Кодер, а все разработчики фирмы "1С" по сравнению с тобой соплезвоны... Открой любую типовую, создай новый документ - модифицированность установлена (надо же, не по твоим стандартам) и разработчики 1С в очередной раз тебя напрягли своей глупостью и некомпетентностью.

(30) beigka - рейтинг за программы 0, ты чего то достиг в жизни, кем то стал? чтобы судить кто есть кто

--------------
Если кому то из перечисленных Экспертов (непонятно чего) покажется что их лично здесь сейчас опустили - целей перед собой таких не ставил.

Участвовать в вашей беспонотовой перепалке не вижу смысла - глупая потеря времени с "НУЛЕвистами".
33. larissa builova (larisab) 27.09.09 09:55
(32) Мммм... а где Вы усмотрели ХАМСТВО - в ссылке на Ваши же слова?
"Мне понравился вопрос, заданный однажды знатокам "Что? Где? Когда?": с какими геометрическими объектоми можно сравнить мысли умных людей? (как то так звучало, точно не помню)

Ответ был такой: прямые линии (умные люди думают одинаково)

У нас пример паралельных линий , не пересекающихся"


В контексте этого обсуждения (Продолжаем сводить с ума...) ссылка на Ваши слова - подчеркивание Вашего ума, и мы это уже поняли (народ вдупляет)... ;)
Тем более, у Вас столько плюсиков :!: :!: :!:
34. Александр Рытов (Арчибальд) 27.09.09 10:24
(32) Как-то получилось, что я Вас считаю приличным человекос. И вдруг такое гнутье пальцев... Фи.
35. Николай (rinatru) 28.09.09 10:18
Предлагаю не писать вредные советы, а сделать все наоборот. Написать статью о "правильных" методах работы с объектами конфигурации, своего рода правила хорошего тона.
Для начинающих будет хорошим справочником по работе.
36. Romeo (oneman@yandex.ru) 28.09.09 13:35
YAN: "Аж страшно стало прочитав последнее предложение".
Я почему-то не понял сарказма. По-моему хорошее замечание.
37. Андрей Скляров (coder1cv8) 28.09.09 14:20
(34) Да ну, человек в неадеквате явно! ) Рейтинги считает... ))
38. Альтаир (Altair777) 28.09.09 15:37
(37) Ну и что? Я вот тоже свой считаю :-)
Но пальцы не гну. Даже и не знаю в какую их сторону надо гнуть по-правильному...

А вот интересно... KukA.5 свой рейтинг заработал за 1,5 месяца.
Сколько лет он к этому готовился?
И все ли там его? И все ли такое полезное?
Типа насколько заслужены плюсики. Я 8-ке не разбираюсь, поэтому и спрашиваю.

Но 32 коммент точно заслужил... только не плюсик.
39. Виктор Рыков (Мастер1С) 28.09.09 18:09
(32) Ну не общайся с нами, нулевистами. Не засоряй эфир.
svartemov; +1 Ответить
40. Андрей Куканов (KukA.5) 02.10.09 02:28
Функция ПрисвоитьБезопасно(А,Б) Экспорт
//Назначение: Присваивает значение Б переменной А только если значение реально изменилось
//ДатаСоздания: 2008
//Автор: Fixin
//Тестирована: Да
//Описание:
// Удобно, когда нужно защититься от модифицированности

Если А <> Б Тогда
А = Б;
КонецЕсли;
Возврат А;
КонецФункции

(37) это ты не в адеквате :) - прочитай (по существу) что было написано для тебя в (32)
41. Андрей Скляров (coder1cv8) 02.10.09 07:20
(40) По существу, пользователь всегда ожидает естественного и интуитивно понятного поведения от программы, то есть как в Ворде например, если мы открыли документ и ничего не изменили, то и сохранять нечего. Так же можно было бы сказать об избыточности интерфейса с лишними диалогами, но по существу с Вами разговаривать по-моему не поможет...
42. Poppy (poppy) 02.10.09 14:36
(41) В Ворде - да, но в Икселе может быть и нет. При открытии и закрытии книги, в некоторых случаях, может появиться диалог о сохранении.

По вопросу (28). Имхается мне, что косяк разработчика не в том, что модифицированность не сбрасывается, но в том, что она появляется.

Устанавливать реквизиты в процедуре ПриОткрытии() (за исключением новых документов) необходимо, в основном, для поддержки избыточности данных.
Наличие модифицированности формы объекта при открытии для пользователя означает косяк в данных, а для администратора - косяк в коде, который их создал. Сброс модифицированности в этом случае - это сокрытие от пользователя правды.
43. Андрей Куканов (KukA.5) 03.10.09 21:54
(42) это и есть суть!
...не надо косячить, чтобы потом это же исправлять...
44. Александр Медведев (anig99) 03.10.09 22:01
(41) видимо мало Вы работали с МСОфисом... Существует куча вариантов, когда при открытии документа (что ворд, что ексель) он модифицируется автоматически и предлагает себя сохранить при закрытии...
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа