Совершенный коТ (Cat complete)

04.11.20

Разработка - Рефакторинг и качество кода

Стандарты программирования в картинках. Самоирония прилагается.

 

 
1.

 

 
2.

 
3.

 
P.S.

См. также

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

В последнее время термин «чистый код» стал очень популярным. Появились даже курсы по данной тематике. Так что же это такое?

16.09.2024    13124    markbraer    64    

38

Рефакторинг и качество кода Программист Бесплатно (free)

В статье рассматривается отказ от использования процедур и унификация формата ответа функций. Способ описывается на примере развития абстрактной информационной системы, работающей с PDF файлами.

10.09.2024    860    acces969    4    

6

Рефакторинг и качество кода Бесплатно (free)

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

28.08.2024    1074    Chernazem    3    

6

Рефакторинг и качество кода Программист Бесплатно (free)

SOLID – принципы проектирования программных структур (модулей). Акроним S.O.L.I.D. образован из первой буквы пяти принципов. Эти принципы делают код более гибким, упрощают разработку. Принято считать, что принципы SOLID применимы только в объектно-ориентированном программировании. Но их можно успешно использовать и в 1С. Расскажем о том, как разобраться в принципах SOLID и начать применять их при работе в 1С.

22.08.2024    9654    alex_sayan    41    

49

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

Рассмотрим основные принципы шаблона проектирования "Стратегия" на простом примере.

25.06.2024    4001    MadRave    34    

27

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

В статье расскажу и покажу процесс проведения Code-review на примере обработки с GitHub.

1 стартмани

04.06.2024    6133    mrXoxot    55    

42

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Поделюсь своим опытом аудита кода авторских продуктов с Infostart.ru как одним из элементов применения DevOps-практик внутри Инфостарт. Будет настоящий код, боевые скриншоты, внутренние мемы от команды ИТ-лаборатории Инфостарт и прочее мясо – все, что любят разработчики.

10.04.2024    13038    artbear    85    

108

Рефакторинг и качество кода Программист Платформа 1С v8.3 Россия Бесплатно (free)

Предлагаю вашему вниманию советы мастеров древности. Программисты прошлого использовали их, чтобы заострить разум тех, кто после них будет поддерживать код. Гуру разработки при найме старательно ищут их применение в тестовых заданиях. Новички иногда используют их ещё лучше, чем матёрые ниндзя. Прочитайте их и решите, кто вы: ниндзя, новичок или, может быть, гуру? (Адаптация статьи "Ниндзя-код" из учебника JavaScript)

01.04.2024    4113    DrAku1a    15    

39
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RustIG 1744 03.06.19 09:08 Сейчас в теме
(0) объектное извлечение данных хуже , чем по запросу? хотелось бы узнать
maksa2005; Summer_13; Tolpinski; Perfolenta; bulpi; +5 Ответить
5. vasilev2015 2718 03.06.19 09:18 Сейчас в теме
(1) Здравствуйте !

При объектном чтении ( Например, ДокументСсылка.Номер )
из СУБД считываются не только реквизиты объекта, но (если есть)
и все табличные части и все реквизиты-хранилища, чтение происходит в транзакции.

Представляете, насколько это более затратно для СУБД, чем запрос

Выбрать ДокументПоступления.Номер
ИЗ Документы.ПоступлениеТоваровУслуг КАК ДокументПоступления
Где ДокументПоступления.Ссылка = &Ссылка

Поэтому в современных типовых программах разработчики не используют объектное чтение.
Andrei_Ivanov; slax; RomanMartynenko; seperblunt2; Anchoret; Tolpinski; for_sale; fxmike; wowik; CyberCerber; +10 Ответить
11. RustIG 1744 03.06.19 09:23 Сейчас в теме
(5) хорошо, принял.
но вы ориентируетесь на то, что якобы знаете как работает платформа.
а вы уверены, что разработчики платформы заложили именно такой "затратный по производительности" механизм объектного извлечения данных?
то есть по сути, мне нужен ИНН контрагента, я прописал Контрагент.ИНН. А они заложили в платформе, что тащится весь справочник Контрагентов со всеми табличными частями? Может быть, стоит им написать, чтобы они улучшили свой алгоритм и не извлекали лишнего?
Светлый ум; klaus38; ixijixi; Perfolenta; Daruma; bulpi; +6 6 Ответить
14. vasilev2015 2718 03.06.19 09:30 Сейчас в теме
(11) Это известная проблема, по ней много публикаций.

Я проверял в профайлере, всегда работает одинаково.

