Консультация для сдачи экзамена "1С:Специалист" по конфигурированию платформы

В данной статье приведено описание решения задач при подготовке к сдаче экзамена на специалиста по платформе «1С:Предприятие 8.3».

Для подготовки к сдаче экзамена на «Специалист по платформе 1С Предприятие 8.3» есть много подобных статей и ресурсов, как на данном сайте, так и за его пределами. После посещения курса «Консультация к сдаче экзамена «Специалист по платформе 1С Предприятие 8.3»» в УЦ№1 я получил ответы на все свои вопросы, приобрёл массу полезной информации как о системе в общем, так и для сдачи данного экзамена. И своими знаниями я постараюсь поделиться с читателями, чтобы они уже на основании своего текущего уровня и подхода при подготовке к экзамену сформировали свою тактику подготовки и стратегию при сдаче самого экзамена. К данной статье приложен файл выгрузки информационной базы с решением билета, который попался мне при сдаче экзамена.

   Конечно, при подготовке мы используем рекомендации при подготовке к экзамену http://1c.ru/spec/texts/prepare_exam.htm. На странице http://1c.ru/spec/questions.htm в самом первом разделе "Экзамены по платформе "1С:Предприятие 8"" указан сборник задач, по которому необходимо проработать представленные в нём задачи (файл выгрузки информационной базы представлен здесь же).  Далее обязательно надо проанализировать свои решения самостоятельно (или что ещё лучше, в паре с опытным программистом-разработчиком) по приведённым спискам наиболее часто встречающихся ошибок, характерных для задач на экзамене (указаны в файле "1С:Специалист" по платформе "1С:Предприятие 8.3" вместе с другими указаниями и правилами проведения экзамена). На сдачу экзамена отводится 5 часов, честно по мне – времени только-только, поэтому все действия должны быть отработаны до автоматизма, скорость написания кода также на высоте. Создайте себе план сдачи с разбивкой по времени, чтобы было проще контролировать ваше продвижение по решению. Например, если вы отвели на выполнение задачи по оперативному учёту 1час 20 минут и не уложились в отведённое время, то лучше начать выполнять следующую задачу, а к текущей вернётесь если останется время. Таким образом возможно больше сделать в общем и повысите свои шансы на сдачу экзамена в целом.

Итак, вы (или вас) записали на сдачу экзамена «Специалист по платформе 1С Предприятие 8.3». В назначенный день и час вы явились на сдачу. Если сдаёте удалённо (не в Москве), то происходит удалённое подключение к серверу с вашего компьютера. Ваши логин и пароль для подключения получаете у менеджера, ответственного за проведение экзамена. Приезжать раньше на сдачу нет смысла – даже если вы получили логин и пароль, компьютер всё равно не доступен. После подключения вас знакомят с правилами проведения экзамена (указаны в файле по ссылке "1С:Специалист" по платформе "1С:Предприятие 8.3"). После того, как вы прочтёте всё, поставите галочку и нажмёте «Начать экзамен» начнётся обратный отсчёт отведённого на экзамен времени – 5 часов. На рабочем столе таймер обратного отсчёта времени и основное окно (интерфейс «Гуру») , в нём 5 закладок с заданиями и полями для комментирования, кнопки перехода в режимы «Конфигуратор» и «Предприятие», а также кнопка перехода на ИТС. Открываем первую задачу и решаем её – настройка пользовательского интерфейса.

Открываем конфигуратор и первым делом я советую настроить в свойствах самой конфигурации режим управления блокировками (переключить на «Управляемый»), а в меню «Сервис» -«Параметры» установить режимы запуска «Управляемое приложение и обычное приложение»(добавьте на панели конфигурации кнопку запуска толстого клиента в обычном приложении) с тем расчётом, чтобы в режиме обычного приложения запускать обработку «Консоль запросов» и разрабатывать в ней запросы. Итак, вернёмся к решению первой задачи – выберем «корень» дерева конфигурации, откроем интерфейс клиентского приложения и произведём его настройку по заданию.

В главном окне интерфейса «Гуру» в нижней части под заданиями есть поле для оставления комментариев. Желательно, чтобы вы заполняли их, особенно при решении задач оперативного и бухгалтерского учётов, сложных периодических расчетов.   

При проведении экзамена решаются 5 типов задач:

  • Оперативного учёта

  • Бухгалтерского учёта

  • Сложные периодические расчёты

  • Бизнес-процессы

  • Управляемые формы

