Автор Тема: Билет 13. Спец по платформе V8  (Прочитано 21830 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Jones

  • Проверенный
  • ***
  • Сообщений: 199
Билет 13. Спец по платформе V8
« : Сентябрь 24, 2015, 10:00:33 am »
13 билет готов. Очень интересный экземпляр, много спорных моментов. Предлагаю обсудить.

Jones

  • Проверенный
  • ***
  • Сообщений: 199
Re: Билет 13. Спец по платформе V8
« Ответ #1 : Сентябрь 24, 2015, 10:09:01 am »
ОУ

Задача из сборника 1.31. Оборудование, СрокГодн и СрокЭкс

Начал делать задачу на одном регистре Оборудование: Номенклатура, СрокГодн, СрокЭкс, Колич, Сумма.
Но дойдя до Себестоимости, вдруг прозрел, что она должна считаться в среднем по Номенклатуре. Переделал. Вынес Сумму в отдельный регистр Себестоимость: Ном, Колич, Сумма.
Считаю, в этом заковыка данной задачи. Будьте внимательны.

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

В отчете получаю среднюю цену делением остатка Себестоимости Номенклатуры на остаток Количества в рег.Себестоимость. Эту Среднюю цену умножаю на Количество остаток Оборудования, так получается Сумма для каждой строки отчета.



БУ
В сборнике такой задачи не нашел.

Долго парился со списанием Деталей вместо Комплектов, указанных в РН и просто Деталей, указанных в ТЧ документа. Проклятый перфекционизм настаивает, что все надо сделать «по человечески», но здравый смысл подсказывает, что на экзамене не будет времени доводить систему до ума.
В общем, плюнул на все и тупо запретил в РН списание Деталей. Как думаете, так пойдет?

Отчет создается очень просто благодаря тому, что Комплект записываю на Субконто1 счета Прибыли, причем и по Дт и по Кт.
Однако, если в проводках на сумму продажи это логично, ведь продается Комплект,
то при списании себестоимости Деталей записывать Комплект в Субконто1 счПрибыли – это уловка ))

ПриЗаписи Операции избавился от лишней записи Набора. Теперь он записывается только если его активность была изменена. Период в движениях заполняется датой документа только если он от нее отличается.



ПР

Продажи бригады за предыдущий квартал вынес в регистр накопления, хотя по хорошему их надо бы получать со счета Прибыли (добавить второе субконто Бригада). Регистр накопления использую потому, что получать из него данные для меня проще и понятнее, а значит меньше вероятность ошибок на экзамене, где промедление сами знаете чему подобно ))

Самыми сложными для понимания у меня остаются задачи на получение базы с отбором по разрезу, как, например, в этой задаче. Для себя решил, на экзамене запрос по ПремииНачальника вслепую делать не буду. Сформирую его в консоли, когда уже будет готов расчет Надбавки.
Связал базовый регистр с основным по «Подразделению», т.к. базу (сумму Надбавки) надо получать только для тех сотрудников, которые работают в одном подразделении с Начальником.
Установил получать базу в разрезе «Сотрудник», благодаря чему поле СотрудникРазрез стало доступно для выборки данных.
Поскольку получить надо наибольшую из надбавок, начисленных Сотрудникам, то сгруппировал РезультатБаза, получая Максимум из них. Так для каждой строки документа была получена сумма наибольшей Надбавки среди сотрудников подразделения.


Zeskord

  • Пользователь
  • **
  • Сообщений: 77
  • ФИО: Андрей Назаров
Re: Билет 13. Спец по платформе V8
« Ответ #2 : Октябрь 25, 2015, 04:37:42 pm »
Интересуюсь только разделом СПР, есть вопросы.
1. В вашем решении ПВР ДН зависит по периоду действия от ПВР ДН, но ПВР ДН не использует период действия. Почему именно так? Почему не по периоду регистрации?
2. Зачем справочник Бригады? Что мешало использовать справочник Подразделения?
3. Почему в регистре ОН измерение "Сотрудник"? Мы все равно в рамках этой задачи не получаем базу, почему сотрудник именно измерение, а не реквизит?
4. Почему в регистре ДН измерение "Сотрудник"? Ведь мы связь с базой делаем по подразделению. Конечно, оно и так будет работать, но все же.
5. Дополнительные начисления в документе могут быть введены только за тот же месяц, в котором дата документа. А как же уловие "В одном документе могут быть данные за разные расчетные периоды"? Если это условие выполнить, то получение базы не будет выглядеть так просто :)
6. Зачем перед расчетом премии начальника заново получать набор записей? У нас же до сих пор жива переменная НабЗап от расчета премии сотрудника.