Разработчики платформы хотели бы что-то изменить,
но их связывает обратная совместимость и прочие обязательства.
Andrei_Ivanov; seperblunt2; Tolpinski; for_sale; CyberCerber; +5 Ответить
17. json 3349 03.06.19 09:39 Сейчас в теме
(11)
при объектном чтении, все таки, возможно, проблема не в том, что тащатся все реквизиты с табличными частями, а скорее в случаях, когда пишут такой код:
НоваяСтрока = ТаблицаКонтрагенты.Добавить();
НоваяСтрока.ИНН = КонтрагентСсылка.ИНН;
НоваяСтрока.КПП = КонтрагентСсылка.КПП;
НоваяСтрока.Наименование = КонтрагентСсылка.Наименование;


В этом случае, вроде как выполняется три запроса, а при использовании функции ОбщегоНазначения.ЗначениеРеквизита() - это можно сделать за одно обращение к БД. Хотя тут, возможно, используется кэш, но это неточно.
kser87; CyberCerber; RustIG; +3 Ответить
19. vasilev2015 2718 03.06.19 09:44 Сейчас в теме
(17) Когда объектное чтение происходит первый раз, то объект кешируется
и в следующих случаях запросов к СУБД нет. Но это все равно плохо.
Посмотрите ссылку комментария (18).
JohnyDeath; RomanMartynenko; tulakin_s; for_sale; Abris9; fxmike; wowik; CyberCerber; +8 Ответить
20. AlX0id 03.06.19 09:47 Сейчас в теме
(17)
Ну вот в таком случае я бы сказал, что 99% вероятности того, что будет использоваться кэш. Ибо за три строчки кода вряд ли объект из кэша выветрится..
18. TODD22 19 03.06.19 09:39 Сейчас в теме
(11)
а вы уверены, что разработчики платформы заложили именно такой "затратный по производительности" механизм объектного извлечения данных?

https://its.1c.ru/db/v8std#content:496:hdoc
json; Drivingblind; Бубузяка; RomanMartynenko; Reaper_1C; ixijixi; alur; Soloist; Tolpinski; for_sale; rozer; wowik; CyberCerber; RustIG; +14 Ответить
149. RustIG 1744 15.06.19 20:39 Сейчас в теме
(11)
А они заложили в платформе, что тащится весь справочник Контрагентов со всеми табличными частями? Может быть, стоит им написать, чтобы они улучшили свой алгоритм и не извлекали лишнего?


http://forum.infostart.ru/forum34/topic210462/message2229287/#message2229287

Добавили бы в конфигуратор для всех реквизитов признак "Вызов через точку" - чтобы не тащить все остальные поля при такой конструкции "Контрагент.ИНН".
21. WalterMort 246 03.06.19 09:48 Сейчас в теме
// Занудство ON
(5) Не лучший пример (получение поля "номер"). Основные поля прикладных объектов кэшируются без чтения всего объекта. При их получении через точку весь объект не будет считан. А вот ДокументСсылка.Организация, считает весь объект.
// Занудство OFF
Summer_13; Perfolenta; tulakin_s; CyberCerber; bulpi; +5 Ответить
23. vasilev2015 2718 03.06.19 09:52 Сейчас в теме
(21) Здравствуйте !

Для меня это не занудство. я сам такой.
Мне это интересно для подготовки к экзамену.
Можете привести ссылку на первоисточник ?
26. WalterMort 246 03.06.19 10:10 Сейчас в теме
(23) Хм. В Профразработке для версии 8.0, вроде было так, а в книге для 8.3 (том 1, стр 72) указано, что неполное чтение используется только для получения представления типа строка(ДокументСсылка). Так что похоже я неверно написал.
28. vasilev2015 2718 03.06.19 10:15 Сейчас в теме
(26) Объектное чтение проходит без транзакции, если у объекта нет табличных частей.
wowik; RustIG; +2 Ответить
24. RustIG 1744 03.06.19 09:57 Сейчас в теме
(21) вот же ссылка на стандарт разработки в посте (18), а далее по ссылке пример - тащим Наименование страны через запрос, а не через точку.
Поэтому вопрос:откуда вы взяли, что
(21)
Основные поля прикладных объектов кэшируются без чтения всего объекта.
?
29. muskul 03.06.19 10:19 Сейчас в теме
(5)при этом обращение напрямую к регистру например сводные остатки идет быстрей чем через запрос.
Везде пишут не используйте это не используйте при этом типовые конфы такое вытворяют... что думаешь там рельно ии уже сидит и по тз код строчит
148. RustIG 1744 15.06.19 20:25 Сейчас в теме
(1)
объектное извлечение данных хуже , чем по запросу? хотелось бы узнать