Первая задача по настройке клиентского интерфейса есть во всех билетах. Также во всех билетах присутствуют задачи по оперативному и бухгалтерскому учётов, сложных периодических расчётов. А вот далее вам попадётся задача либо по бизнес-процессам, либо по управляемым формам. Решение задач по управляемым формам в рамках данной статьи не будем рассматривать, рекомендую посмотреть обучающую литературу от 1С: «Профессиональная разработка в системе 1С: Предприятие 8» том 1 и «Разработка управляемого интерфейса». Причём решение задач по оперативному и бухгалтерскому учётов, сложных периодических расчётов считается обязательно к выполнению, без их выполнения экзамен не зачтут и вы получите в комментариях по результатам проверки вашего решения «Задача не реализована целиком» и оценку 2. Без выполненных задач по бизнес-процессам или управляемым формам экзамен можно сдать, если вы не наберёте много штрафных баллов по остальным задачам вдобавок к невыполненной (минус 1,5 балла из 5 начальных). Но лучше до этого не доводить, чтобы поднять свои шансы на сдачу экзамена в целом.

Далее, если у вас в билете задача по бизнес процессам, рекомендую сделать её следующей по очереди. Если же по управляемым формам, то надо посмотреть – если объекты системы (документы, справочники и т.д.)  уже созданы и задание по ним (например, загрузка фото сотрудника в его карточку), то можно сделать сначала эту задачу. Если объектов ещё нет (например, вывод сообщения о нехватке товара в строку с товаром), то выполнить после реализации соответствующей задачи. Резюме по абзацу – лучше сделать задачу по бизнес процессам или управляемым формам (по ситуации) вторым шагом в начале решения билета, чтобы больше времени оставить на важные задачи и над вами на «висел» объем задач по билету в целом.

 

Решение задачи по бизнес-процессу.

Пример решения задачи по бизнес процессам есть на прилагающемуся к сборнику задач диске, выгрузка ИБ «ПримерыДляСборника_83». В целом решение состоит из следующих шагов:

  • Рисование карты маршрута

  • Включение механизма задачи для напоминания

Само решение данной задачи следующее:

  • Создать объект «Задача», далее создать объект «Бизнес-процесс» с одноимённой подсистеме и связать его с объектом «Задача».

  • У объекта «Бизнес-процесс» на закладке «Прочее» создаём карту маршрута, которая в свою очередь состоит из точек маршрута с определёнными свойствами:

— Старт (без свойств)

— Точка разделения (без свойств)

— Точка действия — нужно указать имя действия и адресацию;

— Точка условия – создать событие проверки условия.

— Точка слияния (без свойств)

— Точка завершения(без свойств).

Важно! Если на карте маршрута есть точка условия, то на закладке «Данные» нужно создать реквизит бизнес-процесса типа Булево и в свойствах точки действия на закладке «Адресация» создать проверку условия: Результат = созданный реквизит бизнес-процесса.

Важно! Необходимо следить, чтобы линии соединения точек маршрута были полностью достроены.

Важно! Если точка действия имеет на схеме тень, то это значит, что адресация этой точки групповая (необходимо согласование несколькими пользователями). Установить групповую адресацию можно в свойствах точки действия (вкладка «Адресация»).

  • Создаём основную форму бизнес-процесса.

  • Сделаем переход к задаче на вкладке «Командный интерфейс».

  • Создаём реквизит формы с именем «КартаМаршрута» и типом «Графическая схема», переносим его на форму.

  • У самой формы создаём на клиенте и на сервере событие  — «ПриСозданииНаСервере»:

            БПОбъект = РеквизитФормыВЗначение("Объект");

            КартаМаршрута = БПОбъект.ПолучитьКартуМаршрута();

  • Создаём команду формы «ОбновитьКарту» и выносим её на форму. Создаём обработчик действия на клиенте и на сервере. В серверную часть этого обработчика переносим код из процедуры «ПриСозданииНаСервере». А процедура «ПриСозданииНаСервере» вызывает серверную процедуру «ОбновитьКартуНаСервере».

  • У самой формы создаём на сервере событие  «ПриЧтенииНаСервере» со следующим кодом : КартаМаршрута = ТекущийОбъект.ПолучитьКартуМаршрута();

  • Теперь в нашей задаче на закладке «Адресация» добавить новые реквизиты:

  1. «Исполнитель» с типом СправочникСсылка.ФизическиеЛица.

  2. «Подразделение» с типом СправочникСсылка. Подразделения.

  3. «Должность» с типом СправочникСсылка.Должности».

Важно! Справочника «Должности» нет в каркасной конфигурации, создаём его самостоятельно(можно добавить должности сразу как предопределённые)  если по маршруту необходимо указание должностей сотрудников помимо подразделения (в задаче 4.2 из сборника задач для подготовки, например, должности не нужны).

Важно! Реквизиты «Подразделение» и «Должность» добавляются если они есть в маршруте.

  • На той же самой вкладке «Адресация» в одноимённом поле «Адресация» выбрать уже присутствующий в каркасной конфигурации регистр сведений «РегистрАдресации».

У «РегистрАдресации» необходимо добавить к измерению «Исполнитель» также измерения «Подразделение» с типом СправочникСсылка. Подразделения и

