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

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



Решение:

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

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

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

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



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



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

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

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

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

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

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

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



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




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

Комментариев нет:

Отправить комментарий