https://infostart.ru/public/1003601/
2. json 3349 03.06.19 09:12 Сейчас в теме +0.2 $m
Кроме этого, метаданные (Справочники, Документы, Регистры…) в дереве необходимо сортировать. Так гораздо аккуратнее. Реквизиты объектов можно оставить без сортировки.


Не соглашусь. Очень удобно, когда новые объекты конфигурации добавляются в конец списка. В таком случае, во-первых ты имеешь представление о том, что делают другие участники команды, во-вторых часто возникает необходимость обратиться к объектам, добавленным пару месяцев назад, тобой или кем-то другим, при этом уже не помнишь или не знаешь точное название этих объектов. В этом случае просто открываешь список документов, бежишь глазами вверх и быстро находишь нужный объект
Tolpinski; tulakin_s; klimsrv; bulpi; +4 Ответить
6. RustIG 1744 03.06.19 09:19 Сейчас в теме +0.2 $m
(2) оба варианта имеют право на жизнь.
для конечного продукта и конечного потребителя - лучше отсортировать, и тогда - когда внедренец будет добавлять свои объекты - он будет различать , где типовые (по поставке продукта), а где его.
в вашем случае - при разработке продукта и тем более в команде удобно видеть новые создаваемые объекты, поэтому сортировать не целесообразно.
Сортировка должна происходить между процессом разработки и продажей продукта - получается промежуточным этапом.
7. vasilev2015 2718 03.06.19 09:20 Сейчас в теме
(2) Здравствуйте !

мне тоже было непривычно, потом понравилось.
Специально проверил - в типовой все сортировано.
15. json 3349 03.06.19 09:31 Сейчас в теме
(7)
При выпуске коробки конечно же необходимо сортировать.

Но в публикации вроде это нигде не уточняется
22. AlX0id 03.06.19 09:50 Сейчас в теме
(2)
Не соглашусь с "не соглашусь".
При обновлении этот принцип "новые объекты конфигурации добавляются в конец" - херится напрочь. В итоге - в конце списка тупо каша из добавленных кастомных объектов и новых объектов типовых..
Если требуется систематизировать работу с кастомными объектами - лучше их выделять в отдельную подсистему/подсистемы.
Артано; CyberCerber; RustIG; +3 Ответить
3. alex-l19041 8 03.06.19 09:14 Сейчас в теме
ОбщегоНазначения.ЗначениеРеквизитаОбъекта - не универсальный пример (может отсутствовать в конфигурации )
Fox-trot; bulpi; +2 Ответить
10. vasilev2015 2718 03.06.19 09:22 Сейчас в теме
(3) Здравствуйте !

Если отсутствует, то имеет смысл добавить. Очень полезная функция.
CyberCerber; +1 Ответить
13. cool99 03.06.19 09:26 Сейчас в теме
(3)
Во всех типовых конфигурациях есть БСП, самописки пишутся на базе БСП, скопировать 4 функции из БСП - также бесценно, как и "таблица значений в массив"
ixijixi; CyberCerber; ltfriend; +3 1 Ответить
4. RustIG 1744 03.06.19 09:15 Сейчас в теме
(0) 5 минут думал, в чем смысл листинга? красной рамкой и чертой - выделены фрагменты, которые не стоит использовать, зеленой рамкой - видимо, улучшенный вариант.
Оригинальная подача материала - удобно для восприятия, затратно по времени подготовки.
Как реализовали ?
8. vasilev2015 2718 03.06.19 09:21 Сейчас в теме
(4) Сделал три картинки и объединил, использовал gif - редактор https://ezgif.com/maker
VyacheslavShilov; Serj1C; RustIG; +3 Ответить
9. VmvLer 03.06.19 09:21 Сейчас в теме
"фигня ваша заливная рыба" - это я о клиповом мышление.

клипофилы губят в себе образное мышление и без устройства отображения они никто.
mrChOP93; ledywinter; CyberCerber; +3 Ответить
12. vasilev2015 2718 03.06.19 09:25 Сейчас в теме
(9) Здравствуйте !

