среда, 11 февраля 2015 г.

1c специалист. Задача 2.12.



Решение:

Для решения задачи задействуем следующие объекты:
1) ПВХ "Виды субконто". 

  • Заполняем типы значений характеристик и дополнительные значения характеристик. 
  • Согласно условия задачи заводим 2 предопределенных элемента "Номенклатура"  и "СрокГодности".

2) Дорабатываем план счетов. 

  • Добавляем признак учета субконто "количественный",
  •  на закладке "субконто" заполняяем тип субконто и устанавливаем значение субконто=2.
  • Редактируем предопределенный счет "Товары".(признак учета и субконто).
3) Добавляем регистр бухгалтерии "Управленческий".
  • Связываем его с планом счетов
  • Добавляем ресурсы (количество, сумма)
  • Выбираем регистраторы.
4) Не забываем о том, что в задачах бухгалтерского учета необходимо добавить документ,  с помощью которого можно добавлять записи в регистр вручную. Назовем его "Ручная операция".
 укажем что он является регистратором нашего регистра. 
добавим форму
на форму вытащим реквизит Объект-движения-управленческий.
 5) Переходим к Приходной накладной.
  • В ТЧ добавим реквизит "срок годности".
  • Небольшой "тюнинг". Вешаем процедуру пересчета строки на событие "при изменении" количества и цены, записываем реквизит "сумма по документу" при записи документа.
  • С помощью конструктора движений формируем обработку проведения.
6) Переходим к "Расходной накладной".



  • Заведем РС "ДанныеОрганизации", в котором будем хранить значение лимита списания товара.
  • Проконтролируем уникальность документа в пределах  дня



Процедура ПриЗаписи(Отказ)
Если Не ПроверкаНаУникальность() Тогда
Отказ = Истина;
СообщениеПользователю = Новый("СообщениеПользователю");
СообщениеПользователю.Текст("В программе уже введен документ с этой датой");
СообщениеПользователю.Сообщить();
КонецЕсли;
КонецПроцедуры

Функция ПроверкаНаУникальность()
Запрос = Новый("Запрос");
Запрос.Текст = "ВЫБРАТЬ
| Списание.Ссылка
|ИЗ
| Документ.Списание КАК Списание
|ГДЕ
| Списание.Ссылка <> &Ссылка
| И НАЧАЛОПЕРИОДА(Списание.Дата, ДЕНЬ) = НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ)";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Дата", НачалоДня(ЭтотОбъект.Дата));
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда 
Возврат Истина
Иначе
Возврат Ложь
КонецЕсли;
КонецФункции

  • Пишем процедуру проведения.\

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

Движения.Управленческий.Записывать = Истина;
Движения.Управленческий.Очистить();
Движения.Управленческий.Записать();
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.ТоварыНаСкладах");
ЭлементБлокировки.УстановитьЗначение("Счет", ПланыСчетов.Управленческий.Товары);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();
Лимит =  РегистрыСведений.ДанныеОрганизации.ПолучитьПоследнее(Дата,).ПредельнаяСуммаСписанияТовара ;
Запрос = Новый("Запрос");
Запрос.Текст ="ВЫБРАТЬ
| УправленческийОстатки.Субконто1 КАК Номенклатура,
| УправленческийОстатки.Субконто2 КАК СрокГодности,
| ЕСТЬNULL(УправленческийОстатки.СуммаОстатокДт, 0) КАК ОстатокСум,
| ЕСТЬNULL(УправленческийОстатки.КоличествоОстатокДт, 0) КАК ОстатокКол
|ИЗ
| РегистрБухгалтерии.Управленческий.Остатки(&ТочкаИтогов, Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Товары), &мсубконто, Субконто2 <= &ТочкаИтогов) КАК УправленческийОстатки";
Запрос.УстановитьПараметр("ТочкаИтогов", КонецДня(Дата));
мсубконто = Новый("Массив");
мсубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконто.Номенклатура);
мсубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконто.СрокГодности);
Запрос.УстановитьПараметр("мсубконто", мсубконто);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Движение = Движения.Управленческий.Добавить();
Движение.Период =Дата;
СуммаСписания = Мин(Выборка.ОстатокСум, Лимит);
Движение.Количество = Выборка.ОстатокКол;
Движение.СчетДт = ПланыСчетов.Управленческий.ОбщехозяйственныеЗатраты;
Движение.СчетКт = ПланыСчетов.Управленческий.Товары;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] =  Выборка.Номенклатура;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.СрокГодности] = Выборка.СрокГодности;
Движение.Сумма = СуммаСписания;
Если Выборка.ОстатокСум > Лимит Тогда
Движение = Движения.Управленческий.Добавить();
Движение.Период =Дата;
СуммаСписания = Выборка.ОстатокСум - Лимит;
Движение.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки;
Движение.СчетКт = ПланыСчетов.Управленческий.Товары;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Выборка.Номенклатура;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.СрокГодности] = Выборка.СрокГодности;
Движение.Сумма = СуммаСписания;
КонецЕсли;
КонецЦикла;
Движения.Управленческий.Записать();

