| 
    
            
         
         | 
    
    
  | 
        Проверка на новый элемент справочника     ↓ (Serg_1960 08.12.2022 13:03)  | 
☑ | ||
|---|---|---|---|---|
| 
    0
    
        Len1vec    
     08.12.22 
            ✎
    12:36 
 | 
         
        Добрый день всем.
 
        Подскажите, пожалуйста. Есть 2 команды на управляемой форме: "Установка цен" и "Список цен". Перейти по ним нельзя, пока элемент справочника не записан. Можно ли как-то оптимизировать или переписать проще приведенный ниже код? &НаКлиенте Процедура УстановкаЦен(Команда) Номенклатура = ПроверкаНаНовыйЭлемент(); ФормаЗаписи = ПолучитьФорму("РегистрСведений.ЦеныПродажи.Форма.ФормаЗаписи"); ФормаЗаписи.Запись.Период = ТекущаяДата(); ФормаЗаписи.Запись.Номенклатура = Номенклатура; ФормаЗаписи.Открыть(); КонецПроцедуры &НаКлиенте Процедура СписокЦен(Команда) Номенклатура = ПроверкаНаНовыйЭлемент(); ФормаСписка = ПолучитьФорму("РегистрСведений.ЦеныПродажи.Форма.ФормаСписка"); ФормаСписка.ФильтрПоНоменклатуре = Номенклатура; ФормаСписка.Открыть(); КонецПроцедуры &НаСервере Функция ПроверкаНаНовыйЭлемент() Если Объект.Ссылка.Пустая() Тогда Номенклатура = Справочники.Номенклатура.СоздатьЭлемент(); Номенклатура.Наименование = Объект.Наименование; Номенклатура.Записать(); ЭтаФорма.Модифицированность = Ложь; Возврат Номенклатура.Ссылка; Иначе Возврат Объект.Ссылка; КонецЕсли; КонецФункции  | 
|||
| 
    1
    
        Beduin    
     08.12.22 
            ✎
    12:40 
 | 
         
        У тебя при вызове каких-то процедур записывается элемент справочника?     
         | 
|||
| 
    2
    
        PR    
     08.12.22 
            ✎
    12:41 
 | 
         
        Какая-то лютая дичь     
         | 
|||
| 
    3
    
        Kassern    
     08.12.22 
            ✎
    12:42 
 | 
         
        (0) Надеюсь вы это делаете не в форме создания номенклатуры?)     
         | 
|||
| 
    4
    
        PR    
     08.12.22 
            ✎
    12:42 
 | 
         
        Проверка на то, новый элемент или нет, в случае, если новый, создает какой-то новый элемент?!     
         | 
|||
| 
    5
    
        PR    
     08.12.22 
            ✎
    12:43 
 | 
         
        (3) Не будь так скоропалителен со своими выводами, ты же не знаешь бизнес-процессов компании, может им так нужно :))     
         | 
|||
| 
    6
    
        Kassern    
     08.12.22 
            ✎
    12:44 
 | 
         
        (0) У вас ЦеныПродажи не документ фиксирует?     
         | 
|||
| 
    7
    
        Kassern    
     08.12.22 
            ✎
    12:44 
 | 
         
        (5) я потому и уточняю)     
         | 
|||
| 
    8
    
        PR    
     08.12.22 
            ✎
    12:46 
 | 
         
        (7) Это была попытка доброго троллинга :))
 
        На самом деле написанный в (0) код не имеет права на существование ни при каких обстоятельствах  | 
|||
| 
    9
    
        Kassern    
     08.12.22 
            ✎
    12:47 
 | 
         
        (5) мой разум пока не в силах представить когда требуется создавать новую номенклатуру в форме создания новой номенклатуры) Здравый смысл говорит, что нужно просто не давать переходить по этим кнопкам и ругаться, что номенклатура не записана, как это делают типовые конфы. 
 
        (0) Посмотрите как работают упаковки, или штрихкоды в карточке номенклатуры, возможно этот вариант взаимодействия вам лучше подойдет)  | 
|||
| 
    10
    
        Serg_1960    
     08.12.22 
            ✎
    12:47 
 | 
         
        Вернуть ссылку на другую запись справочника если Объект новый? О_О Да, согласен с (2)     
         | 
|||
| 
    11
    
        Новый1сник2    
     08.12.22 
            ✎
    12:49 
 | 
         
        (0) хочешь текущий элемент записать? или новый создать     
         | 
|||
| 
    12
    
        Kassern    
     08.12.22 
            ✎
    12:49 
 | 
         
        (8) Тут как раз бы подошел метод ПоказатьВопрос. Мол для работы с ценами нужно записать номенклатуру, продолжить?. И все дела.     
         | 
|||
| 
    13
    
        Kigo_Kigo    
     08.12.22 
            ✎
    12:50 
 | 
         
        То есть записать религия не позволяет?     
         | 
|||
| 
    14
    
        Kassern    
     08.12.22 
            ✎
    12:51 
 | 
         
        (13) Вот же есть Номенклатура.Записать();  =)     
         | 
|||
| 
    15
    
        Гипервизор    
     08.12.22 
            ✎
    12:53 
 | 
         
        Где находится функция ПроверкаНаНовыйЭлемент() и что такое Объект?     
         | 
