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