четверг, 28 мая 2015 г.

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

Решение:

Фразу "Система должна обеспечивать пользователя возможностью ведения складского учета не только на счете «Товары», но и на любом другом выбранным пользователем счете
",  будем трактовать как и в задаче 2.31 создав константу "СчетУчета".

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

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

  • С помощью конструктора движений формируем обработку проведения.


ДСчетУчета = Константы.СчетУчета.Получить();
Движения.Управленческий.Записывать = Истина;
Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры Цикл
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = СчетУчета;
Движение.СчетКт = ПланыСчетов.Управленческий.ОсновноеПроизводство;
Движение.Период = Дата;
Движение.Сумма = ТекСтрокаСписокНоменклатуры.Сумма;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Склад] = Склад;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ТекСтрокаСписокНоменклатуры.Номенклатура;
Движение.КоличествоДт = ТекСтрокаСписокНоменклатуры.Количество;
КонецЦикла;


7) Переходим к Расходной накладной.


Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.Управленческий.Записывать = Истина;
Движения.Управленческий.Записать();
СчетУчета = Константы.СчетУчета.Получить();

Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.Управленческий");
ЭлементБлокировки.УстановитьЗначение("Субконто1", Склад);
ЭлементБлокировки.УстановитьЗначение("Счет", СчетУчета);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Субконто2", "Номенклатура");
Блокировка.Заблокировать();

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
              | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
              | РасходнаяНакладнаяСписокНоменклатуры.Количество,
              | РасходнаяНакладнаяСписокНоменклатуры.Сумма
              |ПОМЕСТИТЬ ДокТЧ
              |ИЗ
              | Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
              |ГДЕ
              | РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
              |;
              |
              |////////////////////////////////////////////////////////////////////////////////
              |ВЫБРАТЬ
              | ДокТЧ.Номенклатура,
              | СУММА(ДокТЧ.Количество) КАК Количество,
              | СУММА(ДокТЧ.Сумма) КАК Сумма,
              | ЕСТЬNULL(УправленческийОстатки.СуммаОстатокДт, 0) КАК СуммаРег,
              | ЕСТЬNULL(УправленческийОстатки.КоличествоОстатокДт, 0) КАК КоличествоРег
              |ИЗ
              | ДокТЧ КАК ДокТЧ
              | ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.Остатки(
              | &ТочкаИтогов,
              | Счет = &СчетУчета,
              | ,
              | Субконто1 = &Склад
              | И Субконто2 В
              | (ВЫБРАТЬ
              | ДокТЧ.Номенклатура
              | ИЗ
              | ДокТЧ)) КАК УправленческийОстатки
              | ПО ДокТЧ.Номенклатура = УправленческийОстатки.Субконто2
              |
              |СГРУППИРОВАТЬ ПО
              | ДокТЧ.Номенклатура,
              | ЕСТЬNULL(УправленческийОстатки.СуммаОстатокДт, 0),
              | ЕСТЬNULL(УправленческийОстатки.КоличествоОстатокДт, 0)";



Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("ТочкаИтогов", Новый Граница(МоментВремени(),ВидГраницы.Исключая)); 
Запрос.УстановитьПараметр("СчетУчета", СчетУчета);
Запрос.УстановитьПараметр("Склад", Склад);


Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл

Если Выборка.Количество <= Выборка.КоличествоРег Тогда

// Списание по себестоимости
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки;
Движение.СчетКт = СчетУчета;
Движение.Период = Дата;
Если   Выборка.КоличествоРег <>0 Тогда
Себестоимость = (Выборка.СуммаРег/ Выборка.КоличествоРег)* Выборка.Количество;
Движение.Сумма = Себестоимость;
КонецЕсли;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Склад] = Склад;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Выборка.Номенклатура;
Движение.КоличествоКт = Выборка.Количество;

// продажа
Движение = Движения.Управленческий.Добавить();
Движение.СчетКт = ПланыСчетов.Управленческий.ПрибылиУбытки;
Движение.СчетДт = ПланыСчетов.Управленческий.Покупатели;
Движение.Период = Дата;
Движение.Сумма = Выборка.Сумма;

// агенту
Если ЗначениеЗаполнено(Агент) Тогда
// Списание по себестоимости
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки;
Движение.СчетКт = ПланыСчетов.Управленческий.Поставщики;
Движение.Период = Дата;
Движение.Сумма = (Выборка.Сумма-Себестоимость)/5;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Агент] = Агент;
КонецЕсли;

Иначе
Отказ =Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Недостаточно товара " + Выборка.Номенклатура + " в количестве "+ (Выборка.Количество -Выборка.КоличествоРег);
Сообщение.Сообщить();
КонецЕсли;
КонецЦикла;

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


8) Отчет 
Строим элементарный отчет по таблице остатков по счету "Поставщики".

СКАЧАТЬ РЕШЕНИЕ ЗАДАЧИ 2.33

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

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