Подготовка программистов 1С:8.2. Урок 4 из 30
Урок 4.
• наследование признака услуги из группы
• тип значения Null и Неопределено
• ОбработкаЗаполнения() при создании новых элементов, ДанныеЗаполнения, СтандартнаяОбработка
• Структура, стандартный механизм проверки заполения, ОбработкаПроверкиЗаполнения()
• теория: работа с синтаксис-помощником, отличия и связь между понятиями СправочникиМенеджер,СправочникМенеджер, СправочникВыборка,СправочникСсылка,СправочникОбъект
• практика: НайтиПоРеквизиту(), Общий модуль ОбщиеМеханизмы.ПолучитьСписокИменинников()
• ДЗ Добавить в справочник группы и исправить механизм получения списка именинников
Пікірлер: 89
В разы доступнее и понятнее и Е.Гилёва, и А.Камкова!!! Спасибо огромное за Вашу работу!
Каждые 10 минут ролика перевариваю час. Пересматриваю снова и снова. Складывается ощущение, что я тупой=(
@user-wj8yv1bs7f
8 жыл бұрын
я вот тоже думаю - если сейчас так туго идет, то как же туго мне будет когда реальные задачи на работе пойдут. там придется все самому разгребать, гуглить и т п. Кстати, год уже прошел, у тебя что то получилось с обучением? программистом сейчас работаешь?
@pictusin
6 жыл бұрын
Алексей Киселев, год уже прошёл, программистом работаешь?:))
@baxabay01
6 жыл бұрын
Сергей 2 месяца прошло получилось закончить обучение?))
@AlisherBekenov
6 жыл бұрын
Неделя прошла досмотрел видео?
@user-rd2qs6ek1u
6 жыл бұрын
Месяц уже прошел, дописал комментарий?
Спасибо огромное за труд!!! Однако урок не рассчитан на начинающих, точнее манера изложения материала (та часть, где пишем код). Хотелось бы более разжевано и наглядно, на яблоках или кошках перед переходом на массивы и т.д. ============= Сам напоролся на грабли с автозаполнением реквизита "Услуга". Некоторые варианты в комментариях ниже уже упоминались. Поделюсь так же своим опытом, возможно кому то поможет: Итак, в теле процедуры в конце было записано: ДанныеЗаполнения.Вставить("Услуга",ДанныеЗаполнения.Родитель.Услуга); Вроде бы синтаксической ошибки нет, у реквизита "Услуга" выбрано использование для группы и элемента, а автоматическое заполнение не работает. Решил попробовать второй вариант: Услуга = ДанныеЗаполнения.Родитель.Услуга; Автозаполнение работает прекрасно, так в чем проблема? Оказалось, что в свойствах реквизита "Услуга" не установил галку (Заполнять из данных заполнения). После этого все заработало...
посмотрел первые 20 минут и понял, что ничего не понял.
Закипел мозг 😱
Слишком резкий контраст между предыдущим и этим занятиями! Тяжелейший урок! Пересматривать несколько раз только.. Жёстко Вы, Павел!
@chistovpavel
5 жыл бұрын
Смотрите новый курс по 8.3 :) facebook.com/groups/spec1C/
@stanislavradchenko2468
3 жыл бұрын
пришёл с js вроде все понятно. Только по синтаксису вопросы есть.
День добрый! Сделал все, как описано в лекции, но мне выдало ошибку после запуска отладки: "Преобразование значения к типу Дата не может быть выполнено", нажимаю "Подробно...": "{ОбщийМодуль.ОбщиеМеханизмы.Модуль(12)}: Преобразование значения к типу Дата не может быть выполнено ДР_День = День(Выборка.ДатаРождения); ". Подскажите, пожалуйста, что я сделал не так?
Вопрос по проверке заполнения. А если идти от обратного, галочку не ставить "проверки заполнения" ЕдИзм, условие сделать "Если Не Условие ...", и Добавить("ЕдИзм") в массив ПроверяемыеРеквизиты. Красного подчеркивания у ЕдИзм не появляется. Можно ли как-то добавлять или убирать красное подчеркивание, чтобы пользователь видел необходимость заполнения?
На 32:43 про галку я думаю вопрос был в другом. Думаю вопрос был в том: Что бы попасть в процедуру ОбработкаЗаполнения и получать данные для автозаполнения, галку ставить обязательно? Или можно только прописать в модуле элемента процедуру и этого будет достаточно?
А у меня в массиве почему-то не отображаются единицы измерения, там только одна строка :(
pp.vk.me/c837522/v837522656/23eb1/w-aSeWJJFoA.jpg Подскажите,у меня проблема в том,что в услугах у меня автоматически стоит "Шт",когда этого не должно быть,я не могу понять почему,и с кодом который закоменчен,тоже самое. и что странно когда пишите строку ПроверяемыеРеквизиты.Удалить и т.д. у меня не подсвечивается как у вас "ПроверяемыеРеквизиты"
Подскажите пожалуйста, код 29:32 для версии 8.3 будет корректен? почему-то результата нет такого, как у Вас.
В неуправляемых формах (платформа 8.2) почему то код с услугой не работает, все равно не заполнятся значение.
На видео плохо видно что за знак вы ставите в коде После слова Услуга на 19.29
Добрый день. Спасибо большое за уроки - все доходчиво и понятно изложено. Но у меня такой вопрос: Как при помощи ОбработкиПроверкиЗаполнения реализовать ситуацию автоматического заполнения предопределенного поля "Наименование" на основе данных других полей. Например, в справочнике "Физические лица" автоматически заполнить поле "Наименование", на основе значений дополнительных полей "Фамилия" и "Имя"?
@chistovpavel
8 жыл бұрын
+Юрій Козьмін Ну взять и заполнить. В чем проблемы то?
@Koriolan2002
8 жыл бұрын
Павел Чистов Нет никакой проблемы. :) Идея состоит в том, чтобы пользователь заполнял реквизиты "Фамилия", "Имя" и "Отчество", а система сама на основе введенных данных формировала строку с фамилией и инициалами имени и отчества и заносила ее в строку "Наименование"
т.е. 31я минута. У нас здесь несколько вариантов автоматического заполнения реквизитов при создании нового элемента Справочника. Для всех вариантов надо установить галку "Заполнять из данных заполнения" в желаемом реквизите . Что бы в процедуру приходили данные считанные из справочника, группы или отбора. 1. При просмотре справочника в момент создания элемента включить отбор по реквизиту 2. Вписать в модуль элемента справочника процедуру ОбработкаЗаполнения В неё вписать ДанныеЗаполнения.Вставить("Реквизит",ДанныеЗаполнения."Структура".Реквизит). Так отрабатывает встроенный механизм. Код СтандартнаяОбработка = Ложь в Процедуре ОбработкаЗаполнения выключит этот механизм и не один из реквизитов нового элемента не будет заполнен автоматически. И третий вариант Похож на простое присваивание реквизиту значения. вставить в Процедуру Код: Реквизит = ДанныеЗаполнения.Родитель.Реквизит; Верно понял?
На 42:37 Не понятно, или прослушал где то. Вдруг без пояснения порядка вы начинаете обращаться к реквизитам объекта, перечислять их в условии. Понятно, что в процедуре идёт проверка заполнения указанных к проверке двух реквизитов объекта(элемента справочника). Не понятно, что вы перечисляете реквизиты в условии "Если НЕ ЭтоГруппа И Услуга" без пояснения. т.е. В условиях перечисляются любые реквизиты объекта?
У меня галочка не ставиться при создании
А где то есть эта база, на которой Павел работает в своих видео, или в начале все сами ручками создавали?
Я вроде бы всё сделал, как показано. Но у меня выскакивает следующая ошибка "Преобразование значения к типу Дата не может быть выполнено {ОбщийМодуль.ЗапросДнейРождения.Модуль(12)}: ДР_Месяц = Месяц(Выборка.ДатаРождения); {МодульУправляемогоПриложения(63)}: СписокРаботн = ЗапросДнейРождения.ПолучитьСписокДнейРождения(); " Не пойму, что не так я делаю...
У меня не показывает структуру, почему так?
В результате получается выдает такую ошибку: Ошибка при выполнении обработчика - 'ОбработкаПроверкиЗаполнения' по причине: {Справочник.Номенклатура.МодульОбъекта(26)}: Ошибка при вызове метода контекста (Удалить) ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("ЕдиницыИзмерения")); по причине: Несоответствие типов (параметр номер '1')
не могу разглядеть элемент на 17мин-46сек.(где точка остановы) там написано а=0; ??
@lex200900
7 жыл бұрын
Да
Написал ЕдИзм, выходила ошибка "Несоответствие типов, параметр 1", написал "ЕдиницаИзмерения", заработало
Подскажите пожалуйста, я еще попробовал сделать чтобы услугам не заполнялось автоматически поле ЕдИзм, для этого в обработчике ОбработкаЗаполнения, Пробовал: ЕдИзм=Null ЕдИзм=неопределенно ЕдИзм=Справочники.ЕденицыИзмерения.кг Последнее работает , но я хочу чтобы для услуг не заполнялось вобще поле ЕдИзм Заранее спасибо ..
@alexkuzko8460
5 жыл бұрын
Если ДанныеЗаполнения.Свойство("Родитель") И ДанныеЗаполнения.Родитель.Услуга=ИСТИНА Тогда ДанныеЗаполнения.Вставить("ЕдИзм", Неопределено); Конецесли
От красных точек можно было избавиться т.о.: не устанавливать флаг выдавать ошибку в свойствах, вместо этого в коде написать если товар - не услуга -то в массив добавляем реквизит "едИзм"
Уважаемый Павел, на 18:54 данного видео я делаю в 1ске тоже самое что и вы, но при этом значение параметра Услуга у меня стоит Ложь , а не истина как у вас.Не могли бы вы объяснить, почему это может происходить.
@user-pe5ii9ff4u
9 жыл бұрын
oleg danilenko , задайте группе - Сопр. услуги, значение того что она является Услугой...
@zvoni03
6 жыл бұрын
нельзя этого сделать в версии 8.3, у меня переключается с группы на записи в группе самой и там ставит галку, а при создании или изменение группы этот реквизит отсутствует.
@zvoni03
6 жыл бұрын
Правильное, выше писали, у Реквизиты -> Услуги -> Использование надо выбрать "Для группы и элемента".
Как сделать чтобы "Тогда" и "КонецЕсли;" автоматически заполнялось как у вас?
@romansalnikov5079
2 жыл бұрын
Печатаешь Если затем жмёшь CTRL + Q
Я правильно понимаю, что проверка на "ЕдИзм" делается только для КонцТоваров, а для услуг просто не проверяется, что не препятствует создание новых услуг с заполненной автоматически ЕдИзм.
Эти уроки для новичков или уже для подготовленных специалистов? Просто я только начал изучать 1С. Если честно я из этого урока не понял ничего.
@pictusin
6 жыл бұрын
Мотай, парень, мотай) Я этот часовой урок общей сложности 4 часа с чем то смотрел
@dimasibl9415
2 жыл бұрын
@@pictusin я неделю переваривал
На 18:30 - 49 я бы иначе сказала при создании нового элемента в справочнике номенклатура, у нового элемента установился бы Признак услуги (галочка установилась бы) автоматически только при установленном отборе "услуга", так как мы в свойствах реквизита "услуга" справочника "номенклатура" на вкладке "представление" поставили галку "заполнять из данных заполнения", но мы хотим, что бы признак услуга у нового элемента появлялся не по установленному при просмотре отбору, а по признаку группы справочника номенклатура в которой создаётся новый элемент. Для этого из данных заполнения мы считаем значение реквизита "Услуга" из свойства "родитель".
@chistovpavel
7 жыл бұрын
Ольга Астахова не могу понять ценность комментария. Я могу и по другому сформулировать, смысл не поменяется...
@user-zm5hh4gr1o
7 жыл бұрын
Да смысл тот же, просто мысли в слух. Мне казалось моя фраза понятнее.
чтото не сходится... на 44:38 при сохранении доставка с галкой услуга и с пустым полем едизм - сохраняет а у меня нет. проверил как дела в канцтоварах - там без едизм тоже не сохраняет, что правильно. а с услугой не получается. при чем перепроверил - по первому варианту кода та же ерунда. в общем по любому если едизм пусто - то сохранить нельзя пять раз перепроверил - все одинаково... помогите... второй час бьюсь...
@user-gl1of9qi3l
7 жыл бұрын
о!!! заработало))) самое обидное - сам не понял почему....
На 27:57 я правильно понимаю, что если СтандартнаяОбработка = ложь, то это отменяет действие установленной галки в свойствах реквизита "услуга" справочника "номенклатура" на вкладке "представление"? Если бы мы в других реквизитах установили аналогичную галочку, то отменилось бы действие их всех?
@chistovpavel
7 жыл бұрын
Нет, не правильно. Отменяется стандартное для обработчика события действие, и мы описываем свое собственное.
@IronMan-rq3mu
7 жыл бұрын
"Если бы мы в других реквизитах установили аналогичную галочку, то отменилось бы действие их всех?" Я тоже так понимаю.
Если ОдинИзСложныхУроков.МногоВопросовВозникло Тогда ОдинИзСложныхУроков.Вставить (НадоМногоЧитать);
@greenman3396
8 жыл бұрын
+Владимир Молчанов КонецЕсли;
@Managerbtc
5 жыл бұрын
Иначе Программист = "Балбес";
Для тех, у кого выходит ошибка :"Преобразование значения к типу Дата не может быть ДР_День = День(Выборка.ДатаРождения)", попробуйте добавить проверку: Если ЗначениеЗаполнено(Выборка.ДатаРождения) Тогда ДР_День=День(Выборка.ДатаРождения); ДР_Месяц=Месяц(Выборка.ДатаРождения); Если ДР_Месяц=ТД_Месяц И ДР_День=ТД_День Тогда Массив.Добавить(Выборка.Наименование); КонецЕсли; КонецЕсли;
@chistovpavel
9 жыл бұрын
Ошибка связана с тем, что выборка перебирает все, и элементы и группы, а реквизит ДатаРождения для групп не включен, и при попытке получения значения реквизита система возвращает NULL. Проверку нужно делать на признак группы, а не на заполненность реквизита. К тому же использовать метод ЗначениеЗаполнено() зная заранее тип значения - крайне неэффективно.
@user-oo6mf5zh6i
9 жыл бұрын
Павел Чистов Понятно, спасибо
@victortsukanov7523
8 жыл бұрын
+Павел Чистов (Большое спасибо за уроки. Только приступил к изучению. Каждый прорабатываю "с карандашиком") При выполнении ДЗ хотел отталкиваться от признака группы. Однако, смутило то, что после создания групп Администрация и Уволенные у ранее введенных сотрудников при редактировании не появлялось поле Родитель (пока не знаю - почему?). Т.о. такая проверка могла быть ненадежной. Сделал так. Во-первых, сразу сохраняю значение даты рождения ДР=Выборка.ДатаРождения; А потом работаю только с ДР Если Не ДР=NULL Тогда ДР_День= День(ДР); ДР_Месяц=Месяц(ДР); ... КонецЕсли; Работает четко...
Делаю все как показано, только в 8.3. Все равно галочку "услуги" не ставить автоматом
@igorteploukhov2611
7 жыл бұрын
Может быть у Реквизиты -> Услуги -> Использование "Для группы и элемента не выбрано". Или может ошибка в написании быть. Если написать Услуги заместо Услуга в (ДанныеЗаполнения.Вставить("Услуга", ДанныеЗаполнения.Родитель.Услуга);) то ставить галочку не будет где надо, но и ошибку выдавать тоже. Проверьте всё. На 8.3 делаю тоже, так как показано всё работает.
@skymckup
5 жыл бұрын
В процедуре ОбработкаЗаполнения (ТекстЗаполнения) есть? Уберите...
Решил пересмотреть. Скорее всего из за платформы некоторый код отказывается работать. //Тут в ДанныеЗаполнения Неопределено и работать с проверкой свойства получается вроде как нельзя. Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Если ДанныеЗаполнения.Свойство("Родитель") Тогда Услуга = ДанныеЗаполнения.Родитель.Услуга; КонецЕсли; КонецПроцедуры //А тут в массиве ПроверяемыеРеквизиты кроме Наименования ничего нет, собственно тоже ошибка. Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если Услуга И НЕ ЭтоГруппа Тогда ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("ЕдИзм")); КонецЕсли; КонецПроцедуры
@freetemple8612
5 жыл бұрын
Для ЕдИзм нужно поставить ПроверкаЗаполнения -> выдавать ошибку. Тогда оно попадает в проверяемые реквизиты
@freetemple8612
5 жыл бұрын
ДанныеЗаполнения нужно проверять на Неопределено, потому что в некоторых случаях отсутствует поле родитель
Я когда смотрел видосик, на этапе написания проверки ДР сотрудников поставил на паузу, решил попробовать написать все сам, написал, работает, потом вижу домашку "Найдите ошибку в проверке именинников и почему она не работает", мое лицо - =_=, моя проверка работает)
Почему Вы не указали способ: Услуга = истина; вместо ДанныеЗаполнения.Вставить("Услуга", ДанныеЗаполнения.Родитель.Услуга); Ведь это одно и тоже на мой субъективный взгляд. И то что происходит в Услуга = истина; Для понимания непросветленных умов на много проще.
@chistovpavel
6 жыл бұрын
Потому что мы принципиально хотели использовать стандартный механизм и не творить костыли при заполнении.
Худшее занятие из всех, протокольным языком. Тупо сидел переписывал, а что делал ХЗ.
Очень много лишней информации. Сплошной сумбур. Учитель из вас не очень, если честно. Вы подаете информацию как будто рассказываете самому себе, а вас вообще-то слушает аудитория. Нельзя просто брать и вкидывать инфу, не объясняя подробно почему вы что-то делаете именно так. Мне, например, как человеку, изучающему другой язык программирования вообще не понятно, каким образом вызывается описываемые Процедуры, а также передаваемые в нее параметры, переменная "Услуга"... Это какая-то стандартная глобальная переменная? Откуда программа понимает что вы имеете в виду переменной "Услуга = ..."?? Эти моменты не объясняются вообще. Слушатель сидит как баран, вроде слушает внимательно, но ничего понять не может в силу отсутствия явной логики в подаваемом материале. Прошло 8 лет, возможно, вы сегодня умеете объяснять яснее )))
@defolt5811
Жыл бұрын
Привет, не бросил изучать ещё?