«Должность» с типом СправочникСсылка.Должности»( с должностью такая же ситуация, как и пунктом выше – если нет его по маршруту, то просто не добавляем);

  • Возвращаемся в нашу задачу на вкладку «Адресация» и в поле «Основной реквизит адресации» выбрать ранее созданный нами реквизит «Исполнитель»

  • Далее перейдём на ветку конфигурации «Общие» и в «Параметры сеанса» добавим элемент «ТекущийИсполнитель» с типом «СправочникСсылка.ФизическиеЛица».

  • В свойствах нашей конфигурации откроем модуль сеанса и создадим процедуру «УстановкаПараметровСеанса». Более правильный её код есть на ИТС но мы воспользуемся подходящим для экзамена:

         ТекПользователь = Справочники.ФизическиеЛица.НайтиПоКоду(ИмяПользователя());

            Если ТекПользователь.Пустая() Тогда

                       Сообщение = Новый СообщениеПользователю;

                       Сообщение.Текст = "Не найден пользователь по коду " + ИмяПользователя();

                       Сообщение.Сообщить();

            Иначе ПараметрыСеанса.ТекущийИсполнитель = ТекПользователь;

            КонецЕсли;

  • Теперь возвращаемся в нашу задачу на вкладку «Адресация» и в поле «Текущий исполнитель» выбираем созданного нами в ветке «Общие» — «Параметры сеанса» «ТекущийИсполнитель»

  • Далее нам надо связать реквизиты адресации с измерениями «РегистраАдресации». Для этого открываем реквизит и в его свойствах на закладке «Адресация» выбираем соответствующее измерение регистра.

  • Вернёмся на карту маршрута и для каждой точки действия установим адресацию – выберем в соответствие со схемой маршрута.

  • Теперь нам надо создать пользователей. Но сначала нужно создать роль. Для этого в ветке «Общее» — «Роли» добавляем новую роль. Назовём её «Полные права» и установим ей, соответственно, полные права. Теперь обязательно обновим конфигурацию базы данных. Далее через пункт «Администрирование» — «Пользователи» добавим пользователей по нашей схеме маршрута и установим им созданную чуть ранее роль «Полные права». Добавлять вообще все пользователей из таблицы по заданию не стоит, главное, чтобы для каждой точки действия был хотя бы один пользователь, а в случае с групповой адресацией точки действия – хотя бы два пользователя.

  • Создадим форму задачи, назовём её «ФормаСпискаПоИсполнителю» и сделаем её неосновной. Откроем форму и у основного реквизита «Список» в его свойствах выберем иную основную таблицу в разделе «Объект» — нам нужна с именем «ИмяЗадачи.ЗадачиПоИсполнителю». В нашем случае это «Задача. ЗадачиПоИсполнителю».

  • У самой формы в свойствах отключим «Автозаголовок» и в событии «ПриСозданииНаСервере» разместим следующий код:

                   Заголовок = "Список незавершённых задач по исполнителю: " + ПараметрыСеанса.ТекущийИсполнитель;

  • И теперь в свойствах конфигурации откроем рабочую область начальной страницы и разместим на ней  «ФормуСпискаПоИсполнителю».

  • Теперь самое интересное и важное! Запустим наше конфигурацию на отладку. Зайдём в подсистему «Бизнес процессы» и настроим наш регистр адресации. Всего адресация может быть:

— персональная (прямая связь задачи и сотрудника);

— ролевая (связь задачи и сотрудника происходит через роли – совокупность подразделения и/или должности).

 

Важно! В каркасной конфигурации для сдачи экзамена в предопределённых данных справочника "Физические лица" может не быть сотрудников по маршруту бизнес — процесса. В таком случае их необходимо добавить в справочник  самостоятельно.

Важно! Если в маршруте стоит сотрудник, то именно так только сотрудника и заносим в регистр сведений – это персональная адресация.

Если указана должность сотрудников на точке действия, то указываем фамилию и должность. Если ещё и подразделение, тогда фамилию, должность и подразделение. А если только подразделение(например, любой сотрудник отдела такого-то…) – тогда фамилию и только подразделение.

Заполняем таким образом весь регистр адресации в соответствии с заданием и созданными нами пользователями.

Теперь надо создать задачу от пользователя, стартовать её и пройти весь маршрут согласования с перезаходом в систему сотрудниками по маршруту и убедится в правильности работы  созданного решения.

Итак, мы выполнили все условия поставленной задачи:

  • Предоставили пользователю возможность в режиме 1С:Предприятия видеть текущее состояние бизнес-процесса на карте маршрута;

  •  Подключили механизм автоматического создания задач при продвижении по карте маршрута бизнес-процесса;

  •  При запуске в режиме «1С:Предприятие» на рабочем столе отобразили список невыполненных задач текущего пользователя. Кроме того, пользователь имеет возможность видеть полный список задач.

    При решении задач в целом рекомендовано делать формы документов. Объекты конфигурации не надо дублировать! То есть в решении задач по оперативному и бухгалтерскому учёту используем одну и ту же накладную. Делать отдельную накладную для решения другой задачи не нужно. На крайний случай у документа можно сделать реквизиты булевского типа с наименованиями «ОУ» и «БУ» и в процедуре «Обработка Проведения» написать:

                      Если ОУ Тогда «проведение по оперативному учёту», ИначеЕсли БУ Тогда «проведение по бухгалтерскому учёту», КонецЕсли;