Думаете, это мышление мы как-то можем улучшить ?
16. vasilev2015 2718 03.06.19 09:34 Сейчас в теме
Добавил вознаграждение за конструктивные предложения и дополнения.
25. RustIG 1744 03.06.19 10:05 Сейчас в теме
(0) Коллеги, я вот учился в 2008 году по книге Радченко, где было написано, что извлекать данные можно объектно и по запросу. Не было оговорок про производительность того или иного способа. Наоборот, местами было удобнее использовать объектное обращение к переменным: ПолучитьПоследнее() по регистру сведений - например, цену или курс доллара.
А сейчас, цену не стоит так извлекать? Что потащится из базы при использовании такой конструкции? вроде как вся запись по отбору регистра сведений....
27. vasilev2015 2718 03.06.19 10:14 Сейчас в теме
(25) Да, объектные чтения регистров тоже имеют аналогичные недостатки.
И хотя для регистров нет однозначного ответа, но на мой взгляд лучше запрос.
31. WalterMort 246 03.06.19 10:25 Сейчас в теме
(25) В объектном чтении нет ничего плохого если хорошо понимаешь как оно работает.
Например если на регистр наложен РЛС, объектное чтение набора с запрещенными записями выдает исключение.
Dach; RustIG; +2 Ответить
110. rinat_alp2 75 04.06.19 11:20 Сейчас в теме
(25) Добрый день, различие будет, если прочитать набор записей внутри внешней транзакции (при проведении) и потом записать. Разделяемая управляемая блокировка (накладывается при Набор.Прочитать()) превратится в исключительную (Набор.Записать()), а это потенциальный deadlock.

А с объектным чтением документа с табличными частями почему то не воспроизвелось, нет и все разделяемой управляемой блокировки. ))
30. nestokay 62 03.06.19 10:22 Сейчас в теме
32. vasilev2015 2718 03.06.19 10:26 Сейчас в теме
(30) Здравствуйте !

Лично для меня открытием стала книга С. Макконела "Совершенный код".
Некоторые главы как будто специально для 1С написаны.
150. sh_oleg 07.09.20 21:39 Сейчас в теме
(32)
В эту же тему...
Есть книга "чистый код" Роберт Мартин. Если "Совершенный код" впечатлил, то и эта должна зайти.

П.с. с большим интересом читаю ваши публикации.
33. nayd 9 03.06.19 10:43 Сейчас в теме
//+ ПРЕФИКС <Фамилия И.О. разработчика> от <дд-мм-гггг>. <Описание задачи - опционально>
2.2. Перем НоваяПеременная1, НоваяПеременная2;
//- ПРЕФИКС <Фамилия И.О. разработчика>

Модный нынче Git еще не освоили?
Этот и последующие образцы для комментирования - разве не дурной тон по тому же Макконнеллу? Представьте один типовой модуль, в который раз в месяц один из разработчиков вносит изменения. Этот модуль уже через год-два превратится в зеленую лужайку из-за комментариев, где кое-где встречаются конструкции языка. Такой "зеленый" модуль усложняет чтение самого кода.

И еще зачем использовать "ПРЕФИКС_" в добавлении ко всем объектам, реквизитам, функциям и так далее? Вот никогда не понимал, почему так делают. Мое предположение, что это было крайне важно в 7.7 (я с ней не работал), и программисты старой закалки перетащили это в 8.х, где это не приносит существенной пользы.
Fox-trot; t.v.s.; FreeArcher; Xephone; frying; Kondratenko.as; CyberCerber; RustIG; +8 Ответить
34. TODD22 19 03.06.19 10:45 Сейчас в теме
(33)
тот и последующие образцы для комментирования - разве не дурной тон по тому же Макконнеллу? Представьте один типовой модуль, в который раз в месяц один из разработчиков вносит изменения. Этот модуль уже через год-два превратится в зеленую лужайку из-за комментариев, где кое-где встречаются конструкции языка. Такой "зеленый" модуль усложняет чтение самого кода.

Вот если модуль типовой то как раз пусть вносит комментарии, кто, когда и что изменял или дополнял. Если же модуль его собственный то тут уже по ситуации.
pbabincev; +1 Ответить
36. nayd 9 03.06.19 10:54 Сейчас в теме
(34)
т если модуль типовой то как раз пусть вносит комментарии, кто, когда и что изменял или дополнял. Если же модуль его собственный то тут уже по ситуации.

ФИО разработчика и когда внесено изменение - это задача системы контроля версий.
t.v.s.; frying; CyberCerber; +3 Ответить
39. TODD22 19 03.06.19 11:09 Сейчас в теме
(36)
ФИО разработчика и когда внесено изменение - это задача системы контроля версий.

Это при условии что система контроля используется.
babys; zqzq; brr; +3 1 Ответить
35. vasilev2015 2718 03.06.19 10:49 Сейчас в теме
(33) Здравствуйте !

