Сдавал сегодня, 27.08.2010, в УЦ№1. Принимал Сущеня (мне показалось, что мужик очень адекватный). Сдал, поставили "Зачет", без каких-либо оценок. Рад был очень сильно, такой камень свалился с души.
Я приехал в УЦ примерно за полчаса до начала экзамена. У стойки регистрации мне сразу сказали, что можно проходить в аудиторию. Там еще никого не было. Я сел, включил компьютер, и подумал, а почему бы не сделать заранее еще до начала экзамена то, что будет в любом случае в любом билете, ведь вряд ли будут пересаживать по какой-то причине. Нашел в какой-то из папок dt-шник каркасной конфигурации, загрузил его и сидел создавал подсистемы, распределял по ним все уже существующие объекты и прицеплял к ним картинки (все равно время есть, экзамен то даже и не начался еще). Кстати не понимаю, почему уже имеющиеся объекты нельзя было изначально в каркасной раскидать по подсистемам. Видимо тогда не смогут проверить это умение, поэтому оставили это нам. Дальше добавил регистры бухгалтерии и расчетов, даже набросал болванку бизнес-процесса и задачи (на всякий случай, хотя и не пригодилось. но если бы пригодилось, то сэкономил бы еще больше времени). Проще говоря, советую всем так и сделать, если экзаментора не будет до начала экзамена. Да даже если будет, там при нем тоже кто-то стучал уже раньше времени, как и я. Хотя большинство сидело и плевало в потолок. Ну, кто за чем пришел.
Билет мне попался №8: 1.18, 2.16, 3.35 (без бизнес-процесса и управляемых форм вообще), т.е. практически как и было здесь написано, только без бизнес-процесса и еще с мелкими изменениями, о которых ниже, пока помню. Сразу скажу, что сразу как отлегло, когда попался он, потому что я хотя бы поверил в то, что смогу решить, так как уже решал его и не застряну в тупике.
Когда я стоял в очереди, только и думал, чтобы попался билет из первой 9-ки, так как во второй половине 20-ки билетов у меня была уйма сомнений почти во всех билетах хотя бы по одной задаче. А некоторые задачи я вообще не стал решать оттуда, так как по мне это гиблое дело. Точно видел, что одному из сдающих попался билет №6, другому билет №10, а третьему так же, как и мне билет №8 (у других не видел, у кого-то еще был вроде билет №5). Отсюда следует, что одинаковые билеты тоже могут быть (хотя может быть они и отличаются в мелочах).
Сразу хочу сказать спасибо тем, кто советовал не отлаживать сразу, а оставить это дело на конец. Это действительно так. У меня только по БУ запускали отчет в пользовательском режиме, а про расчетную задачу я сразу сказал, что не успел отладить.
Теперь о задачах.
ОУ. 1.18 (прямо точно такая же, как и в новой редакции задачника, уж не знаю как в старой)
Когда решал при подготовке показалась не сильно сложной. Но по какой-то причине мне в голову не приходило то, что при наличии на момент проведения накладной авансов, нужно провести зачет этих самых авансов с перенесением суммы = МИН(СуммаАванса, СуммаДокунта) на проводимую расходную накладную. то есть, если считать, что приход по взаиморасчетам возникает при реализации (увеличение долга), а расход - при приходе денег (уменьшение долга), то при наличии отрицательных остатков (да еще и с незаполненной партией), т.е. аванса, мы при реализации должны сделать следующее:
1. приход с пустым измерением "накладная" на сумму = МИН(СуммаАванса, СуммаДокунта)
2. расход уже с заполненным измерением "накладная" на ту же сумму
3. простой приход на сумму документа с указанием "накладной".
(разумеется это все делаем, только если аванс был. Если не было, то не заходим в эти операции вообще)
в общем, только на экзамене меня эта мысль посетила, и сразу же охватила небольшая паника из-за возможных подводных камней или того, что я все же гоню из-за нервов и ничего этого делать не надо. но вроде сделал, даже успел начать ее отлаживать. вроде все же я все правильно додумался. когда объяснял преподу, он ничего против не сказал.
БУ 2.16 (уж точно не 2.17, гарантирую. условие идет до фразы "Товар может перемещаться". То есть про перемещения ни слова вообще. При этом про поступление сказано, что в табличной части также указывается склад для каждой номенклатуры. Другими словами, одна партия может сразу приходоваться на несколько складов. Дальше только отчет, причем не такой, как в задачнике, а скорее такой, как в вышеописанной задаче по ОУ, обычные остатки и обороты с количеством и суммой. строится этот отчет по себестоимости, продажи там точно не нужны). Пользователь bor_a в соответствующей теме (http://forum.chistov.pro/index.php?topic=519.msg9248#msg9248) правильно уловил направление, в котором нужно идти, хотя у него все равно там черт знает что, зачем Количественный в признаки субконто? даже не знаю. в общем настройки Плана счетов и Регистра бухгалтерии такие:
План счетов: признак учета "Количественный", признак учета субконто "Суммовой". Счет Товары: Субконто: Номенклатура, Склад, ПриходнаяНакладная (или Партия, кому как удобно); Признак учета счета Количественный = Истина. Признаки учета субконто Суммовой: для Номенклатура = Истина, для Партия = Истина, для Склад = Ложь(!), так как количественный учет у нас будет идти по всем разрезам (без этого просто никак, я пробовал, правда), а суммовой только по партиям, не смотря на склады. в билете даже уточнено, по сравнению с задачником, что в разрезе складов ни в коем случае. соответственно из-за такой структуры нам потом в запросе при реализации нужно будет соединять с двумя "копиями" таблиц остатков, одна с отбором по складу из шапки расходной, а вторая - вообще без отбора. из первой берем количественный остаток по складу, а из второй - партию, количество остаток по партии и суммму остатка по партии. потом в итоговой выборке сверяем количество по нашему складу с количеством из документа (простая проверка на неуход в минус), а уже в детальной выборке смотрим себестоимость каждой партии и определяем сумму, но количество списываем все равно с нашего склада. вроде все. с этим я был очень внимателен и даже кажется у меня потом глаз начал дергаться)) потому что, опять же, при подготовке я делал без этих сложностей, просто в разрезе партий и складов, но озарение пришло в самый нужный момент. еще я начал делать документ "Операция", потом понял, что еще не определился с субконто (смотрю, колонок маловато в табличном поле), оставил на потом, да так и забыл. потом уже пока ждал времени защищаться, вспомнил, что не доделал. но в принципе препод этого и не заметил, он туда не смотрел.
И, наконец, СПР. 3.35
Показалась легкой, даже обрадовался, потом нашел это странное условие, которое и раньше меня тревожило, про "каждые 1000 отработанных часов". я переспросил у экзаменатора, он сказал, что имеется ввиду вообще, с начала времен, а то глядишь и до нашей эры. ну я сразу понял, что дело дрянь. завел оборотный регистр накопления, туда же писал при проведении документа "Начисление зарплаты" отработанные фактические часы по тарифу, там им и полагалось копиться сколько угодно лет, потом для определения компенсации брал обороты на начало периода, прибавлял к ним только что вычесленное фактическое количество часов, потом от этих двух чисел брал Цел(<число> / 1000). Например:
на начало периода было 900. цел(900 / 1000) = 0.
на конец периода было 1100. цел(1100 / 1000) = 1. (да даже если будет после прибавления текущего факта допустим 2100), то получим = 2. потом вычитаем из второго первое (1-0) и получаем количество "пересечения порога тысячи", а значит пора снова платить деньги водителю. причем столько раз, сколько он пересек интервал. создаем принудительно в движениях новую запись и туда пихаем в размер это количество, а базовым периодом ставим период период действия тарифа (тут наверное важно, чтобы у компенсации стояла зависимость от базы по периоду действия, а не по периоду регистрации, что-то мне подсказывает, что это как раз тот важный случай). записываем все это дело, а дальше уже все делаем обычно, берем запросом базу - узнаем сколько тарифа он наработал, там же в запросе берем из регистра сведений процент надбавки и в принципе все, что нужно имеем. перемножаем и записываем. почему нельзя при определении размера сразу записывать в результат, надеюсь понятно, вдруг у нас было две записи с тарифом. хотя может быть и не будет ничего страшного. я как начинаю себе это мысленно представлять, я сразу на каком-то этапе теряю ход мыслей. с прогулами делал обычно. в основных начислениях Прогул, который вытесняет Тариф. а в удержаниях Штраф, куда заносим количество дней прогула помноженное на 5000. обращаю внимание, что ДНЕЙ, а значит в графике нужно еще и ресурс, куда будет для каждого дня заноситься 1. потом для штрафа из графика будем просто брать факт прогула не в часах, а в днях.
в заключении, если кому интересно, кратко об особенностях, которые лично меня волновали, по крайней мере до посещения курсов. блокировки я делал "по старому", так как проведение у меня было по старому, потому что я и брал и записывал в один и тот же регистр. как сказал павел белоусов в своем курсе, в таких ситуациях делаем по старому. если берем данные только из других регистров (в которые потом не будем записывать в этом же проведении) или просто из табличной части документа, то применяем новую методику.
соотвтственно для старой методики всегда очищаем наборы движений перед дальнейшей работой, например. Движения.Взаиморасчеты.Записать(). Таким образом записали пустой набор, все очистилось. А блокировки выглядят так:
для новой методики проведения просто Движения.Взаиморасчета.БлокироватьДляИзменения = Истина;
для старой:
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Взаиморасчеты");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.УстановитьЗначение("Контрагент", Контрагент);
Блокировка.Заблокировать();
если нужно еще другие измерения блокировать, то просто добавляем в середине:
...
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Взаиморасчеты");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.УстановитьЗначение("<другое измерения регистра номенклатуры", <другой реквизит документа>);
...
если хотим все махом, то можно делать по табличной части номенклатура например:
...
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Взаиморасчеты");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры; //СписокНоменклатуры - это табличная часть документа
ЭлементБлокировки.УстановитьИзИсточникаДанных("Номенклатура", Номенклатура);
...
писал сейчас все это по памяти, так что в названиях команд могут быть ошибки, но уж точно не в общем принципе. все это я доузнавал на курсах павла белоусова, они на самом деле все эти тайны раскрыли окончательно, я не пожалел.
если у вас после прочтения столь длинного текста одна извилина не завернулась за другую, то вы точно сможете говорить с инопланетянами на их языке даже без периода адаптации.
Я готовился в течение двух месяцев, на моей новой работе мне даже выделили эти два месяца исключительно на подготовку (и такое бывает). с другой стороны сдача этого экзамена была условием моего испытательного срока. готовился я только на работе, дома никак не мог себя к этому ужасу приучить. основательного опыта у меня наверное даже и года нет, да и тот был во франчайзи, обработку написать, типовую подкрутить. в целом, я не припомню настолько длительной и нервной обстановки, сколько не пытаюсь. ужасно было постоянно долбить одно и то же, а потом просыпаться под давлением этого экзамена. но мне повезло, сдал с первого раза, достался билет без особых выкрутасов в запросах, без разного рода соединений через три колена, а потом последовательных выборок и прочего.
Если кому-то что-то интересно, спрашивайте, я готовился очень основательно, посещал курсы павла белоусова, долбил сам задачи из задачника новой редакции, много долбил. возможно я скоро предпочту весь этот ужас хотя бы немного подзабыть, а то уже снится оно мне все, просыпаешься и тошнит, поэтому спрашивайте сейчас.
Ну и конечно же огромное спасибо всем тем, кто выкладывал свои базы, Павлу Чистову за его "Периодические расчеты" в виде вебинара, а также вообще за существование этого форума, без него я бы вряд ли хотя бы немного приблизился к некоторым прояснениям в большинстве задач и самим моментам сдачи экзамена.