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

18.09.09

Разработка - Математика и алгоритмы

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

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

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

 

 

См. также

Математика и алгоритмы Программист Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    3209    stopa85    12    

38

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    7619    user1959478    52    

36

Математика и алгоритмы Разное Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.

2 стартмани

29.09.2023    3148    maksa2005    8    

26

Математика и алгоритмы Инструментарий разработчика Программист Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    10932    7    SpaceOfMyHead    18    

61

Математика и алгоритмы Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    4402    RustIG    9    

25

Механизмы платформы 1С Математика и алгоритмы Программист Платформа 1С v8.3 Россия Бесплатно (free)

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

23.11.2022    3568    gzharkoj    14    

25

Математика и алгоритмы Программист Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    9051    7    kalyaka    11    

44
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Арчибальд 2709 18.09.09 14:32 Сейчас в теме
И это правильно. В общем и целом... :)
2. Altair777 645 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 1374 18.09.09 15:31 Сейчас в теме
(2) по п.10 Согласен
по п.11 в обработчиках ПередЗаписью, там где есть переменная "Отказ"
4. YAN 1374 18.09.09 15:33 Сейчас в теме
Я еще добавил к п.3 не называть новый документ "Документ", новый справочник "Справочник", ну и т.д. с регистрами
9. YAN 1374 18.09.09 16:00 Сейчас в теме
(4) Да и еще не называть реквизиты и ТЧ в документах "Документ" в справочника "Справочник", т.к. это может привести к ошибкам запросах!
5. beigka 219 18.09.09 15:33 Сейчас в теме
2 Altair777 ну, исключения возможны и могут быть. просто они должны быть обоснованными. п.7 - это про то что документ не был регистратором ни у одного регистра.
п.8. ну вот и не знаю на что. пусто было в реквизите справочника "статус". наверно чтоб очистить указанный реквизит.
п 10. спорный? что вообще возможно придумать процедуру с тем же названием что и ктото до тебя? при мне так поламали календарь в зарплате:) причем хороший программист поламал.
п. 11. ладно, уговорили. разрешаю делать при проведении делать:) только внимательно!
12. Altair777 645 18.09.09 17:37 Сейчас в теме
(5) > п 10. спорный? что вообще возможно придумать процедуру с тем же названием что и ктото до тебя?

Я семерочник. А 8-ке разве можно создать 2 процедуры в одном модуле с одним и тем же названием? :-)
Или там процедура ищется по каким-то непонятным приоритетам? Какую первую нашло, ту и выполнило?
6. beigka 219 18.09.09 15:34 Сейчас в теме
2 YAN собака по имени Собака, и кошка по имени Кошка:) да, хорошо.
7. YAN 1374 18.09.09 15:37 Сейчас в теме
по п.7 "Пожалуйста, помни про регистры. Вообще, не забудь, что такое есть и надо бы пользовать. Не храни информацию в документах."

Аж страшно стало прочитав последнее предложение :)
8. beigka 219 18.09.09 15:38 Сейчас в теме
2 YAN да, триллер еще тот
10. brr 184 18.09.09 16:56 Сейчас в теме
Прям заповеди, не возжелай жены ближнего своего!
11. beigka 219 18.09.09 16:57 Сейчас в теме
2 brr :) это скромная колеция глупостей
13. KukA.5 476 18.09.09 18:15 Сейчас в теме
А еще я видел при открытии формы установка реквизита значением по умолчанию! Это стоит делать или при ЭтоНовый() или "Если Не ЗначениеЗаполнено(НужныйРеквизитФормы) Тогда..."

Прикольно так открыть (документ) и получить модифицированность объекта. А при закрытии формы ведь пользователь обязательно скажет "Даа!Сохранить!" и перепроведет документ 2007 года :)
16. IamAlexy 345 18.09.09 20:49 Сейчас в теме
(13) а в процедуре которая это делает нужно поставить сброс модифицируемости...

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

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

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

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

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


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

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

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

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



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

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

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

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

