Базовый курс. Решение ДЗ №6

Представляем решение шестого домашнего задания.

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

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

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

комментариев 18 на “Базовый курс. Решение ДЗ №6”

  1. А зачем вообще в запросе обработки проверки контрагентов считать количество (запрос с соединением)? Не проще воспользоваться выражением ЕСТЬ NULL? Например, так:

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

  2. Вопрос по обработке проверки контрагентов. В решении не учтена ситуация когда контактные лица у контрагента есть, но все помечены на удаление. В этом случае, мне кажется, надо выдавать такого контрагента в результат проверки как ошибочного. Во втором варианте запроса проблем нет, условие добавляется во вложенный запрос, а вот как учесть удаленность в первом варианте запроса (с соединением таблиц)? У меня не получилось, хотелось бы увидеть правильный текст запроса.

    • Практически также: используя вложенный запрос.

      ВЫБРАТЬ
      Контрагенты.Ссылка,
      КОЛИЧЕСТВО(РАЗЛИЧНЫЕ КонтрактныеЛицаКонтрагентов.Ссылка) КАК Ссылка1
      ИЗ
      Справочник.Контрагенты КАК Контрагенты
      ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
      КонтрактныеЛицаКонтрагентов.Ссылка КАК Ссылка,
      КонтрактныеЛицаКонтрагентов.Владелец КАК Владелец
      ИЗ
      Справочник.КонтрактныеЛицаКонтрагентов КАК КонтрактныеЛицаКонтрагентов
      ГДЕ
      (НЕ КонтрактныеЛицаКонтрагентов.ПометкаУдаления = &ПометкаУдаления)) КАК КонтрактныеЛицаКонтрагентов
      ПО (КонтрактныеЛицаКонтрагентов.Владелец = Контрагенты.Ссылка)
      ГДЕ
      (НЕ Контрагенты.ЭтоГруппа)

      СГРУППИРОВАТЬ ПО
      Контрагенты.Ссылка

      ИМЕЮЩИЕ
      КОЛИЧЕСТВО(РАЗЛИЧНЫЕ КонтрактныеЛицаКонтрагентов.Ссылка) = 0

      • Понятно, делаем соединение не с таблицей контактных лиц контрагентов, а с некой таблицей, полученной в результате промежуточного запроса. Я думал, что можно вообще обойтись без вложенного запроса, а так действительно получается почти то же, что и во втором варианте.
        Попутно еще вопросик по псевдонимам. Вот есть псевдоним Ссылка1, определенный для функции КОЛИЧЕСТВО(РАЗЛИЧНЫЕ КонтрактныеЛицаКонтрагентов.Ссылка)
        Почему в последнем условии отбора нельзя написать так  “ИМЕЮЩИЕ Ссылка1 = 0” ? Я пробовал, конструктор ругается :) Этот псевдоним можно использовать только как имя поля в результате запроса, но не в самом запросе?

        • Псевдонимы можно использовать только при настройке итогов и в разделе Порядок.
          В условиях, группировках нужно использовать поля (или функции от этих полей) самой таблицы.

  3. в первом случае многих ко многим сделал через тч, и в принципе почему бы в реквизитах не использовать элементы КЛ, отобранные по тч контрагентов – для выбора пользователя (конечно это не супер). а во втором случае сделал как и вы через едИзмНоменклатуры.
    к стати мне кажется у вас косяк будет если  пользователь базовую единицу сменит с пакета на палетта…?

    • Согласен. Правильное поведение в этой ситуации – запретить изменять базовую единицу, если по номенклатуре были движения.
      Это будет сделано в домашнем задании №8.

  4. Павел Конов 15.02.2011 в 03:42

    спасибо за решение!
     
    интересный для меня момент по пункту 7. Автоматическое создание единицы измерения на основании базовой.
    там нет проверки на то,что новый элемент это группа, а для группы нет реквизита базовая единица. и при проверке платформа не будет ругаться что нет реквизита, а правильно выдаст ЛОЖЬ на заполненность.

    • Немного не понял.

      Речь идет о создании новой группы справочника номенклатура?
      В этом случае условие

      Если ЭтоНовый И ЗначениеЗаполнено(БазоваяЕдиница) Тогда

      Будет всегда ложным, т.к. БазоваяЕдиница будет всегда пуста.

      Возможно Вы говорите о другом механизме, приведите пример.

      • Павел Конов 15.02.2011 в 19:27

        Да, речь идет именно о создании группы.
        У себя в коде я вводил дополнительную (и ненужную как оказалось) проверку в виде Если НЕ ЭтоГРуппа() тогда
         

  5. Вопрос: как на форме правильно изменять пометки об обязательности заполнения поля (подчеркивания на форме)?

    • В свойствах элемента формы есть свойство АвтоОтметкаНезаполненного, им и можно добиться желаемого эффекта.
      Свойством можно управлять и программно.

  6. я для решения задачи по наследованию вида номенклатуры использовал вариант с флагом “заполнять из данных заполнения”, а в решении он не был даже упомянут ни как самый простой ни как ошибочный.

    • Не понял Вашего решения.
      Вы для ВидаНоменклатуры проставили “Заполнять из данных заполнения”? Дополнительного программного кода не использовали?
      И к чему привел такой ход?

  7. Непойму, почему всегда всё так просто, а я лезу кудато всегда не вту степь:(.  
    Как я понял, что лучше избегать табличных частей?
    СПАСИБО!

    • Не то чтобы нужно избегать табличных частей.
      Просто их нужно использовать “по месту”.
      Важно помнить одно: на строку табличной части нельзя будет сослаться, в отличие от записи подчиненного справочника.
      Если это ограничение не является критичным для текущей задачи, то можно использовать табличную часть.