КонецПроцедуры

7) Делаем отчет.



Надеюсь Вам также будет интересен 




Этот видеокурс поможет Вам:
  • Избежать типичных и нетипичные ошибок в 1С:Бухгалтерия 8;
  • Cэкономить Вам время и силы;
  • Более уверенно работать с программой.

вторник, 10 февраля 2015 г.

1c специалист. Задача 2.11.

Условие из сборника:
Компания занимается торговлей продуктами питания. Учет товаров ведется в разрезе сроков годности. Под сроком годности понимается календарная дата, до которой товар годен к употреблению. На один и тот же товар с разными сроками годности при его поступлении может указываться разная цена. Например, на товар со сроком годности 10 января 2010 цена может быть ниже, чем на товар со сроком годности 30 января 2010. Товар с одинаковым сроком годности может поступать разными документами и по разной цене. Возможна ситуация когда в одном документе один и тот же товар поступает с разными сроками годности (и по разной цене). Учет товаров в разрезе складов не ведется. Документ «Приходная накладная» реализует следующую проводку:Дт «Товары» - Кт «Поставщики» на количество и сумму закупаемого товара.Продажа товара регистрируется документом «Расходная накладная». При продаже срок годности не указывается. В первую очередь списывается товар с наименьшим календарным сроком годности. Себестоимость определяется как средняя по товару по всем срокам годности. Т.е. например если 1 пачка йогурта со сроком годности 10.01.2010 поступил по цене 90 рублей и еще 1 пачка того же йогурта, но со сроком годности 30.01.2010 поступила по цене 110 рублей, то при списании себестоимость одной пачки данного йогурта равна 100 рублей.
Документ «Расходная накладная» реализует следующие проводки:
Дт «Прибыли и убытки» - Кт «Товары» на количество и сумму себестоимости;
Дт «Покупатели» - Кт «Прибыли и убытки» на сумму в продажных ценах.
При проведении документа анализируется наличие этого товара в организации. Если товара не достаточно  документ не проводится.
Необходимо создать отчет, выдающий данные о количественном и суммовом остатке выбранных в диалоге товаров (в диалоге должна быть реализована возможность указания списка товаров).







Решение:
План решения абсолютно такой же как и в предыдущей задаче.
Только два небольших отличия.
1) В "расходной накладной" при определении себестоимости. Себестоимость рассчитывается как средняя по номенклатуре без учета сроков годности.
2) Отчет. Выбираем таблицу остатков и задаем условие что номенклатура должна быть в &СпискеНоменклатуры.

Скачать

Надеюсь Вам также будет интересен 




Этот видеокурс поможет Вам:
  • Избежать типичных и нетипичные ошибок в 1С:Бухгалтерия 8;
  • Cэкономить Вам время и силы;
  • Более уверенно работать с программой.

1c специалист. Задача 2.10.



Решение:
Для решения задачи задействуем следующие объекты:
1) ПВХ "Виды субконто". 

  • Заполняем типы значений характеристик и дополнительные значения характеристик. 
  • Согласно условия задачи заводим 2 предопределенных элемента "Номенклатура"  и "СрокГодности".

2) Дорабатываем план счетов. 

  • Добавляем признак учета субконто "количественный",
  •  на закладке "субконто" заполняяем тип субконто и устанавливаем значение субконто=2.
  • Редактируем предопределенный счет "Товары".(признак учета и субконто).
3) Добавляем регистр бухгалтерии "Управленческий".
  • Связываем его с планом счетов
  • Добавляем ресурсы (количество, сумма)
  • Выбираем регистраторы.
4) Не забываем о том, что в задачах бухгалтерского учета необходимо добавить документ,  с помощью которого можно добавлять записи в регистр вручную. Назовем его "Ручная операция".
 укажем что он является регистратором нашего регистра. 
добавим форму
на форму вытащим реквизит Объект-движения-управленческий.
 5) Переходим к Приходной накладной.
  • В ТЧ добавим реквизит "срок годности".
  • Небольшой "тюнинг". Вешаем процедуру пересчета строки на событие "при изменении" количества и цены, записываем реквизит "сумма по документу" при записи документа.
  • С помощью конструктора движений формируем обработку проведения.
