Форум программистов, компьютерный форум, киберфорум
Наши страницы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/56: Рейтинг темы: голосов - 56, средняя оценка - 4.55
Kifsif
115 / 87 / 27
Регистрация: 12.06.2011
Сообщений: 870
1

ОбработкаЗаполнения. СтандартнаяОбработка (упр. прил: ДанныеЗаполнения)

16.07.2012, 23:55. Просмотров 11342. Ответов 9
Метки нет (Все метки)

Иерархическому справочнику Номенклатура добавили реквизит Услуга (Булево).
Этому реквизиту задали использование для группы и элемента.
И представление - Заполнять из данных заполнения.

Нужно смотреть - есть ли у группы признак Услуга.
Если есть - при создании нового элемента признак Услуга должен устанавливаться.
Нет - не устанавливать, соответственно.

В модуле объекта справочника Номенклатура:

1C
1
2
3
4
5
6
7
8
9
10
11
12
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    
    Если ДанныеЗаполнения = Неопределено Тогда
        Возврат;    
    КонецЕсли; 
 
    Если ДанныеЗаполнения.Свойство("Родитель") Тогда
        //Услуга = ДанныеЗаполнения.Родитель.Услуга;
                ДанныеЗаполнения.Вставить("Услуга", ДанныеЗаполнения.Родитель.Услуга);
    КонецЕсли;
 
КонецПроцедуры
Мне объясняют: вот если написать просто
1C
1
Услуга = ДанныеЗаполнения.Родитель.Услуга
, то это не очень хорошо - если стоит отбор по реквизиту Услуга, то система и так отработает, без нашего кода.
Давайте сделаем СтандартнуюОбработку. Это правильнее.

Написали:
1C
1
ДанныеЗаполнения.Вставить("Услуга", ДанныеЗаполнения.Родитель.Услуга);
Я поэкспериментировал с параметром - СтандартнуюОбработка = Ложь;

Действительно:

1C
1
Услуга = ДанныеЗаполнения.Родитель.Услуга;
- это не стандартная обработка.



1C
1
ДанныеЗаполнения.Вставить("Услуга", ДанныеЗаполнения.Родитель.Услуга);
- Это стандартная обработка.

Только вот не могу понять, почему это стандартная обработка? Т.е. где признак стандартной обработки?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2012, 23:55
Ответы с готовыми решениями:

8.3 Упр.прил - Конвертация из 7.7
Конфигурация на 7.7 имеет свою структуру на 8.3 пишется сейчас и имеет свою. Вопрос как можно...

8.3 Упр.прил.: ДеревоЗначений и .НайтиСтроки
Ситуация такая, нужно вывести на экран дерево с отбором строк. Делаю это путем полного...

8.3 Упр.прил.: Дерево из Запроса ?
Есть справочник с группами и элементами - нужно получить дерево с видом: Группа Элемент...

8.3 Упр.прил. - Оптимизация работы с переменными ?
Все на клиенте: Одна процедура заполняет массив неизвестного размера, другая должна его...

8.3 Упр.Прил.: COMSafeArray и массив из COM объектов ?
Есть СОМ объект, некое его свойство само по себе массив из других СОМ объектов. Вопрос, можно ли...

9
duk337
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
17.07.2012, 00:42 2
Ты бы хоть обрисовал ситуацию: через что происходит заполнение, в каких событиях.
СтандартнаяОбработка - это системный флаг для ленивых программистов. Перехватив событие, ты можешь не маяться с доведением его до конца, если оставить флаг поднятым (тру), типа "Ой! Я не брал!" и система доведёт дело сама. Но если ты серьёзно взялся, тогда сбрасываешь флаг, и всё на тебе: выборы, заполнения и пр. хрень. Этот флаг параметром передаётся во все события, где это нужно.
0
Kifsif
115 / 87 / 27
Регистрация: 12.06.2011
Сообщений: 870
17.07.2012, 08:09  [ТС] 3
Вы мне немного встряхнули мозги.

Или просто с утра виднее стало. В общем, я только что допер, что если флаг СтандартнаяОбработка сбросить, то ДанныеЗаполнения будут "неопределено".

Ваш вопрос, не совсем понял вопрос, извините, пожалуйста.
Постараюсь ответить - как смогу.

На картинке мой справочник. Если галка "Услуга" для группы стоит, то всем элементам этой группы надо по умолчанию поставить галочку "Услуга". Т.е. без всякого отбора - только в зависимости от галочки у группы.

Событие - в модуле объекта ОбработкаЗаполнения.

Теперь не могу понять, почему правильнее написать
"ДанныеЗаполнения.Вставить("Услуга", ДанныеЗаполнения.Родитель.Услуга)", а не
"Услуга = ДанныеЗаполнения.Родитель.Услуга".

В видеокурсе объясняют: "Услуга = ДанныеЗаполнения.Родитель.Услуга" не очень хорошо по одной причине. Признак Услуга у нас - это реквизит справочника. В реквизите справочника у нас поставлено "Заполнять из данных заполнения". А это значит, что если в данных заполнения при отрабатывании этой процедуры будет найден ключ Услуга, то принудительное заполнение реквизитов устанавливать не нужно. Лучше написать "ДанныеЗаполнения.Вставить("Услуга", ДанныеЗаполнения.Родитель.Услуга)".

Т.е. не устанавливать значение напрямую, а передать стандартному механизму 1С: Предприятие инструкцию заполнить эти значения при отрабатывании процедуры ОбработкаЗаполнения.

Вот по мне - один хрен. Оба способа одинаковы. Просто первый обращается непосредственно к свойствам, а второй применяет метод объекта Структура к ДаннымЗаполнения. Оба механизма не будут работать, если я поставлю СтандартнаяОбработка = Ложь.

Я не прав, что один хрен?
0
Миниатюры
ОбработкаЗаполнения. СтандартнаяОбработка (упр. прил: ДанныеЗаполнения)  
duk337
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
17.07.2012, 09:34 4
Это управляемое. Тонкости, с которыми я плохо знаком. ДанныеЗаполнения - это, похоже, системный объект - соответствие или структура. Он действует в рамках стандартной процедуры. Допустим, он содержит полный комплект атрибутов элемента справочника (где он их берёт - из умолчаний, из копии - надо читать или проверять), Услуга там по умолчанию Ложь, а флаг СтОб поднят. Ты ставишь Услуга=Истина, а стандарт его сбрасывает. Если сбросить СтОб, тогда Услуга останется, но и всё остальное тоже.

Добавлено через 3 минуты
А если ты корректируешь ДанныеЗаполнения, но оставляешь флаг СтОб поднятым - всем хорошо
1
17.07.2012, 09:34
harmless
147 / 147 / 2
Регистрация: 05.05.2010
Сообщений: 569
17.07.2012, 13:42 5
Я думал Чистов нормально объясняет... Это же его курс?
0
duk337
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
17.07.2012, 17:00 6
Чистов нормально объясняет. Сколько программеров из 1000 зададут вопрос о сути какого-то флажка? Написано же, как пользоваться... Вот. А больных на голову, вроде нас с тобой, которые испытывают дискомфорт от неразломанных игрушек, не так много, да и объяснить им все до полной прозрачности никакой Чистов не сможет. Если только при личной встрече
1
Kifsif
115 / 87 / 27
Регистрация: 12.06.2011
Сообщений: 870
17.07.2012, 18:07  [ТС] 7
Чистов молодец. Но на веру принимать нельзя.
Ковырять самому - только так. Не хотел бы критиковать Чистова, но, мне кажется, я его иногда ловлю на слове.
0
Fenomen
899 / 876 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
17.07.2012, 18:44 8
ИМХО: если использовать:
1C
1
ДанныеЗаполнения.Вставить("Услуга", ДанныеЗаполнения.Родитель.Услуга);
то, заполнение будет происходить в зависимости от свойства "Заполнять из данных заполнения" реквизита услуга, а в противном случае будет заполнятся всегда.

Ну, а по сути одно и тоже.
0
Kifsif
115 / 87 / 27
Регистрация: 12.06.2011
Сообщений: 870
17.07.2012, 20:16  [ТС] 9
Так если не поставить галочку Заполнять из данных заполнения, то не будет ДанныхЗаполнения вообще.
Т.е. обрабатывать будет нечего. Или я неправильно понимаю?
0
Fenomen
899 / 876 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
17.07.2012, 20:37 10
Цитата Сообщение от Kifsif Посмотреть сообщение
Так если не поставить галочку Заполнять из данных заполнения, то не будет ДанныхЗаполнения вообще.
Т.е. обрабатывать будет нечего. Или я неправильно понимаю?
ДанныеЗаполнения - будут всегда. Реквизит, у которого галочки нет - заполнятся не будет.
1
17.07.2012, 20:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2012, 20:37

8.3 Упр.прил - обработчик Автоподбор, можно ли менять ожидание ?
Сейчас по умолчанию обработчик "АвтоПодбор" срабатывает через 0,2 секунды после ввода символа - его...

8.3 Упр.прил.: Вывести страницу в поле HTML документа ?
Возникла необходимость, загрузить на форму страницу с сайта внести в опр. поля даные и сделать...

8.3 Упр.Прил.: Сохранить реквизит формы типа СписокЗначений ?
Тут такая вещь возникла - у формы реквизит с типом СписокЗначений (не у объекта) стоят галочки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru