Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Вызов процедуры из Модуля объекта. Управляемая форма 8.3

Вызов процедуры из Модуля объекта. Управляемая форма 8.3
Я
   Чайник_1с
 
01.12.20 - 18:38
Всем Привет! Ребят не закидывайте меня помидорами, я новичок в 1с, стажер недавно работаю.Программистом 1с.
Мне нужна Ваша помощь. Вот такая задача:
В документ "Накладная на перемещение ЛС", при выборе поля "ВидПолучателя" необходимо выполнять проверку: Если поле "ВидОтправителя" = ПунктОтпуска, то поле "Вид получателя" должен быть выбран только "Склад" или "ПунктОтпуска". Если выбрано другое значение, неоходимо вывести сообщение и очистить поле "ВидПолучателя".

Написала код в Модуле объекта:
Процедура  ПроверкаЗаполнения ()Экспорт

    Если ВидОтправителя = ПредопределенноеЗначение("Перечисление.ВидыМестХраненияЛС.ПунктОтпуска") И
        НЕ (ВидПолучателя = ПредопределенноеЗначение("Перечисление.ВидыМестХраненияЛС.Склад") или
        ВидПолучателя = ПредопределенноеЗначение("Перечисление.ВидыМестХраненияЛС.ПунктОтпуска"))Тогда
        Сообщить("не верно заполнено поле ВидПолучателя или ВидОптравител");
    КонецЕсли;

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


Подскажите как вызвать эту процедуру из Модуля формы? Не знаю как составить правильно текст
 
 Партнерская программа EFSOL Oblako
   vicof
 
1 - 01.12.20 - 18:41
Не надо вообще давать выбирать ненужные типы в форме.
   elCust
 
2 - 01.12.20 - 18:41
Модуль документа нужен не для этих функций. Перенесите в модуль формы. Обращение к реквизитам делайте через Объект.
   vicof
 
3 - 01.12.20 - 18:42
А я бы список выбора ограничивал в зависимости от выбранного вида получателя
   Чайник_1с
 
4 - 01.12.20 - 18:44
Можно на примере показать как?
Без примера как то сложновато...
   Чайник_1с
 
5 - 01.12.20 - 18:47
Дело в том что начинала писать в модуле документа, тогда для двух объектов нужно дублировать код. Начальник сказал так нельзя. Была Процедура ПриИзменении для объекта "ВидПолучателя" и ещё одна Процедура ПриИзменении для объекта "ВидОтправителя"....
Это не целесообразно
   Чайник_1с
 
6 - 01.12.20 - 18:50
Было так:

Процедура ПриИзменении
Если Объект.ВидОтправителя = ПредопределенноеЗначение("Перечисление.ВидыМестХраненияЛС.ПунктОтпуска") И
        НЕ (Объект.ВидПолучателя = ПредопределенноеЗначение("Перечисление.ВидыМестХраненияЛС.Склад") или
            Объект.ВидПолучателя = ПредопределенноеЗначение("Перечисление.ВидыМестХраненияЛС.ПунктОтпуска")) тогда
        Сообщить("Не указан ВидПолучателя");
    КонецЕсли;
КонецПроцедуры

Всё работало исправно
   Чайник_1с
 
7 - 01.12.20 - 18:51
Начальник сказал переделать через Модуль объекта
   Чайник_1с
 
8 - 01.12.20 - 18:51
И ещё необходимо очищать список при не верном выборе
   kubik_live
 
9 - 01.12.20 - 18:52
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
            ОбработкаОбъект.ТвояЭкспортнаяПроцедураИзМодуляОбъекта();
   kubik_live
 
10 - 01.12.20 - 19:03
+(9)
Точнее:

&НаСервере
Процедура ТвояПроцедураМФ()

ТвояСтруктура=Новый Структура;
...............................

ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
            ОбработкаОбъект.ТвояЭкспортнаяПроцедураИзМодуляОбъекта(ТвояСтруктура);

КонецПроцедуры
   Михаил Козлов
 
11 - 01.12.20 - 20:21
В модуле объекта Сообщить(...) неуместно. Возвращайте текст сообщения или признак (булево), что проверка выполнена или нет.
   1CnikPetya
 
