Проверки, типы файлов, это бантики, я бы обратил внимание на архитектуру обработки - чтение данных из файла и сопоставление их в одной процедуре, надо разделять, сопоставление данных файла с базой желательно делать запросом за один раз, передав в запрос в качестве параметра прочитанные данные, логика сопоставления с данными базы должна быть в запросе.
Может быть уже были такие темы. если нет вот предложение: 1. Комментирование кода. Рекомендации по сопровождению кода комментариями 2. Комментирование доработок и модификацией кода при поступлении новых задач при сопровождении 3. Возможности платформы 1С по оформлению и комментированию кода.
Неужели кто-то действительно вот это считает хорошей практикой? Функция ТипФайлаТХТ() Возврат "ТХТ"; КонецФункции ...это же гуанокод?... Давайте ещё сделаем по функции на каждую букву и будем соединять их конкатенацией. Много функций, много кода, много строк, есть что показать заказчику.
Глобально суть понятна - чтобы можно было в одном месте поменять литерал, если понадобится. С другой стороны, что должно случиться, чтобы нам понадобилось возвращать что-то кроме "TXT" в данном случае, я не представляю.
Угу чтоб во всей конфе потом проще менять было, ток тогда это должно многократно и вызываться из конфы. А не одно разово, во внешней обработке. Т.е. правила и стандарты выучил, а осмыслить еще не успел. Зато я узнал зачем учить стандарты, они судя по комменту автора дают +100 к надменности, а нам старым говнорям с потухшими глазами этого и недостает.
Хотелось бы увидеть, как изменится код в "Цикл в цикле". Мне кажется, что если где-то начал показывать изменение кода, то надо этого придерживать, всё видео) Дополню комментарий: ещё хочется увидеть пример добавления пользовательских шаблонов. Потому что данное словосочетание не несёт никакой полезности для меня как человека, который не знает о них. А так, увидя, что это, мб и пойду гуглить и изучать дальше. В общем, хочется больше практической работы по изменению
Про если и иначе в цикле(8:25). Такой код будет работать из рук вон плохо. Автор сделал правильно, что вывел условие за цикл, хоть читабельность теряется. Но, тут надо смотреть что важнее...
5:44 опять мимо, тут проблема в том что вызов контекстный. Не нужно делать контекстные вызовы если есть возможность их не делать. (если тут сделать вызов без контекста то автоматом решиться и проблема настроек, так же в будущем подобную процедуру можно будет использовать отдельно. В целом если мы говоим о сеньере и о продуктовой разработке, есть смысл подумать о том удобно ли буддет использовать твою обработку программно, это хороший тон и уважение к колегам. Т.е. по хорошему весь серверный ко надо убрать в модуль объекта, все реквизиты настроек сделать реквизитами обработки а не реквизитами формы. Тогда можно будет обработку создать програмно, заполнить реквизиты (причем тут как раз не обязательно заполнять фильтр, это возвращаясь к вопросу о том что не корректно анализировать "форматфайла" (см. прошлый комент)) и вызывть экспортную функцию которая выполнит загрузку. Так же эта функция должна бросать прерывания если что то пошло не так, а не выдавать ошибки через "Сообщить".
@@yellow_club Видео для мидлов и сеньоров же, все до конца разжёвывать не вижу необходимости. Если кратко, то при неявном преобразовании нужно помнить о разделителях разрядов при получении области.
Почему бы портянку Если... проверки на тип файла не поместить в структуру? По ключу расширения файла сразу получим фильтр. Да и при считывании из экселя можно соответствие сделать номер колонки/имя реквизита 1с
Вопрос . Почему не нравится вертикальное выравнивание? Я конечно тот еще извращуга я еще параметры на новую строку переношу.... Функция ( парам1 , парам2 )
Ну вот я бы до чего докопался: во-первых фильтр в диалоге выбора файлов можно было бы, сделать общим значением всех поддерживаемых форматов файлов, и выбор формата сделан убого, пользователю просто надо выбрать файл с таблицей, ни о чем не задумываясь. во-вторых я бы докопался до ТабДок.ПолучитьОбласть("R"+Номер+"C"+2).ТекущаяОбласть.Текст. Почему бы не сделать вместо этого ТабДок.ПолучитьОбласть(Номер,2).Текст, это гораздо более читаемо и не ведёт к ненужным преобразованиям данных.
Обязательность реквизита "НомерСтроки" не нужно было устанавливать, т.к. обработка, судя по всему, нацелена на загрузку данных не только из Экселя. А этот реквизит нужен только в Экселе. Поэтому проверку нужно сделать ручками в "ОбработкаПроверкиЗаполнения"
в своем варианте автор явно проверял заполненноть НомерСтроки. Я только повторил его логику. А так да, можно еще использовать ОбработкаПроверкиЗаполнения
@@yellow_club Автор проверял заполненность Номера строки в функции, где уже только Эксель загружается (и никакой другой формат). А ты вынес проверку на самый верх, где еще возможен выбор из любого формата
10:30 - Нет, это не нормально, я не 1с программист но меня удивило что вы говорите "это нормально". Не нужно заставлять программу делать лишние движения, проверкой на пустоту вы попросту "не забиваете лишними безсмысленными задачами" выполнение. Соответсвенно нагрузки меньше(да пустые значения не нагружают особо) но смысл в подходе. И тут явно я был удивлён от вашего комментария.... 11:48 - И не знаю как работают в 1с присвоение данных из результата запроса но.... Вы уже выбрали всю таблицу по параметрам(отобрано что необходимо) и присвоили массив значений вашей переменной. Далее вы первым циклом обходите этот "условно" массив и сверяете с данными другого(исходя из видео это данные файла) - Это явно быстрее для "машины" чем каждый раз делать запрос в бд. В принципе правильным тоном будет не дёргать каждый раз базу данных а сделать это 1 раз и с правильной фильтрацией по нужным парраметрам и потом уже разбирать и работать с результатом запроса, что в коде и было сделано. Я без понятия почему автор не понимает этого, ведь не важно какой язык программирования, важны основы и принципы программирования. Не в обиду автору, это сугубо лично моё мнение. Может я не прав и в 1с всё работает иначе...
Так ты сам говоришь что программист в основном читает код, а не пишет, поэтому выравнивание пробелами очень быстро читается, хотя требует немного больше времени на написание, но затраты на написание окупается скоростью чтения.
Насчёт проверки пустоты результата запроса я бы поспорил. Можно это отнести к раннему возврату. Т.е. если результат пустой, сразу возврат и ничего дальше не пытаемся делать, не тратим время.
@@yellow_club Если память не изменят, в курсе на Эксперта по ТВ говорили о том, что желательно проверять на пустоту. Сейчас проверил и тасты показали, что при выполнении по 1000 запросов разница скорее в виде погрешности... Но использование проверки как раннего выхода я бы оставил...
А потом открываешь код типовых, и сильно удивляешься. А уж кто, как не разработчики из альма-матер должны им следовать. Но, видимо, что-то идёт не так.
@@yellow_club Ну тут как посмотреть. Когда уже опыт имеется - примерно понимаешь, что и где искать. А по факту сидишь в этом спагетти-коде и дрочишь его отладчиком, пытаясь разобраться, в каких местах данные собираются не так, как тебе нужно, чтоб что-то там поправить. Всё в угоду производительности, ага. Вот мне кажется, надо больше инфы и экспертных видосов по разбору этих авгиевых конюшен, которые там имеются, потому что на практике как раз больше приходится расковыривать типовые, а не свои обработки или тем более конфигурации с 0 писать. Которые можно написать разок на коленке за минимальное время, потому что она больше уже не понадобится никогда или у неё не будет задачи "высоконагруженности"
@@yellow_club здравствуйте, а вы на 11.32 предлагаете сначала выгрузить в таблицу значений но это же оперативна память!) а если 400 тыс строк? выборка по циклам гораздо быстрее же
Мне кажется раз уж задели тему загрузки из Excel. Хорошо бы было объяснить почему выбран именно такой вариант загрузки. А не через построитель, или внешний источник данных или еще что то. У меня как то загрузка из Excel в голове считается обработкой разовой, написал универсальный загрузчик и забыл. Ну или существуют готовые методы или даже в системе модули (по крайней мере у нас). Которые можно вызвать и не писать всю эту тряхомудию, завтра понадобится опять загрузить с другими колонками снова будем писать? Конечно если это обработка важная и там грузят и грузят то это другой вопрос. (почему не сделать уже не в обработке) А так в целом видео классное, пару десятков таких видео делают очень доброе дело для всех. Задуматься о том что ты пишешь что то не так, стандарты на практике. Но в целом ради загрузки из Excel я бы так не заморачивался. Даже со стандартами. Есть более важные вещи и модули.. Ну это мое мнение. Сперва подумай что пишешь, кому это надо, сколько раз это запустят. А потом уже сиди и трать время на красоту.
День добрый. 17:00. Есть такое свойство формы "АвтоматическоеСохранениеДанныхВНастройках", следовательно, Ваше замечание по поводу реквизита "ОКДП" верно, только при значении свойства "Не использовать". При значении "Использовать" и выборе в качестве сохранения этот реквизит, ПриОткрытии() значение его будет браться из настроек пользователя, а значит проверка, возможно, актуальна. К сожалению, не вижу все свойства формы обработки.
И про ранний возврат. Даже если после возврата кода мало и можно поместить в "иначе", бывает так, что его мало сегодня, а завтра еще добавится и т.д. Я по возможности всегда ставлю ранний возврат, что потом не "форматировать" код.
Заменить ТабДок.ПолучитьОбласть("R" + Номер + "С" + 2).ТекущаяОбласть.Текст на ТабДокумент.Область(Номер, 2, Номер, 2).Текст. Метод ПолучитьОбласть возвращает новый ТабличныйДокумент, т.е. постоянно генерируем новые Табличные документы - расход ресурсов.
Привет) И в этом и в прошлом видео с разбором кода, есть рекомендация выгрузить результат запроса в тз. Но это не совсем оптимальное решение с точки зрения использования оперативной памяти. Я понимаю что на малых объемах данных так делать вполне допустимо, но все же этот момент важен и про него лучше не забывать.
Спасибо, очень полезная рубрика! Затрудняюсь назвать какой-то определенный аспект написания кода, который мне был интересен. Интересно все, и всегда есть чему поучиться даже в базовых вещах. Поэтому просто хотелось бы увидеть еще видео с код-ревью.
Добавлю по поводу проверки ввода. Помимо того, что ошибки выдаются "порциями", номер строки проверяется только после загрузки файла на сервер. Т.е. пользователю сначала необходимо дождаться, пока файл будет помещён на сервер во временное хранилище и лишь потом узнает, что он не указал номер строки. Ну и при проверке файла автор использует функцию из БСП для сообщения об ошибке, а при проверке номера строки самостоятельно создаёт объект "СообщениеПользователю". Хорошо бы, чтобы было везде одинаково. Ну и во второй проверке явная ошибка - автор забыл сделать возврат, если номер строки не заполнен. Ну и в процедуре чтения файла я бы переменную "ТабДок" поместил ближе к началу её использования (непосредственно перед попыткой чтения). Про получение значений из "ТабДок". Вместо ТабДок.ПолучитьОбласть(...).ТекущаяОбласть.Текст; Можно написать короче: ТабДок.Область(...).Текст; А вообще, я бы это вынес в отдельную функцию, что-то типа, ЗначениеЯчейкиТабличногоДокумента(ТабличныйДокумент, НомерСтроки, НомерКолонки) Код процедуры чтения из табдок'а стал бы проще и понятнее.
видос конечно хороший и правильный, хотя на мой взгляд есть немного вкусовщины. Но позвольте, какие нафиг джуны мидлы и сеньоры, нет таких понятий, у меня опыт уже 17 лет и никто меня так не обзывал..... стажер-программист 1С, программист 1С, ведущий программист 1С, Руководитель группы. вся эта американщина используется только у разработчиков НЕ 1С.
Очень зашло, спасибо автору. Такие видео джуны будут смотреть думая "а за что еще меня могут вы**пать". А мидлы "а за что бы мне еще кого-нибудь вы**пать". Беспроигрышная тема, поздравляю) (не сарказм)
Очень крутой формат, два дня назад маялся с отображением видимости, сделал через структуру, очень не понравилось, у Вас вариант классный! По больше такого видео
@yellow_club про момент с избалвением от цикла в цикле ruclips.net/video/ZPvOmj1yiEg/видео.html. В данном случае нельзя использовать выгрузку в таблицу значений, т.к. мы не можем предугадать кол-во возвращаемых данных. В таком случае лучше использовать ``` Выборка.Сбросить(); Если Выборка.НайтиСледующий(строка.Артикул, "Артикул") Тогда // дозаполняем строку по алгоритму КонецЕсли; ``` П.С. Выгрузка в таблицу значений - это выгрузка всех результатов запроса в оперативную память. Чем больше результатов - тем выше вероятность, что выгрузка сожрёт всю память. Метод `выгрузить()` не стоит использовать, если только у вас нет 100% гарантии малого кол-ва строк в выборке.
А ещё ксати толкового объяснения как работает бсп, и какие там функции можно использовать, на ютубе нет. Было бы здорово тоже эту тему развивать Заметил, что новички пишут кто во что горазд, вместо того чтобы использовать алгоритмы из бсп, придумывают сами
- К переменным с маленькой буквы я бы еще добавил вопрос про именование переменных через "_" (например Адрес_Данных). Не по стандартам и не однотипно, хочется сказать что так делать тоже не надо. - Я не понял зачем автор использует объект СообщениеПользователю вместо ОбщегоНазначенияКлиент.СообщитьПользователю(). Причем также в разных местах по-разному. Насколько я помню в стандартах говорится что следует использовать второй подход. - Насчет выравнивания: в общем случае возможно оно только мешает, но к примеру когда идут однотипные присваивания (как например в строках "СтрокаДанных.Количество = ТабДок.ПолучитьОбласть("R" + Номер + "С" + 2).ТекущаяОбласть.Текст;"), то там выравнивание ощутимо улучшает наглядность и читаемость кода. А вообще: формат хороший, смотреть было интересно (хоть и не со всем согласен :) ). Я бы предложил разобрать еще отдельно написание запросов. Возможно взять пару примеров как небольшая деталь может сильно перекошмарить план запроса и скорость его работы.
Как поступить? есть ут11, один "умный" пользователь решил обмануть судьбу, загрузил файл картинки в одну карточку номенклатуры (присоединил файл и выбрал изображение на форме), далее через групповую обработку реквизитов заполнил реквизит файлкартинки другим карточкам. Визуально вроде все хорошо, картинка отображается у всех карточек на форме, но прикрепленных файлов нет. Как можно скопировать программно присоединенный файл этим карточкам? При программном заполнении (заполнитьзначениясвойств) не копируется хранилище значений в карточке присоединенного файла? Его ведь нужно заполнить заново? Может гуру Матвей нам поможет? 😊
13:16 в итоге ты сделал еще хуже чем было, так если раньше тут четко было видно что после успешной загрузки файла мы разрешаем выбрать партнера (хотя почему его нельзя выбрать до загрузки не понятно, плюс есть большой вопрос почему тут нужно было именно видимость использовать а не "доступность" которая не требует перерсовки формы и пересчета элементов. Так вот раньше тут было сразу понятно что происходит, а теперь когда ты ввел еще один реквизит формы (который будет с контекстом ходить, т.е. сделал форму более тяжелой) так еще и нужно разбираться, а что там дальше происходит с переменной "ВидимостьПартнера", на что еще она будет/может влиять. И обратная ситуация, мне нужно понять где меняется видимость поля, в первом случае я ищу по коду ИмяПоля.Видимость и нахожу сразу все места, в твоем случае я попадаю в "обновить видимость формы" и там еще нужно почитать код и понять что надо поискать по "ВидимостьПартнера". При этом в целом смысла нет в этой переменной, так как если в ТЧ данные есть, значит загрузка прошла успешно, данные в файле есть, и можно разрешить создавать документы для выбранного партенра. Т.е. этот флаг в принципе там не неужен.
3:00, 3:50 - тут достаточно грубая ошибка, надо определиться можно выбрать один файл или несколько, сейчас конструктор диалога в режиме "Множественный выбор" но берем мы только один файл (первый). Это может привести к тому что пользователь выберет 2 файла и будет рассчитыывать что загрузится из обоих, но система загрузит только первый. В целом код максимально не брежный, пойдет для какой то разовой сервисной задачи, но для продуктового решения тут вообще все надо переписывать.
Если работаем с внешним видом формы, то стейт нужно засовывать в реквизиты формы. А если с таб.частью, то нужно для стейта делать отдельную колонку в ней. Так получается? И в зависимости от этой колонки можно сделать условное оформление, например.
Добрый день, очень интересные у вас видео, спасибо. Но подскажите пожалуйста, не нужен ли вам редизайн? Новая аудитория смотрит не только на крутой контент в плане знаний, но и на актуальность дизайна (логотип и фирменные элементы). В любом случае спасибо за информацию!
Добрый день, Видосы у вас хорошие, позитивные, уже больше 3х лет хочется уйти с сис админа в 1с, да вот пока никак)) Даже книжка Радченко куплена и есть знакомый сеньёр 1с ник)) Переходил по вашей ссылке - но как по мне дороговато)) Понимаю что преподавателям тоже хочется кушать) Но может у вас когда нибудь будет более доступный авторский курс)
Идея разбора кода хорошая, но простите, что тут для мидлов и сеньоров? Почти всё, на что обращено внимание в видео для мидла должно быть очевидно, иначе он не мидл)) Код в видео ужасный, типичный говнокод, мне было бы стыдно даже присылать такое на разбор: куча мусорного кода, куча мусорных комментов, запросы в цикле, бессмысленный и беспощадный нейминг переменных.
Здравствуйте, интересует ваше мнение, окончил вуз по техн. специальности, имеется опыт программирования на многих языках(на уровне решения лабораторных работ), прошел 2-х недельный курс по программированию 1С. Как вы считаете, могу ли я претендовать на стажировку в какой либо компании(готов работать за еду, имеется фин. подушка на 3-4 месяца)?
По поводу переноса реквизита НомерСтроки. Её можно оставить на второй вкладке, т.к. это не часто изменяемый реквизит. Например, файл всегда меняется, т.е. мы не всегда грузим один и тот же файл. А вот НомерСтроки вероятнее всего всегда будет один для текущего пользователя. И с помощью Автоматическое сохранение данных на форме, можно построить красивый интерфейс для пользователя. Конечно все это вкусовщина, но все же)
Не чего совершенно нет. Если вам заплатили пару мешков денег и у вас неограниченное время, можно в отладке висеть вечно. Во всех остальных случаях каждый пишет как ему проще и быстрее. Лишь бы солнце каждый день утром всходило и вечером заходило.
Какие стейты в 1С ? Стейт - это парадигма веб-программирования, там это актуально, там без этого никак. в 1С - можно получить значение напрямую (в данном случае из Эоементы.Х.Видимость) для чего переносить из веб-программирования стейты туда где они не требуются ?!
В вэбе тоже можно напрямую обращаться. Стейт это не какая-то парадигма. Например, текущий стейт переменной а = 5. Потом где-то в коде стейт переменной а стал равным 6. Про что я в данном примере? Про вэб, мобилу, десктоп, системное программирование?
Состояние (англ. State) - поведенческий шаблон проектирования. Используется в тех случаях, когда во время выполнения программы объект должен менять своё поведение в зависимости от своего состояния Ни одного слова про веб. Вы сами это придумали? Полазил в сети. Используют и в с# и python и javascript и тд. "Это парадигма веб-программирования" - классная шутка
Спасибо за видео. Хотелось разбор загрузки файлов через "веб" клиент, то что вы говорили в самом начале. Как подключать и т.д. Недавно столкнулся с этим во фреш. Также про то, как быть, если стоит безопасный режим = истина в параметрах регистрации внешней обработки?
Как вариант можно это сделать с помощью "НачатьПомещениеФайлаНаСервер" или "ПоместитьФайлНаСерверАсинх". Для них расширение работы с файлами не требуется. А чем мешает безопасный режим?
@@YuriyKolosov выходит ошибка при вызове метода контекста Записать(), включённый безопасный режим не даёт записать двоичные данные файла на сервере. Поддержка 1с фреш, что то отключила у клиента в профиле безопасности, тогда все норм.
@@jalentin в таких случаях в описание обработки нужно добавлять разрешение на работу с временными файлами. Но лучше вообще не использовать внешние обработки, а делать все через расширения. Тогда нужные разрешения даются автоматически при добавлении расширения во Фреш.
Спасибо! Подскажите, пожалуйста, а где можно про обертку текстового литерала почитать? Это какая-то реализация работы с PO файлами локализации в 1С (вместо НСтр)?
@@yellow_club Спасибо, понял: "Это устраняет неоднозначность, когда (строковый) идентификатор визуально выглядит в коде как строка, выводимая пользователю, но без необходимого НСтр". Получается, костыль, связанный с НСтр.
Вы серьезно! Строковые литералы обернуть в отдельную функцию? Это наглядный пример самого вредно и бестолкового пункта стандарта. На пустом месте, к каждой строке добавили еще вагонетку строк кода. Зачем если эта функция в обработке выполняется 1 раз? Читабельность кода упала ниже плинтуса. Потом все удивляются по чему 1С такая жирная и не поворотливая. Всем вам нужно позаниматься программирование контроллеров, где каждый бит на вес золота.
Потому что можно написать тест А если написан литерал сразу, то протестировать такой метод не получится Память уже давно не в дефиците. Можно ее не экономить
@@yellow_club Я, пишу функционал не для тестирования, а для компании в которой работаю и ее сотрудников. Память не в дефиците - но хорошая память стоит своих денег и не малых денег. Вы очень мелко мыслите, вы даже не представляете в какие затраты влечет за собой ненужный тролинг кода. Вот так и получается что такая могучая 1С ЕРП весит кучу гигабайт, сама тормознутая, а функционал подходит только для доставки пиццы. Много доставщиков пиццы могут позволить купить 1С ЕРП?
Тема с разбором кода вообще интересная, такого на ютубе вроде как нет. Было бы прям вообще здорово, если бы ты показывал как нужно примерно правильно делать. Т.е. неправильные куски кода переписывать по правильному
Добрый день Для меня это третье видео на вашем канале (смотрел собеседование, разбор этой обработки для джуна и вот это). Очень приятная, понятная и легкая подача материала. Пока вопрос: на 3.00 делается отдельная функция для получения текстового значения ? Чем это "правильнее" ? И почему не использовать тогда директиву &НаКлиентеНаСервереБезКонтекста ?
Случайно наткнулся на канал в шотсах, впервые попался качественный материал по 1с. Разбор для мидлов более сочный, чем для джунов :) Все верно говоришь. Побольше таких видео. Ты ссылаешься на запись стрима по асинхронным функциям, но что-то в подсказках его не видно, ссылка только на видео в рекомендациях.
2:36 этот блок кода вообще заменяется на правильное заполнение списка выбора. В списке выбора мы указываем представление ("Текстовый документ (*.txt)" и значение *.txt. Cоответственно когдда пользователь выбирает один из вариантов то на основании СтрШаблон("%1|%2",Представление, Значение) - формируем фильтр.
3:34 тут тоже скорей всего ошибка, пользователь мог уже к тому моменту поменять "Формат файла", мог руками переписать путь в "ПутьКФайлу". Поэтому проверять тип файла на основании Формат файла в принципе не правильно. Нужно создавать объект файл и брать его расширение + это будет за одно и проверка существования файла.
....Пустой() - менее затратная операция для системы нежели чем Выбрать(), так что было все правильно сделано. Сначала проверяем результат запроса на пустоту, если в нем что то есть - выполняем выборку
@@yellow_club когда готовился к спецу в курсах чистова (тут я не уверен, возможно это был гилев) явно говорилось, если вас не затруднит прошу скинуть пруфы по вашему утверждению. Если даже так прикинуть, при выборке все равно формируется таблица с результатом, т.к. при выборке можно получить количество записей, возможно в каком то агрегированном виде, хотя тут надо наверняка знать что получается для системы при выполнении метода Пустой()
Говорилось другое. Что если нужно только на пустоту проверить, то Пустой используешь. А когда надо обработать выборку, если она не пустая, то нет смысла проверять на пустоту. Это разные сценарии.
10:37 Думаю временная сложность варианта с поиском по индексированной таблице будет O(n * logn). Поскольку, вряд ли индексирование в таблице значений реализовано по типу хеш-таблиц с поиском за O(1), а скорее по типу поискового дерева с поиском за O(logn).
Суть в том что строятся разные хеши для каждого из индексов А если индексы по списку полей то просто в отборе происходит перестановка значений отбора так чтобы сначала были поля попадающие в индекс.
не успел записаться - места кончились) но вот такой вопрос - а стоит ли управлять видимостью элементы так напрямую? потом что ведь идет перерисовка всей формы. не будет ли более правильно работать с видимостью через условное оформление?
Условное оформление работает для таблиц, для обычных реквизитов не работает. Для таблиц в целом можно делать и так и так. Обычно условным делают тогда когда нужно разное положение видимости в разных строчках.
@@yellow_club пример платформа 8.3.22.1704. на форме есть ТЧ, реквизит булево-переключатель Реквизит1, и еще один реквизит2. При измении доступности реквизита2 происходит перерисовка ТЧ на форме. это очень видно потому что на ТЧ есть событие ПриАктивации - и оно срабатывает
Читать выравненный текст по мне так в разы проще, значения сразу визуально отделяются, одна из причин против этого, отсутствие возможности потом искать «искомое =» в глобальном поиске
Такой формат разборы кода мне очень нравится, скажу больше это то что я искал долгое время. Спасибо вам большое. В практике как напишу подходящий код обязательно поделюсь со всеми 🙂
Спасибо за видео, очень познавательно. Читать стандарты муторно, а наглядно - самое то. Побольше таких мини уроков было бы здорово.
Тема огонь 🔥 . Очень полезно.
Рад, что полезно
Спасибо тебе, мил человек.
Спасибо за видео, по больше бы таких
Рад, что полезно
Проверки, типы файлов, это бантики, я бы обратил внимание на архитектуру обработки - чтение данных из файла и сопоставление их в одной процедуре, надо разделять, сопоставление данных файла с базой желательно делать запросом за один раз, передав в запрос в качестве параметра прочитанные данные, логика сопоставления с данными базы должна быть в запросе.
> логика сопоставления с данными базы должна быть в запросе
а это разве не бизнес-логика, которую в запрос не стоит запихивать?
Может быть уже были такие темы. если нет вот предложение:
1. Комментирование кода. Рекомендации по сопровождению кода комментариями
2. Комментирование доработок и модификацией кода при поступлении новых задач при сопровождении
3. Возможности платформы 1С по оформлению и комментированию кода.
По комментариям однозначный ответ: комментировать доработки и комментировать код - это плохо
Неужели кто-то действительно вот это считает хорошей практикой?
Функция ТипФайлаТХТ()
Возврат "ТХТ";
КонецФункции
...это же гуанокод?...
Давайте ещё сделаем по функции на каждую букву и будем соединять их конкатенацией.
Много функций, много кода, много строк, есть что показать заказчику.
Пока у тебя мало опыта. Со временем поймёшь
Глобально суть понятна - чтобы можно было в одном месте поменять литерал, если понадобится. С другой стороны, что должно случиться, чтобы нам понадобилось возвращать что-то кроме "TXT" в данном случае, я не представляю.
Угу чтоб во всей конфе потом проще менять было, ток тогда это должно многократно и вызываться из конфы. А не одно разово, во внешней обработке.
Т.е. правила и стандарты выучил, а осмыслить еще не успел.
Зато я узнал зачем учить стандарты, они судя по комменту автора дают +100 к надменности, а нам старым говнорям с потухшими глазами этого и недостает.
Хотелось бы увидеть, как изменится код в "Цикл в цикле".
Мне кажется, что если где-то начал показывать изменение кода, то надо этого придерживать, всё видео)
Дополню комментарий: ещё хочется увидеть пример добавления пользовательских шаблонов. Потому что данное словосочетание не несёт никакой полезности для меня как человека, который не знает о них. А так, увидя, что это, мб и пойду гуглить и изучать дальше. В общем, хочется больше практической работы по изменению
Про если и иначе в цикле(8:25). Такой код будет работать из рук вон плохо. Автор сделал правильно, что вывел условие за цикл, хоть читабельность теряется. Но, тут надо смотреть что важнее...
Почему такой код будет работать из «рук вон плохо»?
5:44 опять мимо, тут проблема в том что вызов контекстный.
Не нужно делать контекстные вызовы если есть возможность их не делать.
(если тут сделать вызов без контекста то автоматом решиться и проблема настроек, так же в будущем подобную процедуру можно будет использовать отдельно.
В целом если мы говоим о сеньере и о продуктовой разработке, есть смысл подумать о том удобно ли буддет использовать твою обработку программно, это хороший тон и уважение к колегам.
Т.е. по хорошему весь серверный ко надо убрать в модуль объекта, все реквизиты настроек сделать реквизитами обработки а не реквизитами формы.
Тогда можно будет обработку создать програмно, заполнить реквизиты (причем тут как раз не обязательно заполнять фильтр, это возвращаясь к вопросу о том что не корректно анализировать "форматфайла" (см. прошлый комент)) и вызывть экспортную функцию которая выполнит загрузку.
Так же эта функция должна бросать прерывания если что то пошло не так, а не выдавать ошибки через "Сообщить".
Попробуйте загрузить документ с количеством строк больше 1000, выяснится ньюанс
Какой?
@@yellow_club Видео для мидлов и сеньоров же, все до конца разжёвывать не вижу необходимости. Если кратко, то при неявном преобразовании нужно помнить о разделителях разрядов при получении области.
@@ExpSPbтак то там вообще могут быть числа в Е формате
Джуны тоже смотрят и запоминают.
И правильно делают 😉
Почему бы портянку Если... проверки на тип файла не поместить в структуру? По ключу расширения файла сразу получим фильтр. Да и при считывании из экселя можно соответствие сделать номер колонки/имя реквизита 1с
Вопрос . Почему не нравится вертикальное выравнивание?
Я конечно тот еще извращуга я еще параметры на новую строку переношу....
Функция (
парам1
, парам2
)
Почитай каменты. Несколько раз обмусолили этот вопрос
@@yellow_club почитал комменты. Нигде не обмусолено. Просто как постулат заявляется, что это плохо и все.
Ну вот я бы до чего докопался:
во-первых фильтр в диалоге выбора файлов можно было бы, сделать общим значением всех поддерживаемых форматов файлов, и выбор формата сделан убого, пользователю просто надо выбрать файл с таблицей, ни о чем не задумываясь.
во-вторых я бы докопался до ТабДок.ПолучитьОбласть("R"+Номер+"C"+2).ТекущаяОбласть.Текст. Почему бы не сделать вместо этого ТабДок.ПолучитьОбласть(Номер,2).Текст, это гораздо более читаемо и не ведёт к ненужным преобразованиям данных.
Обязательность реквизита "НомерСтроки" не нужно было устанавливать, т.к. обработка, судя по всему, нацелена на загрузку данных не только из Экселя. А этот реквизит нужен только в Экселе. Поэтому проверку нужно сделать ручками в "ОбработкаПроверкиЗаполнения"
в своем варианте автор явно проверял заполненноть НомерСтроки. Я только повторил его логику.
А так да, можно еще использовать ОбработкаПроверкиЗаполнения
@@yellow_club Автор проверял заполненность Номера строки в функции, где уже только Эксель загружается (и никакой другой формат). А ты вынес проверку на самый верх, где еще возможен выбор из любого формата
В самом начале есть проверка на тип и ничего другого кроме xls не пройдёт.
10:30 - Нет, это не нормально, я не 1с программист но меня удивило что вы говорите "это нормально". Не нужно заставлять программу делать лишние движения, проверкой на пустоту вы попросту "не забиваете лишними безсмысленными задачами" выполнение. Соответсвенно нагрузки меньше(да пустые значения не нагружают особо) но смысл в подходе. И тут явно я был удивлён от вашего комментария....
11:48 - И не знаю как работают в 1с присвоение данных из результата запроса но.... Вы уже выбрали всю таблицу по параметрам(отобрано что необходимо) и присвоили массив значений вашей переменной. Далее вы первым циклом обходите этот "условно" массив и сверяете с данными другого(исходя из видео это данные файла) - Это явно быстрее для "машины" чем каждый раз делать запрос в бд. В принципе правильным тоном будет не дёргать каждый раз базу данных а сделать это 1 раз и с правильной фильтрацией по нужным парраметрам и потом уже разбирать и работать с результатом запроса, что в коде и было сделано. Я без понятия почему автор не понимает этого, ведь не важно какой язык программирования, важны основы и принципы программирования. Не в обиду автору, это сугубо лично моё мнение. Может я не прав и в 1с всё работает иначе...
Выборка.Следующий() вернёт ложь если выборка пустая, тут получается 2 проверки
6 лет в 1с, только из этого видео узнал про квадратик на форме, что это означает связь с элементом 😂
Век живи, век учись)
@@yellow_club Ага. и F12. Есть ещё "Ctrl+T" - тоже почему-то много кто не знает, хотя безумно полезно.
Я 20 лет программирую на 1С (реально с 2003, не вру). И тоже не знал про этот квадратик :)
Так ты сам говоришь что программист в основном читает код, а не пишет, поэтому выравнивание пробелами очень быстро читается, хотя требует немного больше времени на написание, но затраты на написание окупается скоростью чтения.
Осуждаю) как по мне, так такое выравнивание код понятнее не делает. Если нравится такое выравнивание, то можешь выравнивать)
Насчёт проверки пустоты результата запроса я бы поспорил. Можно это отнести к раннему возврату. Т.е. если результат пустой, сразу возврат и ничего дальше не пытаемся делать, не тратим время.
так и выборка тоже не будет тратить время) она же пустая будет
В типовых часто проверяют пустоту перед Выбрать(). Аргументируя, что пустой() отрабатывает быстрее, чем выбрать().
Вот стандарт по Пустой. Хз кто чего в типовых пишет, но стандарт говорит об обратном: its.1c.ru/db/v8std#content:438:hdoc
@@yellow_club Если память не изменят, в курсе на Эксперта по ТВ говорили о том, что желательно проверять на пустоту. Сейчас проверил и тасты показали, что при выполнении по 1000 запросов разница скорее в виде погрешности... Но использование проверки как раннего выхода я бы оставил...
@QZet а я бы не оставлял)
поробуйтетее згрз рроооо 2к
Чего?)
А видимость элементов разве не делает серверный вызов ? (так то настройки форме при создании на сервере делаются )
Про стандарты круто, нужно почаще упоминать стандарты, в таких разборах.
А потом открываешь код типовых, и сильно удивляешься. А уж кто, как не разработчики из альма-матер должны им следовать. Но, видимо, что-то идёт не так.
@user-lr5uw2zl1b нормальный код в типовых. Треш обычно как раз в доработках и своих нетленках
@@yellow_club Ну смотря что называть нормальным. Типовой код тоже пишут люди, так что в типовых своих "нетленок" выше крыши.
@@yellow_club Ну тут как посмотреть. Когда уже опыт имеется - примерно понимаешь, что и где искать. А по факту сидишь в этом спагетти-коде и дрочишь его отладчиком, пытаясь разобраться, в каких местах данные собираются не так, как тебе нужно, чтоб что-то там поправить. Всё в угоду производительности, ага. Вот мне кажется, надо больше инфы и экспертных видосов по разбору этих авгиевых конюшен, которые там имеются, потому что на практике как раз больше приходится расковыривать типовые, а не свои обработки или тем более конфигурации с 0 писать. Которые можно написать разок на коленке за минимальное время, потому что она больше уже не понадобится никогда или у неё не будет задачи "высоконагруженности"
@@yellow_club здравствуйте, а вы на 11.32 предлагаете сначала выгрузить в таблицу значений но это же оперативна память!) а если 400 тыс строк? выборка по циклам гораздо быстрее же
При открытии реквизит может иметь значение, которое сохранено в форме. Поэтому это может быть и не ошибкой
Мне кажется раз уж задели тему загрузки из Excel. Хорошо бы было объяснить почему выбран именно такой вариант загрузки. А не через построитель, или внешний источник данных или еще что то. У меня как то загрузка из Excel в голове считается обработкой разовой, написал универсальный загрузчик и забыл. Ну или существуют готовые методы или даже в системе модули (по крайней мере у нас). Которые можно вызвать и не писать всю эту тряхомудию, завтра понадобится опять загрузить с другими колонками снова будем писать? Конечно если это обработка важная и там грузят и грузят то это другой вопрос. (почему не сделать уже не в обработке) А так в целом видео классное, пару десятков таких видео делают очень доброе дело для всех. Задуматься о том что ты пишешь что то не так, стандарты на практике. Но в целом ради загрузки из Excel я бы так не заморачивался. Даже со стандартами. Есть более важные вещи и модули.. Ну это мое мнение. Сперва подумай что пишешь, кому это надо, сколько раз это запустят. А потом уже сиди и трать время на красоту.
День добрый. 17:00. Есть такое свойство формы "АвтоматическоеСохранениеДанныхВНастройках", следовательно, Ваше замечание по поводу реквизита "ОКДП" верно, только при значении свойства "Не использовать". При значении "Использовать" и выборе в качестве сохранения этот реквизит, ПриОткрытии() значение его будет браться из настроек пользователя, а значит проверка, возможно, актуальна. К сожалению, не вижу все свойства формы обработки.
Верное замечание!
В Обработке не стоит флаг в свойстве «сохраняемые данные»
Да, увидел, что свойство в значении "Не использовать" @@yellow_club
после загрузки настроек нужно вызвать ОбновитьФорму
И про ранний возврат. Даже если после возврата кода мало и можно поместить в "иначе", бывает так, что его мало сегодня, а завтра еще добавится и т.д. Я по возможности всегда ставлю ранний возврат, что потом не "форматировать" код.
Я тоже так люблю делать
Заменить ТабДок.ПолучитьОбласть("R" + Номер + "С" + 2).ТекущаяОбласть.Текст на ТабДокумент.Область(Номер, 2, Номер, 2).Текст. Метод ПолучитьОбласть возвращает новый ТабличныйДокумент, т.е. постоянно генерируем новые Табличные документы - расход ресурсов.
Отличная рубрика. Даешь ещё код ревью!
Сделаем 😉
13:23 а ты точно для мидлов и сеньеров это рассказываешь? Реально есть мидлы которые не знают что означает этот квадратик???
очень полезная тема. было бы интересно посмотреть больше в разборах про паттерны, применяемые в 1с. жду следующего выпуска
Теперь понятно из-за кого на формах хуево-кукуево реквизитов формы
Привет) И в этом и в прошлом видео с разбором кода, есть рекомендация выгрузить результат запроса в тз. Но это не совсем оптимальное решение с точки зрения использования оперативной памяти. Я понимаю что на малых объемах данных так делать вполне допустимо, но все же этот момент важен и про него лучше не забывать.
Спасибо, очень полезная рубрика!
Затрудняюсь назвать какой-то определенный аспект написания кода, который мне был интересен. Интересно все, и всегда есть чему поучиться даже в базовых вещах. Поэтому просто хотелось бы увидеть еще видео с код-ревью.
Понял. Спасибо за отзыв
Добавлю по поводу проверки ввода. Помимо того, что ошибки выдаются "порциями", номер строки проверяется только после загрузки файла на сервер. Т.е. пользователю сначала необходимо дождаться, пока файл будет помещён на сервер во временное хранилище и лишь потом узнает, что он не указал номер строки. Ну и при проверке файла автор использует функцию из БСП для сообщения об ошибке, а при проверке номера строки самостоятельно создаёт объект "СообщениеПользователю". Хорошо бы, чтобы было везде одинаково. Ну и во второй проверке явная ошибка - автор забыл сделать возврат, если номер строки не заполнен. Ну и в процедуре чтения файла я бы переменную "ТабДок" поместил ближе к началу её использования (непосредственно перед попыткой чтения).
Про получение значений из "ТабДок".
Вместо
ТабДок.ПолучитьОбласть(...).ТекущаяОбласть.Текст;
Можно написать короче:
ТабДок.Область(...).Текст;
А вообще, я бы это вынес в отдельную функцию, что-то типа,
ЗначениеЯчейкиТабличногоДокумента(ТабличныйДокумент, НомерСтроки, НомерКолонки)
Код процедуры чтения из табдок'а стал бы проще и понятнее.
видос конечно хороший и правильный, хотя на мой взгляд есть немного вкусовщины.
Но позвольте, какие нафиг джуны мидлы и сеньоры, нет таких понятий, у меня опыт уже 17 лет и никто меня так не обзывал..... стажер-программист 1С, программист 1С, ведущий программист 1С, Руководитель группы.
вся эта американщина используется только у разработчиков НЕ 1С.
Так писать короче)
Про презенторы и стейты было очень полезно. Не задумывался. Пойду в своих рабочих обработках исправлять теперь =)
Очень зашло, спасибо автору.
Такие видео джуны будут смотреть думая "а за что еще меня могут вы**пать".
А мидлы "а за что бы мне еще кого-нибудь вы**пать".
Беспроигрышная тема, поздравляю)
(не сарказм)
ну что сразу вы**пать) и мидлы и джуны и сеньоры станут чуточку лучше)
Супер! Самая лучшая рубрика! Можно побольше таких видео! Полезно 🔥🔥🔥
Рад, что полезно
Очень крутой формат, два дня назад маялся с отображением видимости, сделал через структуру, очень не понравилось, у Вас вариант классный! По больше такого видео
Рад, что полезно
@yellow_club про момент с избалвением от цикла в цикле ruclips.net/video/ZPvOmj1yiEg/видео.html. В данном случае нельзя использовать выгрузку в таблицу значений, т.к. мы не можем предугадать кол-во возвращаемых данных. В таком случае лучше использовать
```
Выборка.Сбросить();
Если Выборка.НайтиСледующий(строка.Артикул, "Артикул") Тогда
// дозаполняем строку по алгоритму
КонецЕсли;
```
П.С. Выгрузка в таблицу значений - это выгрузка всех результатов запроса в оперативную память. Чем больше результатов - тем выше вероятность, что выгрузка сожрёт всю память. Метод `выгрузить()` не стоит использовать, если только у вас нет 100% гарантии малого кол-ва строк в выборке.
А ещё ксати толкового объяснения как работает бсп, и какие там функции можно использовать, на ютубе нет. Было бы здорово тоже эту тему развивать
Заметил, что новички пишут кто во что горазд, вместо того чтобы использовать алгоритмы из бсп, придумывают сами
Раскройте, пожалуйста, тему тестирования: как правильно тестировать, как писать тесты, и прочее. Спасибо!
Кому они эти тесты нужны) чистый код то не особенно нужен
Не подскажешь, а почему ты так против вертикальных выравниваний?) Просто использую повсеместно, интересно понять почему и стоит ли прекращать
- К переменным с маленькой буквы я бы еще добавил вопрос про именование переменных через "_" (например Адрес_Данных). Не по стандартам и не однотипно, хочется сказать что так делать тоже не надо.
- Я не понял зачем автор использует объект СообщениеПользователю вместо ОбщегоНазначенияКлиент.СообщитьПользователю(). Причем также в разных местах по-разному. Насколько я помню в стандартах говорится что следует использовать второй подход.
- Насчет выравнивания: в общем случае возможно оно только мешает, но к примеру когда идут однотипные присваивания (как например в строках "СтрокаДанных.Количество = ТабДок.ПолучитьОбласть("R" + Номер + "С" + 2).ТекущаяОбласть.Текст;"), то там выравнивание ощутимо улучшает наглядность и читаемость кода.
А вообще: формат хороший, смотреть было интересно (хоть и не со всем согласен :) ).
Я бы предложил разобрать еще отдельно написание запросов. Возможно взять пару примеров как небольшая деталь может сильно перекошмарить план запроса и скорость его работы.
Запросы в планах есть. Пока никто не прислал хороший пример
Как поступить? есть ут11, один "умный" пользователь решил обмануть судьбу, загрузил файл картинки в одну карточку номенклатуры (присоединил файл и выбрал изображение на форме), далее через групповую обработку реквизитов заполнил реквизит файлкартинки другим карточкам. Визуально вроде все хорошо, картинка отображается у всех карточек на форме, но прикрепленных файлов нет. Как можно скопировать программно присоединенный файл этим карточкам? При программном заполнении (заполнитьзначениясвойств) не копируется хранилище значений в карточке присоединенного файла? Его ведь нужно заполнить заново? Может гуру Матвей нам поможет? 😊
13:16 в итоге ты сделал еще хуже чем было, так если раньше тут четко было видно что после успешной загрузки файла мы разрешаем выбрать партнера (хотя почему его нельзя выбрать до загрузки не понятно, плюс есть большой вопрос почему тут нужно было именно видимость использовать а не "доступность" которая не требует перерсовки формы и пересчета элементов.
Так вот раньше тут было сразу понятно что происходит, а теперь когда ты ввел еще один реквизит формы (который будет с контекстом ходить, т.е. сделал форму более тяжелой) так еще и нужно разбираться, а что там дальше происходит с переменной "ВидимостьПартнера", на что еще она будет/может влиять.
И обратная ситуация, мне нужно понять где меняется видимость поля, в первом случае я ищу по коду ИмяПоля.Видимость и нахожу сразу все места, в твоем случае я попадаю в "обновить видимость формы" и там еще нужно почитать код и понять что надо поискать по "ВидимостьПартнера".
При этом в целом смысла нет в этой переменной, так как если в ТЧ данные есть, значит загрузка прошла успешно, данные в файле есть, и можно разрешить создавать документы для выбранного партенра. Т.е. этот флаг в принципе там не неужен.
3:00, 3:50 - тут достаточно грубая ошибка, надо определиться можно выбрать один файл или несколько, сейчас конструктор диалога в режиме "Множественный выбор" но берем мы только один файл (первый).
Это может привести к тому что пользователь выберет 2 файла и будет рассчитыывать что загрузится из обоих, но система загрузит только первый.
В целом код максимально не брежный, пойдет для какой то разовой сервисной задачи, но для продуктового решения тут вообще все надо переписывать.
хаммм, вот по поводу шаблонов очень интересно подумать)))
Если работаем с внешним видом формы, то стейт нужно засовывать в реквизиты формы.
А если с таб.частью, то нужно для стейта делать отдельную колонку в ней.
Так получается?
И в зависимости от этой колонки можно сделать условное оформление, например.
Добрый день, очень интересные у вас видео, спасибо. Но подскажите пожалуйста, не нужен ли вам редизайн? Новая аудитория смотрит не только на крутой контент в плане знаний, но и на актуальность дизайна (логотип и фирменные элементы). В любом случае спасибо за информацию!
Спасибо за контент. Там можно было через adodb получить тз этого табличного файла и на уровне запроса, без циклов обработать.
Не читал все комменты, простите)
Хочу сказать что видимостью элементов надо управлять на(в) Серверной процедуре;)
А стейт может быть чем-то сложнее булево?
Например, списком значений или соответствием.
Чтобы можно было проверять на вхождение в стейт чего-нибудь.
мда... Порой думаешь что ты пишешь говнокод - смотришь обзор и понимаешь, а ты не плох...
Ахаха) присылай свой вариант, проверим 😉
А почему нельзя логику презентера перенести в условное оформление формьі? Єто типа будет неочевидно?
Добрый день, Видосы у вас хорошие, позитивные, уже больше 3х лет хочется уйти с сис админа в 1с, да вот пока никак)) Даже книжка Радченко куплена и есть знакомый сеньёр 1с ник)) Переходил по вашей ссылке - но как по мне дороговато)) Понимаю что преподавателям тоже хочется кушать) Но может у вас когда нибудь будет более доступный авторский курс)
Добрый день. Рад, что нравятся видео.
Авторского курса у меня нет
Может однажды появится)@@yellow_club
Зачем выбирать раздичные типы файлов, если один фиг загрузка только из Эксель?
А вдруг пригодится ))
Не нашёл ни одного комментария кто был бы ЗА тамаева. И это на канале тамаева😂
классный стрим с Матвеем, еще бы такой же стрим по поводу мобильной разработки на 1С
Почему квадратика у НомераСтроки нет, а на форме реквизит есть?
А мне заходит на Ура!!! Спасибо
Рад, что полезно
11:30 ДанныеФайла как параметр передаем в запрос - лучше так.
Хороший вариант!
Идея разбора кода хорошая, но простите, что тут для мидлов и сеньоров? Почти всё, на что обращено внимание в видео для мидла должно быть очевидно, иначе он не мидл))
Код в видео ужасный, типичный говнокод, мне было бы стыдно даже присылать такое на разбор: куча мусорного кода, куча мусорных комментов, запросы в цикле, бессмысленный и беспощадный нейминг переменных.
Наверное и смысл присылать код для разбора, чтобы стать лучше, не?
Здравствуйте, интересует ваше мнение, окончил вуз по техн. специальности, имеется опыт программирования на многих языках(на уровне решения лабораторных работ), прошел 2-х недельный курс по программированию 1С. Как вы считаете, могу ли я претендовать на стажировку в какой либо компании(готов работать за еду, имеется фин. подушка на 3-4 месяца)?
Претендовать можете.
Стажировку сложно найти, но можно
По поводу переноса реквизита НомерСтроки. Её можно оставить на второй вкладке, т.к. это не часто изменяемый реквизит. Например, файл всегда меняется, т.е. мы не всегда грузим один и тот же файл. А вот НомерСтроки вероятнее всего всегда будет один для текущего пользователя. И с помощью Автоматическое сохранение данных на форме, можно построить красивый интерфейс для пользователя. Конечно все это вкусовщина, но все же)
Это поле обязательно к заполнению. Можно конечно всегда заполнять единицей. идеально из пользовательского шаблона заполнять
Не чего совершенно нет. Если вам заплатили пару мешков денег и у вас неограниченное время, можно в отладке висеть вечно. Во всех остальных случаях каждый пишет как ему проще и быстрее. Лишь бы солнце каждый день утром всходило и вечером заходило.
Нормальное мнение среднестатистического 1Сника.
Не всем дано код писать. Некоторые умеют только дорабатывать
Какие стейты в 1С ? Стейт - это парадигма веб-программирования, там это актуально, там без этого никак. в 1С - можно получить значение напрямую (в данном случае из Эоементы.Х.Видимость) для чего переносить из веб-программирования стейты туда где они не требуются ?!
В вэбе тоже можно напрямую обращаться. Стейт это не какая-то парадигма. Например, текущий стейт переменной а = 5. Потом где-то в коде стейт переменной а стал равным 6. Про что я в данном примере? Про вэб, мобилу, десктоп, системное программирование?
Почему сайт используется в вебе?
В чем смысл стейта?
Чем отличается модель представления от представления?
Состояние (англ. State) - поведенческий шаблон проектирования. Используется в тех случаях, когда во время выполнения программы объект должен менять своё поведение в зависимости от своего состояния
Ни одного слова про веб. Вы сами это придумали? Полазил в сети. Используют и в с# и python и javascript и тд.
"Это парадигма веб-программирования" - классная шутка
Почему в вебе используется виртуальный дом вместо прямого изменения дома?
И главный вопрос: чем веб на js принципиально отличается от веба на веб-клиенте 1с?
Очень круто, спасибо
Че нить из типовых разберите как реализовано, РАУЗ, ценообразование :-)
Зачем?
Спасибо за видео. Хотелось разбор загрузки файлов через "веб" клиент, то что вы говорили в самом начале. Как подключать и т.д. Недавно столкнулся с этим во фреш. Также про то, как быть, если стоит безопасный режим = истина в параметрах регистрации внешней обработки?
Как вариант можно это сделать с помощью "НачатьПомещениеФайлаНаСервер" или "ПоместитьФайлНаСерверАсинх". Для них расширение работы с файлами не требуется.
А чем мешает безопасный режим?
@@YuriyKolosov выходит ошибка при вызове метода контекста Записать(), включённый безопасный режим не даёт записать двоичные данные файла на сервере. Поддержка 1с фреш, что то отключила у клиента в профиле безопасности, тогда все норм.
@@jalentin в таких случаях в описание обработки нужно добавлять разрешение на работу с временными файлами.
Но лучше вообще не использовать внешние обработки, а делать все через расширения. Тогда нужные разрешения даются автоматически при добавлении расширения во Фреш.
Спасибо! Подскажите, пожалуйста, а где можно про обертку текстового литерала почитать? Это какая-то реализация работы с PO файлами локализации в 1С (вместо НСтр)?
Вот тут подробнее написано its.1c.ru/db/v8std#content:764:hdoc
@@yellow_club Спасибо, понял: "Это устраняет неоднозначность, когда (строковый) идентификатор визуально выглядит в коде как строка, выводимая пользователю, но без необходимого НСтр". Получается, костыль, связанный с НСтр.
💯
Тема зачёт ! Но зачем столько рунглиша?
Так это общий словарь для всех программистов. Зачем свой придумывать?
Вы серьезно! Строковые литералы обернуть в отдельную функцию? Это наглядный пример самого вредно и бестолкового пункта стандарта. На пустом месте, к каждой строке добавили еще вагонетку строк кода. Зачем если эта функция в обработке выполняется 1 раз? Читабельность кода упала ниже плинтуса. Потом все удивляются по чему 1С такая жирная и не поворотливая. Всем вам нужно позаниматься программирование контроллеров, где каждый бит на вес золота.
Потому что можно написать тест
А если написан литерал сразу, то протестировать такой метод не получится
Память уже давно не в дефиците. Можно ее не экономить
@@yellow_club Я, пишу функционал не для тестирования, а для компании в которой работаю и ее сотрудников. Память не в дефиците - но хорошая память стоит своих денег и не малых денег. Вы очень мелко мыслите, вы даже не представляете в какие затраты влечет за собой ненужный тролинг кода.
Вот так и получается что такая могучая 1С ЕРП весит кучу гигабайт, сама тормознутая, а функционал подходит только для доставки пиццы. Много доставщиков пиццы могут позволить купить 1С ЕРП?
Посмотрел разбор и понял что пишу охрененный код =)
Это хорошо)
Тема с разбором кода вообще интересная, такого на ютубе вроде как нет. Было бы прям вообще здорово, если бы ты показывал как нужно примерно правильно делать. Т.е. неправильные куски кода переписывать по правильному
Добрый день
Для меня это третье видео на вашем канале (смотрел собеседование, разбор этой обработки для джуна и вот это). Очень приятная, понятная и легкая подача материала.
Пока вопрос: на 3.00 делается отдельная функция для получения текстового значения ? Чем это "правильнее" ? И почему не использовать тогда директиву &НаКлиентеНаСервереБезКонтекста ?
Директиву можно использовать, как вы написали.
Суть подхода написана в стандартах. Ссылка на стандарт в описании
@@yellow_club Да, спасибо. Почему-то с первого раза упустил этот момент в документации (+ пример не самый удачный у них на мой взгляд)
Случайно наткнулся на канал в шотсах, впервые попался качественный материал по 1с. Разбор для мидлов более сочный, чем для джунов :) Все верно говоришь. Побольше таких видео. Ты ссылаешься на запись стрима по асинхронным функциям, но что-то в подсказках его не видно, ссылка только на видео в рекомендациях.
2:36 этот блок кода вообще заменяется на правильное заполнение списка выбора.
В списке выбора мы указываем представление ("Текстовый документ (*.txt)" и значение *.txt.
Cоответственно когдда пользователь выбирает один из вариантов то на основании СтрШаблон("%1|%2",Представление, Значение) - формируем фильтр.
3:34 тут тоже скорей всего ошибка, пользователь мог уже к тому моменту поменять "Формат файла", мог руками переписать путь в "ПутьКФайлу".
Поэтому проверять тип файла на основании Формат файла в принципе не правильно.
Нужно создавать объект файл и брать его расширение + это будет за одно и проверка существования файла.
1:19 мы используем методы из клинетского модуля БСП, смотреть наних не нужно :) Нужно всегда ими пользоваться.
Очень крутая рубрика. Больше - больше....
Какие сложности есть с кодом? Что ещё рассказать?
....Пустой() - менее затратная операция для системы нежели чем Выбрать(), так что было все правильно сделано. Сначала проверяем результат запроса на пустоту, если в нем что то есть - выполняем выборку
Выбрать() по пустой выборке не уступает Пустой() по скорости
@@yellow_club когда готовился к спецу в курсах чистова (тут я не уверен, возможно это был гилев) явно говорилось, если вас не затруднит прошу скинуть пруфы по вашему утверждению. Если даже так прикинуть, при выборке все равно формируется таблица с результатом, т.к. при выборке можно получить количество записей, возможно в каком то агрегированном виде, хотя тут надо наверняка знать что получается для системы при выполнении метода Пустой()
Говорилось другое. Что если нужно только на пустоту проверить, то Пустой используешь.
А когда надо обработать выборку, если она не пустая, то нет смысла проверять на пустоту. Это разные сценарии.
10:37 Думаю временная сложность варианта с поиском по индексированной таблице будет O(n * logn). Поскольку, вряд ли индексирование в таблице значений реализовано по типу хеш-таблиц с поиском за O(1), а скорее по типу поискового дерева с поиском за O(logn).
Индексирование Таблицы значения реализовано по типу хеш-таблиц.
@@yellow_club Странно, ведь можно задать список индексируемых полей, а не одно поле, как они хеш строят?! Откуда инфа?
Суть в том что строятся разные хеши для каждого из индексов
А если индексы по списку полей то просто в отборе происходит перестановка значений отбора так чтобы сначала были поля попадающие в индекс.
Тут есть раздел про индексы its.1c.ru/db/v8std#content:452:hdoc
не успел записаться - места кончились) но вот такой вопрос - а стоит ли управлять видимостью элементы так напрямую? потом что ведь идет перерисовка всей формы. не будет ли более правильно работать с видимостью через условное оформление?
Условное оформление работает для таблиц, для обычных реквизитов не работает.
Для таблиц в целом можно делать и так и так.
Обычно условным делают тогда когда нужно разное положение видимости в разных строчках.
изменение видимости не делают серверный вызов. Когда-то давно делали но уже много лет не делают.
@@yellow_club пример платформа 8.3.22.1704. на форме есть ТЧ, реквизит булево-переключатель Реквизит1, и еще один реквизит2. При измении доступности реквизита2 происходит перерисовка ТЧ на форме. это очень видно потому что на ТЧ есть событие ПриАктивации - и оно срабатывает
Нормальная тема. Продолжай
договорились)
Отличная тема! Пиши еще!
Договорились
Добрый день! Вертикальное выравнивание это плохо?
Плохо
@@yellow_club отнюдь
Читать выравненный текст по мне так в разы проще, значения сразу визуально отделяются, одна из причин против этого, отсутствие возможности потом искать «искомое =» в глобальном поиске
Лично меня раздражает не понятно по какой причине. Особенно если кто то выравнивал и одну строку забыл выравнять так и хочется пойти в морду дать.
очень полезная рубрика. 👍
Рад, что полезно. Какие ещё аспекты кода рассмотреть?
Такой формат разборы кода мне очень нравится, скажу больше это то что я искал долгое время. Спасибо вам большое.
В практике как напишу подходящий код обязательно поделюсь со всеми 🙂
Рад, что полезно
Отличный формат, можно почаще такие разборы? Благодарю.
Очень полезный разбор! Больше пожалуйста таких разборов и ссылок!)
Спасибо! Отличное видео! Жду продолжения.
Отличное видео, побольше разбора кода по мини видосам!
Тут ужасно практически всё, зачем разбирать код какого-то джуна? мне физически больно читать этот код
Присылай свой код
Спасибо! Почаще таких простых видео про стандарты! Очень актуально, потому что частенько забываешь о таких важных мелочах!
Рад, что полезно
Пришлите ссылку на саму обработку
Зачем?
@@yellow_club, посмотреть самому.
Есть видео разбора XML, JSON, HTTP- и SOAP-сервисов?
@alexmtx7689 вот разбор http сервиса Разбор кода HTTP Сервиса 1С
ruclips.net/video/itR3A7_ME40/видео.html
@@yellow_club Спасибо!
Спасибо! Очень в тему 👍
Рад, что полезно
Надо разбор кода в EDT делать, так еще интереснее будет :)
Мне кажется основная масса в конфигураторе сидит. Им привычнее будет. Может конечно ошибаюсь
@@yellow_club Конечно это факт, на EDT разработчиков 1С меньше )