четверг, 26 февраля 2015 г.

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



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

2) ПВХ "Виды субконто". 

  • Заполняем типы значений характеристик и дополнительные значения характеристик. 
  • Согласно условия задачи заводим 4 предопределенных элемента "Номенклатура"  и "Cклады", "Партия", и "Организация"

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

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


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

7) Делаем отчет.

Запрос несложный

ВЫБРАТЬ
УправленческийОборотыДтКт.СубконтоДт4 КАК Получатель,
УправленческийОборотыДтКт.СубконтоКт1 КАК Отправитель,
УправленческийОборотыДтКт.СуммаОборот КАК Сумма
ИЗ
РегистрБухгалтерии.Управленческий.ОборотыДтКт(&ДатаНачала, &Датаокончания, , СчетДт = ЗНАЧЕНИЕ(Плансчетов.Управленческий.Товары), , СчетКт = ЗНАЧЕНИЕ(Плансчетов.Управленческий.Поставщики), , ) КАК УправленческийОборотыДтКт

группировка по строкам по полю "Получатель", по колонкам по "отправитель".
для того чтобы в отчете был крестик  в УО задаем условие








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




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


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

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