HRom

  • Пользователь
  • **
  • Сообщений: 94
  • ФИО: HRom
Re: Билет 13. Спец по платформе V8
« Ответ #3 : Октябрь 27, 2015, 01:27:03 pm »
При передаче оборудования в эксплуатацию... В том случае, если срок годности истек или оборудования недостаточно, документ не проводится и выдается соответствующее сообщение.

Как реализовать эту проверку на срок годности при передаче в эксплуатацию.
Допустим в документе для оборудования указана 1 шт., на складе есть две единица этого оборудования. Одна просроченная, другая нет. Всё равно весь документ отказываемся проводить?

HRom

  • Пользователь
  • **
  • Сообщений: 94
  • ФИО: HRom
Re: Билет 13. Спец по платформе V8
« Ответ #4 : Октябрь 27, 2015, 02:02:32 pm »
Допустимо ли писать блокировку по пустой дате?

    Блокировка = Новый БлокировкаДанных;
    ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОборудованиеВЭксплуатации");
    ЭлементБлокировки.УстановитьЗначение("СрокЭксплуатации", Дата(01,01,01));
    ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
    ЭлементБлокировки.ИсточникДанных = Товары;
    ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
    Блокировка.Заблокировать();

Jones

  • Проверенный
  • ***
  • Сообщений: 199
Re: Билет 13. Спец по платформе V8
« Ответ #5 : Октябрь 27, 2015, 02:14:07 pm »
Толи я, ото всех этих задач, совсем приехал, толи формулировка ОУ задачи этого билета кажется мне самой «удачной», в плане сложности для понимания, из всех задач по ОперУчету.
Считаю, составители билетов постарались на славу ))

Что надо делать, я сформулировал для себя следующим образом:

В справочник Номенклатура добавить рекизит СрокЭксплуатации (число дней)
В ПН добавить в ТЧ реквизит СрокГодности (тоже число в днях)

Добавить регистр остатков Оборудование
измНоменклатура
измСрокГодн
измСрокЭкс
ресКолич

т.к. Себестоимость, по заданию,  средняя по Номенклатуре (а не по срокам), то добавляем второй рег остатков Себестоимость
измНоменклатура
ресКолич
ресСумма

Док ПН приходует в оба регистра.
СрокГодн=ДатаДок+(ТЧ.СрокГодн*СекундВДне)
СрокЭкс оставляем пустым, т.е. оборудование после покупки попадает в неприятое в эксплуатацию

Док ВводВЭкс регистр Себестоимость не трогает.
Получает остатки оборудования, еще годного, но невведенного в экспл:
СрокЭкс=Дата(1,1,1) и СрокГодн > ДатыДок
Упорядочить по СрокуГодн
Списывать Оборудование без СрокаЭксплуатации,
приходовать СрокЭкс=Дата+(Ном.СрокЭкс*СекундВДне)
Контроль остатков по тарой методике, блокируем рег Оборудование с отбором по Номенклутуре из ТЧ

Док Выбытие списывает Себестоимость и Оборудование
Рег Себест блокирую целиком, рег Оборудование блокирую с отбором по СрокГодн и СрокЭкс в диапазонах от начала времен до ДатыДок.
Получить остатки Оборудования:
1)в экспл и СрокЭкспл истек или СрокГодн истек
2)невведенное в экспл и СрокГодн истек
3)Плюс для Номенклатуры получить Себестоимость
Сгруппировать по Номенклатуре
Обходя ВыборкуНом списать Себестоимость (всю или частично)
В ВыборкеОборуд списать Оборуд+СрокГодн+СрокЭкспл