есть мнение, что такие комментарии - нелепые и что EDT и GIT вскоре решат эту проблему.
Но пока сам не пробовал. Мы используем именно такие комментарии.
Это помогает при обновлении и поддержке. Возможно, это не эталон.
VyacheslavShilov; Sergynia; pbabincev; +3 Ответить
37. nayd 9 03.06.19 10:56 Сейчас в теме
(35) уже решено и без GIT'a.
Используется обычное хранилище, разработчики также работают. Настроен скрипт на OneScript, который при помещении коммита в хранилище, добавляет информацию в git.
На инфостарте уже два года про это статьи пишут.
38. vasilev2015 2718 03.06.19 10:59 Сейчас в теме
(37) А сами Вы GIT используете ?
46. nayd 9 03.06.19 12:07 Сейчас в теме
(38) да, на проектах, где больше одного человека занимаются разработкой. Если я один или если прихожу на проект, где всё по-своему устроено - то нет.
47. vasilev2015 2718 03.06.19 12:11 Сейчас в теме
(46) Интересно. Может, и мы доживем.
40. bulpi 217 03.06.19 11:18 Сейчас в теме
ЭЭЭЭ... Не понял. А где обещанные клипы ?
41. vasilev2015 2718 03.06.19 11:26 Сейчас в теме
(40) Здравствуйте !

Гифки подходят ?
42. shalimski 6 03.06.19 11:30 Сейчас в теме
43. vasilev2015 2718 03.06.19 11:48 Сейчас в теме
(42) Здравствуйте !

