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

1с специалист задача 2.16


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

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

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

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

  • "Тюнингуем"  как Приходную.
  • Пишем процедуру проведения.

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

 8) Переходим к Перемещению.
процедура обработки проведения практически такая же как и в расходной.

9) Делаем простейший отчет по виртуальной таблице остатков.
Единственное отмечу, что для того чтобы получить отчет в точности такой как требуется в задании необходимо включить признак "расположение полей группировок"= "отдельно и только в точках"





Скачать решение задачи 2.16 (1с специалист)



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




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


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

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