Решение ДЗ №9 базового курса.

Представляем решение 9-го задания, состоящее из 25 видео-уроков.

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

комментарий 31 на “Решение ДЗ №9 базового курса.”

  1. Сергей 28.10.2010 в 01:09

    Увидел сегодня, что люди до сих пор отчитываются по задачам, до этого думал, что стоит их сделать только для себя.
    На текущий момент сделаны ДЗ по №9 включительно.
    Нужны ли ответы на вопросы из 9-го?

    • Да, конечно нужны.

      • Сергей 28.10.2010 в 11:00

        1. Особенности проведения документов, СКД, работа с интерфейсом
        2. Затруднейний по материалу не возникло
        3. Особенности формирования запросов, тонкие моменты (например,  сортировка по Моменту времени). 

  2. Можно сказать что ДЗ № 9 выполнено. 1) Очень рад что затронули СКД. На практике не использовал СКД. После ДЗ закрепил полученные знания на работе….. по сему на 9 ДЗ ушло 3 часа выполнения и 3 недели на закрепление :) За что Вам огромное спасибо. По другому взглянул на  обработку проведения. 2)  В общем затруднений не возникло. Повторение – мать учения – поэтому пришлось не один раз обращаться к теории и каждый раз смотреть на проблему разными глазами. 3) чего хотелось бы услышать в мастер группе сказать тяжело, т.к. того объема информации, который получаю от Вас, хватает с головой – дай бог его переварить и закрепить на практике….  Переходим к БУ….

  3. Решил. Задача достаточно реальная, поэтому невольно используешь то, что уже видел.
    Теперь вопросы.
    1. Что нового я узнал во втором блоке или в чем поменялись взгляды после изучения
    материала?
    Главным образом НОВОЕ было в условном проведении, работе с управляемыми формами и интерфейсом, в запросах. Не то, чтобы этого не знаешь, а знаешь как бы не полностью. Любую задачу можно решить разными способами, причем не всегда задумываешься об оптимальности. В этом смысле постоянный акцент на “уменьшении обращений к серверу, оптимизации проведения и т.д.” весьма полезен

    2. В какой теме были наибольшие затруднения, и что помогло их преодолеть?

    Соединения в запросах. Нельзя сказать, что не разобрался, но сильно не всегда с первого раза формирую тот запрос, который хочу. И оптимизация запросов (Временныетаблицы, пакеты запросов) – тоже узкое место. Все получается, но не с первого раза. А помогает повторный просмотр материала и практика.

    3. Какую тему вы бы хотели подробнее раскрыть в мастер-группе?
    Тонкие моменты заполнения управляемых форм и работа ДанныеФормыВЗначение, РеквизитВЗначение и обратно в форму. Поподробней. Какие подводные камни, какие “стандарты” уже наработаны.

  4. Выполнила задание

  5. ДЗ сделал по своему – Наборы ч/з ТЧ номенклатуры, ДопПрава ч/з ПВХ, кнопку “Счастья” ч/з эксп. Перем в модуле объекта.
    По поводу опроса:
    1. Что нового узнал – 30% нового, остальное систематизировал, в частности “новое” проведение узнал еще из нулевого, усвоил ПВХ – остальное по мелочи..
    3. Какую тему хочется в МГ: Планы обмена и Web клиентские приложения..

    • >Планы обмена
      Подробно рассматриваем в 0-вом блоке продвинутого.

  6. Понравился запрос ч/з соединение, сначала сделал ч/з объединение – для номенклатуры и комплектующих..
    Набор сделал ч/з ТЧ номенклатуры – поэтому долго догонял, что к каждой номенклатуре ТЧ дока – будут присоединяться ВСЕ наборы по количеству их комплектующих..
    Ч/з РС сразу понятно, там для каждой комплектующей – строка..

  7. Не совсем понтяно почему нельзя использовать ТЧ номенклатуры для наборов – вернее совсем не понтна фраза, что с помощью РС нельзя сделать дули одной и той-же комплектующей..
    На что это влияет?!..
    Кака разница, что в ТЧ будет несколько строк с одной и тойже комплектующей и разным количеством?!..

    • Дубли в описании комплектующих это источник потенциальной ошибки.
      Давайте представим, что набор состоит из 400 комплектующих. В табличной части справочника пользователь может добавить дубль, хотя это может быть ошибкой, например, дважды была добавлена строка Гайка М4, 40 шт. Регистр сведений такой ситуации не позволит случиться.

      • Соглашусь – производство атомоходов я не учел.. ;))

  8. Евгений Ершов 14.08.2010 в 10:10

    1). По 2 и 3 видео: почему Вы вместо установки параметра:
    ….
    Запрос.УстановитьПараметр(“ВидУслуга”, Перечисления.ВидыНоменкклатуры.Услуга);
    ….
    не применяете в тексте запроса:
    “…..
    И ПоступлениеТоваровТовары.Номенклатура.ВидНоменклатуры ЗНАЧЕНИЕ(Перечисление.ВидыНоменкклатуры.Услуга)
    …”

    2). В запросе для получения данных для контроля остатков при проведении РеализацияТоваров:
    в видео 6 (с 9:00) При указании второго параметра виртуальной таблицы Остатки(…)
    …….
    (Номенклатура, Качество) В
    | (ВЫБРАТЬ РАЗЛИЧНЫЕ
    | ЕСТЬNULL(СоставНабора.Комплектующая, РеализацияТоваровТовары.Номенклатура) КАК Номенклатура,
    | РеализацияТоваровТовары.Качество
    | ИЗ
    | Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставНабора КАК СоставНабора
    | ПО
    | РеализацияТоваровТовары.Номенклатура = СоставНабора.Набор
    | И РеализацияТоваровТовары.Номенклатура.ВидНоменклатуры = &ВидНабор
    | ГДЕ
    | РеализацияТоваровТовары.Ссылка = &Ссылка
    | И РеализацияТоваровТовары.Номенклатура.ВидНоменклатуры &ВидУслуга)
    ……
    Второе условие связи думаю необязательно:
    РеализацияТоваровТовары.Номенклатура.ВидНоменклатуры = &ВидНабор
    Указав ЛЕВОЕ СОЕДИНЕНИЕ, мы выбираем всю номенклатуру из табличной части документа и соответствующий ей состав набора.
    Если бы нам в запросе нужно было бы выбрать только номенклатуру (наборы), тогда можно было указать
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ, а связь (РеализацияТоваровТовары.Номенклатура.ВидНоменклатуры = &ВидНабор) опять же можно
    было бы не указывать.

    В 7 видео (с 5:10) также при указании условий связи двух таблиц во вложенном запросе (для получения номеров строк документа)
    РеализацияТоваровТовары.Номенклатура.ВидНоменклатуры = &ВидНабор
    данное условие связи также считаю лишним.
    И также забыли сделать группировку в целом для запроса (для удаления возможных дублей строк) по полям
    ОстаткиНоменклатурыОстатки.Номенклатура,
    ОстаткиНоменклатурыОстатки.Качество,
    Товары.НомерСтроки
    а суммируемым полем будет
    СУММА(ОстаткиНоменклатурыОстатки.КоличествоОстаток) КАК КоличествоОстаток

    3). Правильно ли я понимаю, что при создании эмуляции глобальной переменной (через общий модуль), время её жизни, если к ней не обращаться, составляет 20 минут.

    • 1. Потому что не работает контекстная подсказка в запросах.
      На практике я обращаюсь к функции Значение( ), но при записи видео обычно торопишься и можно наделать ошибок, потом их исправлять..
      2. Согласен.
      3. Не совсем так.
      Время жизни кэша 20 минут. Но если повторно обратиться к такой “глобальной” переменной она снова заполниться значением.

  9. Анатолий Белогорцев 12.08.2010 в 23:14

    Отмечусь комментарием:

    1) Обработку проведения по регистру “Товары” вынес в общий модуль “ДвиженияПоРегистрам” (включен признак “Сервер”) по подобию проведения документов поступления из ДЗ №8. Так вот – когда делаю выдачу сообщений о том, по какой строке происходит нехватка товара (при помощи объекта “СообщениеПользователю”) – не происходит вывод вспомогательного окна с позиционированием на колонке “Количество” табличной части документа.

    Код такой:


    Пока Выборка.Следующий() цикл

    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = “Нехватка ” + (-Выборка.Нехватка);
    Сообщение.Поле = “Товары[” + (Выборка.НомерСтроки – 1) + “].Количество”;

    ДокОбъект = Ссылка.ПолучитьОбъект(); Сообщение.УстановитьДанные(ДокОбъект);
    Сообщение.Сообщить();
    КонецЦикла;

    Здесь “Ссылка” – это параметр функции общего модуля. Если же в функцию общего модуля передавать параметром не ДокументСсылка, а ДокументОбъект (и в методе УстановитьДанные в качестве параметра указывать его) – все происходит штатно.

    Так и не понял подобного поведения платформы. :)

    2) Относительно отключения контроля превышения остатка по ресурсу регистра накопления для пользователя. Уж не знаю, насколько корректно решение задачи через общий модуль с кешированием значений…

    Аргумент №1: если смотреть типовые на 8.1 (Управление торговлей, к примеру;), там разработчики не чурались прочитать текущее значение данной настройки из БД для пользователя непосредственно каждый раз при проведении документов (а если точно – то в модуле набора записей регистров накопления).

    Аргумент №2: несколько раз в уроках упоминается, что период жизни объекта в кэше – 20 минут (в случае необращения к нему). В теории так, только вот на практике платформа 8.1 опровергала это утверждение :)(чему подтверждение несколько тем на партнерских форумах). На 8.2 пока руки не доходили проверить. Таким образом, чтобы изменить режим контроля для пользователя – ему необходимо перезаходить в программу.

    3) Относительно кнопки “ПровестиБезКонтроля” в форме списка документа “РеализацияТоваров”. Корректна ли моя реализация данного функционала:
    в модуля объекта (документ “РеализацияТоваров”) я создал переменную “мКонтролироватьОстатокПриПроведении”; в разделе основной программы модуля объекта (документ “РеализацияТоваров”) я её инициализирую значением по-умолчанию для пользователя (к примеру, Истина). А к кнопке “ПровестиБезКонтроля” в форме списка добавлен код:


    ПровестиНаСервере(Элементы.Список.ТекущаяСтрока);

    &НаСервереБезКонтекста
    Процедура ПровестиНаСервере(ДокументСсылка)

    НачатьТранзакцию();
    ДокументОбъект = ДокументСсылка.ПолучитьОбъект();
    ДокументОбъект.мКонтролироватьПревышениеОстатков = Ложь;
    ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);

    ЗафиксироватьТранзакцию();

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

    • 1. Отличное наблюдение, подробно разберем в мастер-группе.
      2. Это не так. Когда кэш очиститься, произойдет повторное обращение к указанной функции и она будет считывать значение реквизита из БД.
      То есть очистка кэша не означает, что все соответствующие функции будут возвращать пустые значения.
      3. Вообще эта реализация будет работать, но мне не очень нравиться использование локальной переменной модуля объекта.
      Ведь она будет всякий раз инициализироваться, если мы обращаемся к модулю объекта (даже если не проводим документ, а например просто создали и записали).

  10. Константин Павленко 09.08.2010 в 20:48

    В отчете ПрогнозируемыйФинансовыйРезультат ошибка в схеме компоновки данных. В запросе не связаны таблицы. У меня цена установлена только на одну номенклатуру, а результат выводится по всем с одной ценой. Мой вариант запроса:

    ВЫБРАТЬ
    ОстаткиНоменклатурыОстатки.Номенклатура,
    ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК Количество,
    ISNULL(ЦеныЗакупки.Цена, 0) КАК ЦенаЗакупки,
    ISNULL(ЦеныПродажи.Цена, 0) КАК ЦенаПродажи,
    (ISNULL(ЦеныПродажи.Цена, 0) – ISNULL(ЦеныЗакупки.Цена, 0)) * ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК Прибыль
    ИЗ
    РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦенЗакупки) КАК ЦеныЗакупки
    ПО ОстаткиНоменклатурыОстатки.Номенклатура = ЦеныЗакупки.Номенклатура
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦенПродажи) КАК ЦеныПродажи
    ПО ОстаткиНоменклатурыОстатки.Номенклатура = ЦеныПродажи.Номенклатура

    • Да, конечно, связь между таблицами должна быть.
      Спасибо, Константин.

  11. Константин Павленко 09.08.2010 в 19:42

    В процедуре ВыполнитьДвиженияОстаткиНоменклатуры не хватает параметра “Отказ” из ОбработкаПроведения. Иначе при нехватке Отказ устанавливаем, но документ всё равно проводится. Забыли при выделении в отдельную процедуру.

    • В решении 11 ДЗ исправляю этот момент )

  12. тем у кого не качает: используйте пароль который указан в письме со словами “Кроме этого, на материалы, выкладываемые в августе, действуют новые пароли на скачивание.”
    письмо 2 августа 2010 г. 10:53
    пароль который был позже этого сюда не подходит. будьте бдительны.

  13. Почему в обработчике Провести без контроля мы вызываем серверную процедуру, а не внеконтекстную, в параметр которой можно передать ссылку на документ?

  14. У меня тоже не скачивается. При этом ответы на вопросы от 02.08.2010 в МГ с новыми логин/пароль скачиваются нормально, а решение ДЗ-9 и исправления к 3-му блоку – нет. Пробовал в разных броузерах, на разных компах. Не принимаются новые логин/пароль

    • Хм…
      Значит нужно попробовать что-то еще.
      Как вариант – вывести проблему из области браузера и перенести в гарантированно работающее решение: поставить Download Master (http://westbyte.com/dm/), скачивание производить через него, в нем указывать пароли. Это – работает.

      • Вот теперь, с новыми паролями все стало качаться (письмо от 4 августа). Спасибо.

    • Константин Павленко 03.08.2010 в 13:44

      FlashGet тоже работает. На странице правой кнопкой выбираем “Закачать все при помощи FlashGet”, оставляем галки только на нужных файлах и один раз указываем имя-пароль. Если надо войти в терминал, закачку можно приостановить. Сегодня закачал мастер-группу и ДЗ 9 без проблем. Сейчас стало немного неудобно переставлять пароли, но это не самая большая проблема в жизни 1С-ника :))

  15. Константин Павленко 03.08.2010 в 09:01

    Я правильно понимаю, что в августе на домашние задания один пароль, а на материалы мастер-группы другой?

  16. gavrik-prog 03.08.2010 в 07:07

    не могу скачать . Ни со старым , ни с новым паролем.
    Посмотрите

    • Это побочный эффект кэширования.
      Что сделать: попробовать ввести логин/пароль несколько раз. У меня достаточно 2 раза – и все начинает качаться…

      Если совсем не будет получаться – нужно написать сюда с более подробным описанием.