Супер интересно, сколько сложностей из-за элементарного вывода сообщения! Мне понравились дополнительные свойства объекта, не знал про них. И про конвертацию Вопрос() в ПоказатьВопрос() тоже не знал. В 7.7 просто сообщить и всё)))
Илья, ну классное видео, столько информации, так интересно мне про эти способы узнать, супер... прям не 1С, а С++ А слушатели-смотрители то там в чате вообще подвисли... ))) с такими способами пользователь не отвертится, сказав, что он чего-то там никакого сообщения не видел... штраф за переисполнение бюджета!!!
Хорошие способы через ДополнительныеСвойства - наверное самый лучший способ НО! переброска ТекстСообщения в ПриЗаписи() - в версии 1С: 8.3.17.1496 - всё равно ничего не выводится при [Провести и закрыть] Сообщение... не работает после закрытия, а вот через ПоказатьПредупреждение( , ТекстСообщения); всё работает! (и как раз как в задаче ОУ-8 написано показать предупреждение...) дополнительно это окно можно закрывать автоматически через 10 - 30 сек
Модуль формы документа расходная накладная, думаю лучше использовать функцию пустаястрока(), т.е "Если НЕ ПустаяСтрока(ТекстСообщения) Тогда" мы же тут конкретно знаем, что это строка ))) функция "ЗначениеЗаполнено(ТекстСообщения)" конечно не ошибка, но она сначала узнает тип значения и в зависимости от типа проверяет, обычно используют когда ждут составной тип )))) т.е медленнее ))) пустаястрока быстрее )
Спасибо, очень интересное и полезное занятие получилось. Для реальных задач обязательно буду все указанное использовать, на экзамене - ни в коем случае.
@@IlyaLeontyev Сообщение будет выводится только при нажатии Провести, как мы на прошлом уроке и делали. Для экзамена этого будет достаточно. При решении реальных задач, по желанию клиентов, иногда такое приходится придумывать, что на экзамене сразу минус 10 баллов получил бы, поэтому нужно строго разделять реальные и экзаменационные задачи.
@@IlyaLeontyev По хорошему, сообщение должно выводиться при любом способе проведения. Но, на всех форумах где я читал, говорят что упрощенный вариант не снижает балл. В решениях из инфостата такой же способ вывода (хотя там решения вообще очень примитивные для всех билетов). Несомненно, если останется время, то можно попытаться сделать всё правильно и красиво, но как раз времени может и не хватить.
@@IvanIvanovichZ на экзамене оценку не снижают - это да. Но есть же еще здравый смысл... Если ты можешь себе позволить такое решение показать, ради бога ) Мне было бы стыдно.
Доброго дня! На какой версии платформы делалось задание. На моей8.3.17.1851 третий способ, который мне очень понравился, не работает. Из контекстного меню работает, кнопкой "Провести" работает, а переопределенной кнопкой "Провести и закрыть" - нет. Загрузил выгрузку после занятия 37 - аналогичное поведение... UPD: На 8.3.18.1208 нормально работает. Значит глюк версии платформы....
Илья, спасибо за многогранный разбор способов вывода сообщения. К сожалению, первый способ на твоей выгрузке перестал работать 😞 Может быть экзаменаторы правы в том, что не требуют знания таких нюансов.
Всё делается предельно просто: 1. ОбработкаПроведения документа вызывает процедуру/функцию общего модуля на сервере с параметром/переменной "Строка" 2. В процессе выполнения запроса эта переменная "Строка" заполняется нужным сообщением. 3. Добавить магическую строку в ОбработкаПроведения : Форма = ЭтотОбъект.ПолучитьФорму("Документ.Документ1.ФормаОбъекта"); 4. ОбработкаПроведения документа выводит эту строку в сообщении (сообщить и т.п.) Текст обработанной на сервере строки выводится при всех событиях. Если хотите "оптимизировать" - что есть отдельный Бггг и ЛОЛ, как и многое в 1С, то можете функцию сообщения вынести в общий модуль на клиенте. Тексты тестов: // модуль объекта Документ Процедура ОбработкаПроведения(Отказ, РежимПроведения) Строка = "Эта строка"; ПроведениеДокументов.омОбработка(ЭтотОбъект, Отказ, Строка); Форма = ЭтотОбъект.ПолучитьФорму("Документ.Документ1.ФормаОбъекта"); Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "ОбработкаПроведения Док1: "+Строка; Сообщение.Сообщить(); КонецПроцедуры //общий модуль Сервер Процедура омОбработка(Объект, Отказ, Строка) Экспорт ТекстСообщения = " Процедура омОбработка добавила что-то"; Строка = Строка + ТекстСообщения; Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "омОбработка"; Сообщение.Сообщить(); КонецПроцедуры 1С - это дичь полнейшая, с магией. Допускаю, что код можно доработать. Но лично мне лениво разбирать то, за что не платят и что не будет востербовано. ;-)
Почему-то у меня ни одни способ не сработал. Смогла вывести сообщение только когда код писала для события ПриЗакрытии а не ПослеЗаписи. Это не будет ошибкой?
upd. Похоже никаких параметров передавать в функцию на сервере не надо и всё дело в магии одной строки: Форма = ЭтотОбъект.ПолучитьФорму("Документ.Документ1.ФормаОбъекта"); Итого, текст теста: Процедура ОбработкаПроведения(Отказ, РежимПроведения) ПроведениеДокументов.омОбработка(ЭтотОбъект, Отказ); Форма = ЭтотОбъект.ПолучитьФорму("Документ.Документ1.ФормаОбъекта"); КонецПроцедуры Процедура омОбработка(Объект, Отказ) Экспорт ТекстСообщения = " Процедура омОбработка добавила что-то"; Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "омОбработка "+ТекстСообщения; Сообщение.Сообщить(); КонецПроцедуры Т.о. эта "особенность" больше похожа на баг среды/платформы.
Спасибо большое добрый человек!!! Только после этого появились сообщения при провести и закрыть: Процедура ОбработкаПроведения(Отказ, РежимПроведения) ПроведенияДокументов.СформироватьДвиженияПоИсполнениюБюджета(ЭтотОбъект, Отказ); Форма = ЭтотОбъект.ПолучитьФорму("Документ.РасходнаяНакладная.Форма.ФормаДокумента"); КонецПроцедуры
Сейчас начал экспериментировать. Получилось сделать вывод сообщения во всех 3 ситуациях (провести, провести и закрыть, провести из списка). В прошлом уроке мы сделали так что сообщение выводится в 2-х случаях (по кнопке провести и по провести из списка), а для "провести и закрыть" делаем как во 2 варианте этого видео (через ДополнительныеСвойства), только сообщение нужно выводить из процедуры ПриЗакрытии формы документа. Работает на платформах 8.3.18.1208 и 8.3.18.1289.
@@IlyaLeontyev Если просто закрываю не выводится, а вот если нажать провести сообщение появляется (переменная формы при этом заполняется) и вот тогда при закрытии выводится повторно. Буду экспериментировать дальше.
@@IlyaLeontyev Возможно, в данной задаче от нас хотят вывод именно предупреждения. Оно прекрасно выводится при любом варианте проведения, нужно только создать еще один общий клиентсерверный модуль. Конечно, если через список проводить сразу 10 документов с превышениями, то появятся сразу 10 предупреждений, что в реальной жизни слабо применимо, но для экзамена будет самое то. Иногда, решение задачи "в лоб" бывает верным.
Вроде победил. В форме документа ПриЗаписиНаСервере заполняется переменная формы ТекстСообщения, далее в ПослеЗаписи проверяется если она заполнена тогда выводит сообщение. (как 2 вариант в видео). Плюс: в ПередЗаписьюНаСервере добавляю строку: ТекущийОбъект.ДополнительныеСвойства.Вставить("ПроведениеИзФормыДокумента", Истина); в общем модуле проведения документов проверяется есть ли переменная ПроведениеИзФормыДокумента, если нет, выводим сообщение из общего модуля, если переменная есть (то есть проведение вызвано из формы документа), то передаем переменную ТекстСообщения через ДополнительныеСвойства. Вроде все варианты протестировал, везде где нужно сообщение выводится (форма списка, Провести, ПровестиЗакрыть, Запись (проведенного документа), перепроведение), где не нужно (закрытие формы, отмена преведения) - молчит.
Слишком много офф-топика. Очень трудно смотреть. Плохое объяснение. Решение - хорошее, но подача материала плохая. Хватило бы минут 10 с пространными объяснениями, а тут скачешь туда-сюда...
Очень информативно и интересно получилось. Спасибо огромное.
Илья, большое спасибо за очень полезное и интересное занятие. Мне тоже как и остальным больше всего понравился второй способ для экзамена.
Илья, спасибо! Никто кроме тебя не рассказывает про разные возможности платформы, обычно сухо излагают что писать, куда нажимать.
Спасибо, за второй способ!
Супер интересно, сколько сложностей из-за элементарного вывода сообщения! Мне понравились дополнительные свойства объекта, не знал про них. И про конвертацию Вопрос() в ПоказатьВопрос() тоже не знал. В 7.7 просто сообщить и всё)))
Илья, ну классное видео, столько информации, так интересно мне про эти способы узнать, супер... прям не 1С, а С++
А слушатели-смотрители то там в чате вообще подвисли... ))) с такими способами пользователь не отвертится, сказав, что он чего-то там никакого сообщения не видел... штраф за переисполнение бюджета!!!
Блин, придется смотреть в записи!
Хорошие способы
через ДополнительныеСвойства - наверное самый лучший способ
НО! переброска ТекстСообщения в ПриЗаписи() - в версии 1С: 8.3.17.1496 - всё равно ничего не выводится при [Провести и закрыть]
Сообщение... не работает после закрытия, а вот через ПоказатьПредупреждение( , ТекстСообщения); всё работает!
(и как раз как в задаче ОУ-8 написано показать предупреждение...)
дополнительно это окно можно закрывать автоматически через 10 - 30 сек
Спасибо! Пол дня убил в поисках, почему у меня не работает! :)
Сложновато, но хоть буду знать что так можно, при необходимости всегда можно пересмотреть это видео
Модуль формы документа расходная накладная, думаю лучше использовать функцию пустаястрока(), т.е "Если НЕ ПустаяСтрока(ТекстСообщения) Тогда" мы же тут конкретно знаем, что это строка ))) функция "ЗначениеЗаполнено(ТекстСообщения)" конечно не ошибка, но она сначала узнает тип значения и в зависимости от типа проверяет, обычно используют когда ждут составной тип )))) т.е медленнее ))) пустаястрока быстрее )
Ну ты педант )
@@IlyaLeontyev надо же хоть как то блеснуть )))))
Спасибо, очень интересное и полезное занятие получилось. Для реальных задач обязательно буду все указанное использовать, на экзамене - ни в коем случае.
А на экзамене как будешь делать?
Не станешь выводить сообщение при нажатии на кнопку "Провести и закрыть"?
@@IlyaLeontyev Сообщение будет выводится только при нажатии Провести, как мы на прошлом уроке и делали. Для экзамена этого будет достаточно. При решении реальных задач, по желанию клиентов, иногда такое приходится придумывать, что на экзамене сразу минус 10 баллов получил бы, поэтому нужно строго разделять реальные и экзаменационные задачи.
@@IvanIvanovichZ а почему при "Провести и закрыть" сообщение не должно выводиться? Ты это в постановке где-то прочитал?
@@IlyaLeontyev По хорошему, сообщение должно выводиться при любом способе проведения. Но, на всех форумах где я читал, говорят что упрощенный вариант не снижает балл. В решениях из инфостата такой же способ вывода (хотя там решения вообще очень примитивные для всех билетов). Несомненно, если останется время, то можно попытаться сделать всё правильно и красиво, но как раз времени может и не хватить.
@@IvanIvanovichZ на экзамене оценку не снижают - это да. Но есть же еще здравый смысл...
Если ты можешь себе позволить такое решение показать, ради бога ) Мне было бы стыдно.
Доброго дня! На какой версии платформы делалось задание. На моей8.3.17.1851 третий способ, который мне очень понравился, не работает. Из контекстного меню работает, кнопкой "Провести" работает, а переопределенной кнопкой "Провести и закрыть" - нет. Загрузил выгрузку после занятия 37 - аналогичное поведение...
UPD: На 8.3.18.1208 нормально работает. Значит глюк версии платформы....
Илья, спасибо за многогранный разбор способов вывода сообщения. К сожалению, первый способ на твоей выгрузке перестал работать 😞 Может быть экзаменаторы правы в том, что не требуют знания таких нюансов.
Всё делается предельно просто:
1. ОбработкаПроведения документа вызывает процедуру/функцию общего модуля на сервере с параметром/переменной "Строка"
2. В процессе выполнения запроса эта переменная "Строка" заполняется нужным сообщением.
3. Добавить магическую строку в ОбработкаПроведения :
Форма = ЭтотОбъект.ПолучитьФорму("Документ.Документ1.ФормаОбъекта");
4. ОбработкаПроведения документа выводит эту строку в сообщении (сообщить и т.п.)
Текст обработанной на сервере строки выводится при всех событиях.
Если хотите "оптимизировать" - что есть отдельный Бггг и ЛОЛ, как и многое в 1С, то можете функцию сообщения вынести в общий модуль на клиенте.
Тексты тестов:
// модуль объекта Документ
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Строка = "Эта строка";
ПроведениеДокументов.омОбработка(ЭтотОбъект, Отказ, Строка);
Форма = ЭтотОбъект.ПолучитьФорму("Документ.Документ1.ФормаОбъекта");
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "ОбработкаПроведения Док1: "+Строка;
Сообщение.Сообщить();
КонецПроцедуры
//общий модуль Сервер
Процедура омОбработка(Объект, Отказ, Строка) Экспорт
ТекстСообщения = " Процедура омОбработка добавила что-то";
Строка = Строка + ТекстСообщения;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "омОбработка";
Сообщение.Сообщить();
КонецПроцедуры
1С - это дичь полнейшая, с магией. Допускаю, что код можно доработать. Но лично мне лениво разбирать то, за что не платят и что не будет востербовано. ;-)
Почему-то у меня ни одни способ не сработал. Смогла вывести сообщение только когда код писала для события ПриЗакрытии а не ПослеЗаписи. Это не будет ошибкой?
Если работает, то нет )
@@IlyaLeontyev Спасибо!
а как насчет такого варианта - уведомление о том что бюджет будет превышен выводим при вводе суммы или смены контрагента. а при проведении не выводим.
Получать обороты при каждом изменении суммы слишком накладно.
К тому же в задаче четко сказано, что сообщение нужно выводить при проведении.
upd. Похоже никаких параметров передавать в функцию на сервере не надо и всё дело в магии одной строки:
Форма = ЭтотОбъект.ПолучитьФорму("Документ.Документ1.ФормаОбъекта");
Итого, текст теста:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ПроведениеДокументов.омОбработка(ЭтотОбъект, Отказ);
Форма = ЭтотОбъект.ПолучитьФорму("Документ.Документ1.ФормаОбъекта");
КонецПроцедуры
Процедура омОбработка(Объект, Отказ) Экспорт
ТекстСообщения = " Процедура омОбработка добавила что-то";
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "омОбработка "+ТекстСообщения;
Сообщение.Сообщить();
КонецПроцедуры
Т.о. эта "особенность" больше похожа на баг среды/платформы.
Спасибо большое добрый человек!!! Только после этого появились сообщения при провести и закрыть:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ПроведенияДокументов.СформироватьДвиженияПоИсполнениюБюджета(ЭтотОбъект, Отказ);
Форма = ЭтотОбъект.ПолучитьФорму("Документ.РасходнаяНакладная.Форма.ФормаДокумента");
КонецПроцедуры
К сожалению работает только на толстом клиенте
Сейчас начал экспериментировать. Получилось сделать вывод сообщения во всех 3 ситуациях (провести, провести и закрыть, провести из списка). В прошлом уроке мы сделали так что сообщение выводится в 2-х случаях (по кнопке провести и по провести из списка), а для "провести и закрыть" делаем как во 2 варианте этого видео (через ДополнительныеСвойства), только сообщение нужно выводить из процедуры ПриЗакрытии формы документа. Работает на платформах 8.3.18.1208 и 8.3.18.1289.
А если ты просто закрываешь форму без проведения, сообщение у тебя не выводится, часом?
@@IlyaLeontyev Если просто закрываю не выводится, а вот если нажать провести сообщение появляется (переменная формы при этом заполняется) и вот тогда при закрытии выводится повторно. Буду экспериментировать дальше.
@@IlyaLeontyev Возможно, в данной задаче от нас хотят вывод именно предупреждения. Оно прекрасно выводится при любом варианте проведения, нужно только создать еще один общий клиентсерверный модуль. Конечно, если через список проводить сразу 10 документов с превышениями, то появятся сразу 10 предупреждений, что в реальной жизни слабо применимо, но для экзамена будет самое то. Иногда, решение задачи "в лоб" бывает верным.
@@IvanIvanovichZ сообщения здесь достаточно, 100%. Мы следим за новостями с фронта )
Вроде победил.
В форме документа ПриЗаписиНаСервере заполняется переменная формы ТекстСообщения, далее в ПослеЗаписи проверяется если она заполнена тогда выводит сообщение. (как 2 вариант в видео).
Плюс: в ПередЗаписьюНаСервере добавляю строку: ТекущийОбъект.ДополнительныеСвойства.Вставить("ПроведениеИзФормыДокумента", Истина);
в общем модуле проведения документов проверяется есть ли переменная ПроведениеИзФормыДокумента, если нет, выводим сообщение из общего модуля, если переменная есть (то есть проведение вызвано из формы документа), то передаем переменную ТекстСообщения через ДополнительныеСвойства.
Вроде все варианты протестировал, везде где нужно сообщение выводится (форма списка, Провести, ПровестиЗакрыть, Запись (проведенного документа), перепроведение), где не нужно (закрытие формы, отмена преведения) - молчит.
Красавец!
Слишком много офф-топика. Очень трудно смотреть. Плохое объяснение. Решение - хорошее, но подача материала плохая. Хватило бы минут 10 с пространными объяснениями, а тут скачешь туда-сюда...