Взял для примера посторонний язык программирования ((.
Казалось, популярный.
44. TODD22 19 03.06.19 11:48 Сейчас в теме +0.2 $m
45. vasilev2015 2718 03.06.19 11:56 Сейчас в теме
(44) Спасибо, исправил. Перечислил СМ в знак благодарности.
125. UniversaLL 46 05.06.19 11:17 Сейчас в теме
(45)Исправили не совсем точно. У Вас "Pyton". И в Python'e всё таки 4 пробела, а не табуляция.
126. vasilev2015 2718 05.06.19 11:34 Сейчас в теме
48. CyberCerber 872 03.06.19 12:17 Сейчас в теме +0.2 $m
Добрый день
Спасибо за статью, сам все хочу приобрести эту книгу, но никак руки не доходят. Вы говорите, что она хорошо подходит и для 1С?
Вопросы, замечания по тексту:

1. ЗначениеРеквизитаОбъекта - а разве можно передавать структуру, чтобы получить реквизит реквизита? У вас какая-то доработанная версия?

2. Честно говоря, мне не нравится как 1С выравнивает многострочные логич выражения. Я бы их ставил на уровне первого Если, а не вложенного кода. Я один такой?

3. "аргументы функции (процедуры) при возможности сохранять в структуре значений, которая будет единственным аргументом" - вот что-то никак не могу это принять. Да, для кастомизации это круто, можно спокойно добавлять новый параметр, не переписывая везде интерфейс. Но вот для понимания и читабельности... Что, кому-то это удобнее? Тут становится понятно только по описывающему комментарию перед функцией. Но ведь рядом же написана мысль, что хороший код в комментах не нуждается.

4. "Модули форм оформляются через области, используя стандартные и, при необходимости, свои" - список, что дальше, это официальный, из ИТС? Не встречал его раньше.

P.S. Сама подача материала не очень понравилась. Я не приветствую клиповость, особенно для статей на такую серьезную тему. Лучше текст почитать.
С другой стороны, может вам здесь как раз не хватило этой клиповости. Вы в начале написали, я ждал какой-то яркой картинки, а в итоге не сразу заметил, что картинки вообще меняются. Если уж идти в этом направлении, то должны быть стрелки, другие яркие элементы для привлечения внимания, какая-то динамика.
Светлый ум; +1 Ответить
49. vasilev2015 2718 03.06.19 12:26 Сейчас в теме
(48) Здравствуйте !

1. Да, попробуйте сами. У нас версия БСП не новая.

2. Возможно, 1С выравнивает многострочные логич выражения не лучшим способом.
я исходил из девиза "Безобразно, но однообразно"

3. Использовать структуру как аргумент - это тренд производителя. В этом что-то есть.

4. Список областей не входит в стандартные требования. Но применяется часто.

5. По теме много серьезных статей. Хотелось как-то выделиться. Стрелочки наверное добавлю.
50. CyberCerber 872 03.06.19 12:38 Сейчас в теме
(49) 1:
Попробовал пример, как у вас, в УТ 11.4, выдало ошибку:

{ОбщийМодуль.ОбщегоНазначения.Модуль(258)}: Поле объекта не обнаружено (Структура)
	Возврат Результат[СтрЗаменить(ИмяРеквизита, ".", "")];


Зато работает такой способ: ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Контрагент.ИНН")
52. vasilev2015 2718 03.06.19 12:41 Сейчас в теме
(50) я давно так структуру использую. Посмотрите, может Вы или я в примере аргументы поменяли местами ?
54. CyberCerber 872 03.06.19 12:44 Сейчас в теме
(52) Да нет, ну я смотрю код функции, она не может структуру съест. А что у вас за БСП? Из какой конфигурации?
58. vasilev2015 2718 03.06.19 13:19 Сейчас в теме
(54) у меня УТ 11.4.2.144 Ниже описание функции ЗначенияРеквизитовОбъекта. Седьмая сверху строка - тип Структура. Но возможно, я неправильно написал на картинке синтаксис.

// Параметры:
// Ссылка - ЛюбаяСсылка - объект, значения реквизитов которого необходимо получить.
// - Строка - полное имя предопределенного элемента, значения реквизитов которого необходимо получить.
// Реквизиты - Строка - имена реквизитов, перечисленные через запятую, в формате
// требований к свойствам структуры.
// Например, "Код, Наименование, Родитель".
// - Структура, ФиксированнаяСтруктура - в качестве ключа передается
// псевдоним поля для возвращаемой структуры с результатом, а в качестве
// значения (опционально) фактическое имя поля в таблице.
// Если ключ задан, а значение не определено, то имя поля берется из ключа.
// - Массив, ФиксированныйМассив - имена реквизитов в формате требований
// к свойствам структуры.
// ВыбратьРазрешенные - Булево - если Истина, то запрос к объекту выполняется с учетом прав пользователя, и в случае,
// - если есть ограничение на уровне записей, то все реквизиты вернутся
// со значением Неопределено;
// - если нет прав для работы с таблицей, то возникнет исключение.
// - если Ложь, то возникнет исключение при отсутствии прав на таблицу
// или любой из реквизитов.
//
// Возвращаемое значение:
// Структура - содержит имена (ключи) и значения затребованных реквизитов.
// - если в параметр Реквизиты передана пустая строка, то возвращается пустая структура.
// - если в параметр Ссылка передана пустая ссылка, то возвращается структура,
// соответствующая именам реквизитов со значениями Неопределено.
// - если в параметр Ссылка передана ссылка несуществующего объекта (битая ссылка),
// то все реквизиты вернутся со значением Неопределено.
//
Функция ЗначенияРеквизитовОбъекта(Ссылка, Знач Реквизиты, ВыбратьРазрешенные = Ложь) Экспорт
61. CyberCerber 872 03.06.19 13:23 Сейчас в теме
(58) Так мы с вами про разные функции говорим? У вас в примере ЗначениеРеквизитаОбъекта
51. CyberCerber 872 03.06.19 12:40 Сейчас в теме
(49)
2. Да, в общем, девиз правильный, просто решил поделиться, мнение узнать.

3. В смысле, тренд 1С? А где такое можно посмотреть? Как-то везде пока вижу кучу аргументов.
53. vasilev2015 2718 03.06.19 12:43 Сейчас в теме
(51) Например, ДополнительныеСвойства объекта.
Недавно обновлял типовую конфигурацию,
видел несколько функций где 1С заменили несколько аргументов на структуру.
Найти ссылку на ИТС про аргументы ?
55. CyberCerber 872 03.06.19 12:48 Сейчас в теме
(53) Да, если не сложно. Было бы интересно.
79. vasilev2015 2718 03.06.19 15:01 Сейчас в теме
(55) (53) (51)

Про аргументы в заголовке функции:

Правильно сгруппировать параметры, описывающие значения реквизитов номенклатуры, в структуру ЗначенияРеквизитов:

https://its.1c.ru/db/v8std#content:640:hdoc
81. CyberCerber 872 03.06.19 15:05 Сейчас в теме
(79) Почитал. Согласен, если параметров много, то следует сгруппировать их по структурам. Но про то, что нужно все функции делать с одним параметром, даже если их подразумевается три, не написано.
85. vasilev2015 2718 03.06.19 15:14 Сейчас в теме
102. charushkin 108 03.06.19 20:02 Сейчас в теме
(49) структура как аргумент - не просто тренд, а стандарт, описанный на ИТС. С телефона не найду ссылку, но там говорится про методы, имеющие большое количество параметров (ориентироваться следует на 5 и более)
Про список областей - то же самое: есть стандарт на ИТС.
ЗначениеРеквизитаОбъекта - исчерпывающую информацию можно получить прямо из описания метода (в том числе примеры вызова). Сигнатура и способы вызова не менялись очень давно, то есть, описанный пример актуален и для древних конфигураций
116. babys 90 04.06.19 18:12 Сейчас в теме
(49) "4. Список областей не входит в стандартные требования. Но применяется часто. "
Уже входит.
56. alexander-pro 03.06.19 13:06 Сейчас в теме
Даже не касаясь темы клипового мышления, все это давно описано в "Системе стандартов и методик разработки конфигураций" на ИТС. Статья рассчитывалась на разработчиков 1С, не знакомых со стандартами разработки в своей области?
57. vasilev2015 2718 03.06.19 13:15 Сейчас в теме
(56) Здравствуйте !

В статье нет копипаста с ИТС.

Некоторые разработчики 1С не читали "Совершенный код".

На это и рассчитываю.
59. dhurricane 03.06.19 13:22 Сейчас в теме +0.2 $m
Раз Вы не против занудства, позвольте и мне вставить свое. :)

В первом пункте некорректно рассчитывается сумма товаров документа.

Во-первых, Вы используете для обхода выборки цикл, тогда как в результате запроса будет всегда ровно одна строка. На мой взгляд, с которым Вы вполне законно можете не согласиться, для получения данных выборки, где может быть не более одной строки корректнее использовать конструкцию "Если", а не "Цикл". Причина та же, что и для правил именования переменных: так мы подсказываем читающему код разработчику, что в результате не может быть более одной строки. Но это дело вкуса.

Во-вторых, возможны ситуации, когда результатом вычисления суммы товаров документа будет NULL. Это случай с пустой табличной частью "Товары". Мне кажется это также неожиданным для дальнейшего использования результатом, и предпочтительнее здесь получить именно 0. На это намекает инициализация переменой суммы и наличие цикла обхода выборки вместо безусловного "Выборка.Следующий()". Но конечно же, что возвращать - NULL или 0, зависит от решаемой задачи.
SirStefan; Fox-trot; json; bulpi; Serj1C; CyberCerber; +6 Ответить
71. vasilev2015 2718 03.06.19 14:23 Сейчас в теме
(59) да, там может быть Null. Исправлю, спасибо.
60. ManyakRus 489 03.06.19 13:22 Сейчас в теме
1) Пример 1, 2,3
Так нельзя
IDE должен сам искать ошибки, в языке ява например придумано много доп. компонентов псевдо SQL язык чтоб ошибки выходили в DesignTime а не RunTime

