Имя: Пароль:
1C
1С v8
Выбор, Оповещение о статусе
0 nightwing
 
02.11.22
06:45
Здравствуйте. 1С 8,3.
Существует справочник "Оборудование"(Реквизиты: Наименование, Статус) и документ "Ремонт"(Реквизиты: Дата ремонта, табличная часть: Список Оборудования: Реквизит: Наименование.).
Подскажите, пожалуйста, как сделать оповещение при выборе оборудования в документе, когда у оборудования уже стоит статус "ремонт"? Новичок в 1С. Надеюсь, понятно объяснил.
1 Йохохо
 
02.11.22
06:57
сразу переделать, чтобы документ менял статус. Причем в регистре, а не в справочнике
2 nightwing
 
02.11.22
07:33
(1) Документ меняет статус. А как оповестить о статусе при выборе Оборудования?
3 Мимохожий Однако
 
02.11.22
08:12
(2) Что ты подразумеваешь под словами "оповестить о статусе"? Оборудование здесь причем?
4 nightwing
 
02.11.22
08:31
(3) Например, в справочнике видим стоит статус "Ремонт" у "Оборудования №1". При выборе "Оборудования №1" в документе, выходит сообщение "в ремонте".
5 Ryzeman
 
02.11.22
08:39
(4) В отрыве от примера звучит довольно бредово.

Сценарий А: у тебя у одного пользователя открыт документ Ремонт, второй в это время меняет оборудование и записывает его. Первый пользователь выбирает этот товар и ему пишут что статус "в ремонте". Правильнее просто не позволять ему выбрать это, то есть ограничивать ещё при выборе.

Сценарий Б: у тебя пользователь меняет элемент справочника, потом открывает документ и ему должно написать что в документе есть товары в ремонте.
Это тоже не правильный подход, надо проверять при смене статуса, есть ли это оборудование в документах, и если нужно, убирать их оттуда, например.

По статусу тебе тоже написали правильно. Справочник должен быть статичным в идеале, такие вещи как статусы правильно хранить в регистре сведений.
Опиши подробно свою задачу, возможно, мы просто тебя неправильно понимаем.
6 nightwing
 
02.11.22
09:01
По статусу я не спорю: Документ меняет статус. С этим я полностью согласен, подходит для ограничения.
Видимо изначально, нужно было это написать.

Сценарий: Пользователь создал "Оборудование №1", указал "Наименование", статус пустой(т.к. только просмотр). Создал и провел документ "Ремонт"  с "оборудованием №1". Статус сменился на "Ремонт".
Создает новый документ, пробует снова добавить "Оборудование №1", выходит сообщение "В ремонте".

К сожалению, ограничить еще при выборе, нельзя. Нужно с оповещением.
7 Guk
 
02.11.22
09:03
событие ПриИзменении в документе у реквизита Оборудование не подходит?...
8 Ryzeman
 
02.11.22
09:12
(6) Тогда ответ в (7). Событие табличной части ПриИзменении
9 nightwing
 
02.11.22
09:20
(7) (8) Примерный код, не подскажите?
10 Ryzeman
 
02.11.22
09:33
&НаКлиенте
Процедура ОборудованиеПриИзменении(Элемент)
    Если НаходитсяВРемонте(Элемент) Тогда
         Сообщить("Это оборудование уже находится в ремонте!");
    КонецЕсли;
КонецПроцедуры

&НаСервере
Функция НаходитсяВРемонте(СсылкаНаОборудование)
    Возврат  СсылкаНаОборудование.Статус = Перечисления.СтатусыОборудования.ВРемонте;
КонецФункции
11 nightwing
 
02.11.22
09:59
(10) Спасибо за код. Уточнение: СсылкаНаОборудование - это СправочникСсылка.Оборудование? Или я уже всё путаю?
12 Мимохожий Однако
 
02.11.22
10:02
(11) Нет. Не всё
13 Kassern
 
02.11.22
10:04
(0) "Существует справочник "Оборудование"(Реквизиты: Наименование, Статус)" - вот тут уже ошибка. Не нужно статус хранить в оборудовании. Правильнее это сделать через регистр.
"Ремонт"(Реквизиты: Дата ремонта, табличная часть: Список Оборудования: Реквизит: Наименование.) - А где у вас ссылка на справочник "Оборудование" в ТЧ? Если это "Наименование", тогда лучше называть правильно реквизиты. Обычно Наименование - это строка и будет вводить в заблуждение.
14 Ryzeman
 
02.11.22
10:05
(11) Это имя переменной-параметра функции, которую я задал, что бы тебе было максимально понятно) Её тип должен быть именно таким, если ты сделаешь всё правильно)
Естественно это примерный код, потому что я без понятия что у тебя является статусом - не удивлюсь если тоже справочник какой нибудь.
Серверную функцию можно (и нужно) без контекста выполнить, вместо сообщить лучше использовать что нибудь вроде ПоказатьПредупреждение() и т.д. Но ты попросил примерный код
15 Ryzeman
 
02.11.22
10:06
(13) Я так понимаю что там всё-таки оборудование, а в реквизитах таблицы выведено наименование. Хотя шут его знает, по-любому какая-то легаси-самописка)
16 Kassern
 
02.11.22
10:10
Если уж нужен выбор с оповещением, тогда откройте СП и почитайте за ПоказатьВводЗначения()
17 Kassern
 
02.11.22
10:12
&НаКлиенте
Процедура Команда1(Команда)

    
Оповещение =    Новый ОписаниеОповещения("ПослеВводаЗначения", ЭтотОбъект, Параметры);
ПоказатьВводЗначения(Оповещение,   ВыбЗнач, "Введите значение");

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

&НаКлиенте
Процедура ПослеВводаЗначения(ВыбЗнач, Параметры) Экспорт
    Если ВыбЗнач<>Неопределено Тогда
        // обработка введенного значения

        Сообщить("Введенное значение: " + ВыбЗнач);
    КонецЕсли;
КонецПроцедуры

Где ВыбЗнач переменная с типом СправочникСсылка.Оборудование. Либо можно через параметр <Тип> указать нужный тип выбираемых значений, а в ВыбЗнач пихнуть Неопределено.
18 Ryzeman
 
02.11.22
10:16
(17) Не ломай джуна) Испугается и получится как тут
https://cs12.pikabu.ru/images/previews_comm/2022-01_4/1642408197140059858.jpg
19 Kassern
 
02.11.22
10:27
(18) Так он же и хотел через оповещения при выборе оборудования что-то сообщать. в (17) Нужно вместо Сообщить("Введенное значение: " + ВыбЗнач); - написать Сообщить("Введенное значение: " + ВыбЗнач.Статус); и будет текущий статус сообщать оборудования)
20 nightwing
 
02.11.22
11:26
(13) Исправил. Наименование сменил на "НаименованиеОборудования", статус решил хранить в перечислениях, сразу же после первого комментария.
(16) Спасибо. Буду изучать и пробовать.
21 Kassern
 
02.11.22
11:29
(20) Статус лучше хранить в справочнике, если планируется добавление/изменение статусов в дальнейшем. А вот связь статуса с оборудованием лучше хранить в регистре, а не в справочнике
22 Kassern
 
02.11.22
11:31
(20) Вы поймите, что само слово наименование подразумевает строку, так как это стандартный реквизит в справочниках. Лучше бы назвали просто Оборудование с типом Справочники.Оборудование.Ссылка.