24. inse0f 21.09.09 01:12 Сейчас в теме
(22) +1, народ похоже не вдупляет)))
25. IamAlexy 345 21.09.09 01:21 Сейчас в теме
(24) угу.. думать и кодить это не синонимы
27. larisab 160 21.09.09 06:24 Сейчас в теме
(24) Народ давно вдупляет :)
23 коммент посмотри в http://www.infostart.ru/projects/5879/index.php?p=2&id=5879%2F#comm (про геометрические объекты) и все ясно станет.
23. Мастер1С 781 20.09.09 18:03 Сейчас в теме
Н-да...
Был у нас препод по тензорному анализу, бааальшой мастак лепить глупости,
но что бы так...
32. KukA.5 476 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. larisab 160 27.09.09 09:55 Сейчас в теме
(32) Мммм... а где Вы усмотрели ХАМСТВО - в ссылке на Ваши же слова?
"Мне понравился вопрос, заданный однажды знатокам "Что? Где? Когда?": с какими геометрическими объектоми можно сравнить мысли умных людей? (как то так звучало, точно не помню)

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

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


В контексте этого обсуждения (Продолжаем сводить с ума...) ссылка на Ваши слова - подчеркивание Вашего ума, и мы это уже поняли (народ вдупляет)... ;)
Тем более, у Вас столько плюсиков :!: :!: :!:
34. Арчибальд 2709 27.09.09 10:24 Сейчас в теме
(32) Как-то получилось, что я Вас считаю приличным человекос. И вдруг такое гнутье пальцев... Фи.
37. coder1cv8 3477 28.09.09 14:20 Сейчас в теме
(34) Да ну, человек в неадеквате явно! ) Рейтинги считает... ))
38. Altair777 645 28.09.09 15:37 Сейчас в теме
(37) Ну и что? Я вот тоже свой считаю :-)
Но пальцы не гну. Даже и не знаю в какую их сторону надо гнуть по-правильному...

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

Но 32 коммент точно заслужил... только не плюсик.
40. KukA.5 476 02.10.09 02:28 Сейчас в теме
Функция ПрисвоитьБезопасно(А,Б) Экспорт
//Назначение: Присваивает значение Б переменной А только если значение реально изменилось
//ДатаСоздания: 2008
//Автор: Fixin
//Тестирована: Да
//Описание:
// Удобно, когда нужно защититься от модифицированности

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

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

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

Устанавливать реквизиты в процедуре ПриОткрытии() (за исключением новых документов) необходимо, в основном, для поддержки избыточности данных.
Наличие модифицированности формы объекта при открытии для пользователя означает косяк в данных, а для администратора - косяк в коде, который их создал. Сброс модифицированности в этом случае - это сокрытие от пользователя правды.
43. KukA.5 476 03.10.09 21:54 Сейчас в теме
(42) это и есть суть!
...не надо косячить, чтобы потом это же исправлять...
44. anig99 2852 03.10.09 22:01 Сейчас в теме
(41) видимо мало Вы работали с МСОфисом... Существует куча вариантов, когда при открытии документа (что ворд, что ексель) он модифицируется автоматически и предлагает себя сохранить при закрытии...
39. Мастер1С 781 28.09.09 18:09 Сейчас в теме
(32) Ну не общайся с нами, нулевистами. Не засоряй эфир.
svartemov; +1 Ответить
26. Flashback1979SE 21.09.09 04:10 Сейчас в теме
От прочтения сего была вызвана процедура "ВызватьКультурныйШок(ЖертваЧтения)".

Описание процедуры: крошит моск наффик, убивая нейронный траффик:-))))))
28. coder1cv8 3477 21.09.09 12:09 Сейчас в теме
Меня тоже раздражает, когда ПриОткрытии() что-то устанавливают, а Модифицированность не сбрасывают!
Еще некоторые писатели используют для установки реквизитов ПриЗаписи(), вместо ПередЗаписью() - тогда после сохранения опять получаем этот лишний диалог...
29. sound 536 21.09.09 22:43 Сейчас в теме
Тоже вспомнился универ и некоторые преподы :)
30. beigka 219 21.09.09 23:05 Сейчас в теме
2 sound (29) больше стажеры вспоминаются пока что.
31. lexkex 108 23.09.09 11:43 Сейчас в теме
Вы бы еще при открытии в регистрах сведений проведенного документа что-нибудь поменяли бы :D
35. yegorovnv 1 28.09.09 10:18 Сейчас в теме
Предлагаю не писать вредные советы, а сделать все наоборот. Написать статью о "правильных" методах работы с объектами конфигурации, своего рода правила хорошего тона.
Для начинающих будет хорошим справочником по работе.
36. oneman@yandex.ru 28.09.09 13:35 Сейчас в теме
YAN: "Аж страшно стало прочитав последнее предложение".
Я почему-то не понял сарказма. По-моему хорошее замечание.
Оставьте свое сообщение