2) Пример 4
Так нельзя.
С новой строки без отсупа должна находиться новая логическая операция а не продолжение прошлой.

3) Пример 5
Так нельзя.
Слово "Тогда" должно находиться с новой строчки если в условии несколько проверок

4) Пример 6
Так нельзя.
"Мягкий" хардкодинг надо делать путём создания функции в общем модуле

5) Пример 7
Так нельзя.
Международный стандарт правильного именования переменных "Венгерская нотация" говорит что перед именем переменной надо писать тип переменной(сокращённо)
например
ТЗНоменклатура
а не НоменклатураПоступления

6) Пример 8
Так нельзя.
Процедуры и функции должны быть "самодокументируемые" чтоб было всё понятно без документации.


Чему только людей учите :(
Chai Nic; serge_focus; kuzyara; vanoono; Kondratenko.as; +5 8 Ответить
62. TODD22 19 03.06.19 13:24 Сейчас в теме
(60)
Международный стандарт правильного именования переменных "Венгерская нотация"

Где можно "международный стандарт" почитать? На сколько знаю от ВН отказались даже в МС где изначально её и придумали применять.
memb3r; Артано; ltfriend; +3 Ответить
63. ildary 21 03.06.19 13:36 Сейчас в теме
(60) Не надо тащить стандарты 30-летней давности для строго типизированных языков туда, где они не сдались (я про венгерскую нотацию). В коде 1С такие вещи смотрятся как пульт ДУ в полиэтилене (неуместно).
pavlov_dv; Артано; zeegin; bulpi; CyberCerber; +5 Ответить
64. ManyakRus 489 03.06.19 13:41 Сейчас в теме
(63) "Это может пригодиться:
...В языках с динамической типизацией"
https://ru.wikipedia.org/wiki/%D0%92%D0%B5%D0%BD%D0%B3%D0%B5%D1%80%D1%81%D0%BA%D0­%B0%D1%8F_%D0%BD%D0%BE%D1%82%D0%B0%D1%86%D0%B8%D1%8F
в википедии так и написано что это хорошо для динамический типизации типа как в 1С
65. ildary 21 03.06.19 13:44 Сейчас в теме
(64) я больше доверяю стандарту 1С, в котором про венгерскую нотацию ничего не сказано: https://its.1c.ru/db/v8std
A.Sytchev; CyberCerber; litonchik; vasilev2015; +4 Ответить
68. ManyakRus 489 03.06.19 13:57 Сейчас в теме
(66) по ссылке написано:
"...General Naming Conventions Microsoft .NET
- DO NOT use Hungarian notation."
В хороших языках программирования со строгой типизацией венгерская нотация не нужна конечно, там тип переменной итак строго задан, но это не про 1С
70. TODD22 19 03.06.19 14:19 Сейчас в теме
(68)пишу на одном скриптовом языке с динамической типизацией, в соглашении к этому языку не встречал рекомендаций использовать ВН. Хотя вот аннотацию типов вводят в стандарты.
В хороших языках программирования со строгой типизацией венгерская нотация не нужна конечно, там тип переменной итак строго задан, но это не про 1С
72. ManyakRus 489 03.06.19 14:24 Сейчас в теме
(70) в википедии так и написано
"...ни само наличие префиксов, ни их написание не являются требованием языков программирования"
67. trntv 25 03.06.19 13:56 Сейчас в теме
(60) есть стандарты разработки 1С https://its.1c.ru/db/v8std , почитайте, прежде чем сюда писать "Так нельзя". Я предпочту видеть перед глазами единообразный код соответствующий стандартам разработки, а не программиста, который следует "Венгерской нотации".
Drivingblind; Dach; heinzenberg; +3 Ответить
69. ManyakRus 489 03.06.19 14:00 Сейчас в теме
(67) посылать на три буквы (www) все умеют,
а сказать что-нибудь внятное уже сложнее
ixijixi; serge_focus; DoReMi; +3 1 Ответить
107. kuzyara 2082 04.06.19 06:08 Сейчас в теме
(69) Поддержу по примеру 4,
Форматирование синтаксических конструкций
Текстовый редактор системы 1С:Предприятие предоставляет функции автоматического форматирования управляющих конструкций встроенного языка.

Помимо автоматического форматирования текста модуля в процессе ввода, можно также отформатировать уже введенный текст. Для этого необходимо выделить блок текста, который требуется отформатировать, и выбрать "Текст - Блок - Форматировать". При этом текстовый редактор проанализирует текст модуля и произведет его форматирование, при котором содержимое каждой синтаксической конструкции будет сдвинуто вправо на величину табуляции независимо от первоначального расположения строк (лидирующих пробелов).
(с) сп

Встроенный инструмент форматирования предназначен для оформления управляющих конструкций встроенного языка и не умеет ни в один из пунктов https://its.1c.ru/db/v8std#content:444:hdoc:_top:перенос%20выражений .
Поэтому аппелирование к нему в данном случае считаю некорректным, а отступы конструктора запросов более каноничными.
serge_focus; ManyakRus; +2 Ответить
73. vasilev2015 2718 03.06.19 14:27 Сейчас в теме
(60) Здравствуйте !

в статье речь идет о стандартах 1С, поэтому лучше ссылаться на сайт ИТС, чем на Вики.
Откуда Вы набрали таких категоричных утверждений ?
Можете привести источник ?
74. ManyakRus 489 03.06.19 14:39 Сейчас в теме
(73) с автором спорить бесполезно уж, "он" никогда не признается в неправильности своей статьи.
Лучше подождём что люди скажут :)