Отчет по ОборудВЭкспл получает остатки рег Оборуд
с отбором СрокЭкс<>Дата(1,1,1)
+ надо получить из рег Себестоимость Цену=Сумма/Кол
Сумма=Колич*Цена
ОставшийсяСрокГодн=РазностьДат(СрокГодн, ПериодОтчета, День)
ОставшийсяСрокЭкс=РазностьДат(СрокЭкс, ПериодОтчета, День)


Решение ОУ прикладываю

Jones

  • Проверенный
  • ***
  • Сообщений: 199
Re: Билет 13. Спец по платформе V8
« Ответ #6 : Октябрь 27, 2015, 02:16:53 pm »
При передаче оборудования в эксплуатацию... В том случае, если срок годности истек или оборудования недостаточно, документ не проводится и выдается соответствующее сообщение.

Как реализовать эту проверку на срок годности при передаче в эксплуатацию?

HRom, эта замысловатая формулировка на самом деле означает, что
оборудование со СрокомГодн <= ДатеДок не должно попасть в выборку запроса ))

Jones

  • Проверенный
  • ***
  • Сообщений: 199
Re: Билет 13. Спец по платформе V8
« Ответ #7 : Октябрь 27, 2015, 02:19:22 pm »
Допустимо ли писать блокировку по пустой дате?

    Блокировка = Новый БлокировкаДанных;
    ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОборудованиеВЭксплуатации");
    ЭлементБлокировки.УстановитьЗначение("СрокЭксплуатации", Дата(01,01,01));
    ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
    ЭлементБлокировки.ИсточникДанных = Товары;
    ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
    Блокировка.Заблокировать();


Похоже, надо использовать диапазоны. Например, как у S_A_E

HRom

  • Пользователь
  • **
  • Сообщений: 94
  • ФИО: HRom
Re: Билет 13. Спец по платформе V8
« Ответ #8 : Октябрь 27, 2015, 02:27:47 pm »
Jones,

Спасибо за ответы.
Подглядел в твоём решении так и сделано.

Только обрати внимание про блокировку идёт речь о документе "ВводВЭксплуатацию". Когда мы выбираем остатки с незаполненным сроком эксплуатации. Я пытаюсь блокировать именно по пустой дате, а не диапазону. Вот меня и терзают смутные сомнения насчет пустой даты.

Jones

  • Проверенный
  • ***
  • Сообщений: 199
Re: Билет 13. Спец по платформе V8
« Ответ #9 : Октябрь 27, 2015, 09:56:34 pm »
речь о документе "ВводВЭксплуатацию". Когда мы выбираем остатки с незаполненным сроком эксплуатации

Все, понял тебя, HRom. Действительно, у меня в доке ВводВЭксп блокировка регистра Оборудование была ограничена лишь Номенклатурой, но ведь мы получаем Оборудование для списания еще и с отбором по СрокЭкс=Дата(1,1,1) и по СрокГодн>ДатыДока
Прорешал весь билет еще раз, в новой версии учел этот момент, добавил две строки:
Эл.УстановитьЗначение("СрокГодн", Новый Диапазон(Дата, Дата(3999,1,1)));
Эл.УстановитьЗначение("СрокЭкс", Дата(1,1,1));

« Последнее редактирование: Октябрь 28, 2015, 07:23:53 am от Jones »

Jones

  • Проверенный
  • ***
  • Сообщений: 199
Re: Билет 13. Спец по платформе V8
« Ответ #10 : Октябрь 27, 2015, 10:22:36 pm »
Еще раз прорешал 13 билет, на этот раз многое сделал по другому.

Про ОУ задачу отписал выше.

БУ задачу прорешал как у S_A_E
Вчитался в задание и обнаружил, что там нет фразы «Сами комплекты определяются в справочнике «Номенклатура» наравне с обычными товарами», поэтому можно запросто сделать Комплекты отдельным справочником. Надо признать, это серьезно упрощает работу, поэтому БУ задача показалась довольно простой.


ПР
Расчетная задача интересна двумя моментами:
Во-первых, Надбавка рассчитывается от Продаж (по БУ) за предыдущий квартал
Во-вторых, ПремиюНачальника надо получать от Надбавки сотрудника его бригады, получившего максимальную сумму надбавки.
При этом задача осложнена еще и тем, что в документе могут быть данные за разные расчетные периоды (что не может не радовать))

