"Лень - двигатель прогресса" и "Лениться нужно вовремя и с трудом". Из рубрики "Крылатые выражения" канала ТехПоддержка. Ладно, я действительно поставил на паузу и стал решать задачки......... Боже ж ты мой! Я сделал это!! У меня есть все-таки шанс стать разработчиком! Спасибо Вам, Олег!!!
3 из 3! 1 задача - 5-7 минут; 2 задача - 10 минут; Использовал код: Если ЗначениеЗаполнено (Объект.Продукты) Тогда... 3 задача - заметил ещё во время просмотра, уже бросается в глаза) П.С. Чувствую, как становлюсь наглее)
Добрый день! Задание с прошлого урока решил не совсем правильно - просто для формы выбора присвоил форму списка и не проверил, что теперь нельзя выбирать продукт. Задание 1 - решил сразу Задание 2 - еще по ходу прохождения урока заметил не точности в логике и сразу возникла идея это поправить, справился быстро Задание 3 - назмение процедуры, еще во время урока, написал правильно - "ОбработкаИзмененияПродукта". Поэтому были другие идеи - "Если ЗначениеЗаполнено(Объект.Продукт) Тогда" использовано дважды, попробовал "ЗаполнитьТабЧастьПродуктыНаСервере()" вставить в первую конструкцию если, но ничего не получилось - код стал работать не правильно. В итоге посмотрел решение, оказалось все намного проще)) Спасибо большое за ваши уроки!
Доброго Вам дня! С большим удовольствием говорю Вам Спасибо! Каждое Ваше объяснение супер важно для Новичка 1000%! И ничего лишнего! Как же мне все становится понятно!!! ) Супер просто!!🙏🙏🙏
Невозможно не прокомментировать ))) "Лень - двигатель прогресса". Спасибо вам за качественную подачу материала!!! Опечатка бросилась в глаза безусловно и сразу. Сказать не получается. Как та собака, все понимает, а сказать никак )))
первое задание сделала за 30 сек)) второе - не смогла понять, что надо сделать, а третье...... Ошибку увидела сразу, в процессе написания, подумала, что позже поправите)), но когда прозвучала задачка - даже в голову не пришло, что она про это :) Спасибо за уроки, очень доступно для понимания нулевого новичка.
допом еще очистку формы вынес в отдельную процедуру на клиенте... дабы DRY соблюсти) Спасибо за материал - весьма доступная подача, что очень важно при изучении такой сатаны, как 1С))))
Спасибо за очередной урок. Обожаю Вашу подачу! Кнопку сделала, как и Вы, ошибки нашла еще во время занятия, а вот со вторым заданием справилась, только с идеей, воплощение уже списала)
Первое задание выполнила быстро. После первого запуска Предприятия, поняла, что надо делать условие на пустую табличную часть. Вроде справилась. ))) Ошибки было сложнее найти))) Благодарю за новые знания!!! )))
Отличный урок! Предыдущее домашнее задание сделала "примитивным" способом - добавляла форму вручную и настраивала список. Приятно удивил Ваш способ решения, действительно так проще и меньше можно допустить банальных ошибок, спасибо! Из второго домашнего задание получилось решить 1 и 3, ушло буквально 10 минут), а вот по поводу 2 задания - усердно думала, перебирала различные варианты, но до правильного решения так и не дошла. Зато теперь знаю в каком месте есть пробел, который нужно восполнять :)
На 1 задачку я потратил минут 30! Но зато в каком восторге я был, когда эта кнопка заработала!))) Но тут же сразу заметил, что чистое поле можно очистить еще раз (но я сначала не понял, что это был ответ на 2 задачку), что касается 3 задачи, комментарий я не заметил, а вот "ОбработкаИзмененияпродукта" - мозолила глаз с самого появления в кадре))
Добрый День, на 1ое задание ушло минут 5, на 2-ое минут 15, Сделал глупо кажется ваш вариант намного короче и лучше ) а у меня чуть дублируется с последним если. Спасибо Вам за Видеокурсы одни из лучших на просторах ютуба) 10\10 Если Не ЗначениеЗаполнено(Объект.Продукты) Тогда ЗаполнитьТабЧастьПродуктыНаСервере(); ИначеЕсли Вопрос("Очисить табличную часть?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда Объект.Продукты.Очистить(); КонецЕсли; Если ЗначениеЗаполнено(Объект.Продукт) Тогда ЗаполнитьТабЧастьПродуктыНаСервере(); КонецЕсли;
Выполнил домашнее задание не знаю на сколько это этично или можно так делать, но для условия я вынес отдельную процедуру так же «на клиенте» и не стал копировать код для кнопки очистить, а просто вынес туда вызов этой процедуры так же вынес эту процедуру в процедуру в обработкуизменияпродута в то место где у нас было условие. Как по мне мы избавились от лишних строчек кода и вполне все хорошо работает)) или все таки такой метод занимает больше памяти и на время срабатывания
Может быть в одном из уроков более подробно затронуть тему правильного понимания написаного в синтаксис помощнике или в справке , а то не всегда понимается какие параметры где и куда передавать.. Спасибо.
Признаюсь честно, что Домашку я выполнил создавая вручную список выбора. Приятно-очевидно удивило то, что можно список было сделать простым копированием существующего и добавки в созданный корректировки. По сути , объекты метаданных ведь также копированием то уже создавал... теперь буду знать и про списки в формах... а раз так, то тогда и небось еще что-нибудь можно создавать копированием. Буду держать эту мысль на подкорке.
1С тем и хороша, что можно достигнуть цели разными путями... как при конфигурировании, так и при ведении учёта. Это, правда, добавляет головной боли при разграничении прав :) Но у всего есть минусы :)
При выполнении первого задания можно вынести очистку рабочей части в отдельную процедуру и потом просто вызывать ее в нашей процедуре ОбработкаИзмененияпродукта) и в новой процедуре, привязанной к кнопке.
А я подумал, что лишнее вот что - если при изменении продукта, выбрать тот же продукт что и указан в поле (допустим яичница из 2 яиц, открываем список и выбираем ее же), то программа спрашивает - заполнить список продуктов и т.п. Создал дополнительный реквизит на форме, в него при открытии формы кинул Объект.Продукт, и потом при изменении сравниваю значение этого реквизита с Объект.Продукт, если не совпадает, то запускаю ОбработкаИзмененияПродукта(); и в дополнительный реквизит опять присваиваю Объект.Продукт... На половине решения, мне пришла мысль что возможно зря табличную часть очищаем, если она пустая, оказалось не зря приходила мысль!
Добрый день! Очень понравилась подача! Пожалуйста, не останавливайтесь ))) По домашке: про кнопку "Очистить" логику поняла, даже что откуда скопировать тоже, а вот не правильно выбрала на клиенте и сервере... Второе - логику тоже поняла, но как сделать - нет, без подглядывания не вышло )) Опечатки не нашла (((
Немного улучшенная процедура очистки... ну чтоб совсем кошерно))) &НаКлиенте Процедура ОчиститьТабЧасть(Команда)
Если ЗначениеЗаполнено(Объект.Продукты) Тогда Если Вопрос("Очистить табличную часть?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда Объект.Продукты.Очистить(); КонецЕсли; Иначе ПоказатьОповещениеПользователя("Таблица пуста!",,"Нет необходимости в очищении..."); КонецЕсли; КонецПроцедуры
С первым заданием долго ломала голову, так как забыла, каким образом создаётся команда формы, пришлось подсмотреть в прошлом занятии... А второе задание выполнила ещё до его озвучивания, так как резал глаза лишний вопрос об очищении пустой таб части, использовала функцию ЗначениеЗаполнено для решения обеих задачек, надеюсь, это тоже допустимое решение?)
Олег, спасибо Вам большое за Ваш труд.Отдельное спасибо за домашнее задания.Кстати по поводу домашнего задания: Выполнил два из трех. И мое выполнение отличается от Вашего. А 3 задание прдедположил что ошибкой является сокрощение (ТабЧасть), ведь в программирование не допускается сокрощения
Если Не ЗначениеЗаполнено(Объект.Продукты) Тогда Возврат; Иначе Если Вопрос("Очисть табличную часть?",РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда Объект.Продукты.Очистить(); КонецЕсли; КонецЕсли; КонецПроцедуры ВОТ ТАК ВЫГЛЯДИТ МОЕ ИСПОЛНЕНИЕ ДОМАШНЕГО ЗАДАНИЯ
Добрый день. Олег! в каком видеоуроке вы рассказывали. как настроить подсветку ошибок при написании программного кода в конфигураторе (в модуле объекта)?
Я сделал домашку с другой логикой. Непонятно, зачем нам нужно показывать в форме выбора продукта все продукты и какие-то подсвечивать, когда можно просто список в форме выбора фильтровать, сразу убирая ненужные строки. То есть если мы выбираем продукт, то и показывать нужно именно готовые продукты, а если выбираем ингредиент, то показывать только ингредиенты. Исходя из этой логики, я поменял 2 параметра реквизита Продукт. В документе ПриготовлениеПродуктов.Реквизиты.Продукт в свойствах "Параметры выбора" указал "Отбор.МожноПриготовить(Истина)". А в списке ингредиентов документа ПриготовлениеПродуктов.ТабличныеЧасти.Продукты.Продукт в свойствах "Параметра выбора" указал обратное условие "Отбор.МожноПриготовить(Ложь)". В итоге не нужно никаких подсветок, в форме выбора ингредиента видим только ингредиенты, а в форме выбора продукта видим только продукты.
КАСАЕТСЯ ДЗ 14 УРОКА!!!! Сделал домашнее задание еще по одному варианту, по мне как самому простому и быстрому! Комментарии все не читал, возможно уже писали! В режиме Предприятие открыть в документе Приготовление выбор продукта в табличную часть и уже в форме выбора справочника Продукты через кнопку "Ещё" кликнуть по "Настроить список" и там уже всё станет ясно) Голову ломал несколько дней, но решение специально нигде не подсматривал, думал Сам
Тут один нюанс: все изменения настроек, производимые в режиме 1с Предприятие будут отображаться лишь в вашем приложении, другие пользователи их не увидят. В конфигураторе же изменения будут касаться всех пользователей
Пытался решить задачу, почему то решил, что действовать нужно через документ ПриготовлениеПродуктов и изменять его форму. Ведь действия происходят в его форме и пытался добавить туда скрытый реквизит Продукты из Справочника, но ничего не вышло (кто бы мог подумать). Это то, что мне подсказала интуиция. И в этом, я думаю, сложность для меня, как новичка - совершенно не интуитивные причинно-следственные связи, что где брать, куда ложить и что с этим делать Конечно помогает объяснение о объектно-событийной парадигме, но дается пока сложно после python.
Мне резало глаз ещё и то, что дублировались условия "Если ЗначениеЗаполнено(Объект.Продукт) Тогда..." Надо перенести процедуру ЗаполнитьТабЧастьПродуктыНаСервере() в первое условие, немного сократился бы код.
Как открыть форму выбора с заранее отфильтрованным списком сотрудников? Дело в том, что выбирать можно только работающих сотрудников, а информация работает он или нет хранится в регистре сведений.
Вообще сделал вот так: Объект.Продукты.Очистить(); ТаблицаПродуктов=Объект.ПродуктНаВыходе.Ингредиенты.Выгрузить(); Объект.Продукты.Загрузить(ТаблицаПродуктов); С запросом будет быстрее или правильнее? Можно узнать?
Как всегда шедеврально. Но куда же без вопросов. А можно везде использовать одну и ту же форму списка и в СПИСКЕ и в ВЫБОРЕ и не менять режим её программно, если пользователя устраивает все? В чем критичное отличие этих форм изначально, как закладывали разрабы 1С?
По идее можно, разница только в том, что при выборе элемент в режиме формы списка необходимо открывать элемент для просмотра/редактирования, а при выборе элемента в форме выбора нужно закрывать форму и возвращать результат выбора... честно говоря не помню как себя платформа ведет, если одну и туже форму указать, возможно ни чего не нужно будет программного переключать...
Спасибо за уроки! Объясняете просто супер! Задание выполнила быстро, но втором задании использовала "НЕ ЗначениеЗаполнено" думаю сути это не меняет? Или нельзя так 😀 А ошибки не допускала сразу по ходу видео, по этому не нашла)
А я не поняла, почему при приготовлении блюд (а я булево с "можно приготовить" заменила на понятие "блюдо") можно выбирать другие продукты со значением "можно приготовить". Блюда готовятся из продуктов=ингредиентов, как вы сами заметили на прошлой лекции, нельзя снести яйцо. Можно приготовить яичницу, булочку и тп, но никак нельзя приготовить молоко, яйцо, муку, допустим. Так почему бы не заниматься свечением "можно приготовить" при выборе ингредиентов, а просто поставить условие, что при приготовлении блюд выбираются только продукты, а не другие блюда?
Логика была простая, но её принятие не обязательное условие просмотра видосов :) Например потому что мы можем приготовить фарш или тесто и заморозить.... есть мы это не будем, но можем запастись и использовать дальше, по необходимости. Или хлеб, можно употребить в пищу, а можно пустить в котлеты...
Хочу уточнить про такую сущность как "Объект". Понять не могу до сих пор до конца, что это такое. Мне кажется, что ранее я хотя бы интуитивно понимал что такое "Объект", но услышав на "Мы не внутри Объекта и напрямую к реквизитам обратить не можем", понял, что не понимаю в итоге, что это за сущность такая "Объект". Строка кода, о которой говорится об Объекте - "Если ЗначениеЗаполнено(Объект.Продукт) Тогда" на видео этот момент на 25:39.
@@tp2b Посмотрел это видео и следующее, но так и не понял, зачем мы к свойствам формы обращаемся через объект. Мы находимся в контексте формы и проверяем заполненность формы. Объект - у нас форма, точнее, копия объекта Документ на форме. Можно понять, что Объект, в данном случае, виртуальный. Но даже виртуальный объект при заполнении или проверке на пустоту мы не трогаем. Если мы не напишем Объект и так понятно, что ближайшее свойство, это свойство формы.
@@jlktkrftgjhuoij Пишите тайм-коды и примеры. Я не помню все видосы наизусть. Но если правильно понял вопрос, то мы не с формой работаем... Мы работает в модуле формы, а проверить нам нужно заполнение реквизитов документа, вот и обращаемся к ним через "Объект".
Всё, разобрался... Проблема в том, что вынося все в отдельную процедуру - забыл вписать "&НаКлиенте" . Невнимательность моя не знает границ. Хотя автор и говорит "Скопируем и вставим, чтобы не писать &НаКлиенте"
Если ЗначениеЗаполнено(Объект.Продукты) Тогда Если Вопрос("Табличная часть будет очищена! Продолжить?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда Возврат; Иначе Объект.Продукты.Очистить(); КонецЕсли; ОчиститьТабЧастьПродуктыНаСервере(); КонецЕсли; У меня получилось вот такое.
Что-то у Вас масло масляное получилось.... Если нет, то выходит из алгоритма, а если да, тогда... Тогда выполняются сразу две очистки :) Странно. Объект.Продукты.Очистить(); ОчиститьТабЧастьПродуктыНаСервере();
@@tp2b вторая очистка видимо лишняя. А вот вопрос возник у меня: если мы заполнили в табличной части документа приготовление продуктов только колонку продукт, а колонку количество не заполнили, то конструкция если объект.продукты.количество > 0 не позволит выполниться процедуре очистки, хотя в таблице есть данные?
Объект.Продукты.Количество() считает количество строк в табличной части Продукты... даже если если там пустые строки, они будут посчитаны. За расчёт итога по колонке отвечает другой метод: Объект.Продукты.Итог("Количество") вот он вернёт общий итог по колонке "Количество"
Ютюб мой коммент не пропустил.... попробуем еще раз :) У меня тесть был с Украины, может его влияние.... байки про негра, гыдын, хвылы и бандеровцев, а еще про зупынку за углом рассказывал регулярно :)
Просматриваю это видео в октябре 2022 (спустя полтора года после выпуска) и второй раз и второй раз же с нуля делаю это задание. Я еще увидел, что можно малюсенькую оптимизацию кода сделать, а именно дублируются конструкции с оператором "Если" : "Процедура ОбработкаИзмененияПродукта() Если ЗначениеЗаполнено(Объект.Продукт) Тогда Если Вопрос("Табличная часть будет заполнена! Продолжить?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли; КонецЕсли; ............ 🧑💻//Тут можно убрать оператор "Если", так как в первом операторе "Если" будет отрицательный ответ, то до этого места обработчик не дойдет, а если ответ будет положительный, то уже и смысла перепроверять заполнено ли значение Объект.Продукт - нет, так как выше в коде на это уже был дан ответ. И можно уже без условий вызывать процедуру "ЗаполнитьТабЧастьПродуктыНаСервере()"👨💻 //Если ЗначениеЗаполнено(Объект.Продукт) Тогда ЗаполнитьТабЧастьПродуктыНаСервере(); //КонецЕсли; КонецПроцедуры"
44:12, не знаю, насколько ещё актуальны комментарии на данном видео, однако хотел вы задать вопрос, касательно 2-ого задания. Видимо, я чуть неправильно понял его, но хотел уточнить, будет ли хоть как-то положительно сказываться данное изменение в положительную сторону на мой код? : Если Вопрос("Очистить табличную часть?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда Объект.Продукты.Очистить(); Сообщить("Табличная часть успешно очищена!"); КонецЕсли; Если ЗначениеЗаполнено(Объект.Наименование) Тогда
Ответ = Вопрос("Табличная часть будет заполнена. Продолжить?", РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Нет Тогда Возврат; Иначе ЗаполнитьРецептНаСервере(); КонецЕсли; КонецЕсли; То есть про очистку у меня, конечно, тут совсем ни слова, но я решил дополнительно не проверять, пустая ли строка продукт (в моем случае - наименование), а сунуть его чуть в другое место, поменяв местами очистку и вопрос про заполнение таб части.
Добрый вечер! Я поставил на паузу и написал сам код на обработку изменения продукта, вот что получилось) Мусор? или имеет место быть? Процедура ОбработкаИзмененияПродукта()
Если НЕ Объект.Продукт.Пустая() Тогда Если Вопрос ("Приступить к корректировке табличной части?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли;
Если Вопрос ("Перезаполнить табличную часть согласно рецепта?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда Объект.Продукты.Очистить(); КонецЕсли; ЗаполнитьПоРецептуНаСервере();
Иначе Если Вопрос ("Очистить табличную часть?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда Объект.Продукты.Очистить(); Возврат; КонецЕсли КонецЕсли;
Если ЗначениеЗаполнено(Объект.Продукт) Тогда Если Вопрос("Табличная часть будет заполнено! Продолжить",РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли; Если Вопрос("Очистить табличную часть?",РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда Объект.Продукты.Очистить(); КонецЕсли;
Олег, вы прирожденный "эксКУРСовод" )) очень доступно и доходчиво, а игровая форма подачи домашних заданий просто класс👏
"Лень - двигатель прогресса" и "Лениться нужно вовремя и с трудом". Из рубрики "Крылатые выражения" канала ТехПоддержка.
Ладно, я действительно поставил на паузу и стал решать задачки.........
Боже ж ты мой! Я сделал это!! У меня есть все-таки шанс стать разработчиком! Спасибо Вам, Олег!!!
Спасибо за урок! Я благодарна Вам, что есть подробное описание задачи и Вы направляете для дальнейших действий.
3 из 3!
1 задача - 5-7 минут;
2 задача - 10 минут;
Использовал код: Если ЗначениеЗаполнено (Объект.Продукты) Тогда...
3 задача - заметил ещё во время просмотра, уже бросается в глаза)
П.С.
Чувствую, как становлюсь наглее)
Добрый день!
Задание с прошлого урока решил не совсем правильно - просто для формы выбора присвоил форму списка и не проверил, что теперь нельзя выбирать продукт.
Задание 1 - решил сразу
Задание 2 - еще по ходу прохождения урока заметил не точности в логике и сразу возникла идея это поправить, справился быстро
Задание 3 - назмение процедуры, еще во время урока, написал правильно - "ОбработкаИзмененияПродукта".
Поэтому были другие идеи - "Если ЗначениеЗаполнено(Объект.Продукт) Тогда" использовано дважды, попробовал "ЗаполнитьТабЧастьПродуктыНаСервере()" вставить в первую конструкцию если, но ничего не получилось - код стал работать не правильно. В итоге посмотрел решение, оказалось все намного проще))
Спасибо большое за ваши уроки!
Доброго Вам дня!
С большим удовольствием говорю Вам Спасибо!
Каждое Ваше объяснение супер важно для Новичка 1000%! И ничего лишнего!
Как же мне все становится понятно!!! ) Супер просто!!🙏🙏🙏
Невозможно не прокомментировать ))) "Лень - двигатель прогресса". Спасибо вам за качественную подачу материала!!!
Опечатка бросилась в глаза безусловно и сразу. Сказать не получается. Как та собака, все понимает, а сказать никак )))
Иногда я захожу в ютуб просто посмотреть, не вышло ли нового видео на канале Техподдержка)))) Ура, ура! Будем учиться! Спасибо за урок!
первое задание сделала за 30 сек)) второе - не смогла понять, что надо сделать, а третье...... Ошибку увидела сразу, в процессе написания, подумала, что позже поправите)), но когда прозвучала задачка - даже в голову не пришло, что она про это :)
Спасибо за уроки, очень доступно для понимания нулевого новичка.
допом еще очистку формы вынес в отдельную процедуру на клиенте... дабы DRY соблюсти) Спасибо за материал - весьма доступная подача, что очень важно при изучении такой сатаны, как 1С))))
Спасибо за очередной урок. Обожаю Вашу подачу! Кнопку сделала, как и Вы, ошибки нашла еще во время занятия, а вот со вторым заданием справилась, только с идеей, воплощение уже списала)
Первое задание выполнила быстро. После первого запуска Предприятия, поняла, что надо делать условие на пустую табличную часть. Вроде справилась. ))) Ошибки было сложнее найти))) Благодарю за новые знания!!! )))
Отличный урок! Предыдущее домашнее задание сделала "примитивным" способом - добавляла форму вручную и настраивала список. Приятно удивил Ваш способ решения, действительно так проще и меньше можно допустить банальных ошибок, спасибо!
Из второго домашнего задание получилось решить 1 и 3, ушло буквально 10 минут), а вот по поводу 2 задания - усердно думала, перебирала различные варианты, но до правильного решения так и не дошла. Зато теперь знаю в каком месте есть пробел, который нужно восполнять :)
Я раньше довольно много программировал в Access, мне все очень понятно и домашку сделал сходу :)
Вот! Автор Красавчик, Спасибо родной!
На 1 задачку я потратил минут 30! Но зато в каком восторге я был, когда эта кнопка заработала!)))
Но тут же сразу заметил, что чистое поле можно очистить еще раз (но я сначала не понял, что это был ответ на 2 задачку), что касается 3 задачи, комментарий я не заметил, а вот "ОбработкаИзмененияпродукта" - мозолила глаз с самого появления в кадре))
Добрый День, на 1ое задание ушло минут 5, на 2-ое минут 15,
Сделал глупо кажется ваш вариант намного короче и лучше ) а у меня чуть дублируется с последним если. Спасибо Вам за Видеокурсы одни из лучших на просторах ютуба) 10\10
Если Не ЗначениеЗаполнено(Объект.Продукты) Тогда
ЗаполнитьТабЧастьПродуктыНаСервере();
ИначеЕсли Вопрос("Очисить табличную часть?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
Объект.Продукты.Очистить();
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Продукт) Тогда
ЗаполнитьТабЧастьПродуктыНаСервере();
КонецЕсли;
Хороший у вас юмор, сижу и учиться приятно
Спасибо за урок! Просто, Понятно и очень Позитивно!=)
Выполнил домашнее задание не знаю на сколько это этично или можно так делать, но для условия я вынес отдельную процедуру так же «на клиенте» и не стал копировать код для кнопки очистить, а просто вынес туда вызов этой процедуры так же вынес эту процедуру в процедуру в обработкуизменияпродута в то место где у нас было условие. Как по мне мы избавились от лишних строчек кода и вполне все хорошо работает)) или все таки такой метод занимает больше памяти и на время срабатывания
Спасибо! Понятно,доходчиво и позитивно
Может быть в одном из уроков более подробно затронуть тему правильного понимания написаного в синтаксис помощнике или в справке , а то не всегда понимается какие параметры где и куда передавать.. Спасибо.
Видимо действительно нужен такой урок.
Можете поподробнее расписать что не понятно в синтаксис-помощнике?
Супер отличная подача материала, спасибо большое!
Спасибо за этот урок и Д/З!!!
Как всё красиво, действительно)
Отличные видео, так держать!
Признаюсь честно, что Домашку я выполнил создавая вручную список выбора. Приятно-очевидно удивило то, что можно список было сделать простым копированием существующего и добавки в созданный корректировки.
По сути , объекты метаданных ведь также копированием то уже создавал... теперь буду знать и про списки в формах... а раз так, то тогда и небось еще что-нибудь можно создавать копированием. Буду держать эту мысль на подкорке.
1С тем и хороша, что можно достигнуть цели разными путями... как при конфигурировании, так и при ведении учёта.
Это, правда, добавляет головной боли при разграничении прав :) Но у всего есть минусы :)
потрясающее😀 объяснение
Спасибо :)
Отличная подача материала, большое спасибо!
Пожалуйста :)
Крутые уроки, по управляемым формам на ютубе толком ничего нет
Ура новый видосик) Спасибо буду изучать)
Пожалуйста :)
При выполнении первого задания можно вынести очистку рабочей части в отдельную процедуру и потом просто вызывать ее в нашей процедуре ОбработкаИзмененияпродукта) и в новой процедуре, привязанной к кнопке.
А я подумал, что лишнее вот что - если при изменении продукта, выбрать тот же продукт что и указан в поле (допустим яичница из 2 яиц, открываем список и выбираем ее же), то программа спрашивает - заполнить список продуктов и т.п. Создал дополнительный реквизит на форме, в него при открытии формы кинул Объект.Продукт, и потом при изменении сравниваю значение этого реквизита с Объект.Продукт, если не совпадает, то запускаю ОбработкаИзмененияПродукта(); и в дополнительный реквизит опять присваиваю Объект.Продукт...
На половине решения, мне пришла мысль что возможно зря табличную часть очищаем, если она пустая, оказалось не зря приходила мысль!
СпасибоЗаОчереднойУрок!)
з.ы. Очепятки у себя не делал) Пришлось в видео высматривать
Спасибо большое.
Пожалуйста :)
Добрый день! Очень понравилась подача! Пожалуйста, не останавливайтесь )))
По домашке: про кнопку "Очистить" логику поняла, даже что откуда скопировать тоже, а вот не правильно выбрала на клиенте и сервере... Второе - логику тоже поняла, но как сделать - нет, без подглядывания не вышло )) Опечатки не нашла (((
Здравствуйте!
Начал снимать новый сезон :)
Очень рад что нравятся уроки.
Немного улучшенная процедура очистки... ну чтоб совсем кошерно)))
&НаКлиенте
Процедура ОчиститьТабЧасть(Команда)
Если ЗначениеЗаполнено(Объект.Продукты) Тогда
Если Вопрос("Очистить табличную часть?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
Объект.Продукты.Очистить();
КонецЕсли;
Иначе
ПоказатьОповещениеПользователя("Таблица пуста!",,"Нет необходимости в очищении...");
КонецЕсли;
КонецПроцедуры
С первым заданием долго ломала голову, так как забыла, каким образом создаётся команда формы, пришлось подсмотреть в прошлом занятии... А второе задание выполнила ещё до его озвучивания, так как резал глаза лишний вопрос об очищении пустой таб части, использовала функцию ЗначениеЗаполнено для решения обеих задачек, надеюсь, это тоже допустимое решение?)
Отличная подача материала! Подписался на канал.👍
Очень нестандартный подход к обучению. Но очень дельный. Спасибо!
Олег, спасибо Вам большое за Ваш труд.Отдельное спасибо за домашнее задания.Кстати по поводу домашнего задания: Выполнил два из трех. И мое выполнение отличается от Вашего. А 3 задание прдедположил что ошибкой является сокрощение (ТабЧасть), ведь в программирование не допускается сокрощения
&НаКлиенте
Процедура ОчиститьТабЧасть(Команда)
Если Не ЗначениеЗаполнено(Объект.Продукты) Тогда
Возврат;
Иначе
Если Вопрос("Очисть табличную часть?",РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
Объект.Продукты.Очистить();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
ВОТ ТАК ВЫГЛЯДИТ МОЕ ИСПОЛНЕНИЕ ДОМАШНЕГО ЗАДАНИЯ
@@ДаниловВ.А тоже так сделала) это верно?
Добрый день. Олег! в каком видеоуроке вы рассказывали. как настроить подсветку ошибок при написании программного кода в конфигураторе (в модуле объекта)?
Здравствуйте, Андрей.
Кажется, не рассказывал такого...
Привет, почему не выходит новые уроки?
Готовлю урок про Контекст, очень сложное в подготовке видео оказалось....
Спасибо тебе за муравьёв Мосыч . Ну в смысле MOSPARKRU
Пожалуйста :)
Я сделал домашку с другой логикой. Непонятно, зачем нам нужно показывать в форме выбора продукта все продукты и какие-то подсвечивать, когда можно просто список в форме выбора фильтровать, сразу убирая ненужные строки. То есть если мы выбираем продукт, то и показывать нужно именно готовые продукты, а если выбираем ингредиент, то показывать только ингредиенты.
Исходя из этой логики, я поменял 2 параметра реквизита Продукт. В документе ПриготовлениеПродуктов.Реквизиты.Продукт в свойствах "Параметры выбора" указал "Отбор.МожноПриготовить(Истина)". А в списке ингредиентов документа ПриготовлениеПродуктов.ТабличныеЧасти.Продукты.Продукт в свойствах "Параметра выбора" указал обратное условие "Отбор.МожноПриготовить(Ложь)".
В итоге не нужно никаких подсветок, в форме выбора ингредиента видим только ингредиенты, а в форме выбора продукта видим только продукты.
Отличный подход!
Сделал вторую задачу ещё на прошлом уроке)
КАСАЕТСЯ ДЗ 14 УРОКА!!!! Сделал домашнее задание еще по одному варианту, по мне как самому простому и быстрому! Комментарии все не читал, возможно уже писали! В режиме Предприятие открыть в документе Приготовление выбор продукта в табличную часть и уже в форме выбора справочника Продукты через кнопку "Ещё" кликнуть по "Настроить список" и там уже всё станет ясно) Голову ломал несколько дней, но решение специально нигде не подсматривал, думал Сам
Тут один нюанс: все изменения настроек, производимые в режиме 1с Предприятие будут отображаться лишь в вашем приложении, другие пользователи их не увидят. В конфигураторе же изменения будут касаться всех пользователей
@@DrawRonnie спасибо, учту
Пытался решить задачу, почему то решил, что действовать нужно через документ ПриготовлениеПродуктов и изменять его форму. Ведь действия происходят в его форме и пытался добавить туда скрытый реквизит Продукты из Справочника, но ничего не вышло (кто бы мог подумать). Это то, что мне подсказала интуиция.
И в этом, я думаю, сложность для меня, как новичка - совершенно не интуитивные причинно-следственные связи, что где брать, куда ложить и что с этим делать
Конечно помогает объяснение о объектно-событийной парадигме, но дается пока сложно после python.
Блин, я 3 задачу думал что не так, думал, что я дурак))) но я то у себя в коде искал, а я на автомате правильно написал😂
Мне резало глаз ещё и то, что дублировались условия "Если ЗначениеЗаполнено(Объект.Продукт) Тогда..." Надо перенести процедуру ЗаполнитьТабЧастьПродуктыНаСервере() в первое условие, немного сократился бы код.
Но тогда при положительном ответе на второй опрос, всё что заполнено, было бы следом очищено....
Лайк!
А что передаёт параметр " элемент" или "команда" в процедуру обработчик?
Как открыть форму выбора с заранее отфильтрованным списком сотрудников? Дело в том, что выбирать можно только работающих сотрудников, а информация работает он или нет хранится в регистре сведений.
Вообще сделал вот так:
Объект.Продукты.Очистить();
ТаблицаПродуктов=Объект.ПродуктНаВыходе.Ингредиенты.Выгрузить();
Объект.Продукты.Загрузить(ТаблицаПродуктов);
С запросом будет быстрее или правильнее? Можно узнать?
Как всегда шедеврально. Но куда же без вопросов. А можно везде использовать одну и ту же форму списка и в СПИСКЕ и в ВЫБОРЕ и не менять режим её программно, если пользователя устраивает все? В чем критичное отличие этих форм изначально, как закладывали разрабы 1С?
По идее можно, разница только в том, что при выборе элемент в режиме формы списка необходимо открывать элемент для просмотра/редактирования, а при выборе элемента в форме выбора нужно закрывать форму и возвращать результат выбора... честно говоря не помню как себя платформа ведет, если одну и туже форму указать, возможно ни чего не нужно будет программного переключать...
24:55 Подскажите, пожалуйста, какое сочетание клавиш используется для быстрого форматирования?
Alt+Shift+F
@@tp2b Спасибо. За ответ и за контент.
@@KhabibulinAnvar Пожалуйста
Спасибо за уроки! Объясняете просто супер! Задание выполнила быстро, но втором задании использовала "НЕ ЗначениеЗаполнено" думаю сути это не меняет? Или нельзя так 😀 А ошибки не допускала сразу по ходу видео, по этому не нашла)
Почему же нельзя? Творческий подход только приветствуется!
@@tp2b Спасибо!
А почему очистку таб. части в отдельную процедуру не вытащили в конце?)
А можно использовать за место ЗначениеЗаполнено() Объект.Продукт.Пустая()?
Конечно можно :)
Может лучше при обучении сразу использовать асинхронные методы вместо "модальных" так как в работе они встречаются чаще(почти всегда)?
Может и лучше.... но сильно сложнее для понимания новичками...
А если в продукте не выбирать новую яичницу, а перевыбирать ту же, что уже выбрана в поле ввода, то будет срабатывать событие ПриИзменении ?
Должно срабатывать.
20:12 При очистке "Привет " - второй раз не выскакиевает.... что то мне подсказывает, что учебная версия (8.3.22.1603) сырая
хотя нет, работает, если после очистки кликнуть мышкой куда нибудь
А я не поняла, почему при приготовлении блюд (а я булево с "можно приготовить" заменила на понятие "блюдо") можно выбирать другие продукты со значением "можно приготовить". Блюда готовятся из продуктов=ингредиентов, как вы сами заметили на прошлой лекции, нельзя снести яйцо. Можно приготовить яичницу, булочку и тп, но никак нельзя приготовить молоко, яйцо, муку, допустим. Так почему бы не заниматься свечением "можно приготовить" при выборе ингредиентов, а просто поставить условие, что при приготовлении блюд выбираются только продукты, а не другие блюда?
Логика была простая, но её принятие не обязательное условие просмотра видосов :)
Например потому что мы можем приготовить фарш или тесто и заморозить.... есть мы это не будем, но можем запастись и использовать дальше, по необходимости. Или хлеб, можно употребить в пищу, а можно пустить в котлеты...
@@tp2b Логично)
Маленькая П, в первой процедуре!
Хочу уточнить про такую сущность как "Объект". Понять не могу до сих пор до конца, что это такое. Мне кажется, что ранее я хотя бы интуитивно понимал что такое "Объект", но услышав на "Мы не внутри Объекта и напрямую к реквизитам обратить не можем", понял, что не понимаю в итоге, что это за сущность такая "Объект".
Строка кода, о которой говорится об Объекте - "Если ЗначениеЗаполнено(Объект.Продукт) Тогда" на видео этот момент на 25:39.
Мы этот момент разбирали, но не отдельно. Отдельно еще обсудим в самое ближайшее время и всё будет еще понятнее.
@@tp2b Посмотрел это видео и следующее, но так и не понял, зачем мы к свойствам формы обращаемся через объект. Мы находимся в контексте формы и проверяем заполненность формы. Объект - у нас форма, точнее, копия объекта Документ на форме. Можно понять, что Объект, в данном случае, виртуальный. Но даже виртуальный объект при заполнении или проверке на пустоту мы не трогаем. Если мы не напишем Объект и так понятно, что ближайшее свойство, это свойство формы.
@@jlktkrftgjhuoij Пишите тайм-коды и примеры. Я не помню все видосы наизусть.
Но если правильно понял вопрос, то мы не с формой работаем... Мы работает в модуле формы, а проверить нам нужно заполнение реквизитов документа, вот и обращаемся к ним через "Объект".
Поддержать канал/Получить плюшки: boosty.to/tp2b
Поддержать рублем: donate.stream/tp2b
Файлы по урокам: yadi.sk/d/fbayAds8H5K67A?w=1
Спасибо за информацию полезную в видео на тех поддержки
Первое задание выполнил за 2 мин.
29:10 как только все это вынесли в отдельную процедуру, то всё, порушилось. Переменные не определены.
Всё, разобрался... Проблема в том, что вынося все в отдельную процедуру - забыл вписать "&НаКлиенте" . Невнимательность моя не знает границ. Хотя автор и говорит "Скопируем и вставим, чтобы не писать &НаКлиенте"
После добавления обработки поля формы Продукт ПриИзменении Кнопка Заполнить теряет смысл
Но если хорошо подумать... может и не теряет :)
@@tp2b Если только пользователь очистит и затем передумает) Согласен ... смысл остается
Если ЗначениеЗаполнено(Объект.Продукты) Тогда
Если Вопрос("Табличная часть будет очищена! Продолжить?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
Возврат;
Иначе Объект.Продукты.Очистить();
КонецЕсли;
ОчиститьТабЧастьПродуктыНаСервере();
КонецЕсли;
У меня получилось вот такое.
Что-то у Вас масло масляное получилось....
Если нет, то выходит из алгоритма, а если да, тогда...
Тогда выполняются сразу две очистки :) Странно.
Объект.Продукты.Очистить();
ОчиститьТабЧастьПродуктыНаСервере();
@@tp2b вторая очистка видимо лишняя. А вот вопрос возник у меня: если мы заполнили в табличной части документа приготовление продуктов только колонку продукт, а колонку количество не заполнили, то конструкция если объект.продукты.количество > 0 не позволит выполниться процедуре очистки, хотя в таблице есть данные?
Объект.Продукты.Количество()
считает количество строк в табличной части Продукты... даже если если там пустые строки, они будут посчитаны.
За расчёт итога по колонке отвечает другой метод: Объект.Продукты.Итог("Количество")
вот он вернёт общий итог по колонке "Количество"
@@tp2b спасибо
Пожалуйста
Показали бы ещё как в типовых массово скрывают и отображают элементы формы. Сам принцип.
Типовые это вообще отдельная история :)
Код не видно во время просмотра!!! Просьба увеличить обзор
В смысле как?
Моспарк зайдите на его канал
Зачем?
Для поддержки 😉
вместо полениться слышится паляныця. вот жешь.
Ютюб мой коммент не пропустил.... попробуем еще раз :)
У меня тесть был с Украины, может его влияние....
байки про негра, гыдын, хвылы и бандеровцев, а еще про зупынку за углом рассказывал регулярно :)
т о о о о о о о о о
Просматриваю это видео в октябре 2022 (спустя полтора года после выпуска) и второй раз и второй раз же с нуля делаю это задание.
Я еще увидел, что можно малюсенькую оптимизацию кода сделать, а именно дублируются конструкции с оператором "Если" :
"Процедура ОбработкаИзмененияПродукта()
Если ЗначениеЗаполнено(Объект.Продукт) Тогда
Если Вопрос("Табличная часть будет заполнена! Продолжить?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
КонецЕсли;
............
🧑💻//Тут можно убрать оператор "Если", так как в первом операторе "Если" будет отрицательный ответ, то до этого места обработчик не дойдет, а если ответ будет положительный, то уже и смысла перепроверять заполнено ли значение Объект.Продукт - нет, так как выше в коде на это уже был дан ответ. И можно уже без условий вызывать процедуру "ЗаполнитьТабЧастьПродуктыНаСервере()"👨💻
//Если ЗначениеЗаполнено(Объект.Продукт) Тогда
ЗаполнитьТабЧастьПродуктыНаСервере();
//КонецЕсли;
КонецПроцедуры"
44:12, не знаю, насколько ещё актуальны комментарии на данном видео, однако хотел вы задать вопрос, касательно 2-ого задания. Видимо, я чуть неправильно понял его, но хотел уточнить, будет ли хоть как-то положительно сказываться данное изменение в положительную сторону на мой код? :
Если Вопрос("Очистить табличную часть?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
Объект.Продукты.Очистить();
Сообщить("Табличная часть успешно очищена!");
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Наименование) Тогда
Ответ = Вопрос("Табличная часть будет заполнена. Продолжить?", РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Нет Тогда
Возврат;
Иначе
ЗаполнитьРецептНаСервере();
КонецЕсли;
КонецЕсли;
То есть про очистку у меня, конечно, тут совсем ни слова, но я решил дополнительно не проверять, пустая ли строка продукт (в моем случае - наименование), а сунуть его чуть в другое место, поменяв местами очистку и вопрос про заполнение таб части.
Уже нашёл ответ на свой вопрос, как только добавил проверку на "заполненность" таб.части) ахах
Добрый вечер!
Я поставил на паузу и написал сам код на обработку изменения продукта, вот что получилось) Мусор? или имеет место быть?
Процедура ОбработкаИзмененияПродукта()
Если НЕ Объект.Продукт.Пустая() Тогда
Если Вопрос ("Приступить к корректировке табличной части?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
Если Вопрос ("Перезаполнить табличную часть согласно рецепта?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
Объект.Продукты.Очистить();
КонецЕсли;
ЗаполнитьПоРецептуНаСервере();
Иначе
Если Вопрос ("Очистить табличную часть?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
Объект.Продукты.Очистить();
Возврат;
КонецЕсли
КонецЕсли;
КонецПроцедуры
Как вариант...
внизу Возврат; ни чего не меняет...
Если ЗначениеЗаполнено(Объект.Продукт) Тогда
Если Вопрос("Табличная часть будет заполнено! Продолжить",РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
Если Вопрос("Очистить табличную часть?",РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
Объект.Продукты.Очистить();
КонецЕсли;
ЗаполнитьТабличнуюЧастьПродуктыНаСервере();
КонецЕсли;