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

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

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

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


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

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

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

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

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

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

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

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

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

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


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