Разные расчетные периоды реализованы благодаря ПериодуРегистрации в ТЧ документа.
При первичной записи движений определяю Начало и Конец периода, за который затем будут получены Продажи.
Далее получаю Продажи за этот период, причем с периодичностью Квартал, т.е. теперь можно получить Продажи нужной бригады за нужный Квартал, что нам и требуется.

ПремиюНачальника получаю благодаря разрезу Сотрудники, а в измерения базового и основного регистра записываю Бригаду. Интересно, что Бригада может выступать измерением основного и базового регистра, хотя на самом деле Бригада измерением не является, это реквизит.
Получая максимальную Надбавку, исключаю Надбавку, полученную самим начальником, хотя по условию задачи этого делать было не нужно. В условиях реального экзамена так делать не стану, дабы не гневить богов 1с

В целом ПР задача ясна, но времени на отладку требуется очень уж много. Не представляю, что можно будет сделать на экзамене, если, не дай бог, терминал начнет подвисать.
« Последнее редактирование: Октябрь 28, 2015, 07:59:08 am от Jones »

Jones

  • Проверенный
  • ***
  • Сообщений: 199
Re: Билет 13. Спец по платформе V8
« Ответ #11 : Октябрь 27, 2015, 10:41:47 pm »
1. В вашем решении ПВР ДН зависит по периоду действия от ПВР ДН, но ПВР ДН не использует период действия. Почему именно так? Почему не по периоду регистрации?
Согласен. Базовые записи ПремииНачальника (записи Надбавки) не имеют ФактическогоПД, поэтому зависимость по ПД бессмысленна. В новом решении указал зависимость по ПР.

2. Зачем справочник Бригады? Что мешало использовать справочник Подразделения?
По-моему, в задании сказано именно про Бригады, а Подразделения не упоминаются.

3. Почему в регистре ОН измерение "Сотрудник"? Мы все равно в рамках этой задачи не получаем базу, почему сотрудник именно измерение, а не реквизит?
Zeskord, Вы совершенно правы, Сотрудник должен быть именно реквизитом т.к. в задании сказано: "Каждый сотрудник может работать одновременно только в одной бригаде, то есть совместительство не допускается"

4. Почему в регистре ДН измерение "Сотрудник"? Ведь мы связь с базой делаем по подразделению. Конечно, оно и так будет работать, но все же.
Пока не втречал решений, где Сотрудник не был бы измерением всех используемых РР. Не хочу на экзамене выступать новатором.

5. Дополнительные начисления в документе могут быть введены только за тот же месяц, в котором дата документа. А как же уловие "В одном документе могут быть данные за разные расчетные периоды"? Если это условие выполнить, то получение базы не будет выглядеть так просто :)
Да, было такое упущение. Теперь разобрался, что ПериодРегистрации надо делать в ТЧ, а относительные периды для расчета брать уже от него. В крайнем решении учел эту формулировку задачи.

6. Зачем перед расчетом премии начальника заново получать набор записей? У нас же до сих пор жива переменная НабЗап от расчета премии сотрудника.
Моя ошибка, результат копипаста. В крайнем решении от этой схемы избавился, в процедуру РасчетНачислений() передаю Движения.ОН и Движения.ДН, а их читать вообще не надо.

Zeskord, я очень признателем Вам за серьезный комментарий. Чувствую, как грамотная критика указывает мне путь к познанию платформы.




HRom

  • Пользователь
  • **
  • Сообщений: 94
  • ФИО: HRom
Re: Билет 13. Спец по платформе V8
« Ответ #12 : Октябрь 28, 2015, 01:20:48 pm »
Продажи бригады за предыдущий квартал вынес в регистр накопления, хотя по хорошему их надо бы получать со счета

А почему лучше со счета?
Я бы вообще Регистр сведений забахал, в него данные можно руками вбивать. Не надо описывать никаких доп.движений.

HRom

  • Пользователь
  • **
  • Сообщений: 94
  • ФИО: HRom
