Решение:
Для решения задачи задействуем следующие объекты:
1) Добавим недостающие объекты: Справочник "склады" и регистр сведений "Учетная политика" с ресурсом "метод списания"2) ПВХ "Виды субконто".
3) Дорабатываем план счетов.
- Заполняем типы значений характеристик и дополнительные значения характеристик.
- Согласно условия задачи заводим 3 предопределенных элемента "Номенклатура" и "Склад"(новый справочник "склады") и "партия". (тип "документссылка.приходная накладная)
3) Дорабатываем план счетов.
- Добавляем признак учета субконто "количественный",
- на закладке "субконто" заполняем тип субконто и устанавливаем значение субконто=3.
- Редактируем предопределенный счет "Товары".(признак учета и субконто (Номенклатура и склад и партия).
- Связываем его с планом счетов
- Добавляем ресурсы (количество, сумма)
- Выбираем регистраторы.
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экономить Вам время и силы;
- Более уверенно работать с программой.
Комментариев нет:
Отправить комментарий