| 
    
        
     
     | 
    
  | 
книга по правильному написанию алгоритмов и лайфхаки в 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.@ - турбоконф?     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |