Процедура ОбработкаПроверкиЗаполнения |
Я |
22.09.16 — 14:38
Всем привет ситуация такая создал «Функциональные опции» «ИспользованиеСкладаВтабличнойЧастиДокумнета»
и когда скрываю склад при проведении выдаёт ошибку
Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
по причине:
{Документ.ПриходнаяНакладная.МодульОбъекта(76)}: Ошибка при вызове метода контекста (Записать)
НаборЗаписей.Записать(Истина);
по причине:
Запись не верна! Значение поля «Склад» не может быть пустым! (Регистр накопления: Товары на складах; Номер строки
Полскажите что делать?
1 — 22.09.16 — 14:41
и причем тут ОбработкаПроверкиЗаполнения?
2 — 22.09.16 — 14:43
заполнить склад!
3 — 22.09.16 — 14:45
(2) Склад скрыт, как его заполнить?
4 — 22.09.16 — 14:45
например, программно
5 — 22.09.16 — 14:48
(4) как?
6 — 22.09.16 — 14:49
(5) Запись.Склад = МойСклад;
7 — 22.09.16 — 14:55
(3) «Склад скрыт, как его заполнить?» // Осознание проблемы пришло?
8 — 22.09.16 — 14:57
(7) Склад скрыт через»Функциональные опции» но при проведении документа ошибка что склад не заполнен
9 — 22.09.16 — 14:58
(8) то, что скрыт — понятно. а вас спрашивают — он заполнен или нет?
10 — 22.09.16 — 14:59
(8) Какой вывод из этого делаешь?
11 — 22.09.16 — 15:00
(9) Нет не заполнен
12 — 22.09.16 — 15:11
(0)
…
<ПроверяемыеРеквизиты>
Тип: Массив.
Массив путей к реквизитам, для которых будет выполнена проверка заполнения. Массив может быть модифицирован удалением или добавлением путей к необходимым реквизитам
13 — 22.09.16 — 15:13
(11) о чем программа и сообщает. верно?
14 — 22.09.16 — 15:21
(13) Верно
15 — 22.09.16 — 15:22
(13) Он на такие «провокационные» вопросы не отвечает, см. (10)
16 — 22.09.16 — 15:24
(12)Мимо
17 — 22.09.16 — 15:26
(14) отсюда напрашивается простой вывод — реквизит надо заполнить. Сокрытие реквизита _в_документе_ не отменяет необходимость заполнения реквизита _в_регистре_
18 — 22.09.16 — 15:30
(17) Тогда как его заполнить
И в принципе зачем его заполнять если он не нужен
Нельзя его как-то удалить?
19 — 22.09.16 — 15:32
(16) А, ну да, у него регистр
20 — 22.09.16 — 15:33
(18) Ды грохни в конфигураторе, делов-то
21 — 22.09.16 — 15:37
(20)Научишь щас, он ведь правда грохнет
22 — 22.09.16 — 15:38
(18) заполнить — например, программно.
То, что «не нужен» — это вряд ли. Но если вы уверены в том, что он не нужен — удаляйтте из регистра, или, по крайней мере, снимите запрет незаполненых значений. Но тут уж сам себе злобный буратино…
23 — 22.09.16 — 15:38
(21) говорят, что правило «не давать обезьянам гранату» отменили…
24 — 22.09.16 — 15:40
Название регистра тока поменяй тогда:)
25 — 22.09.16 — 15:40
(22) Сказали сделать не удаляя и не снимая запрет, поэтому я и спрашиваю
26 — 22.09.16 — 15:45
Чувак, у тебя ФО называется «ИспользованиеСкладаВТабличнойЧасти» а не «НеИспользоватьСкладВобще». Кроме табличной части у документа есть еще и шапка.
27 — 22.09.16 — 15:47
(26) Какая разница какое название?
28 — 22.09.16 — 15:50
(27)Перелогинься, седня еще не пятница
29 — 22.09.16 — 15:52
(28) ?
30 — 22.09.16 — 15:55
(28) «Мизда. пятница каждый день»©
31 — 22.09.16 — 16:22
поле Склад регистра Товары на складах включен в состав функциональной опции?
32 — 22.09.16 — 18:04
(31) Да
33 — 23.09.16 — 15:53
Ребята как сделать что если функциональная опция отключена удалить реквизит склад?
34 — 23.09.16 — 16:00
перед записью документа, если опция включена, то проставлять склад в тч из шапки
35 — 23.09.16 — 16:05
(0) пятнично.. включай опцию, заполняй склад в документе, потом выключай. и склад заполнен, и виден не будет
36 — 23.09.16 — 16:07
(35) как я сам не догадался
37 — 23.09.16 — 17:14
(33) Сколько платят за решение вопроса?
38 — 26.09.16 — 09:07
(37) в каком смысле сколько платят?
39 — 26.09.16 — 09:12
(38) По вашему, этот вопрос может иметь несколько смысловых значений?
40 — 26.09.16 — 09:16
(39) по моему 2 смысла
сколько мне плотят за это или сколько я плачу
41 — 26.09.16 — 09:18
(39) ответы на вопрос: Пьете ли вы водку на Новый год?
— Не понял вопроса… — 13%
— В каком смысле? — 18%
— Обычную водку? — 23%
— Как понять «пьете водку»? — 22%
— Все вышеперечисленное — 24%
©
42 — 26.09.16 — 09:19
(40) вообще-то это два разных слова. Плот и плакать.
43 — 26.09.16 — 09:22
(42) Маркс и Энгельс — это два разных человека. а Слава КПСС — вообще не человек, а лозунг
44 — 26.09.16 — 09:37
(41) А где вариант «Единая Россия» — 46% ?
45 — 26.09.16 — 09:47
(40) ладно, бесплатный совет. Щелкаешь по полю номенклатура, и перевыбираешь ее. Потом радуешься.
46 — 26.09.16 — 17:35
(40) Правильно. Мы же не знаем, исполнитель ли ты или конечный заказчик.
Если ты — исполнитель, то поделись, сколько тебе платят за решение этого вопроса.
Ну а если ты заказчик, то тут и так понятно (сколько предлагаешь типа).
47 — 26.09.16 — 17:48
(46) я исполнитель но мне платят не за заказ у меня месячный оклад
и подкинули вот такое левое задание
48 — 26.09.16 — 17:53
(47) Почему «левое»? У тебя должность там не «программист 1С» что ли?
49 — 26.09.16 — 17:53
(48) стажёр 1С
50 — 26.09.16 — 18:28
Какая конфа то?
51 — 27.09.16 — 08:46
(50) дали какую-то самописную конфу
52 — 27.09.16 — 08:59
(51) ты ведь заметил, что ошибка у тебя в регистре ТоварыНаСкладах? А ты нам про табличную часть документа талдычишь. Причем тут табличная часть?
53 — 27.09.16 — 09:03
(52) да как бы ни причём
54 — 27.09.16 — 09:20
(53) ты забыл заполнить поле склад в регистре. В этом ошибка. А то что там скрыто и не скрыто в табличной части, какая разница, зачем нам это?
55 — 27.09.16 — 09:24
(53) и там таких регистров штук 20. И в каждом есть склад. Это тебе сегодня на целый день работенка движения регистров переписывать. Так что ты не тормози, соберись и в темпе, чтобы успеть.
56 — 27.09.16 — 09:58
Скажите как получить значение Ф.О?
57 — 27.09.16 — 15:15
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
ИспользованиеСклада = ПолучитьФункциональнуюОпцию(«ИспользованиеСклада»);
ИспользованиеСклада = ПроверяемыеРеквизиты.Найти(«Склад»);
Если Не ИспользованиеСклада (ложь) Тогда
Массив = Новый Массив;
Массив.Добавить(«Склад»);
Индекс = Массив.Найти(«Склад»);
Массив.Удалить(Индекс);
Массив.Очистить()
КонецЕсли;
КонецПроцедуры
в чёи ошибка? Что ещё нужно дописать сюда?
58 — 27.09.16 — 15:16
простите
В чём ошибка?*
59 — 27.09.16 — 15:22
(58) «в ДНК!»©
60 — 27.09.16 — 15:34
(59) Leck mich am Arsch
61 — 27.09.16 — 15:43
(60)
62 — 27.09.16 — 15:50
(57) можно Рамзану Кадырову в твиттер написать. Он решит эту проблему.
63 — 27.09.16 — 15:58
Слушай, ну ты же явный гуманитарий, если за 5 дней так и не смог решить задачу. Ну нахрен тебе это программирование? Не мучай свое естество.
64 — 27.09.16 — 16:05
(63) Какая тебе нахрен разница что мне нужно? я же не говорю тебе что делать
65 — 27.09.16 — 16:45
(57) «ИспользованиеСклада = ПроверяемыеРеквизиты.Найти(«Склад»);
Массив = Новый Массив;
Массив.Добавить(«Склад»); » это всё удалить надо
66 — 27.09.16 — 16:50
Народ а есть здесь функция редактирования отправленного сообщения?
67 — 27.09.16 — 16:53
(66) Нет. Пиши так, чтобы не было стыдно
68 — 27.09.16 — 16:55
(67) спасибо, буду знать на будущее)
69 — 27.09.16 — 16:58
(67) А что за дебаты здесь происходят?
«Sv4org» хочет что-бы ему помогли,но никак не может вкурить что делать, я правильно понимаю?
70 — 27.09.16 — 17:01
(64) ты разницу понимаешь между документом и регистром? в (57) у тебя проверка документа, а в (0) ошибка в регистре.
71 — 27.09.16 — 17:03
(70) в (57) этот код написан в модуле набора записей регистра
hhhh
72 — 27.09.16 — 19:48
(71) в (57) полностью бред написан. Просто какой-то набор букв.
Обработка проверки заполнения
Автор tasya, 27 июл 2021, 22:42
0 Пользователей и 1 гость просматривают эту тему.
Добрый день! Подскажите как из модуля формы передать данные в модуль объекта именно в процедуру ОбработкаПроверкиЗаполнения()? Через дополнительные свойства не получается, так как они заполняются в процедуре ПередЗаписьюНаСервере(), а она вызывается после ОбрабткаПроверкиЗаполнения.
Цитата: tasya от 27 июл 2021, 22:42Добрый день! Подскажите как из модуля формы передать данные в модуль объекта именно в процедуру ОбработкаПроверкиЗаполнения()? Через дополнительные свойства не получается, так как они заполняются в процедуре ПередЗаписьюНаСервере(), а она вызывается после ОбрабткаПроверкиЗаполнения.
а какие данные хотите передавать? какая задача стоит?
механизм примерно следующий
1.у реквизитов объекта (см. конфигуратор) есть свойство: Проверка Заполнения, режимы Выдавать ошибку или Не проверять
для важных реквизитов указано: Выдавать ошибку
2.при выполнении операции Записи или Проведения из формы (см.настройки формы)
вызывается процедура проверки
ОбработкаПроверкиЗаполнения(<Отказ>, <ПроверяемыеРеквизиты>)
ПроверяемыеРеквизиты — «Массив путей к реквизитам…» см.СП
вот этом массиве как раз все Реквизиты из п.1 у которых выбрано Проверка Заполнения: Выдавать ошибку
3.в этой процедуре вы можете изменить этот массив, Добавить или Удалить из него элементы
либо сразу установить Отказ = Истина, тогда процедура Записи или Проведения будет прервана
так как процедура ОбработкаПроверкиЗаполнения() расположена в модуле Объекта,
то вам сразу, просто по именам, доступны ВСЕ реквизиты, ничего дополнительно в процедуру передавать не надо.
если помогло нажмите: Спасибо!
Цитата: Ивашка от 27 июл 2021, 23:04
Цитата: tasya от 27 июл 2021, 22:42Добрый день! Подскажите как из модуля формы передать данные в модуль объекта именно в процедуру ОбработкаПроверкиЗаполнения()? Через дополнительные свойства не получается, так как они заполняются в процедуре ПередЗаписьюНаСервере(), а она вызывается после ОбрабткаПроверкиЗаполнения.
а какие данные хотите передавать? какая задача стоит?
Есть программно добавленная табличная часть, вот нужно в обработке проверки заполнения проверить поля на заполнение
Цитата: LexaK от 28 июл 2021, 10:52механизм примерно следующий
1.у реквизитов объекта (см. конфигуратор) есть свойство: Проверка Заполнения, режимы Выдавать ошибку или Не проверять
для важных реквизитов указано: Выдавать ошибку2.при выполнении операции Записи или Проведения из формы (см.настройки формы)
вызывается процедура проверки
ОбработкаПроверкиЗаполнения(<Отказ>, <ПроверяемыеРеквизиты>)
ПроверяемыеРеквизиты — «Массив путей к реквизитам…» см.СП
вот этом массиве как раз все Реквизиты из п.1 у которых выбрано Проверка Заполнения: Выдавать ошибку3.в этой процедуре вы можете изменить этот массив, Добавить или Удалить из него элементы
либо сразу установить Отказ = Истина, тогда процедура Записи или Проведения будет прервана
так как процедура ОбработкаПроверкиЗаполнения() расположена в модуле Объекта,
то вам сразу, просто по именам, доступны ВСЕ реквизиты, ничего дополнительно в процедуру передавать не надо.
На форме есть программно добавленная табличная часть. Вот ее и нужно проверить на заполнение в процедуре обработка проверки заполнения
tasya, это прямо на форме создать процедуру/функцию
ПроверитьДобавленнуюТабличнуюЧасть(Отказ);
вызвать ее в процедуре формы ПередЗаписью(…)
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
ПроверитьДобавленнуюТабличнуюЧасть(Отказ);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьДобавленнуюТабличнуюЧасть(Отказ)
Для каждого лкСтр Из ВашаДобавленнаяТаблица Цикл
Для каждого лкКол Из ВашаДобавленнаяТаблица.Колонки Цикл
Если Не ЗначениеЗаполнено(лкСтр[лкКол.Имя]) Тогда //или свое условие проверки
Сообщить(«Незаполнено значение в колонке: » + лкКол.Имя); //добавить строку в какой
Отказ = Истина;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
если что-то не заполнено, будет сообщение, документ не запишется.
если помогло нажмите: Спасибо!
Самый простой способ это создать свою Функцию, вот код:
&НаСервере
Функция ПроверкаЗаполнения()
ТД=РеквизитФормыВЗначение(«Объект»);
ТД.ДополнительныеСвойства.Вставить(«РаспределениеЗатрат»,Ложь);
Возврат ТД.ПроверитьЗаполнение();
КонецФункции // ПроверкаЗаполнения()
&НаКлиенте
Функция РаспределениеЗатратФрагмент()
Если ПроверкаЗаполнения()=Ложь Тогда //Имя нашей функции
Возврат Ложь;
КонецЕсли;
КонецФункции // РаспределениеЗатратФрагмент()
В этом случае дополнительные свойства будут заполнены в модуле объекта, дальше всё просто
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
МассивНепроверяемыхРеквизитов = Новый Массив;
Если ДополнительныеСвойства.Свойство(«РаспределениеЗатрат»)
И ДополнительныеСвойства.РаспределениеЗатрат=Ложь Тогда
МассивНепроверяемыхРеквизитов.Добавить(«РаспределениеЗатрат»);
КонецЕсли;
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов);
КонецПроцедуры //ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Ответ на вопрос — бесплатно!
Ответ на дурацкий вопрос — 5$
Ответ на дурацкий вопрос с обдумыванием — 100$
Добрый День !Помогите с проблемой! Ошибка при выполнении обработчика — ‘ОбработкаПроверкиЗаполнения’ по причине: {Справочник.Контрагенты.МодульОбъекта}: Преобразование значения к типу Булево не может быть выполнено Если ПлательщикНДС Тогда
Я только вчера установил эту программу и не сильно знаю куда надо нажимать)
нажимай на телефон и вызывай специалиста
так и регистрироваться вчера надо было ну что же ты так?…
как-то много сегодня пятничных веток.
по делу. Давайте поиграем в эльдарского фарсира. Раньше все работало хорошо? Или первый же контрагент, что попытались ввести сразу же роняет систему? Конфигруация типовая? Вы не пробовали ее «поизучать» и что-нибудь поменять?
помогаем с проблемой. пиши «Если ПлательщикНДС=0 Тогда» это уже будет преобразование к числу, а числа, надеюсь, ты уже освоил
у него ПлательщикНДС не определен может быть. Ошибка останется
угу. Сразу пишем «Если Истина Тогда»
А потом еще страницу объясняем где писать и что нужно сделать, чтобы он начал писать.
зачем лишние условие? Просто закомментить
тогда КонецЕсли еще надо комментить. А его еще найти надо.
нельзя просто так взять и подсказать… Если ПлательщикНДС=Истина
НАпример затем чтобы у читающего закомментированный внизу «КонецЕсли» было меньше усилий чтобы найти его начало
Иначе Если ПлательщикНДС Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр(«ru = ‘Не указан ИНН'»), ЭтотОбъект, «ИННПлательщикаНДС», , Отказ
а чем это отличается от исходного варианта?
а, ну теперь все сразу стало понятно
Тем, что работает независимо от того, что находится в переменной. Всегда ваш, К.О.
Получается когда создаю группу для контрагента а сам онтр агент создается! Нет ничего не менял создал организацию магазин
тыкаю пальцем в небо. Попробуй задать ИНН у контрагента.
не свалится надо придумать какого-то робота, который будет парсить ветки, и, если ответ дан в самом начале, а в ветке больше 100 постов — переносить сразу в пятницу
Главное, держи интригу, и ни в коем случаем не разглашай, что за конфигурация у тебя.
я боюсь, тут решения в самом начале не будет. Все-таки багаж знаний у автора сейчас немного не того объема. Опыта маловато.
1С:Предприятие 8.2 (8.2.18.109) «Розница для Украины», редакция 2.0. Разработка конфигурации: «ABBYY Ukraine», 2013 (2.0.1.5)
а ты не в курсе, кто-нибудь вступал в тесный контакт с ней посредством конфигуратора?
Вот в этой строке все правильно написан? сли ПлательщикНДС Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр(«ru = ‘Не указан ИНН'»), ЭтотОбъект, «ИННПлательщикаНДС»,
возможность изменений включена в конфе?
Всё зависит от того, какой тип получается у переменной ПлательщикНДС. Если булево — тогда правильно, если другой — то неправильно.
смахивает на живительную инъекцию г-кода. только с чьей стороны?
+ если быть более точным, там есть слева от желтого квадратика замочек или нету?
Точней вот как полностью выглядит ! Иначе Если ПлательщикНДС Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр(«ru = ‘Не указан ИНН'»), ЭтотОбъект, «ИННПлательщикаНДС», , Отказ ); КонецЕсли; Конецесли; Редактирование в конф. было отключено я его включил!
Раз было отключено, то скорее всего это косяк разработчика. Если не планируешь обновлять конфу, можешь исправить.
конфигуратор открой, посмотри там слева такая панелька, там замочек есть рядом с желтым квадратом, или как в ? или вообще квадратика нет?
а что бывало в той строке до твоего включения?
попробуй модифицировать «Если ПлательщикНДС Тогда» На » Если НЕ ЭтоГруппа И ПлательщикНДС Тогда» как в предложили. А вообще, после того как ты включил возможность изменения, ты что-то добавлял?
раз было отключено, можешь звонить туда, где купил, и на них наехать. имеешь полное право. хоть от этого работать и не начнет)
будем сравнивать с конфигурацией поставщика? а то до сотки не дотянем
если только 1С не поставила своей целью загубить экономику Украины такими радикальными релизами, то дело пахнет излишним любопытством и не очень прямыми руками.
Я еще ничего не редактировал ! Просто скопировал и вставил сюда в сообщения! Да замочек есть
а редактирование как включил?
разработчик же некий эбби, мы не при делах
Изменил как написали Если НЕ ЭтоГруппа И ПлательщикНДС Тогда После этого следующая ошибка с другим модулем объекта! Ошибка при выполнении обработчика — ‘ОбработкаПроверкиЗаполнения’ по причине: {Справочник.Контрагенты.МодульОбъекта}: Преобразование значения к типу Булево не может быть выполнено Если ПлательщикНДС Тогда Вот что в редакторе Если ПлательщикНДС Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр(«ru = ‘Не указан номер свидетельства плательщика НДС'»), ЭтотОбъект, «НомерСвидетельстваПлательщикаНДС», , Отказ ); КонецЕсли; Конецесли;
в российской спокойно отрабатывает Если ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо ИЛИ ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицоНеРезидент Тогда ЮрФизЛицо только для элемента
+ кто первый сказал Если ПлательщикНДС=Истина Тогда?
надо все равно искать что за ПлательщикНДС и почему он не булево. Чуйка говорит, что там еще не одно получаение его всплывает.
Установил «Розница для Украины», редакция 2.0. только демо В ней Группы созданы ! а когда сам создаю та же ошибка
не дошло ещё? Если ПлательщикНДС=Истина Тогда Если ПлательщикНДС=Истина Тогда Если ПлательщикНДС=Истина Тогда Если ПлательщикНДС=Истина Тогда
В общем заработало! Прописал такую же строку в следующей ошибке Если ПлательщикНДС Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр(«ru = ‘Не указан номер свидетельства плательщика НДС'»), ЭтотОбъект, «НомерСвидетельстваПлательщикаНДС», , Отказ ); КонецЕсли; Конецесли; изменил на Если НЕ ЭтоГруппа И ПлательщикНДС Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр(«ru = ‘Не указан номер свидетельства плательщика НДС'»), ЭтотОбъект, «НомерСвидетельстваПлательщикаНДС», , Отказ ); КонецЕсли; Конецесли;
так ты нет так написал Если ПлательщикНДС=Истина Тогда а я написал Если НЕ ЭтоГруппа И ПлательщикНДС Тогда
всё правильно, благодарности мы не заслужили
Нет заслужили ! Всем огромное спасибо !
а как он с чето там пишет вообще. никому не интересно?)
Тэги: Математика и алгоритмы
Комментарии доступны только авторизированным пользователям
Механизм проверки заполнения позволяет автоматически проверить, заполнены ли указанные реквизиты объекта. Для этого нужно воспользоваться свойством ПроверкаЗаполнения
, которое есть у реквизитов объектов конфигурации.
Если установить это свойство в значение «Выдавать ошибку», поле Поставщик
в форме будет помечено как обязательное для заполнения. А при записи накладной платформа будет контролировать заполненность этого реквизита. Если реквизит окажется не заполнен, платформа выдаст автоматическое сообщение и запись накладной будет отменена.
Разработчик может повлиять на стандартную проверку заполнения, выполняемую платформой. Для этого у него есть два события:
- Одно событие —
ОбработкаПроверкиЗаполненияНаСервере
— можно обработать в модуле формы. - Другое событие —
ОбработкаПроверкиЗаполнения
— можно обработать в модуле прикладного объекта.
У формы, как правило, есть основной реквизит (редактируемый объект) и могут быть реквизиты, не относящиеся к редактируемому объекту, а являющиеся лишь частью формы:
Поэтому серверное событие формы ОбработкаПроверкиЗаполненияНаСервере
предназначено для проверки заполнения тех реквизитов формы, которые не относятся к редактируемому объекту. Это данные только формы, у формы могут быть свои причины и алгоритмы для проверки этих данных.
Напротив, событие объекта ОбработкаПроверкиЗаполнения
предназначено для для того, чтобы проверить реквизиты основного реквизита формы.
Обработчики обеих событий имеют параметр ПроверяемыеРеквизиты
, в который платформа передает массив имен тех реквизитов, которые подлежат проверке. Если после выхода из обработчика в этом массиве все еще останутся какие-то имена реквизитов — платформа выполнит автоматическую проверку оставшися реквизитов.
Поэтому существует несколько сценариев того, как разработчик может встроить свой алгоритм в механизм проверки заполнения:
- самостоятельно проверить заполненность всех реквизитов и очистить массив
ПроверяемыеРеквизиты
, чтобы платформа не выполняла их проверку - проверить часть реквизитов самостоятельно, удалить их из массива
ПроверяемыеРеквизиты
, а оставшиеся оставить на проверку платформе - добавить в массив
ПроверяемыеРеквизиты
какие-то реквизиты, чтобы платформа проверила и их тоже - вообще отказаться от проверки заполненности реквизитов, очистив массив
Все эти сценарии реализуются довольно просто. Например, чтобы самостоятельно проверить заполненность реквизитов, можно выполнить следующий код:
Если Поставщик = Справочники.Поставщики.ПустаяСсылка() Тогда Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Необходимо заполнить поставщика!"; Сообщение.Поле = "Поставщик"; Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Сообщить(); Отказ = Истина; КонецЕсли; // Проверка остальных реквизитов // .......... // Очистить массив проверяемых реквизитов, чтобы платформа // не выполняла их автоматическую проверку ПроверяемыеРеквизиты.Очистить();
Чтобы проверить лишь часть реквизитов, можно выполнить такой код:
Если Поставщик = Справочники.Поставщики.ПустаяСсылка() Тогда Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Необходимо заполнить поставщика!"; Сообщение.Поле = "Поставщик"; Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Сообщить(); Отказ = Истина; // Удалить поставщика из массива проверяемых реквизитов ИндексПоляПоставщик = ПроверяемыеРеквизиты.Найти("Поставщик"); Если ИндексПоляПоставщик <> Неопределено Тогда ПроверяемыеРеквизиты.Удалить(ИндексПоляПоставщик); КонецЕсли; КонецЕсли;
Добавить в массив проверяемых реквизитов еще один реквизит можно следующим образом:
ПроверяемыеРеквизиты.Добавить("Комментарий");
А очистить массив проверяемых реквизитов, чтобы ничего не проверять ни самому, ни платформе, можно так:
ПроверяемыеРеквизиты.Очистить();
Вторым параметром в обработчиках этих событий является параметр Отказ
. Если ему присвоить значение Истина
, то после выхода из обработчика дальнейшая запись объекта будет отменена. Таким образом этот параметр нужно устанавливать в значение Истина
тогда, когда ваш алгоритм приходит к выводу, что реквизит не заполнен. В этом случае запись объекта выполнена не будет.
Справка
ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
УправляемаяФорма.ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
Отказ
. Тип:Булево
. Признак отказа от записи. Если в теле процедуры-обработчика установить данному параметру значениеИстина
, то запись выполнена не будет. Значение по умолчаниюЛожь
.ПроверяемыеРеквизиты
. Тип:Массив
. Массив путей к реквизитам, для которых будет выполнена проверка заполнения. Массив может быть модифицирован удалением или добавлением путей к необходимым реквизитам.
Вызывается расширением формы при необходимости проверки заполнения реквизитов при записи в форме, а также при выполнении метода ПроверитьЗаполнение()
. Для вызова проверки заполнения системой необходимо, чтобы у формы (с которой происходит работа) было установлено свойство ПроверятьЗаполнениеАвтоматически
. В этом случае вначале будет вызван данный обработчик, а затем обработчик ОбработкаПроверкиЗаполнения()
модуля объекта.
Позволяет разработчику самостоятельно реализовать проверку заполнения в обработчике события. При этом в обработчике можно полностью отказаться от системной обработки (очистив список проверяемых реквизитов), отказаться от проверки системой части реквизитов (выполнив проверку отдельных реквизитов особенным образом и исключив эти реквизиты из списка), а также добавить для проверки другие реквизиты, проверка которых не была указана.
Для формы документа, если при конфигурировании для документа свойство Проведение
установлено в Разрешить
, событие вызывается только при проведении. Если документ не проводится (свойство Проведение
установлено в Запретить
), то вызывается при записи.
ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
ДокументОбъект.ИмяДокумента.ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Отказ
. Тип:Булево
. Если в теле процедуры-обработчика установить данному параметру значениеИстина
, то будет выполнен отказ от продолжения работы после выполнения проверки заполнения. Значение по умолчаниюЛожь
.ПроверяемыеРеквизиты
. Тип:Массив
. Массив путей к реквизитам, для которых будет выполнена проверка заполнения. Массив может быть модифицирован удалением или добавлением путей к необходимым реквизитам.
Вызывается расширением формы при необходимости проверки заполнения реквизитов при записи или при проведении документа в форме, а также при выполнении метода ПроверитьЗаполнение()
. Если для документа при конфигурировании свойство Проведение
установлено в Разрешить
, то вызывается только при проведении. Если документ не проводится (установлено Запретить
), то вызывается при записи.
Позволяет разработчику конфигурации самостоятельно реализовать проверку заполнения в обработчике события. При этом в обработчике можно полностью отказаться от системной обработки (очистив список проверяемых реквизитов), отказаться от проверки системой части реквизитов (выполнив проверку отдельных реквизитов особенным образом и исключив эти реквизиты из списка), а также добавить для проверки другие реквизиты, проверка которых не была указана.
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) // Проверим заполненность реквизита «Покупатель» Покупатель = ПроверяемыеРеквизиты.Найти("Покупатель"); Если Не ЗначениеЗаполнено(Покупатель) Тогда // Если он не заполнен, сообщим об этом пользователю Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не указан Покупатель, на которого выписывается товарная накладная!"; Сообщение.Поле = "Покупатель"; Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Сообщить(); // Сообщим платформе, что мы сами обработали проверку заполнения реквизита «Покупатель» ПроверяемыеРеквизиты.Удалить(Покупатель); // Так как информация не консистентна, то продолжать работу дальше смысла нет Отказ = Истина; КонецЕсли; // Сообщим платформе, что мы сами обрабатываем проверку реквизита товар в табличной части «Товары» ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Товары.Товар")); // Обходим строки и проверяем заполнение реквизита Для Индекс = 0 По Товары.Количество()-1 Цикл СтрокаТовар = Товары.Получить(Индекс); Если Не ЗначениеЗаполнено(СтрокаТовар.Товар) Тогда Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "В строке " + Индекс + " не заполнено значение товара"; Сообщение.Поле = "Товары[" + Индекс + "].Товар"; Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Сообщить(); Отказ = Истина; КонецЕсли; КонецЦикла; КонецПроцедуры
Поиск:
1С:Предприятие • Обработка проверки заполнения • Проверяемые реквизиты • Реквизит • Управляемая форма
sokol566535 0 / 0 / 0 Регистрация: 09.01.2017 Сообщений: 30 |
||||
1 |
||||
Ошибка в обработке удаление проведения.18.05.2017, 18:52. Показов 3476. Ответов 4 Метки нет (Все метки)
Подскажите как быть , провожу отмену проведения, конфигурация не снимает проведение, выдает ошибку как перед повторной записью. Что поменять в обработке удаления проведения?
__________________
0 |
841 / 604 / 211 Регистрация: 24.07.2013 Сообщений: 2,101 |
|
18.05.2017, 18:58 |
2 |
sokol566535, Очистить содержимое обоих обработчиков.
0 |
0 / 0 / 0 Регистрация: 09.01.2017 Сообщений: 30 |
|
18.05.2017, 19:00 [ТС] |
3 |
а как быть если мне нужно перед записью убедиться что документ не проведен , если проведен программа должна сообщать что «заказ уже оформлен»
0 |
1789 / 1213 / 438 Регистрация: 16.01.2015 Сообщений: 5,349 |
|
18.05.2017, 19:05 |
4 |
Сообщение было отмечено sokol566535 как решение Решение
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Как вариант — переместить в ОбработкаПроверкиЗаполнения, проверяется только при проведении, при распроведении игнорируется
1 |
0 / 0 / 0 Регистрация: 09.01.2017 Сообщений: 30 |
|
18.05.2017, 19:19 [ТС] |
5 |
спасибо все работает!!)))
0 |