12 - 01.12.20 - 21:29
Твой начальник хотел, чтобы нельзя было записать некорректный объект даже программно. Но при этом по правилам хорошего тона, все же необходимо ограничить и интеррактивный ввод.

Я бы делал так: Клиент-серверном ОбщемМодуле поместить функцию ДоступныеВидыПолучателя(ВидОтправителя), которая будет возвращать массив ВидыМестХраненияЛС в зависимости от переданного значения ВидаОтправителя.

Это функцию используешь в модуле формы ПриИзменении ВидОтправителя, чтобы сделать 2 вещи:
1. Проверить текущее значение ВидПолучателя и если его нет в массиве, то очистить.
2. Установить значения списка выбора для поля ВидПолучателя, чтобы неправильное значение нельзя было выбрать.

Потом в модуле объекта добавляешь функцию ПроверитьВидПолучателя, где вызываешь нашу функцию ДоступныеВидыПолучателя и проверяешь вхождение текущего значения в массив. Если оно не входит в массив, то делаешь соответсвующую запись в Журнал регистрации и уведомление пользователю. Саму функцию ПроверитьВидПолучателя лучше вызывать в ПроверкеЗаполнения. Либо ПередЗаписью. ПроверкаЗаполнения предпочтительнее.
   Чайник_1с
 
13 - 02.12.20 - 05:46
1CnikPetya Всё верно так и хотел. А у меня не хватает фантазии как это сделать
   Чайник_1с
 
14 - 02.12.20 - 13:00
Товарищи, спасайте меня... я тупица. Начальник снова сказал переделать. Теперь в модуле формы написала обработку:
&НаКлиенте
Процедура ВидОтправителяОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
        // {Рарус [l.malkova][№IN-11362][проверка][01.12.2020]

        Если Объект.ВидОтправителя = ПредопределенноеЗначение("Перечисление.ВидыМестХраненияЛС.ПунктОтпуска") 
            И     НЕ (Объект.ВидПолучателя = ПредопределенноеЗначение("Перечисление.ВидыМестХраненияЛС.Склад")
                ИЛИ Объект.ВидПолучателя = ПредопределенноеЗначение("Перечисление.ВидыМестХраненияЛС.ПунктОтпуска"))Тогда
            
            ВидПолучателя = ПредопределенноеЗначение("Перечисление.ВидыМестХраненияЛС.ПустаяСсылка");
            Сообщить("не верно заполнено поле Вид данных Получателя или Вид данных Оптравителя");
            
        КонецЕсли;
        //}Рарус

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


Хочу эту процедуру вызвать из другой процедуры: ПриИзменении... пишу:ВидОтправителяОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка);
1ска ругаеться:
Документ.НакладнаяНаПеремещениеЛС.Форма.ФормаДокумента.Форма(1234,44)}: Переменная не определена (ВыбранноеЗначение)
    ВидОтправителяОбработкаВыбора(Элемент, <<?>>ВыбранноеЗначение, СтандартнаяОбработка);     (Проверка: Тонкий клиент)
{Документ.НакладнаяНаПеремещениеЛС.Форма.ФормаДокумента.Форма(1170,62)}: Переменная не определена (СтандартнаяОбработка)
    ВиВидОтправителяОбработкаВыбора(Элемент, ВыбранноеЗначение, <<?>>СтандартнаяОбработка); (Проверка: Тонкий клиент)
{Документ.НакладнаяНаПеремещениеЛС.Форма.ФормаДокумента.Форма(1234,63)}: Переменная не определена (СтандартнаяОбработка)
    ВидОтправителяОбработкаВыбора(Элемент, ВыбранноеЗначение, <<?>>СтандартнаяОбработка);     (Проверка: Тонкий клиент)
{Документ.НакладнаяНаПеремещениеЛС.Форма.ФормаДокумента.Форма(1170,2)}: Процедура или функция с указанным именем не определена (ВиВидОтправителяОбработкаВыбора)
    <<?>>ВиВидОтправителяОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); (Проверка: Тонкий клиент)
   hhhh
 
15 - 02.12.20 - 13:32
(14) ну, определите эти переменные, которых нет.
   Чайник_1с
 
16 - 02.12.20 - 17:15
(15) Да, уж совет так совет... Сразу всё понятно((

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.