Всё решение построено на работе с данными:

— организация мест хранения;

— запись данных;

— чтение данных;

Чтение данных через объектную модель возможно, если требуется получить данные одного объекта. Если необходимо получить данные нескольких объектов, тогда необходимо использовать запрос.

    При решении задач оперативного учёта и бухгалтерской задачи используется две методики проведения («традиционная» и «новая). У многих (особенно начинающих) здесь появляется вопрос: когда использовать «традиционную», а когда «новую» методику проведения? Здесь всё очень просто: если мы только пишем в регистр, тогда «новая» методика проведения. Если же мы читаем из регистра и пишем же в него – тогда «традиционная». Но есть небольшая разница в действиях при проведении документа по «новой» и «традиционной» методике – пример есть в приложенном файле к данной статье при проведении документа «Расходная накладная» в решении задачи по оперативному учёту, а также последовательность действий при различных методиках в файле к данной статье.

     Также обращу внимание на создание управляемых блокировок при обусловленном проведении документов по регистрам – здесь тоже в общем ничего сложного. Во-первых – в свойствах конфигурации нужно установить «Режим управления блокировкой данных» в значение «Управляемый». Во-вторых – установим эту самую  управляемую блокировку при помощи объекта «Блокировка данных». Текст самой блокировки примерно следующий:

Блокировка = Новый БлокировкаДанных;

ЭлементБлокировки = Блокировка.Добавить("указываем тип и имя регистра");

ЭлементБлокировки.УстановитьЗначение("Измерение регистра", Блокируемое значение(например, реквизит документа или счёт из плана счетов));

ЭлементБлокировки.ИсточникДанных = ИмяТабличнойЧастиДокумента.Выгрузить("СтрокиТабличнойЧасти", "КолонкиТабличнойЧасти");

ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Измерение регистра ", " КолонкиТабличнойЧасти ");

ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;

Блокировка.Заблокировать();

В случае с «новой» методикой проведения документов, действия немного иные. Сначала выполняем запрос для получения данных из документа и пишем движения по регистру (расходные). Далее  используем свойство  регистров накопления и бухгалтерии «Блокировать для изменения» — необходимо заблокировать те данные, которые мы собираемся читать и впоследствии изменять.

Установим необходимость блокировки данных в регистре: Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;

Далее запишем пустые наборы записей, чтобы читать остатки без учета данных в документе: Движения.ОстаткиНоменклатуры.Записать();

Управляемая блокировка будет установлена в момент записи этих наборов записей, то есть как раз перед выполнением запроса для получения отрицательных остатков.

Далее выполним запрос для получения отрицательных остатков после формирования расходных записей по регистру. Если результат запроса не пустой (появились отрицательные остатки) , тогда обходим выборку в цикле с выводом сообщения и отказом в проведении документа в целом.

Отдельно упомяну об отчётах к задачам: в целом сами они несложные,  но их нереализация или реализация в неправильной форме снимает от 0,5 до 1 балла. Теме отчётов можно посвятить отдельную статью, для получения ответов на возможные ваши вопросы по этой теме сейчас порекомендую литературу от 1С: «Разработка сложных отчетов в "1С:Предприятии 8.2". Система компоновки данных».

 

Решение оперативных задач.

      Проектирование решения оперативной задачи лучше всего начать с разбора отчётов – посмотрим какие данные необходимо получить в отчётах и исходя из этого спроектируем измерения и ресурсы наших регистров. Тип регистров накопления также необходимо выбрать корректно – регистр накопления типа «Остатки» даёт возможность получить (хоть и менее эффективно) «Обороты» из своих виртуальных таблиц, а вот для регистра типа «Обороты» понятие «Остатки» не имеет смысла: оборотный регистр накапливает только обороты, остатки ему безразличны. Поэтому единственной виртуальной таблицей, которую будет создавать система для такого регистра, будет таблица оборотов. Спроектируем также состав иных хранилищ данных (константы, регистры сведений и т.п.) для нашей задачи.

Документа как правило два – приходная и расходная накладные. Могут ещё быть другие документы, но всё зависит от условии задачи. Теперь посмотрим на документы в каркасной конфигурации и доработаем их по нашей задаче – добавим реквизиты документа, добавим/изменим реквизиты табличной части документа. Создадим формы документов и в ней добавим расчёт суммы по строке при наступлении событий «При изменении» колонки «Количество» и  «Сумма» — у нас же автоматизация»! Создадим регистры накопления, назначим им регистраторами документы приходная и расходная накладные и в формах самих документов откроем переход к записям этих регистров на вкладке в форме «Командный интерфейс». Построим движения по регистрам при помощи конструктора движений – проведение у нас безусловное, поэтому остатки не контролируем. Но тут есть нюанс – лучше получить данные из документа при помощи запроса и отсечь услуги по документу (по условию задачи в табличной части могут быть как услуги, так и товары) и избавимся от дублей ( группировка по полю «Номенклатура» и агрегатная функция «Сумма» по полям «Количество» и «Сумма»). Также приведу лайфхак – движения, построенные при помощи конструкторов (движения, запроса и т.д.) заключены в фигурные скобки и имеют комменты о начале и конце построенных движений конструктором. При повторном запуске конструктора всё содержимое между этими фигурными скобками перезаписывается и все внесённые изменения теряются. Отсюда вывод – если нам нужно сохранить текущую отредактированную версию, то просто перенесём все комментарии о движении и фигурные скобки конструктора в конец процедуры, ничего между них не оставив. Тогда при повторном запуске конструктора у нас будет текущий код и новый, который разместится как раз между фигурных скобок.

      А проведение документа «Расходная накладная» уже обусловленное и необходимо контролировать остатки товаров, сортировать остатки и т.д. Для этого в процедуре проведения документа получаем необходимы данные как объектным методом (например, получение метода списания на данный год), так и запросом (остатки на конкретном складе, сортировка по методу списания и т.д.). Далее идёт всё в той же самой процедуре «Обработка проведения» обход результата выборки, контроль возможности списания и вывод сообщений пользователю в случае нехватки товара. Если товара достаточно для проведения документа – строим движения по регистрам. Напомню, что перед запросом к базе данных необходимо установка управляемой блокировки по тем измерениям регистра, данные которых мы собираемся читать (пример указан выше) в случае «традиционной» методики проведения. Если методика «новая» — то мы сначала пишем движения, блокируем данные по регистру и проверяем на отрицательные остатки регистр.

Также при проведении данные необходимо получить на момент времени документа – момент времени представляет собой совокупность даты, времени и ссылки на объект базы данных. Для этого в запросе устанавливаем параметр виртуальной таблицы Период = &Период и перед выполнением запроса устанавливаем его значение – "Период", МоментВремени(). Можно использовать следующую конструкцию:

  • Если Режим = РежимПроведенияДокумента.Оперативный Тогда Запрос.УстановитьПараметр("Период", Неопределено ); Иначе Запрос.УстановитьПараметр("Период", "МоментВремени() ) ; КонецЕсли;

Смысл следующий – при оперативном проведении запрос будет строится быстрее при указании пустого временного интервала, а если документ проводим неоперативно – берём момент времени документа.

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

Для случаев, когда необходимо получить данные об остатках, включая движения, относящиеся к дате или моменту времени, применяют значения параметра Период с типом значения Граница и видом границы Включая: 

  • Запрос.УстановитьПараметр("Период", Новый Граница(МоментВремени(), ВидГраницы.Включая));

Такая установка периода может потребоваться при «новой» методике проведения документа – остатки нам нужно уже получить включая движения самого документа.

      В задаче может быть работа с себестоимостью в разрезе партионного или складского учёта, при этом возникает так называемая «проблема копеек». Для её решения используем простую методику: при обходе результата выборки по партиям/складам сравниваем количество оставшегося товара к списанию и остатка по конкретным партиям/складу, если оставшегося к списанию товара больше – тогда списываем всю партию целиком, иначе высчитываем себестоимость 1 единицы товара по партии/складу и умножаем на списываемое количество. 

      Отчёты по задачам оперативного учёта строим на СКД, в целом сами отчёты несложные, но надо потренироваться с их построением. Источник данных для них как правило запрос, могут иметь место произведение расчётов как в запросе, так и уже на вкладке «Вычисляемые поля». Для вывода итогов указываем нужные поля на закладке «ресурсы», параметры запроса корректируем на закладке «Параметры». Окончательный вид отчёта производится на закладке «Настройки». 

 

Решение бухгалтерских задач.

Как сказано в сборнике к подготовке, для успешного решения подобных задач экзаменуемый должен обладать начальными знаниями по организации бухгалтерского учета на предприятии. Такие понятия, как «принцип двойной записи», «активный» и «пассивный» счет, «дебет» и «кредит» и так далее являются основополагающими. Без их знания нельзя приступать к решению задач данного раздела.

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

— синтетический – подсчета

— аналитический – субконто

И два механизма: измерения и субконто.

Признак учёта субконто есть только у регистра бухгалтерии, привязывается только субконто. В то время как признак учёта – сразу ко всему счету. Если нужны только обороты – субконто оборотное.  Для грамотного решения задачи необходимо правильно спроектировать состав плана счетов и виды субконто.

Для начала отредактируем под условия нашей задачи план видов характеристик «Виды субконто» — обозначим нужные нам типы значений характеристик субконто. При необходимости создадим нужные нам и тоже укажем их в типах значений характеристик субконто. На закладке «Предопределённые» создадим необходимые для нашей задачи характеристики. Они могут иметь как ссылочные типы, так и примитивные (например, тип «Дата» для субконто «Срок годности»). В предопределённом для нашей каркасной конфигурации плане счетов «Управленческий» на вкладке «Субконто»  укажем в поле «Виды субконто» план видов характеристик «Виды субконто» и максимальное количество субконто(количество определим по условию задачи, но как правило больше 3-х субконто не используется даже в жизни). На вкладке «Данные» плана счетов укажем признаки учета для счетов, а на вкладке «Субконто» —  признаки учёта субконто.Далее на вкладке «Прочее» переходим к предопределённым счетам плана. С нумерацией плана счетов бухгалтерского учёта они не имеют ничего общего, но здесь решается другая задача – проверяется просто понимание работы со счетами.  Для наших проводок по заданию настроим признаки учёта счетов, состав субконто и признаки учёта субконто (напомню, что если по субконто нужны только обороты, то проставим галку у свойства «Только обороты»). Создаём регистр бухгалтерии (можно назвать его как и план счетов – «Управленческий)», связываем с планом счетов и указываем поддержку корреспонденции счетов. На закладке «Данные» укажем ресурсы, которые нам необходимо накапливать. Измерения мы не используем, для этого есть субконто(измерения нужны для консолидированного(объединённого) учёта в разрезе нескольких организаций). Укажем регистраторами для нашего регистра документы «Приходная накладная» и «Расходная накладная». Конструктором построим движения приходной накладной по нашему регистру бухгалтерии. Обратим внимание, что здесь есть указание движений по счетам Дт (дебета) и «Кт» (кредита). Так же у нас появились движения по субконто счетов. Проведение расходной накладной у нас будет уже обусловленным и в процедуре «Обработка проведения» необходимо выполнение некоторых действий:

  • Установим флаг необходимости записи: Движения.Управленческий.Записывать = Истина;

  • Возможно получение дополнительных сведений как из справочников, так и регистров (учётной политики на текущий год и т.д.).

  • Удаление собственных старых движений по регистру при перепроведении, чтобы читать остатки без учета данных в документе — Движения.Управленческий.Записать();

  • Установка управляемой блокировки.

  • Получение запросом данных из проводимого документа, справочников и различных регистров с учётом отборов(параметры виртуальных таблиц, условия отбора «Где» и т.д.             

  • Данные необходимо получить на момент времени документа – Момент времени представляет собой совокупность даты, времени и ссылки на объект базы данных. Для этого в запросе устанавливаем параметр виртуальной таблицы Период = &Период и перед выполнением запроса устанавливаем его значение – "Период", МоментВремени().

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

     По условиям задачи необходимо создать документ, чтобы пользователь мог формировать проводки с корреспонденцией счетов. Для решения этой задачи нужно буквально 3 минуты:

  • создать документ с именем «РучнаяОперация», разместить его в соответствующей подсистеме.

  • на закладке «Движения» запретим проведение этого документа.

  • у регистра бухгалтерии назначим наш новый документ регистратором.

  • вернёмся к нашему документу и создадим основную форму. Раскроем основной реквизит «Объект» — «Движения» и перетащим к элементам набор записей движений по регистру бухгалтерии. Согласимся на добавление колонок. Можно сгруппировать колонки по признаку (например, субконто по Дт или Кт в одну вертикальную группу), чтобы табличная часть документа не была так растянута по горизонтали.

  • всё, документ готов!

Отдельно надо рассмотреть отчёты по регистрам бухгалтерии, т.к. количество виртуальных таблиц составляет 6 и у каждой есть специфические параметры. Кроме этого на закладке в СКД «Параметры» необходимо устанавливать соответствия субконто и их значений с тем расчётом, чтобы пользователь не мог поменять порядок следования субконто.   

 

Сложные периодические расчёты.

      Как пишет 1С в сборнике для подготовке – «Сложные периодические расчеты являются наиболее трудными для освоения». Давайте разберёмся, чтобы эти расчеты стали простыми, ну или понятными в общем…

Каждый вид расчета это отдельная формула, по которой происходит расчет. Для начала  — напишем как рассчитываются наши виды расчета (по заданию) и откуда берутся эти операнды формул.

Виды расчета могут быть как «Начисления», так и «Удержания».

Выплата – это остаток, решается эта задача на р егистре накопления вида «Остатки».

Для учета фактического использования рабочего времени используется две методики:

  • метод "отклонений", при котором отработанное время определяется на основании данных графика работы и зарегистрированных отклонений от графика (неявок и сверхурочной работы);

  • метод "начисление по табелю", при котором наряду с регистрацией документов-отклонений ведется регистрация фактически использованного времени.

В типовых решениях используются обе методики, а на экзамене только одна из них.

Для решения задачи необходимо ответить на вопрос – «сколько такого-то вида времени в таком-то периоде?».

Итак, разберём всё по порядку:

  • Виды времени:

  1. Календарное время

    1. фиксированная сумма

    2. начальная дата – конечная дата

  2. Рабочее время.

Это плановое время, которое решаем методом «ПолучитьДанныеГрафика». Используются графики работ для хранения этих данных.

  1. Фактическое время

    1. метод отклонений – включаем механизм получения данных графика

    2. начисление по табелю – получаем из табеля

  • Виды периодов:

  1. Период регистрации – дата регистрации события.

                               — длина — период начисления(месяц)

                               — левая граница – дата (начало месяца)

  1. Период действия ведём в двух случаях: для вида расчёта нужны данные графика или вид расчёта является вытесняющим или для него есть вытесняющие виды расчёта.

                              — длина — период начисления (месяц)

                              — левая граница — дата (начало месяца)

  1. Фактический период действия:

                             — период действия начало (дата)

                             — период действия конец(дата)

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

У регистров расчёта есть виртуальная таблица «ФактическийПериодДействия». Она используется только для расчётов со свойством «Зависит по периоду действия» или для построения диаграммы Ганта.

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

Важно! Данные в регистр расчёта вводятся только документом «Начисление зарплаты».

  1. Базовый период: характеризуется двумя границами:

                            — базовый период начало (дата)

                            — базовый период конец (дата)

Например, считаем премию: Премия = % * НачисленныйОклад. Начисленный оклад рассчитан и зафиксирован в регистре расчёта. Получение начального оклада через специальный механизм «ПолучениеБазы:

      — Период – базовый период

     — Базовые виды расчета

    Для решения задачи далее определяем места хранения данных. Это, конечно же, регистры расчёта.

Регистры расчёта.

  1. У регистра расчёта 5 измерений:

               — Вид расчёта

               — Период расчёта

               — Период действия

               — Фактический период действия

               — Базовый период

              + собственные измерения (например, «Сотрудник»).

  1. Регистр расчёта по сути похож на регистр оборотов. У регистра расчёта одна физическая таблица, аналогична таблице движений. Данные получаем из регистра расчёта используя и ресурсы, и измерения и реквизиты.

Для получения строки Сторно используется метод «ПолучитьДополнение()». Далее полученные данные программно обрабатываем и записываем в регистр.

 

Решение расчётной задачи начинается с постановки задачи:

  • Определим виды расчёта (помним, что каждый вид расчёта это отдельная формула); Самостоятельный вид расчёта должен быть зафиксирован в регистре расчёта.

  • Для каждого элемента (операнда) формул расчёта определим либо место хранения, либо способ расчёта.

  • Определим последовательность начислений (например, сначала считаем оклад, а потом только премия от него процентом. И никак иначе!). Последовательность не может быть произвольной и определяется программным кодом.

  • Далее настроим зависимость видов расчётов: составим таблицу, в которой для каждого из видов расчёта укажем (при соответствующем наличии) вытесняющие, базовые, ведущие виды расчётов и признак учёта периода действия. При том имеем в виду, что вытесняющие изменяют вид расчёта и вытеснение может происходить в одну строну! Для тарифа не нужен период действия!

  • Количество планов видов расчёта определяем сами, и количество регистров расчёта определим исходя из этого – под каждый регистр расчёта свой план видов расчёта. Настроим наши планы видов расчёта под задачу.

  • Если по условии задачи есть график работы, тогда создаём справочник «Графики работы» с предопределённым элементом «Пятидневка». В каркасной конфигурации уже создан одноимённый регистр сведений, который можно заполнить в режиме «1С:Предприятие» присутствующей в каркасной конфигурации обработкой «ЗаполнениеГрафика»(отразим только её в нашей подсистеме расчётов). У регистра добавим измерение «График» с типом «СправочникСсылка.ГрафикиРаботы».

  • Создаём регистры расчёта и связываем их с нашими планами видов расчёта. Для того, чтобы понять измерение это или ресурс, используем простое правило: если количество сущностей известно, то это ресурс. А если количество неизвестно – тогда это измерение. Реквизиты у регистров расчёта имеют вспомогательную функцию.

Важно! Для того, чтобы можно было передать значение графика работы механизму расчёта количества рабочего времени, в регистре расчёта создаём реквизит «ГрафикРаботы» с типом «СправочникСсылка.ГрафикиРаботы». А для передачи значения графика механзму расчёта, установим значение свойства этого реквизита в разделе «Данные» — «Связь с графиком»: указываем имя измерения регистра-календаря, в котором содержатся значение графиков.

  • Укажем документ «Начисление зарплаты» в качестве регистратора для наших регистров расчёта.

  • Создадим/изменим и отразим в нашей подсистеме дополнительные объекты для хранения и получения данных по сотрудникам (в соответствии с задачей). Это могут быть регистры сведений с размером оклада (регистр «Сведения о сотрудниках» уже есть в каркасной конфигурации), вилкой процента премии в зависимости от выручки подразделения и т.д.

  • Теперь доработаем наш документ «Начисление зарплаты», который будет основной «рабочей лошадкой» сеанса расчёта. Создаём соответствующие нашей задаче реквизиты документа и реквизиты табличной части документа «Начисление зарплаты». Добавим, например, реквизит «Период регистрации», реквизиты табличной части документа – «Подразделение», «График работы» и т.д. Табличных частей может быть как две, «Основные начисления» и «Дополнительные начисления», так и одна – указываем все данные в одной табличной части. Создадим форму документа, отредактируем её (например, удобно сгруппируем для пользователя поля табличной части), напишем обработчики событий (например, приведём к началу месяца реквизит «Период регистрации» при событиях «При изменении» и «Перед записью») и отобразим переход к записям регистров расчёта на вкладке «Командный интерфейс»

  • Заполним в режиме «1С:Предприятие» в соответствии с нашими данными созданные планы видов расчёта, регистр сведений «Графики Работы» при помощи ранее указанной обработки «ЗаполнениеГрафика», иные регистры сведений созданные для хранения информации по сотрудникам необходимые нам при расчёте зарплаты.

  • Шаги расчёта сеанса расчёта зарплаты можно поделить на следующие:

              — создание записей регистра расчёта со стандартными полями, содержащие исходные данные;

              — путём выполнения запросов к виртуальным таблицам регистра расчёта идёт обращение к его функционалу. В результате чего получаются необходимые данные в виде результата запроса (то есть табличные сущности).

              — последовательный обход записей регистра и применение расчётной формулы, соответствующей каждой записи. Полученный результат помещается в определённый нами ресурс записи.

                       ! Далее идёт многократность выполнения второго и третьего шагов расчёта. Первый шаг сеанса расчёта выполняем один раз, а последующие по числу категорий расчёта.

  • У нашего документа «Начисление зарплаты» при помощи конструктора движений сформируем движения по регистру(ам) расчётов. Движения можно сформировать как при обходе в цикле табличной части документа, так и получить запросом и далее обойти выборку в цикле. Код первого шага достаточно прост – это просто перезапись данных документа в набор записей регистра расчёта и запись набора в информационную базу. Лучше сделать это запросом и получить одновременно данные из регистров сведений (например, размер оклада или процент премии сотрудников).

  • Далее мы обратимся к функционалу регистра расчёта и получим недостающие данные для подстановки в расчётную формулу.  Для таких случаев у регистров расчётов в зависимости от его настроек есть виртуальные таблицы «Данные графика» для получения планируемого и фактически отработанном рабочем времени и «База» для получения суммы базы.  Запросом выбираем движения по регистру сведений с условием отбора по регистратору (нашему текущему документу) и категории расчёта, получаем одновременно данные из регистров сведений (если только не сделали это ранее при записи). Полученная выборка данных передаётся в расчётную процедуру, которая как правило находится в общем модуле и является экспортной. В этой расчётной процедуре обходится выборка, производится расчёт по данной категории расчёта и запись полученного результата. Обходим все категории расчёта и реализуем все виды расчётные формулы. 

  • В процессе подготовки также необходимо разобрать механизм получения и обработки сторно-записей, а также механизм перерасчётов. Также посмотрите формирование отчётов, отдельная тема про отчёт диаграмма Ганта(отчёт приложен к данной статье).

      В данной статье я постарался изложить разбор задач, которые необходимо самостоятельно прорешать перед сдачей экзамена на специалиста по платформе "1С:Предприятие". Возможно я что-то упустил, возможно вы с чем-то будете не согласны — в любом случае  буду благодарен Вам за критику в комментариях.

И ни пуха ни пера на экзамене!

 

5 Comments

  1. mitia.mackarevich

    «Далее запишем пустые наборы записей, чтобы читать остатки без учета данных в документе: Движения.ОстаткиНоменклатуры.Записать();»

    Как минимум это всегда нужно делать, записывать именно пустые наборы в БД. Про сдвиг даты документа ничего не забыли? Для справки запись в БД даже «пустого» набора не самая «легковесная операция».

    Reply
  2. FoxSPb2012

    Митя, ваше замечание в общем правильно, но можно придумать множество других «а если…». Здесь моё предложение для кода при сдаче экзамена по платформе, указанных действий достаточно для корректной работы в рамках поставленной задачи на экзамене.

    Reply
  3. nvv1970

    Для готовящихся к спецу хочу сделать важно замечание.

    От вас требуется сделать именно так как требуется. И ни как иначе. Все в задачах однотипно, блокировки, проверки, алгоритмы.

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

    Просто сделайте по шаблону и получите сертификат. Будете умничать — вас могут заминусовать. Сделаете как от вас требуют — легко получите максимальный бал 5.

    Спец по платформе — это всего лишь одна из самых начальных (если не самая первая) ступенек к самым базовым знаниям.

    Reply
  4. user774630

    (3) +1

    если кому-то кажется, что спец по платформе — «вершина», то по факту это — точка старта.

    Reply
  5. ys_2008

    Спасибо автору за подробное описание. Надеюсь, при сдаче ничего не упущу.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *