Ошибка при выполнении обработчика обработкапроверкизаполнения

Процедура ОбработкаПроверкиЗаполнения

Процедура ОбработкаПроверкиЗаполнения

Я
   Sv4org

22.09.16 — 14:38

Всем привет ситуация такая создал «Функциональные опции» «ИспользованиеСкладаВтабличнойЧастиДокумнета»

и когда скрываю склад при проведении выдаёт ошибку

Ошибка при выполнении обработчика — ‘ОбработкаПроведения’

по причине:

{Документ.ПриходнаяНакладная.МодульОбъекта(76)}: Ошибка при вызове метода контекста (Записать)

    НаборЗаписей.Записать(Истина);

по причине:

Запись не верна! Значение поля «Склад» не может быть пустым! (Регистр накопления: Товары на складах; Номер строки

Полскажите что делать?

   DrShad

1 — 22.09.16 — 14:41

и причем тут ОбработкаПроверкиЗаполнения?

   В тылу врага

2 — 22.09.16 — 14:43

заполнить склад!

   Sv4org

3 — 22.09.16 — 14:45

(2) Склад скрыт,  как его заполнить?

   DrShad

4 — 22.09.16 — 14:45

например, программно

   Sv4org

5 — 22.09.16 — 14:48

(4) как?

   Mankubus

6 — 22.09.16 — 14:49

(5) Запись.Склад = МойСклад;

   Cyberhawk

7 — 22.09.16 — 14:55

(3) «Склад скрыт,  как его заполнить?» // Осознание проблемы пришло?

   Sv4org

8 — 22.09.16 — 14:57

(7) Склад скрыт через»Функциональные опции» но при проведении документа ошибка что склад не заполнен

   Это_mike

9 — 22.09.16 — 14:58

(8) то, что скрыт — понятно. а вас спрашивают — он заполнен или нет?

   Cyberhawk

10 — 22.09.16 — 14:59

(8) Какой вывод из этого делаешь?

   Sv4org

11 — 22.09.16 — 15:00

(9) Нет не заполнен

   Mauser

12 — 22.09.16 — 15:11

(0)



<ПроверяемыеРеквизиты>

Тип: Массив.

Массив путей к реквизитам, для которых будет выполнена проверка заполнения. Массив может быть модифицирован удалением или добавлением путей к необходимым реквизитам

   Это_mike

13 — 22.09.16 — 15:13

(11) о чем программа и сообщает. верно?

   Sv4org

14 — 22.09.16 — 15:21

(13) Верно

   Cyberhawk

15 — 22.09.16 — 15:22

(13) Он на такие «провокационные» вопросы не отвечает, см. (10) :)

   aleks_default

16 — 22.09.16 — 15:24

(12)Мимо

   Это_mike

17 — 22.09.16 — 15:26

(14) отсюда напрашивается простой вывод — реквизит надо заполнить. Сокрытие реквизита _в_документе_ не отменяет необходимость заполнения реквизита _в_регистре_

   Sv4org

18 — 22.09.16 — 15:30

(17) Тогда как его заполнить

И в принципе зачем его заполнять если он не нужен

Нельзя его как-то удалить?

   Mauser

19 — 22.09.16 — 15:32

(16) А, ну да, у него регистр

   Mauser

20 — 22.09.16 — 15:33

(18) Ды грохни в конфигураторе, делов-то

   aleks_default

21 — 22.09.16 — 15:37

(20)Научишь щас, он ведь правда грохнет

   Это_mike

22 — 22.09.16 — 15:38

(18) заполнить — например, программно.

То, что «не нужен» — это вряд ли. Но если вы уверены в том, что он не нужен — удаляйтте из регистра, или, по крайней мере, снимите запрет незаполненых значений. Но тут уж сам себе злобный буратино…

   Это_mike

23 — 22.09.16 — 15:38

(21) говорят, что правило «не давать обезьянам гранату» отменили…

   aleks_default

24 — 22.09.16 — 15:40

Название регистра тока поменяй тогда:)

   Sv4org

25 — 22.09.16 — 15:40

(22) Сказали сделать не удаляя и не снимая запрет, поэтому я и спрашиваю

   aleks_default

26 — 22.09.16 — 15:45

Чувак, у тебя ФО называется «ИспользованиеСкладаВТабличнойЧасти» а не «НеИспользоватьСкладВобще».  Кроме табличной части у документа есть еще и шапка.

   Sv4org

27 — 22.09.16 — 15:47

(26) Какая разница какое название?

   aleks_default

28 — 22.09.16 — 15:50

(27)Перелогинься, седня еще не пятница

   Sv4org

29 — 22.09.16 — 15:52

(28) ?

   Это_mike

30 — 22.09.16 — 15:55

(28) «Мизда. пятница каждый день»©

   fimanich

31 — 22.09.16 — 16:22

поле Склад регистра Товары на складах включен в состав функциональной опции?

   Sv4org

32 — 22.09.16 — 18:04

(31) Да

   Sv4org

33 — 23.09.16 — 15:53

Ребята как сделать что если функциональная опция отключена удалить реквизит склад?

   kaliliga

34 — 23.09.16 — 16:00

перед записью документа, если опция включена, то проставлять склад в тч из шапки

   Lamer1C

35 — 23.09.16 — 16:05

(0) пятнично.. включай опцию, заполняй склад в документе, потом выключай. и склад заполнен, и виден не будет

   Sv4org

36 — 23.09.16 — 16:07

(35) как я сам не догадался

   Cyberhawk

37 — 23.09.16 — 17:14

(33) Сколько платят за решение вопроса?

   Sv4org

38 — 26.09.16 — 09:07

(37) в каком смысле сколько платят?

   mehfk

39 — 26.09.16 — 09:12

(38) По вашему, этот вопрос может иметь несколько смысловых значений?

   Sv4org

40 — 26.09.16 — 09:16

(39) по моему 2 смысла

сколько мне плотят за это или сколько я плачу

   Это_mike

41 — 26.09.16 — 09:18

(39) ответы на вопрос: Пьете ли вы водку на Новый год?

— Не понял вопроса… — 13%

— В каком смысле? — 18%

— Обычную водку? — 23%

— Как понять «пьете водку»? — 22%

— Все вышеперечисленное — 24%

©

   hhhh

42 — 26.09.16 — 09:19

(40) вообще-то это два разных слова. Плот и плакать.

   Это_mike

43 — 26.09.16 — 09:22

(42) Маркс и Энгельс — это два разных человека. а Слава КПСС — вообще не человек, а лозунг

   mehfk

44 — 26.09.16 — 09:37

(41) А где вариант «Единая Россия» — 46% ?

   hhhh

45 — 26.09.16 — 09:47

(40) ладно, бесплатный совет. Щелкаешь по полю номенклатура, и перевыбираешь ее. Потом радуешься.

   Cyberhawk

46 — 26.09.16 — 17:35

(40) Правильно. Мы же не знаем, исполнитель ли ты или конечный заказчик.

Если ты — исполнитель, то поделись, сколько тебе платят за решение этого вопроса.

Ну а если ты заказчик, то тут и так понятно (сколько предлагаешь типа).

   Sv4org

47 — 26.09.16 — 17:48

(46) я исполнитель но мне платят не за заказ у меня месячный оклад

и подкинули вот такое левое задание

   Cyberhawk

48 — 26.09.16 — 17:53

(47) Почему «левое»? У тебя должность там не «программист 1С» что ли?

   Sv4org

49 — 26.09.16 — 17:53

(48) стажёр 1С

   zigomodo

50 — 26.09.16 — 18:28

Какая конфа то?

   Sv4org

51 — 27.09.16 — 08:46

(50) дали какую-то самописную конфу

   hhhh

52 — 27.09.16 — 08:59

(51) ты ведь заметил, что ошибка у тебя в регистре ТоварыНаСкладах? А ты нам про табличную часть документа талдычишь.  Причем тут табличная часть?

   Sv4org

53 — 27.09.16 — 09:03

(52) да как бы ни причём

   hhhh

54 — 27.09.16 — 09:20

(53) ты забыл заполнить поле склад в регистре. В этом ошибка. А то что там скрыто и не скрыто в табличной части, какая разница, зачем нам это?

   hhhh

55 — 27.09.16 — 09:24

(53) и там таких регистров штук 20. И в каждом есть склад. Это тебе сегодня на целый день работенка движения регистров переписывать. Так что ты не тормози, соберись и в темпе, чтобы успеть.

   Sv4org

56 — 27.09.16 — 09:58

Скажите как получить значение Ф.О?

   Sv4org

57 — 27.09.16 — 15:15

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

    
     ИспользованиеСклада = ПолучитьФункциональнуюОпцию(«ИспользованиеСклада»);

    ИспользованиеСклада = ПроверяемыеРеквизиты.Найти(«Склад»);

    Если Не ИспользованиеСклада (ложь) Тогда

            
    Массив  = Новый Массив;

    Массив.Добавить(«Склад»);

    Индекс = Массив.Найти(«Склад»);

    Массив.Удалить(Индекс);

    Массив.Очистить()

    
       КонецЕсли;

        
    
