8.х Задача 1.01 По сборнику задач на сдачу спеца по платформе 8.3

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем angelivoin, 16 апр 2015.

  1. TopicStarter Overlay
    angelivoin
    Offline

    angelivoin

    Регистрация:
    16 апр 2015
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    Кто сдавал на спеца по платформе 8.3, гляньте решение задачи. Может что лучше по другому сделать.
    Задание ниже описано:

    Компания занимается оптовой торговлей. Поступление товаров отражается
    документом «Приходная накладная», продажа - «Расходная накладная». Помимо
    продажи товара, могут оказываться дополнительные услуги, например по
    доставке. И услуги и товары указываются в одной табличной части.
    Складской учет товаров не ведется.
    При проведении расходной накладной при нехватке товара необходимо
    выдавать соответствующее предупреждение с указанием количества нехватки и
    не позволять проводить документ.
    Списание себестоимости товаров должно быть организовано по партиям, в
    зависимости от текущего значения принятого на этот год в учетной политике
    метода списания себестоимости (FIFO или LIFO). Еще раз подчеркивается –
    учетная политика действует год. На следующий год метод списания может
    смениться.
    Необходимо построить отчет по продажам товаров за период и остаткам
    товара на указанную дату.

    Вложения:

    • Спец1.01.dt
      Размер файла:
      173 КБ
      Просмотров:
      8
  2. TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.755
    Симпатии:
    146
    Баллы:
    104
    Криво решил.
    Не правильно выполнена проверка достаточности для списания.
    С начало нужно проверить достаточность номенклатуры. А только потом строить запрос к регистру партий. Почитай за новую методику контроля остатков. Это нужно что бы исключить проверку на NULL так как это очень длительная операция и надолго блокирует регистр. Ну и ещё там есть нюансы.

    В сообщение пользователю ты выводишь "Номенклатуру". А надо получить "Представление" и именно его выводить. За это вроде 0.5 бала снижают. Так как у тебя в момент вывода сообщения будет каждый раз в цикле выполнятся запрос для получения представления номенклатуры.

    Ещё нужно принудительно очищать набор записей перед чтением партий. Не достаточно записать пустой набор. Так как при определённых обстоятельствах он будет не пустым(например если будет открыта обычная форма или если движения будут выведены на управляемую форму для просмотра).
    --- Объединение сообщений, 16 апр 2015 ---
    Сделай два регистра. Один ОстаткиНоменклатуры. А второй "ПартииТоваров".
    Остатки проверяешь по ОстаткамНоменклатуры.
    --- Объединение сообщений, 16 апр 2015 ---
    ФИФО и ЛИФО в запросе можно сделать через функцию "СтрЗаменить". А не конкатенацией. При этом будет работать конструктор.
    Последнее редактирование: 16 апр 2015
    Svb нравится это.
  3. Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    Сразу видно, готовился :)
  4. TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.755
    Симпатии:
    146
    Баллы:
    104
    Готовлюсь.... пока ещё готовлюсь.
  5. Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    Новая версия с учетом замечаний когда будет? :)
  6. TopicStarter Overlay
    angelivoin
    Offline

    angelivoin

    Регистрация:
    16 апр 2015
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    Завтра уже будет, с методикой новой списания разбирался. К данной задаче она все же не подходит. А про представление, Мы получаем: Что выборка.представление, что выборка.номенклатура. Отличие только что одна ссылка на номенклатуру а другая как я понимаю строка с названием номенклатуры.
    Разобрался)
    Выборка.номенклатура возвращает тоже самое представление номенклатуры. Но сначало происходит запрос к нужной номенклатуре и из него вытаскивается номенклатура.представление. Но вот вопрос. Допустим у нас 100 номенклатур списывается, у двух из них будет не хватать количества. Т.е будет два раза происходить вызов выборка.номенклатура. В то время как в запросе при выборе полей мы вытаскиваем поле номенклатура.представление 100 раз Т.к мы обращаемся тоже через точку, то будут формироваться мини запросы к номенклатуре в самом запросе, т.е 100 доп мини запросов что бы вытянуть представление. Отсюда вопрос, не отработает ли быстрее два раза применить выборка.номенклатура чем 100 раз в запросе обращение к номенклатуре.представление?
    Последнее редактирование: 16 апр 2015
  7. TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.755
    Симпатии:
    146
    Баллы:
    104
    По поводу представления.
    Вопрос не в том что ты получаешь на сервере. А в том сколько раз сервер будет вызван. Это требуется для минимизации серверных вызовов.
    --- Объединение сообщений, 16 апр 2015 ---
    Второй момент если у тебя в табличной части 100 товаров. А не хватает только двух то ты условия то накладывай и отбирай только те в которых остаток меньше нуля. То есть ты сформировал движения. В регистре по тем позициям где не хватает товаров ты ушёл в минус. Вот ты в запросе и ставь отбор что только те позиции что меньше нуля.
    Завтра или на выходных постараюсь выложить эталонное решение этой задачи. Решение из курсов по подготовке на спеца.
  8. Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    Да, было бы круто. А я в выходные попробую выложить свое "эталонное" на проверку. :D
  9. TopicStarter Overlay
    angelivoin
    Offline

    angelivoin

    Регистрация:
    16 апр 2015
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    Новая версия Задачи.

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

    Вложения:

    • 1Cv8.dt
      Размер файла:
      173,1 КБ
      Просмотров:
      2
  10. TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.755
    Симпатии:
    146
    Баллы:
    104
    Прироста нет. Зато конструктор будет работать.
    Вопрос не в скорости выполнения программы. А в блокировках регистра. Зачем блокировать регистр с партиями если у тебя остатков не хватает? Ещё раз это делается для избавления он проверки на NULL в запросе.
    Затем что бы продемонстрировать новую процедуру проверки остатков при проведение.
    Через кучу точек однозначно менее эффективно потому что будет выполнено неявно левое соединение. А любое соединение это медленно.
    Можешь писать как хочешь... но есть требования экзамена. На курсах Чистова по подготовке к спецу он показывает решение этой задачи с помощью двух регистров. При этом что и для чего подробно объясняет.

    На выходных если будет время выложу решение задачи... оказалось что я его удалил.... Надо заново сделать.
  11. TopicStarter Overlay
    angelivoin
    Offline

    angelivoin

    Регистрация:
    16 апр 2015
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    Последний релиз Задачи

    Вложения:

  12. TopicStarter Overlay
    angelivoin
    Offline

    angelivoin

    Регистрация:
    16 апр 2015
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    Подкорректировал задачу. В Приходной, установил для регистра Партии метку записывать. Так же, убрал реквизит Сумма из регистра ОстаткиТоваров, сумму в данном регистре нам не нужно знать. В Расходной добавил запрос перед записью движений по регистру ОстаткиТоваров для отбора номенклатуры без метки Услуга. Не забываем указывать ссылку на документ).

    Вложения:

Поделиться этой страницей