2) не надо думать что "сайт ИТС" более авторитетный чем википедия :)
serge_focus; +1 1 Ответить
76. vasilev2015 2718 03.06.19 14:48 Сейчас в теме
(74) Сайт производителя программного продукта 1С ИТС.

В комментариях я несколько раз признал свою неправоту

и перечислил СМ в знак благодарности.
CyberCerber; +1 Ответить
80. TODD22 19 03.06.19 15:04 Сейчас в теме
(74)
не надо думать что "сайт ИТС" более авторитетный чем википедия :)

1) Давно Вики стала авторитетным источником учитывая что вносить правки в неё может любой желающий, даже не имеющий опыта работы программистом?
2) В вопросе написания когда под 1С сайт ИТС куда авторитетнее чем Вики.
Drivingblind; Sergynia; Артано; zeegin; CyberCerber; +5 Ответить
136. OerlandHue 06.06.19 09:41 Сейчас в теме
(73) В своей книге автор писал, что он не заставляет писать так, как он говорит, он лишь приводит свои примеры и примеры других известных программистов, почему так ему кажется удобнее. Я книгу давно читал, но не могу вспомнить, почему не стоит писать тип переменной перед ее параметром? Конкретно меня интересуют такие переменные типа "СтруктураПараметровПолученияПортфелейКонтрагентов" или "ТаблицаЗначенийПредварительнаяНовогоПортфеля". Почему тут плохо использовать Структура и ТаблицаЗначений?
139. vasilev2015 2718 06.06.19 11:22 Сейчас в теме
(136) Здравствуйте !

Использовать Структура и ТаблицаЗначений в наименовании не плохо и не хорошо.
Но в свежем коде производителя это как правило не используется.
OerlandHue; +1