|||
| 
    16
    
        Serg_1960    
     08.12.22 
            ✎
    13:02 
 | 
         
        (15) Автор от наших вопросов впал в ступор :)     
         | 
|||
| 
    17
    
        Serg_1960    
     08.12.22 
            ✎
    13:03 
 | 
         
        Функция ПроверкаНаНовыйЭлемент()
 
        Если Объект.Ссылка.Пустая() Тогда Объект.Записать(); ЭтаФорма.Модифицированность = Ложь; КонецЕсли; Возврат Объект.Ссылка; КонецФункции  | 
|||
| 
    18
    
        Len1vec    
     08.12.22 
            ✎
    13:05 
 | 
         
        Почитал Ваши комментариями, огорчился своей тупости, сократил код до следующего (норм или всё равно говно?):
 
        &НаКлиенте Процедура УстановкаЦен(Команда) Если Не Объект.Ссылка.Пустая() Тогда ПараметрыФормы = Новый Структура("Номенклатура", Объект.Ссылка); ОткрытьФорму("РегистрСведений.ЦеныПродажи.Форма.ФормаЗаписи", ПараметрыФормы); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура СписокЦен(Команда) Если Не Объект.Ссылка.Пустая() Тогда ФормаСписка = ПолучитьФорму("РегистрСведений.ЦеныПродажи.Форма.ФормаСписка"); ФормаСписка.ФильтрПоНоменклатуре = Объект.Ссылка; ФормаСписка.Открыть(); КонецЕсли; КонецПроцедуры  | 
|||
| 
    19
    
        Kigo_Kigo    
     08.12.22 
            ✎
    13:07 
 | 
         
        (18) Перечитай еще раз и объясни нахрена ты пустой ссылкой кидаешься туда обратно?     
         | 
|||
| 
    20
    
        PR    
     08.12.22 
            ✎
    13:09 
 | 
         
        (18) Вместо Не Объект.Ссылка.Пустая() напиши ЗначениеЗаполнено(Объект.Ссылка)     
         | 
|||
| 
    21
    
        Kassern    
     08.12.22 
            ✎
    13:13 
 | 
         
        (20) (18) ИТС говорит использовать "Параметры" https://its.1c.ru/db/metod8dev/content/3545/hdoc
 
        Если Не Параметры.Ключ.Пустая() Тогда - как вариант. Имхо вкусовщина конечно)  | 
|||
| 
    22
    
        PR    
     08.12.22 
            ✎
    13:22 
 | 
         
        (21) Хм, ну может быть, да     
         | 
|||
| 
    23
    
        Serg_1960    
     08.12.22 
            ✎
    13:28 
 | 
         
        (21) Угу. Параметры.Ключ.Пустая() вместо старого доброго ЭтоНовый().     
         | 
|||
| 
    24
    
        Len1vec    
     08.12.22 
            ✎
    13:29 
 | 
         
        (21) этим я пользовался, тоже работает. 
 
        В чем разница между Объект.Ссылка.Пустая(), Параметры.Ключ.Пустая() и ЗначениеЗаполнено(Объект.Ссылка) в скорости выполнения?  | 
|||
| 
    25
    
        Len1vec    
     08.12.22 
            ✎
    13:30 
 | 
         
        (23) Для этого, вроде как, нужно получить объект. Но для чего нам это на клиенте?     
         | 
|||
| 
    26
    
        Serg_1960    
     08.12.22 
            ✎
    13:33 
 | 
         
        (25) "Старый и добрый" - это из эры Толстых Клиентов до эпохи Управляемых Форм :)     
         | 
|||
| 
    27
    
        Kassern    
     08.12.22 
            ✎
    13:35 
 | 
         
        (24) "в скорости выполнения" - ага. Объект.Ссылка - вроде как заставит весь объект прочитать, могу ошибаться.     
         | 
|||
| 
    28
    
        Len1vec    
     08.12.22 
            ✎
    13:48 
 | 
         
        (27) Мы что через Объект.Ссылка вызываем метод проверки ссылки Пустая(), что через Параметры.Ключ тот же метод для проверки ссылки Пустая(). Так что тут я не вижу разницы. 
 
        Решил проверить. Данные по отладке. 1. ЗначениеЗаполнено До: Тек вызовы 2, Накопленные 30 После : Тек вызовы 6, Накопленные 36 2. Объект.Ссылка.Пустая() До: Тек вызовы 2, Накопленные 29 После : Тек вызовы 6, Накопленные 35 3. Параметры.Ключ.Пустая() До: Тек вызовы 2, Накопленные 31 После : Тек вызовы 7, Накопленные 38 Менее требовательные ЗначениеЗаполнено и Объект.Ссылка.Пустая().  | 
|||
| 
    29
    
        Len1vec    
     08.12.22 
            ✎
    13:50 
 | 
         
        Тесты проводились на команде "УстановкаЦен"     
         | 
|||
| 
    30
    
        Serg_1960    
     08.12.22 
            ✎
    13:56 
 | 
         
        (28) Хех :) про кэширование забыли.     
         | 
|||
| 
    31
    
        Len1vec    
     08.12.22 
            ✎
    14:02 
 | 
         
        (30) Вообще забыл про него)     
         | 
|||
| 
    32
    
        PR    
     08.12.22 
            ✎
    16:32 
 | 
         
        (27) Ошибаешься     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |