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

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

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

комментариев 57 на “Решение ДЗ № 6 Базового курса”

  1. Александр Гаренских 06.12.2010 в 14:55

    Задание выполнил. Проблем не было, задание простое.

  2. Отчитываюсь: задание сделано (также еще в июле)

  3. Задание сделала еще в июле, до отпуска, отчиталась не в той ветке

  4. Задание выполнил.

  5. Семенов Валерий 14.08.2010 в 22:55

    Выполнено

  6. Быков Анатолий 09.08.2010 в 17:15

    Задание выполнил.

  7. IvanSkrobot 05.08.2010 в 21:53

    лучше поздно, чем никогда?)
    выполнил

  8. Выполнил, правда, с опозданием.

  9. Проверку на структуру не делал.. а просто сравнил ДанныеЗаполнения с Неопределено

    Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    Если НЕ ДанныеЗаполнения = Неопределено Тогда
    ВидНоменклатуры = ДанныеЗаполнения.Родитель.ВидНоменклатуры;
    КонецЕсли;
    КонецПроцедуры

    • А ведь в данных заполнения может быть и ссылка (ввод на основании). Что тогда?

  10. Выполнил, но с горем по полам, пришлось 8 раз смотреть видео, 5 раз делал это ДЗ с нуля, чтобы отработать навыки. Привык всё через форму делать, а не через объект.

  11. Выполнил

  12. Баранов Николай 28.07.2010 в 07:38

    Решено!

  13. Наконец-то и я догнал. Что в УП пока не нравится – работа с обработками. Как оказалось, форма обработки с самим объектом обработки связана чуть менее чем никак…

  14. Денис Гончаренко 19.07.2010 в 15:19

    ДЗ решил.
    Правда сначала для единиц измерения создал табличную часть справочника. Но в решении вы резонно подметили что в документах его выбрать будет невозможно. Исправил.
    В связи с чем возник вопрос. Возможно немного не по теме.
    Когда у меня была ТЧ справ-ка Единицы, я легко выводил ее на форму элемента справочника. ПриЗаписи элемента проверял, если БазоваяЕдиница НЕ содержится в этой таблице программно добавлял ее с коэффициентом = 1. Но это делали. Тоже самое я делаю и в случае подчиненного справочника.
    А вот как вывести этот подчиненный справ-к в виде таблицы в форме элемента спр.? У меня не получилось ((

    • Создать реквизит формы типа “Динамический список”, вывести его на форму.
      Для дин. списка настроить запрос с отбором по параметру, и этот параметр заполнять.
      Понимаю, что это очень кратко, но подробно будем изучать в продвинутом курсе..

  15. Выполнено.

  16. Анатолий Белогорцев 17.07.2010 в 10:25

    Задание выполнил!
    Единственное – контактных лиц организовал в табличной части. Пришлось немного подумать над запросом в последнем задании, но в итоге он получился аналогичным эталонному решению, только вместо таблицы справочника “КонтактныеЛицаКонтрагентов” используется таблица Табличной части справочника “Контрагенты”.

  17. Сергей 17.07.2010 в 00:28

    С решением проблем не возникло, но появились вопросы после просмотра приведенного вами решения:
    1. Имеет ли значение где делать обработку данных (например формировать запрос) на сервере : в модуле объекта или модуле формы? Размещение влияет только на возможность обратиться к описанной процедуре/функции?
    2. Сделал вывод контаргентов, не имеющих контактных лиц в таблицу значений на форме. Можно ли заполнить эту ТЗ из модуля объекта? (У меня получилось, что я формирую запрос в функции описанной в модуле объекта, а резутатом выполнения этой функции уже заполняю ТЗ формы в процедуре (на сервере), описанной в модуле формы. Как лучше делать подобные заполнения (по размещению процедур)? Равнозначен ли вызов процедуры с директивой &НаСервереБезКонтекста и вызов процедуры, описанной в модуле объекта?

    • 1. Влияет только на доступность методов.
      Поэтому принципиального значения не имеет.
      2. Можно получить таблицу в модуле объекта. Далее, используя “ЗначениеВРеквизитФормы” передать результат в реквизит формы.
      >Равнозначен ли вызов процедуры с директивой &НаСервереБезКонтекста и вызов процедуры, описанной в модуле объекта?
      Да, равнозначен.

      • Сергей 17.07.2010 в 11:16

        >2. Немного не понял, как я понимаю передача результата в реквизит формы может быть выполнена только в модуле формы или я ошибаюсь?

        • Да, конечно.
          Из модуля формы вы вызываете процедуру, которая возвращает таблица значений.
          Далее передаете эту таблицу в реквизит формы.

  18. Оркия Барташевич 16.07.2010 в 16:36

    Проблем с решением не было. А можно было это сделать через РегистрСведений.КонтактныеЛицаКонтрагентов?
    Или завести Справочник.ФизическиеЛица и Справочник.КонтактныеЛица (реквизит ФизЛицо) подчинить Контрагентам. Условия задачи выполняются.

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

      • Михайлов Сергей 19.07.2010 в 17:21

        Решил ДЗ с использованием регистра сведений… Тоже рассуждал о том каким путем решить: табличная часть, подчиненный справочник, рег.сведений. А ссылаться в дальнейшем можно на само Контактное лицо, в каких случаях это выйдет боком?

        • Пример: в документе нужно открыть список контактных лиц контрагента.
          Конечно можно его формировать программно, выбирая данные из РС, но проще сразу открыть подчиненный справочник..

      • Михайлов Сергей 19.07.2010 в 17:28

        Можно предложить такой пример:
        1. необходимо фиксировать звонки контрагентов. Кто звонит? Иванов Иван Иванович (спр. Контактные лица), фирма Альфа. Оператор вносит сведения в документ ЗвонокВходящий. Документ проверяет есть ли в РегистреСведений данные по контакному лицу данной фирмы и если данных нет, то оператору предлагаем узнать эту информацию.
        2. отгрузка товаров клиенту. Ответ.лицо из справочника Контактные лица. При проведении документа проверяем – а имеет ли оно отношение к данному контрагенту? Нет – не проводим.

        • Гораздо правильнее не дать пользователю ошибиться при выборе, чем заставлять его исправлять ошибки.
          Согласны?

          • Михайлов Сергей 19.07.2010 в 20:38

            Да, с точки зрения реализации выборов подчиненный справочник проще.

            • Есть еще один момент – запись из РС мы можем удалить без труда.
              Тогда невозможно будет понять, почему в документах, введенных ранее, указанно определенное контактное лицо, ведь нет соответствующей записи в РС.

              • Михайлов Сергей 19.07.2010 в 21:19

                Да, невозможность авторизации действий с независимыми РС создает трудности в выявлении ошибочных действий… Кстати нет ли примеров использования реквизитов РС для идентификации автора записи?

                • Для идентификации обычно используют Журнал регистрации..

  19. Сергей Гуков 16.07.2010 в 15:59

    Задание выполнил, но не так как в видео-решении.
    1. Контактные лица прописывал в табличной части справочника Контрагенты
    2. Последний пункт задания, соответственно, также выглядит по другому из-за механизма использованного в пункте 1. Вместо запроса использовал выборку из справочника:

        Выборка = Справочники.Контрагенты.Выбрать();
        Пока Выборка.Следующий() Цикл
            Если Выборка.ЭтоГруппа Тогда //группы не обрабатываем
                Продолжить;
            КонецЕсли;
           
            Если Выборка.КонтактныеЛица.Количество()=0 Тогда //если нет контактных лиц
                Сообщить(Выборка.Наименование);
            КонецЕсли;
        КонецЦикла;
  20. Вопрос: можно ли было подчинить справочник не Контрагентам, а Контактным лицам?

    • Технически это возможно.
      Но нужно понимать будет ли это удобно пользователю.
      То есть, что чаще:
      – у одного контрагента много контактных лиц;
      – одно и тоже контактное лицо принадлежит разным контрагентам.

      На практике чаще выполняется первое условие. Поэтому с точки зрения удобства создания новых элементов подчинять лучше контрагентам.

  21. Все сделал точь-в-точь, как доктор прописал =)

  22. В последней строке ДЗ: “При этом группы справочника Контрагенты не должны обрабатываться.” Я думал их не должно быть т.к. группа справочника как бы, не должна иметь “Контактное лицо”?

    • В тот то и задача, чтобы их не было.

      • А Вы посмотрите на Запрос в выложенном решении ДЗ. Они там БУДУТ.

        • Естественно, мы уже обсуждали, что в запросе не хватает одного условия ;)

  23. Касаемо меня:
    1) Связь контрагенты-контактные лица как раз сделал через ТЧ контрагентов
    2) Про ВТ знаю, в запросе использовал ВТ – привычка
    3) Тоже думал что не бум “Сообщать”, а выведем в виде списка

    По поводу п.3 наводящий вопрос: Везде твердят (и вы в т.ч. это тоже говорили), что не стоит использовать в 8.2 Сообщить, что метод оставлен только для совместимости с 8.1, однако же у вас в арсенале это первый инструмент вывода информации. У вас тоже привычка пока не отошла? :) Или почему не юзаете СообщениеПользователю? :) Шаблоны же решают!

  24. Илья Чернов 14.07.2010 в 17:14

    В запросе не хватает условия “И Контрагенты.ЭтоГруппа = ЛОЖЬ”

    • Совершенно верно:
      И НЕ Контрагенты.ЭтоГруппа

      • Сергей Гуков 16.07.2010 в 15:53

        Кстати, все хотел спросить разницу между выражениями:

        1. Контрагенты.ЭтоГруппа = ЛОЖЬ
        и
        2. НЕ Контрагенты.ЭтоГруппа

        я понимаю, что предпочтительнее писать, как в пункте 2, но почему?
        потому что в пункте 1 – это масло маслянное или могут быть какие-то неточности (нюансы) при компиляции?

        • Разницы в результате нет, нюансов нет.
          Мне нравиться больше второй вариант :)

  25. После просмотра решения данного ДЗ появились следующие вопросы:

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

    – Так же еще интересен момент что вы при обработке заполнения присваиваете ВидНоменклатуры непосредственно, хотя в последствии заполнение прочих реквизитов идет по данным заполнения. Это опять же лично мнение, но вполне возможно стоит придерживаться единого подхода? Т.е. если все заполняется по данным заполнения то просто добавлять туда свои данные или же все заполнять руками?

    • – Так же при записи элемента справочника “Номенклатура” не происходит создание единицы измерения оно, а это не гуд )

      • Пожалуй, да. В будущем нам это придется сделать.

    • 1. Узким место это будет может является в том случае, если будет многократное повторение этого оператора (например 1 000 000).
      При разовом использовании разница не будет ощутима даже на очень слабых машинах.
      2. Да, можно было бы в реквизите указать свойство “Заполнять из данных заполнения”.
      И использовать код – ДанныеЗаполнения.Вставить(“ВидНоменклатуры”, ДанныеЗаполнения.Родитель.ВидНоменклатуры);
      Что лучше? Хороший вопрос, оставим его на мастер-группу.

  26. Как обычно, ваше решение отличается от реализованного самостоятельно
    Есть чему учиться и к чему стремиться :)

  27. Посмотрев решение данного ДЗ, появился вопрос. Каждый решает домашнее задание по своему. Вы соответственно показываете свой вариант решения. В частности, вариант решения с “контактными лицами”. Будут ли последующие домашние задания опираться на объекты созданные в предыдущих домашних заданиях? Следовательно, надо ли нам переделывать домашнее задание под ваше решение?

    • Естественно последующие ДЗ будут использовать указанные объекты.
      Но переделать свое решение можно не сейчас, а позже.

      • Евгений, а как насчет того, чтобы выложить dt-шник базы по ДЗ после решения 6-го задания. Я отлучался от курсов на некоторое время, решения посмотрел – все понятно, все просто. Но времени переписывать Ваше решение как-то жалко… Думаю не мне одному. Не хочу прослыть лентяем, но копипастом заниматься тоже не хочется :)

        • Правильный подход – решить задание самостоятельно, далее ознакомится с представленным решением.
          И при необходимости внести корректировки в свое решение.
          Поэтому сейчас выгрузки выкладываться не будут, может быть в конце курса..

  28. Самое трудное было догадаться выводить данные запроса Сообщением. Не типовое решение.