|
книга по правильному написанию алгоритмов и лайфхаки в 1С | ☑ | ||
---|---|---|---|---|
0
olo_lo1
09.08.19
✎
10:08
|
подскажите пожалуйста: а есть ли где то по 1С что то наподобии книги Листа, по алгоритмам но на языке 1С: как правильно строить, всякие хитрости и лайфхаки, с точки зрения оптимизации кода, очень бы хотелось найти и поизучать.
или может портал такой. |
|||
1
Cyberhawk
09.08.19
✎
10:10
|
ИС
|
|||
2
XLife
09.08.19
✎
10:10
|
||||
3
АгентБезопасной Нацио
09.08.19
✎
10:14
|
алгоритм можно выразить на любом языке. Хоть на 1с, хоть на русском матерном.
|
|||
4
Фрэнки
09.08.19
✎
10:16
|
портал ИС - плюсую (1)
например, вот такое недавно читал у них http://catalog.mista.ru/public/1087149/ |
|||
5
olo_lo1
09.08.19
✎
10:17
|
(4) спасибо, но этого мало и все разрозненно. а так что бы едино в 1 месте
|
|||
6
Фрэнки
09.08.19
✎
10:25
|
(5) Это да, очень много там публикаций. Можно читать бесконечно. Я на ис подписался на дайджест - раз в неделю письмо приходит и там толпы статей.
|
|||
7
palsergeich
09.08.19
✎
10:27
|
(5) начни со встроенной справки в конфигураторе.
Там достаточно много примеров и лайфхаков для начала |
|||
8
VS-1976
09.08.19
✎
10:33
|
(0) Начни с простого типа:
a = "Текст1"; b = a; a = a + "2"; Сообщить( a ); Сообщить( б ); а = Новый Массив; a.Добавить( "Текст1" ); b = a; a.Добавить( "Текст2" ); Сообщить( a.Количество() ); Сообщить( b.Количество() ); |
|||
9
Mort
09.08.19
✎
10:40
|
А что за книга Листа?
|
|||
10
VS-1976
09.08.19
✎
10:42
|
(8)
а = -430; б = 35456; с = 0; Если а Тогда Сообщить( "Это истина" ); Иначе Сообщить( "Это ложь" ); КонецЕсли; Если б Тогда Сообщить( "Это истина" ); Иначе Сообщить( "Это ложь" ); КонецЕсли; Если с Тогда Сообщить( "Это истина" ); Иначе Сообщить( "Это ложь" ); КонецЕсли; |
|||
11
palsergeich
09.08.19
✎
10:47
|
А = Истина;
Б = Ложь; Сообщить(ЗначениеЗаполнено(А)); Сообщить(ЗначениеЗаполнено(Б)); |
|||
12
VS-1976
09.08.19
✎
10:48
|
(8)
а = Новый ТаблицаЗначений; а.Колонки.Добавить( "Число", Новый ОписаниеТипов( "Число" ) ); а.Добавить().Число = 10; б = а[ 0 ]; а = Неопределено; Сообщить( б.Число ); |
|||
13
Lama12
09.08.19
✎
10:56
|
(0) Книга бессмысленна. Платформа на столько динамично развивается, что писать такие хитрости нет смысла.
|
|||
14
Cyberhawk
09.08.19
✎
10:59
|
(6) Угу, и в четверг работа до обеда встает колом :)
|
|||
15
Вафель
09.08.19
✎
11:04
|
никаких хитростей не нужно.
если требуется чуть более сложный алгоритм, значит нужно писать не на 1с |
|||
16
Вафель
09.08.19
✎
11:04
|
ну и привидение типов - это никакая не хитрость
|
|||
17
VS-1976
09.08.19
✎
11:07
|
(16) Это просто нужно знать неявное приведение типов
Сообщить( ЗначениеЗаполнено( 0 ) ); Сообщить( ЗначениеЗаполнено( Неопределено ) ); |
|||
18
Вафель
09.08.19
✎
11:08
|
(17) тут вообще никакого привидения нет. все есть в справке
|
|||
19
VS-1976
09.08.19
✎
11:09
|
(18) Это так называется, понятно что это вызов у объекта функции
|
|||
20
Arbuz
09.08.19
✎
11:12
|
Алгоритмы и хитрости - это не про 1с, это про перл и хаскелл - вот тут-то и книг навалом про то и другое.
|
|||
21
VS-1976
09.08.19
✎
11:16
|
(20) У 1С есть только одна хитрость, в алгоритмах стараться максимально перекладывывать работу на С++ :)
|
|||
22
palsergeich
09.08.19
✎
11:25
|
(17) вот с булево не так, как с остальными типами.
Ложь = 0 Но Значение Заполнено (Ложь) <> ЗначениеЗаполнено(0) Очень много кто на это напарывался) |
|||
23
Вафель
09.08.19
✎
11:30
|
Хотя в принципе есть некоторый лайфхаки.
Например, поэтапоное формирование больших строк Раньше был реальный хак, а теперь есть СтрСоединить |
|||
24
VS-1976
09.08.19
✎
11:49
|
(23) Есть ещё лайфхак известный. По быстрому разбивает строку в массив
Функция Split( ПереданнаяСтрока, Разделитель ) Экспорт СтрокаДанных = ПереданнаяСтрока; СтрокаДанных = СтрЗаменить( СтрокаДанных, """", """""" ); ЧислоВхождений = СтрЧислоВхождений( СтрокаДанных, Разделитель ); СтрокаДанных = СтрЗаменить( СтрокаДанных, Разделитель, """},{""S"",""" ); СтрокаДанных = "{""#"",51e7a0d2-530b-11d4-b98a-008048da3034,{" + СтрЗаменить( ЧислоВхождений + 1, Символы.НПП, "" ) + ",{""S"",""" + СтрокаДанных + """}}}"; Возврат ЗначениеИзСтрокиВнутр( СтрокаДанных ); КонецФункции |
|||
25
Has
09.08.19
✎
11:53
|
https://its.1c.ru/
Инструкции по разработке на 1С |
|||
26
H A D G E H O G s
09.08.19
✎
12:06
|
Дарю хак для любого языка.
Функция должна возвращать структуру. Всегда. Процедур не бывает. Структура должна содержать флаг успешности, описание ошибки и полезные данные (при необходимости) |
|||
27
H A D G E H O G s
09.08.19
✎
12:07
|
(26) можно ещё код ошибки для последующего реагирования.
Но именно расчет на структуру позволит вам гибко дописывать алгоритмы не переписывая все к еене матери. |
|||
28
olo_lo1
09.08.19
✎
14:32
|
(26) +++ хороший коммент, принял к сведению.
|
|||
29
palsergeich
09.08.19
✎
14:36
|
(26) (27) оно то правильно, но это долгосрочная инвестиция. Куда как менее кардинальные вещи идут через боль
|
|||
30
palsergeich
09.08.19
✎
14:36
|
(29) всем надо сейчас и вчера.
|
|||
31
Garykom
гуру
09.08.19
✎
14:46
|
(26) Ударился в функциональное программирование? А как же ООП?
|
|||
32
H A D G E H O G s
09.08.19
✎
14:47
|
(31) Не грузи меня непонятными словами.
|
|||
33
Провинциальный 1сник
09.08.19
✎
14:48
|
(26) Плюс тыща. Побочные эффекты функций - зло. Хочешь, чтобы подпрограмма что-то _делала_ - оформляй её процедурой. Хочешь при этом узнать результат - через параметры. А функция должна делать единственное, для чего она придумана математикой - возвращать одно значение (простое или составное), принимая один или несколько аргументов. Код резко станет понятнее и прозрачнее.
|
|||
34
ice777
09.08.19
✎
14:49
|
(0) че за х..ня?
алгоритмы работают независимо от языка. Другой вопрос- незнание самого языка и предметной области. |
|||
35
ice777
09.08.19
✎
14:51
|
(31) негоже конфигурасту думать о разных там.. влажных фантазиях Кнутов.
|
|||
36
Конструктор1С
09.08.19
✎
14:51
|
(0) нет такой книги. На удивление в 1с не принято заморачиваться по поводу "совершенства" кода, как это принято в других языках. Есть только разрозненная информация во множестве источников
|
|||
37
Garykom
гуру
09.08.19
✎
14:57
|
(33) Тогда уж минус.
Пойми что функция лучше когда возвращает не одно значение а структуру. И значение можно получить из структуры. Не надо перехреначивать код в куче месте (где используется старый вариант функции) если требуется допилить функцию для возврата еще одного или множества значений. |
|||
38
ice777
09.08.19
✎
15:00
|
(37) функция в 1с итак может возвратить что угодно.
Херачить структуру в каждую.. это маразм. Мне нужно 1 значение, если вылетит с ошибкой- устраивает, значит где-то ошибка, исправляем. Зачем плодить сущности? |
|||
39
Garykom
гуру
09.08.19
✎
15:04
|
(38) Это сейчас тебе надо одно значение от функции.
Потом потребуется еще одно, а функция уже используется в десятках и сотнях мест. Будешь писать вторую отдельную функцию дублирующую первую? А конфа не слишком распухнет в итоге? Не проще было бы поправить исходную функцию добавив туда в возвращаемую структуру еще одно значение, которое потом по ключу/имени легко получить. |
|||
40
ice777
09.08.19
✎
15:06
|
она у тебя скорее распухнет, если на каждую простую функцию структуру вешать.
Согласен, что для некоторых функций нужно бы изначально закладывать возврат структуры. Это вопрос уже не веры, а квалификации. |
|||
41
Garykom
гуру
09.08.19
✎
15:08
|
(40) От
сильно не распухнет |
|||
42
Провинциальный 1сник
09.08.19
✎
15:09
|
(37) А я про что? Функция должна возвращать или простое значение, или составное (структуру или именованный список в семерке). И никакого изменения параметров.
|
|||
43
Garykom
гуру
09.08.19
✎
15:10
|
(42) там в (26)
"Функция должна возвращать структуру. Всегда. " |
|||
44
Конструктор1С
09.08.19
✎
15:12
|
(39) за такой код нужно бить по рукам. Любая процедура/функция должна служить единственной цели. Функция должна возвращать единственное значение. О возвращаемом значении должно красноречиво говорить имя фукции
|
|||
45
ДенисЧ
09.08.19
✎
15:15
|
(44) Функция ПолучитьСтруктуруСРезультатом_РасчетЗАрплаты()
Сойдёт? |
|||
46
Garykom
гуру
09.08.19
✎
15:15
|
(44) А потом будет еще одна функция и еще одна и еще одна... И все с одинаковым на 95% кодом внутри...
|
|||
47
Конструктор1С
09.08.19
✎
15:15
|
(24) куда проще СтрРазделить()
|
|||
48
Провинциальный 1сник
09.08.19
✎
15:19
|
(45) Не, функция должна называться РезультатРасчетаЗарплаты(<Параметры расчета>). Никаких Получить или Вычислить, и вообще обходится без императивов.
|
|||
49
Надо работать
09.08.19
✎
15:19
|
Ох уж эти универсальщики, пишущие универсальным способом... Рукы поотрывав бы!
|
|||
50
Надо работать
09.08.19
✎
15:23
|
||||
51
Сияющий в темноте
09.08.19
✎
15:26
|
Функция может возвращать код ошибки для быстроты обработки.
Структура прекрасно передается в функцию как параметр и там заполняется,чтобы не плодить новые структуры,как в javascript,где с параметрами немного сложновато. опять же,возврат структуры это прямой путь на грабли сборки мусора. и очень хорошо писать результат в ту же структуру,куда параметры передали. ну и универсальная функция Transfer для переноса параметров между структурами со сменой имени,и все становится просто и ясно. |
|||
52
Arbuz
09.08.19
✎
15:26
|
а объект со множеством свойств/методов как аргумент функции - это единственное значение?
|
|||
53
Провинциальный 1сник
09.08.19
✎
15:27
|
(51) Нет уж. Хочешь менять параметры - пиши процедуру.
|
|||
54
АгентБезопасной Нацио
09.08.19
✎
15:43
|
(39) вот надо мне разрешить видимость реквизита по условию. зачем мне структура с описанием ошибки?
Логично, что иногда надо знать, обработалось ли или вылетело в ошибку - но там, где это надо - я так и напишу. да в клюшкаш штатной структуры долгое время не хватало. Использовать список значений - это изврат, но иногда приходилось (в 1с++ стркутуру добавили). Но это не повод всегда использовать структуру. Все мы (ну, почти все) знаем теорию реляционных БД, но иногда вынуждены идти на компромисс и применять денормализацию. Так и тут. |
|||
55
Garykom
гуру
09.08.19
✎
15:47
|
Да пишите как хотите, в разных случаях будут разные грабли.
Но все программисты обязательно на них наступят если будут писать/исправлять достаточно много разного кода. |
|||
56
astrawalk
09.08.19
✎
15:54
|
(0) Алогритм главное правильно придумать. А правильно его написать тебе помогут сообщения об ошибках.
|
|||
57
Провинциальный 1сник
09.08.19
✎
15:55
|
(54) Список значений в 7.7 - по сути та же структура, к элементам можно обращаться по имени (заданному представлению), если кто не знал.
|
|||
58
VS-1976
09.08.19
✎
16:09
|
(47) Проще конечно, но не всегда эта функция была в 1С
|
|||
59
Конструктор1С
09.08.19
✎
16:15
|
(45) про уровни абстракции что-нибудь слышал?
1. Рассчитать зарплату 1.1. Рассчитать начисления 1.2. Рассчитать удержания 1.2.1. Рассчитать НДФЛ 1.2.2. Рассчитать страховые взносы 1.2.3. Рассчитать прочие удержания ... если твой код пытается оперировать абстракциями уровня "космос" как примитивными значениями, то код у тебя просто ужасный, и лучше его никому не показывать (46) с чего бы им появиться? Желание возвращать множество значений возникает только когда в функции мёд, кино и немцы. Если функция служит единственной цели, то она вернет одно значение, и это значение будет предсказуемым |
|||
60
ДенисЧ
09.08.19
✎
16:24
|
(59) Так я тебе и написал прототип функции верхнего ровня абстракции.
|
|||
61
Конструктор1С
09.08.19
✎
16:31
|
(60) а завтра ты захочешь разнести логику начислений и удержаний по разным модулям, и вот тут-то начнется веселье...
|
|||
62
ДенисЧ
09.08.19
✎
16:33
|
(61) А тебе кто-то запрещает оформить всё это функциями, а в верхней звать их по очереди? Это и есть уровни абсрации
|
|||
63
Dotoshin
09.08.19
✎
16:34
|
(59) А почему у тебя страховые взносы к удержаниям относятся? Это же налоги, то есть отдельный уровень.
|
|||
64
Конструктор1С
09.08.19
✎
16:47
|
(62) мне мешает соблюдение некоторых важных принципов написания кода. Начнешь ты свою функцию раделять, а там... упс. "Внезапно" окажется, что какая-нибудь табличка, нужная для расчета удержаний, инициализируется где-то в начале расчета начислений, заполняется где-то в середине расчета начислений, и потом ещё в трёх местах корректируется. И вот тут-то ты пойдешь писать эти уродливые функции, которые возвращают разные значения. А ещё через несколько доработок настанет состояние дзен говнокодерства: когда в одном месте меняешь, а в двух других местах, вроде бы и не связанных с первым, начинает ломаться.
|
|||
65
Конструктор1С
09.08.19
✎
16:59
|
(63) это был лишь банальный спотолочный пример, а не выдержка из реальной программы. Могу иначе расписать
Черный ВАЗ и красный мерседес - легковые автомобили Легковые и грузовые автомобили - автотранспорт Автотранспорт и ж.д. транспорт - транспорт ... Да, в этом примере тоже есть до чего докапаться, есть ещё множество видов транспорта. Но согласись, автотранспорт и черный ВАЗ должны стоять на разных полках. |
|||
66
VS-1976
09.08.19
✎
17:13
|
(65) Никто не запрещает писать в 1С используя "ООП" для подобных задач.
А вообще 1С без ООП ( наследование, частично решаемое расширением ) не торт... Дальше всё более будет походить на монстра... |
|||
67
3achem
09.08.19
✎
17:20
|
(0) Самый главный лайфхак это вызов запроса в цикле! Очень ускоряет работу!
|
|||
68
olo_lo1
09.08.19
✎
17:45
|
(67) это как ?
|
|||
69
palsergeich
09.08.19
✎
17:47
|
(68) не даёт остыть Кешу.
Всегда горячий кеш под рукой |
|||
70
Garykom
гуру
09.08.19
✎
17:47
|
(64) Ничего страшного, со временем достигнешь дзена когда пофиг будет на глубину говнокода.
Нырять или нет будет зависеть только от предлагаемой суммы. |
|||
71
Garykom
гуру
09.08.19
✎
17:50
|
(70)+ Да есть хорошая методика ускорения выхода на этот уровень дзена!
Достаточно отказаться от применения отладчика, пару лет пострадаешь зато потом в голове будешь код отлаживать сразу в куче мест находящийся... |
|||
72
Вафель
09.08.19
✎
18:02
|
(64) так тесты нужно писать
|
|||
73
Garykom
гуру
09.08.19
✎
18:05
|
(72)+ хотя бы в голове
|
|||
74
Вафель
09.08.19
✎
18:06
|
(73) нет, именно что не в голове
|
|||
75
Garykom
гуру
09.08.19
✎
18:23
|
(74) Тесты "не в голове" нужны когда над одним кодом много разработчикой трудятся, причем одновременно.
Если несколько по очереди в принципе тоже желательно но не обязательно, если скиллы последующего не меньше скиллов предыдущего. |
|||
76
Вафель
09.08.19
✎
18:27
|
(75) а как же рефакторинг?
|
|||
77
АнализДанных
09.08.19
✎
18:56
|
(0) Часто использую такой лайфхак:
Если есть входящяя переменная функции "ТабЗначения", то можно её псевдо типизировать, чтобы работал синтаксис контроль и платформа сама предлагала дописать доступные методы типа. Например, если написать "ТабЗначения.", то Платформа допишет Добавить() НайтиСтроки() итд... Работает так: Если Ложь Тогда ТабЗначения = Новый ТаблицаЗначения; КонецЕсли; //далее нужный код |
|||
78
Сияющий в темноте
09.08.19
✎
19:05
|
проще,если не клиент и не сервер,тогда гарантированно выполняться не будет
|
|||
79
Cyberhawk
09.08.19
✎
20:11
|
(76) В мире 1С не особо принято рефакторить. Тащить уродца до конца - вот кредо.
|
|||
80
Cyberhawk
09.08.19
✎
20:13
|
(77) Вредные советы.
Гораздо кошернее некомпилируемый вариант: #Если Сервер И НЕ Сервер Тогда ЗаказПоставщику = Документы.ЗаказПоставщику.ПустаяСсылка(); ТЗ = Новый ТаблицаЗначений; #КонецЕсли |
|||
81
pavig
09.08.19
✎
21:08
|
(26)
Маразм какой-то |
|||
82
Mort
09.08.19
✎
21:45
|
Что же за книга такая Листа, которой 80 постов аналог ищут. Подскажите товарищи эрудиты.
|
|||
83
Mort
09.08.19
✎
21:49
|
(26) а в сильно типизированных ЯП мне нужно под каждую функцию свою структуру описывать?
|
|||
84
Злопчинский
09.08.19
✎
21:52
|
(77) этому лайфхаку тыща лет в обед, это еще в 77 работало
|
|||
85
Злопчинский
09.08.19
✎
21:53
|
в 77 даже еще кошернее можно было
ТЗ = ФункцияКотораяВозвращаетТЗ(); //:ТаблицаЗначений |
|||
86
АгентБезопасной Нацио
10.08.19
✎
07:11
|
(84) лайфхак - использовать в 7.7 опенконф, а в 8.@ - турбоконф?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |