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

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

Решение:


Для решения задачи задействуем следующие объекты:
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экономить Вам время и силы;
  • Более уверенно работать с программой.

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

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