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