КонецПроцедуры

в чёи ошибка? Что ещё нужно дописать сюда?

   Sv4org

58 — 27.09.16 — 15:16

простите

В чём ошибка?*

   Это_mike

59 — 27.09.16 — 15:22

(58) «в ДНК!»©

   Sv4org

60 — 27.09.16 — 15:34

(59) Leck mich am Arsch

  

   eric

61 — 27.09.16 — 15:43

(60) :)

   craxx

62 — 27.09.16 — 15:50

(57) можно Рамзану Кадырову в твиттер написать. Он решит эту проблему.

   aleks_default

63 — 27.09.16 — 15:58

Слушай, ну ты же явный гуманитарий, если за 5 дней так и не смог решить задачу. Ну нахрен тебе это программирование? Не мучай свое естество.

   Sv4org

64 — 27.09.16 — 16:05

(63) Какая тебе нахрен разница что мне нужно? я же не говорю тебе что делать

   Deutschland

65 — 27.09.16 — 16:45

(57)  «ИспользованиеСклада =         ПроверяемыеРеквизиты.Найти(«Склад»);

Массив  = Новый Массив;

Массив.Добавить(«Склад»); » это всё удалить надо

   Deutschland

66 — 27.09.16 — 16:50

Народ а есть здесь функция редактирования отправленного сообщения?

   Mauser

67 — 27.09.16 — 16:53

(66) Нет. Пиши так, чтобы не было стыдно

   Deutschland

68 — 27.09.16 — 16:55

(67) спасибо, буду знать на будущее)

   Deutschland

69 — 27.09.16 — 16:58

(67) А что за дебаты здесь происходят?

«Sv4org» хочет что-бы ему помогли,но никак не может вкурить что делать, я правильно понимаю?

   hhhh

70 — 27.09.16 — 17:01

(64) ты разницу понимаешь между документом и регистром? в (57) у тебя проверка документа, а в (0) ошибка в регистре.

   Sv4org

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 Тогда» это уже будет преобразование к числу, а числа, надеюсь, ты уже освоил

у него ПлательщикНДС не определен может быть. Ошибка останется

угу. Сразу пишем «Если Истина Тогда»

А потом еще страницу объясняем где писать и что нужно сделать, чтобы он начал писать. :)

зачем лишние условие? Просто закомментить

тогда КонецЕсли еще надо комментить. А его еще найти надо. :)

нельзя просто так взять и подсказать… Если ПлательщикНДС=Истина 8)

НАпример затем чтобы у читающего закомментированный внизу «КонецЕсли» было меньше усилий чтобы найти его начало

Иначе         Если ПлательщикНДС Тогда             ОбщегоНазначенияКлиентСервер.СообщитьПользователю(             НСтр(«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

Метки нет (Все метки)


Подскажите как быть , провожу отмену проведения, конфигурация не снимает проведение, выдает ошибку как перед повторной записью. Что поменять в обработке удаления проведения?

1C
1
2
3
4
5
6
7
8
9
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если Проведен=истина тогда Сообщить("Заказ уже оформлен!!!"); Отказ=истина
КонецЕсли;
КонецПроцедуры
 
Процедура ОбработкаУдаленияПроведения(Отказ)
Проведен=Ложь;
Записать();
КонецПроцедуры

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Эксперт 1С

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 как решение

Решение

Цитата
Сообщение от sokol566535
Посмотреть сообщение

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если Проведен=истина тогда Сообщить(«Заказ уже оформлен!!!»); Отказ=истина
КонецЕсли;
КонецПроцедуры

Как вариант — переместить в ОбработкаПроверкиЗаполнения, проверяется только при проведении, при распроведении игнорируется



1



0 / 0 / 0

Регистрация: 09.01.2017

Сообщений: 30

18.05.2017, 19:19

 [ТС]

5

спасибо все работает!!)))



0



Понравилась статья? Поделить с друзьями:
  • Ошибка при выполнении обработчика обработказаполнения
  • Ошибка при выполнении обработчика обработка проведения
  • Ошибка при выполнении функции итогидняпокартам ответ терминала ошибка 2004
  • Ошибка при выполнении метода объекта компоненты v7plus dll
  • Ошибка при выполнении функции аварийнаяотменаоперации ошибка 4108