Re: Билет 13. Спец по платформе V8
« Ответ #13 : Октябрь 28, 2015, 01:35:56 pm »
Jones,

и у тебя и у Sae в расчетной задаче не реализовано:

В одном документе могут быть данные за разные расчетные периоды.


        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |   НачислениеЗарплатыОсновныеНачисления.Сотрудник,
        |   НачислениеЗарплатыОсновныеНачисления.Бригада,
        |   НачислениеЗарплатыОсновныеНачисления.ВидРасчета,
        |   НачислениеЗарплатыОсновныеНачисления.Размер КАК Размер,
        |   НачислениеЗарплатыОсновныеНачисления.ДатаНачала КАК ПериодРегистрации,
        |   НАЧАЛОПЕРИОДА(НачислениеЗарплатыОсновныеНачисления.ДатаНачала, МЕСЯЦ) КАК БазовыйПериодНачало,
        |   КОНЕЦПЕРИОДА(НачислениеЗарплатыОсновныеНачисления.ДатаОкончания, МЕСЯЦ) КАК БазовыйПериодКонец,
        |   СУММА(ЕСТЬNULL(ПродажиПоБригадам.Продажи, 0) * НачислениеЗарплатыОсновныеНачисления.Размер) КАК Результат
        |ИЗ
        |   Документ.НачислениеЗарплаты.ОсновныеНачисления КАК НачислениеЗарплатыОсновныеНачисления
        |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиПоБригадам КАК ПродажиПоБригадам
        |       ПО НачислениеЗарплатыОсновныеНачисления.Бригада = ПродажиПоБригадам.Бригада
        |           И (ПродажиПоБригадам.Период МЕЖДУ НАЧАЛОПЕРИОДА(НачислениеЗарплатыОсновныеНачисления.ДатаНачала, КВАРТАЛ) И КОНЕЦПЕРИОДА(НачислениеЗарплатыОсновныеНачисления.ДатаНачала, КВАРТАЛ))
        |           И (НачислениеЗарплатыОсновныеНачисления.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ДополнительныеНачисления.Надбавка))
        |ГДЕ
        |   НачислениеЗарплатыОсновныеНачисления.Ссылка = &Ссылка
        |   И (НачислениеЗарплатыОсновныеНачисления.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ДополнительныеНачисления.Надбавка)
        |           ИЛИ НачислениеЗарплатыОсновныеНачисления.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ДополнительныеНачисления.ПремияНачальника))
        |
        |СГРУППИРОВАТЬ ПО
        |   НачислениеЗарплатыОсновныеНачисления.Сотрудник,
        |   НачислениеЗарплатыОсновныеНачисления.ВидРасчета,
        |   НачислениеЗарплатыОсновныеНачисления.Бригада,
        |   КОНЕЦПЕРИОДА(НачислениеЗарплатыОсновныеНачисления.ДатаОкончания, ДЕНЬ),
        |   НачислениеЗарплатыОсновныеНачисления.ДатаНачала,
        |   КОНЕЦПЕРИОДА(НачислениеЗарплатыОсновныеНачисления.ДатаОкончания, МЕСЯЦ),
        |   НАЧАЛОПЕРИОДА(НачислениеЗарплатыОсновныеНачисления.ДатаНачала, ДЕНЬ),
        |   НАЧАЛОПЕРИОДА(НачислениеЗарплатыОсновныеНачисления.ДатаНачала, МЕСЯЦ),
        |   НачислениеЗарплатыОсновныеНачисления.Размер";
« Последнее редактирование: Октябрь 28, 2015, 02:23:45 pm от HRom »

Zeskord

  • Пользователь
  • **
  • Сообщений: 77
  • ФИО: Андрей Назаров
Re: Билет 13. Спец по платформе V8
« Ответ #14 : Октябрь 28, 2015, 01:55:12 pm »

А почему лучше со счета?
Я бы вообще Регистр сведений забахал, в него данные можно руками вбивать. Не надо описывать никаких доп.движений.
Я бы побоялся делать так на экзамене, ибо "ошибка при проектировании структур регистров". Очень трудно будет доказать, что данные о продажах должны храниться в РС.