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

Представляем решение очередного задания.
Это “объемное” решение, состоящее из 27 видео-уроков.

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

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

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

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

  1. Вопрос по независимому регистру сведений о менеджерах контрагентов.
    В представленном решении встает необходимость, все же, хранить в регистре ссылку на документ, формирующий одну из записей. Как мне кажется, в этом случае имеет смысл делать этот регистр подчиненным регистратору и для возможности вносить в регистр записи в ручную создавать несложный документ. Этим будет достигнута цель менее трудоемкого программирования. Есть ли в моем предположении какие-либо неочевидные загвоздки?

    • P.S. Спасибо за решение, нашел для себя много интересного и кое в чем переделал свое решение. :)

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

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

    • По умолчанию загружается Приход.
      При необходимости можно в запросе выбрать поле
      Значение(ВидДвиженияНакопления.Расход)

  3. В модуле документа «КонтактСКлиентом» при удалении проведения можно-ли использовать запрос?
    <code>
                    Запрос = Новый Запрос;
                    Запрос.Текст =
                                   “ВЫБРАТЬ
                                   |             МенеджерыКомпании.Документ
                                   |ИЗ
                                   |             РегистрСведений.МенеджерыКомпании КАК МенеджерыКомпании
                                   |ГДЕ
                                   |             МенеджерыКомпании.Документ = &Ссылка”;
     
                    Запрос.УстановитьПараметр(“Ссылка”, Ссылка);
     
                    Результат = Запрос.Выполнить();
                    Если Не Результат.Пустой() Тогда
                                   НаборЗап = РегистрыСведений.МенеджерыКомпании.СоздатьНаборЗаписей();
                                   НаборЗап.Прочитать();
                                   НаборЗап.Удалить(0);
                                   НаборЗап.Записать(Истина);
                    КонецЕсли;
    </code>

    • А каким образом именно нужная запись попадет в набор?
      Полагаю, что этот код удалит только первую запись из регистра.

      • Спасибо, я понял. По реквизиту документ до нужной записи не доберешься. Только по измерениям и периоду.

  4. 1. Как я понял, что пока товар есть на остатках, нельзя менять базовую единицу, а как он кончился то можно пересмотреть её? В типовых конфигурациях пользуются таким же методом или нет?
    2. Так я и не увидел как реализовать пересчёт табличной части документа, если сотрудник выбрал не правильный тип цен, заколбасил документ из 100 строк, а потом вдруг видит тип цен не тот, тогда ему придёться пробивать каждую позицию заново или ?

    • >нельзя менять базовую единицу, а как он кончился то можно пересмотреть её
      Нет, это не так.
      Если были движения по номенклатуре, то нельзя изменять единицу измерения.
      Примерно такой же подход используются в типовых.
      >Так я и не увидел как реализовать пересчёт табличной части документа
      В задании в явном виде этого не требуется.
      Приведу несколько общих шагов по реализации оптимального решения.
      1. Нужно создать временную таблицу, которая будет содержать табличную часть.
      2. Получить цену по новому типу цен для каждой номенклатуры.
      3. Выгрузить результат запроса в табличную часть документа.

      Неоптимальное решение следующее:
      1. Перебирать строки табличной части циклом.
      2. Для каждой строки получать цену.
      В этом случае получается запрос в цикле.

      • СПАСИБО. Как всегда в голове было неоптимальное решение. :))
        P.S При отправке сообщения получал такое сообщение “Вы комментируете слишком быстро. Попридержите коней.” Прикольно. Что это означает!?

  5. Три момента после просмотра видео:
    1.  А почему сотрудник не участвует в регистре закупок?
    2. В документах единица измерения является обязательной. Но нет проверки на услугу. А у нее базовая необязательная. То же касается и коэффициента. Если не указана единица измерения, тогда коэффициент либо не должен проверяться, либо должен выставляться в 1.
    3. Проверка на изменение базовой номенклатуры выполняется только на одном регистре накопления. А как же второй?

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

  6. Добрый день!
    А почему при поиске ссылок на номенклатуру не использовался метод НайтиПоСсылкам()?

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

      • Но проверка выполнялась в обработчике Проверки заполнения, а там нет транзакции.
        Я понимаю, что один запрос быстрее. Но завтра появятся еще пара регистров потом еще пара и т.д. и поддерживать универсальность ведь сложно.
        Мы ведь выносим код в общие модули для обеспечения универсальности. Наверное, можно было бы упомянуть этот метод как медленный, но универсальный

        • >Но проверка выполнялась в обработчике Проверки заполнения, а там нет транзакции.
          Ок, хорошо.
          >Но завтра появятся еще пара регистров потом еще пара
          Да, но ведь проверку достаточно делать по одному регистру (который уже есть в конфигурации). Разумеется это не общее решение, а частное. Но оно более производительное.