Базовый курс. Мастер-группа Q&A от 18.10.2011

Новые интересные вопросы участников базового курса по программированию.

1. Создание элемента справочника.
Каким образом сделать некий гибрид программной и пользовательской работы?
Т.е. создать элемент программно, заполнить некоторые из его реквизитов, а оставшиеся реквизиты предоставить на заполнение пользователю, открыв ему форму нового (еще не записанного) элемента.
Т.е. программа создала и заполнила, а пользователь может либо отменить создание (не сохранить) либо дозаполнить реквизиты и записать изменения.

2. Объявление переменных.
Я методом “тыка” дошел до того, чтобы явно объявить переменную. Но почему так?
Получается если переменная явно объявлена, то она доступна в процедуре, а если не явно, то переменную надо объявлять внутри процедуры? Я еще раз пересмотрел урок про контекст исполнения кода, но не совсем понял.

3. Контекст клиент/сервер.
И вопрос по контексту Клиент/Сервер. Сначала я перед переменной начал указывать НаСервере, размышляя так, что если у меня процедура выполняется НаСервере, то и значение переменной там же должно быть присвоено. Но возникает ошибка.
Поэтому закомментировал НаСервере. Тогда без ошибок И перед Процедурой если закомментировать, то ошибок нет. В данном случае не обязательно указывать контекст или программа сама его определит?
Какой он по умолчанию, если не указывать?

4. «Битые» ссылки.
Как можно программно определить, ссылка в базе данных ссылается на существующий объект или объект удален?

К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь.

Если не активировали токен — посмотрите видео-инструкцию (видео N5)

Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись — напишите нам на e-mail поддержки.

комментариев 6 на “Базовый курс. Мастер-группа Q&A от 18.10.2011”

  1. К сожалению это не универсально, не делать же на каждый справочник и документ отдельный запрос. 
    Пример универсальной, намного быстрой чем Сылка.ПолучитьОбъект():
    <code>
    // Определяет корректна ссылка или нет
    // Параметры:
    // ТекСсылка (Ссылка, объект) – ссылка или объект;
    // Возвращаемое значение:
    // (Булево) – Истина (рабочая), Ложь (битая, пустая, неопределено или null)
    Функция РабочаяСсылка(ТекСсылка) Экспорт

    // Проверка если это не ссылка
    Попытка
    temp = ТекСсылка.ПометкаУдаления;
    Исключение
    Возврат Ложь;
    КонецПопытки;

    // Проверка о несуществовании объекта
    Если Найти(Строка(ТекСсылка),”<Объект не найден>”) > 0 Тогда
    Возврат Ложь;
    КонецЕсли;

    // Проверка на пустую ссылку
    Возврат НЕ ТекСсылка.Пустая();

    КонецФункции
    </code>

    Если кто сможет быстрей и универсально. Хотелось бы, что бы поделились опытом по этой теме. 
     

    • Да, пожалуй из универсальных способов это наиболее быстрый, спасибо.

  2. В 8.1 такой способ определения битых ссылок занимал очень много времени, т.к. при получения объекта считываются все данные по объекту, соответственно было быстрей пропарсить функцией “Найти” само отображение ссылки, можно было применить очень быструю пару через попытку Ссылка.ПометкаУдаления и Ссылка.Пустая(),  как то сомневаюсь, что ПолучитьОбъект в управляемом приложении стал быстрей.

    • Самый быстрый способ – запрос.

      • Пример можно запроса?

        • В примере, приведенном в МГ (Номенклатура – Поставщик – Контрагенты).
          Запрос может быть таким:

          ВЫБРАТЬ РАЗЛИЧНЫЕ
          Номенклатура.Поставщик КАК БитаяСсылка
          ИЗ
          Справочник.Номенклатура КАК Номенклатура
          ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
          ПО Номенклатура.Поставщик = Контрагенты.Ссылка
          ГДЕ
          Контрагенты.Ссылка ЕСТЬ NULL