6) Переходим к "Расходной накладной".

  • "Тюнингуем"  как Приходную.
  • Пишем процедуру проведения.
7) Делаем отчет.
Скачать dt


Надеюсь Вам также будет интересен 




Этот видеокурс поможет Вам:
  • Избежать типичных и нетипичные ошибок в 1С:Бухгалтерия 8;
  • Cэкономить Вам время и силы;
  • Более уверенно работать с программой.





понедельник, 9 февраля 2015 г.

1c специалист. Задача 3.14.



Решение:
1) Производим подготовительные действия:
  • Настраиваем  ПВР-ов, заводим предопределенные элементы ПВР.
  • Добавляем регистры расчета
  • Заполняем регистр сведений графики расчета.
  • Доделываем документ Начисление ЗП

 2) Определяемся откуда будем брать вспомогательные данные для расчетов.
В РС "Сведения о сотрудниках" добавим ресурс "ЛимитНаЛекарства", то из этого регистра будем получать значения оклада и значение лимита.
График делаем реквизитом справочника "подразделения".
для хранения фиксированной суммы на лекарства в день  заводим константу.
Процент премии будем указывать в реквизите "параметр" ТЧ документа.

3) Пишем обработку проведения.
  • Учтем, что оклад может изменится, это уже было в задаче 3.12.
  • При формировании записей по окладу в реквизит параметр запишем значение оклада (для удобства расчета) .
  • При расчете оклада запишем  значение ресурса "отработано дней"- для расчета отпуска.
  • При расчете Больничного запишем  значение ресурса "дни болезни"- для расчета пособия на лекарства.
  • Очередное не понятное условие в задаче, насчет премии процентом. Непонятно зачем вводит премию за произвольный интервал, если все-равно базой является прошлый период, то есть что за один день, что за весь месяц результат будет одинаков. В общем не удалось постичь коварный замысел)
4) Делаем довольно простой отчет.


Возможно Вам будет интересен курс "Профессиональный учет в 1С:ЗУП 3.0»




воскресенье, 8 февраля 2015 г.

1c специалист. Задача 3.13.

Условие из сборника:
Начисление зарплаты сотрудникам предприятия осуществляется
ежемесячно с использованием метода отклонений. Все сотрудники работают по
графику работы, установленному для каждого подразделения отдельно.
Сотрудники предприятия получают оплату по окладу пропорционально
отработанному времени в днях. Дневная ставка рассчитывается как начальное
значение оклада, деленное на количество рабочих дней в том же периоде, что и
фактически отработанные дни. Первоначальное значение оклада может
изменяться не чаще, чем один раз в день, но берется на начало расчетного
периода.
В случае болезни сотрудник получает пособие, размер которого
определяется как количество часов болезни умноженное на среднюю часовую
ставку. Часы болезни рассчитываются по шестидневному графику. Средняя
часовая ставка определяется как сумма начисленного в том же месяце оклада,
поделенная на количество рабочих часов в этом месяце. В случае получения
сотрудником пособия начисление по окладу не производится.
Сотрудникам предприятия ежемесячно начисляется фиксированная сумма
денег в качестве компенсации затрат на обеды. Размер суммы в течение
расчетного периода не меняется.
Дополнительно, сотрудникам компании может быть начислена премия
процентом от всех начислений, сделанных в том же расчетном периоде. Процент
премии зависит от стажа работы сотрудника на данном предприятии. При
решении задачи необходимо учитывать, что на момент начала ведения учета в
информационной базе у сотрудника уже может быть стаж отличный от нуля.
Трудовой стаж            Процент премии
до 1 года                            5
от 1 года до 3 лет             10
от 3 лет                             15
Механизм перерасчетов в рамках данной задачи использовать не надо.
Ввод всех начислений происходит документом «Начисление зарплаты».
Считать, что все данные вводятся только в пределах одного месяца, например,
можно указать начисление оклада с 10.01 по 31.01, а запись оклад с 10.01 по 03.02
вводить нельзя.
Для анализа полученных сотрудниками предприятия премий в
конфигурации необходимо предусмотреть отчет следующего вида:
Подразделение Сотрудник Стаж % премии Сумма
премии
Итого:
Отчет может быть построен за любой расчетный период.

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

Возможно Вам будет интересен курс "Профессиональный учет в 1С:ЗУП 3.0»

пятница, 6 февраля 2015 г.

1c специалист. Задача 3.12.


Решение:
Скачать решение
1) Определимся в видами расчета.
Заводим 2 ПВР "Основные начисления" и "дополнительные начисления".
В "Основные" поместим ВР "Оклад" и "Больничный".
Больничный, естественно вытесняет оклад, так как базой больничного является оклад за прошлый месяц, то в базовые помещаем "оклад".
ПВР "Дополнительные начисление" не зависит от периода действия и будет зависеть от базы по периоду действия, так как у нас есть "премия %" от начислений всех  текущего месяца. Соответвенно,  в базовые начисления включаем все ВР из обоих ПВР.
Заводим 2 регистра расчетов, для РР "Дополнительные начисления" ставим базовый период = "месяц".
2) Заполняем РС "графики" с помощью обработки, немножко ее поработав.
3) Хранение справочной информации.
Необходимо как-то организовать хранение справочной информации.
Размер оклада и размер премии решил хранить как ресурсы РС "Сведения о сотрудниках", в принципе можно было бы и размер компенсации мобильника судя запихнуть, но не хочется переделывать так как до этого решил компенсации хранить в отдельном регистре "Компенсации".
График подразделения решил хранить просто реквизитом справочника "подразделения".

4) Документ "Начисление ЗП".
Для того чтобы соблюдалось условие "Считать, что данные о начислении по окладу вводятся только в пределах одного месяца" добавим процедуру проверки при изменении конца периода.

&НаКлиенте
Процедура ОсновныеНачисленияПериодДействияКонецПриИзменении(Элемент)
ТекДанные = Элементы.ОсновныеНачисления.ТекущиеДанные;
Если НачалоМесяца(ТекДанные.ПериодДействияНачало)<> НачалоМесяца( ТекДанные.ПериодДействияКонец) 
И Не ЭтоБольничный(ТекДанные.ВидРасчета) Тогда
Сообщение = Новый("СообщениеПользователю");
Сообщение.Текст ="Даты принадлежать разным периодам";
Сообщение.Сообщить();
ТекДанные.ПериодДействияКонец = Дата(1,1,1);
КонецЕсли;
КонецПроцедуры

&НаСервереБезКонтекста
Функция ЭтоБольничный(ВидРасчета)
Возврат ?(ВидРасчета= ПланыВидовРасчета.ОсновныеНачисления.Больничный, Истина,Ложь);
КонецФункции

При формировании записей по окладу и больничному есть свои сложности:
Оклад.  Так как оклад может изменится 1 раз в течении месяца, то необходимо в таком случае разбить оклад на 2 записи, для этого необходимо определить дату, когда это случилось и случилось ли это вообще.
Для этого соединим таблицу основных начислений 2 таблицами  РС "сведения о сотрудниках" на начало и конец расчетного периода.


Поле "период" и РС на конец и будет датой изменения оклада, которую мы и будем проверять при обработке запроса.

Если Выборка.ДатаИзмененияОклада >НачалоМесяца(ПериодРегистрации) и               Выборка.ДатаИзмененияОклада<КонецМесяца(ПериодРегистрации) Тогда 
Движение.ПериодДействияКонец = Выборка.ДатаИзмененияОклада-1;
Движение.Параметр = Выборка.ОкладНаНачало;
Движение =    Движения.ОсновныеНачисления.Добавить();
ЗаполнитьЗначенияСвойств(Движение,Выборка);
Движение.ПериодДействияНачало = Выборка.ДатаИзмененияОклада;
Движение.Параметр = Выборка.ОкладНаКонец;
КонецЕсли;
Больничный.  Здесь есть 2 особенности:
  • Больничный может переходить из месяца в месяц, для этого придется организовывать цикл при обработке запроса.
        ИначеЕсли  Выборка.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Больничный Тогда
Начало    = Выборка.ПериодДействияНачало;
Окончание = Мин(Выборка.ПериодДействияКонец, КонецМесяца(Начало));
Пока Окончание <= Выборка.ПериодДействияКонец  и Начало<Окончание Цикл 
Движение =    Движения.ОсновныеНачисления.Добавить();
ЗаполнитьЗначенияСвойств(Движение,Выборка);
Движение.ПериодДействияНачало = Начало;
Движение.ПериодДействияКонец = Окончание;
Движение.БазовыйПериодНачало = НачалоМесяца(ДобавитьМесяц(Начало, - 1));
Движение.БазовыйПериодКонец = НачалоМесяца(Начало) - 1;
Движение.График = Справочники.ВидыГрафиков.Шестидневка;
Начало = Окончание+1;
Окончание = Мин(КонецДня(Выборка.ПериодДействияКонец), КонецМесяца(Начало));
КонецЦикла;
КонецЕсли;
  • Больничный может формировать движения как вперед так и назад, поэтому нужно предусмотреть формирование сторно записей.
ЗаписиСторно = Движения.ОсновныеНачисления.ПолучитьДополнение();
Для каждого Сторно Из ЗаписиСторно Цикл
Движение = Движения.ОсновныеНачисления.Добавить();
ЗаполнитьЗначенияСвойств(Движение, Сторно);
Движение.ПериодРегистрации = Сторно.ПериодРегистрацииСторно;
Движение.ПериодДействияНачало = Сторно.ПериодДействияНачалоСторно;
Движение.ПериодДействияКонец = КонецДня(Сторно.ПериодДействияКонецСторно);
Движение.Сторно = Истина;
КонецЦикла;


  • По условию "Средняя  дневная ставка определяется как сумма начисленного за предыдущий месяц
    оклада, поделенная на количество рабочих дней в предыдущем месяце."
    Я это условие понял так, что нужно получить количество рабочих дней по пятидневке, так как работал сотрудник по пятидневке, но не нашел как получить это значение. Смотрел решения комрадов на форумах и обнаружил что все поняли что нужно количество рабочих дней получать по графику больничного, то есть по шестидневке. Делать нечего, решил не заморачиваться и сделать тоже так, авось прокатит).
С расчетом доп. начислений все вроде-бы понятно.
Остается только сделать диаграмму Ганта, наверное стоит сделать шпаргалку на экзамен на этот случай, чтобы от волнения не забыть чего.

Скачать решение

Возможно Вам будет интересен курс "Профессиональный учет в 1С:ЗУП 3.0»

понедельник, 2 февраля 2015 г.

1c специалист. Задача 3.11.

Условие из сборника:
 Начисление зарплаты сотрудникам предприятия осуществляется ежемесячно с использованием метода отклонений. Все сотрудники работают по графику работы, установленному для каждого подразделения отдельно. Сотрудники предприятия получают оплату по окладу пропорционально отработанному времени в часах. Часовая ставка рассчитывается как начальное значение оклада, деленное на количество рабочих часов в том же периоде, что и фактически отработанные часы. Первоначальное значение оклада может изменяться не чаще, чем один раз в день, но берется на начало расчетного периода. В случае болезни сотрудник получает пособие, размер которого определяется как количество часов болезни умноженное на среднюю часовую ставку. Часы болезни рассчитываются по пятидневному графику. Средняя часовая ставка определяется как сумма начисленного за предыдущий месяц оклада, поделенная на количество рабочих часов в предыдущем месяце. В случае получения сотрудником пособия начисление по окладу не производится. Сотрудникам предприятия ежемесячно начисляется фиксированная сумма денег в качестве компенсации транспортных расходов. Размер суммы в течение расчетного периода не меняется. Дополнительно, сотрудникам компании может быть начислена  премия процентом от всех начислений, сделанных в том же расчетном периоде. Процент премии в течение периода начисления не меняется и задается в документе «Начисление зарплаты». Механизм перерасчетов в рамках данной задачи использовать не надо. Ввод всех начислений происходит документом «Начисление зарплаты». Считать, что все данные вводятся только в пределах одного месяца, например, можно указать начисление оклада с 10.01 по 31.01, а запись: оклад с 10.01 по 03.02 вводить нельзя. Необходимо предоставить пользователю возможность исправлять результат расчета в форме документа, а также самостоятельно создавать новые виды расчетов и привязывать их к существующим алгоритмам расчета. Для анализа сделанных сотрудникам предприятия начислений в конфигурации необходимо предусмотреть отчет следующего вида:
Решение:
скачать dt

В-принципе в этой задаче нет чего-то особого по сравнению с задачей 3.10, поэтому ограничусь кратким планом решения.
1) Доработка обработки "Заполнение графика" и  заполнение регистра сведений "Графики работы"
2) Заводим перечисление "Способ расчета"  по которому будем ориентироваться при расчетах.
3) Заполняем ПВР и заполняем  базовые и ведущие ВР в них.
4) Заводим Регистры расчета.
5) Дорабатываем документ "Начисление ЗП": Вешаем на форму процедуру расчета, а процедуру проведения пишем "в лоб" как есть из таб. частей.
6) Отчет.
 скачать решение

Возможно Вам будет интересен курс "Профессиональный учет в 1С:ЗУП 3.0»