пятница, 27 февраля 2015 г.

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


Решение:


1) Для решения задачи задействуем следующие объекты:
  • Добавляем перечисления "Варианты списания" "Сразу" и "Частично".
  • В справочник "Номенклатура" добавляем реквизиты "Вариант списания" и "СрокПолезногоИспользования"
  • Добавляем регистр сведений "Первоначальная стоимость" с реквизитами "номенклатура" и "партия" и ресурсом значение.

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

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

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

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



Процедура ОбработкаПроведения(Отказ, Режим)

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


8) Переходим к "СобственнымНуждам".
  • Пишем процедуру проведения.
Обратите внимание в задаче есть возможность "попасть" на "копейки", чтобы ничего не зависло, делаем проверку
Если Окр(Выборка.ОстатокСум,1,1) = Окр(СуммаСписания,1,1)  Тогда
СуммаСписания =Выборка.ОстатокСум;
КонецЕсли;


Процедура ОбработкаПроведения(Отказ, РежимПроведения)

Движения.Управленческий.Записывать = Истина;
Движения.Управленческий.Очистить();
Движения.Управленческий.Записать();

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

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

Запрос.УстановитьПараметр("ТочкаИтогов", КонецМесяца(Дата));

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


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

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

СГРУППИРОВАТЬ ПО
УправленческийОстатки.Субконто1,

УправленческийОстатки.Субконто2

Но есть один непонятный  вопрос: Выводить итоговые данные по номенклатуре или с учетом партии, Если решаем что правильный вариант 2 тогда в конструкторе настроек ставим упорядочивание по партиям.

Скачать решение задачи 2.19

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




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

четверг, 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экономить Вам время и силы;
  • Более уверенно работать с программой.


среда, 25 февраля 2015 г.

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

Условие задачи из сборника:


Необходимо реализовать возможность ведения учета товаров в разрезе мест хранения и партий товаров. Под партией товара понимается документ, регистрирующий его (товара) поступление.
Документ «Приходная накладная» реализует следующую проводку:
Дт «Товары» - Кт «Поставщики» на количество и сумму закупаемого
товара.
Продажа товара производится с указанного склада и регистрируется
документом «Расходная накладная». При заполнении документа партия товара не
указывается. При проведении производится проверка достаточности количества
на указанном складе продаваемого товара.
Документ «Расходная накладная» реализует следующие проводки:
Дт «Прибыли и убытки» - Кт «Товары» на количество и сумму
себестоимости;
Дт «Покупатели» - Кт «Прибыли и убытки» на сумму в продажных ценах.
При продаже товара списание партий этого товара производится либо по
дисциплине LIFO («последним пришел, первым ушел»), либо FIFO («первым
пришел, первым ушел»). Какая из дисциплин будет использоваться, определяется
в начале года и в течение года не меняется. Себестоимость товара рассчитывается
в разрезе партий поступления этого товара на склад, с которого происходит
списание.
Товар может перемещаться со склада на склад. Данная операция должна
быть реализована через документ «Перемещение», где в шапке указываются склад
отправитель и склад получатель, а в табличной части перемещаемый товар и его
количество. При перемещении себестоимость товара определяется следующим
образом: со склада отправителя себестоимость списывается как при продаже, а на
склад получатель товар приходит с партией, которой является текущий документ
перемещения товаров. В случае отсутствия необходимого количества товара на
складе отправителе документ не должен проводиться.
Проводки, формируемые при проведении документа «Перемещение»:
Дт «Товары» - Кт «Товары» на перемещаемое количество и стоимость.
Необходимо построить отчет о продажах товаров со складов.
Продажи товаров за период с 01.01.2010 по 31.01.2010


Решение:

Задача практически идентична предыдущей. Необходим самый минимум изменений.
1) Вид субконто "Партия" делаем составным.
2) Корректируем строчку в обрабке проведения "Перемещения" в связи с этим.
3) Так как необходим отчет по продажам, то добавим субконто "склад" и "номенклатура" к счету прибыли и убытки.
Все.

Скачать решение задачи 2.17


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




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








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


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

  • Заполняем типы значений характеристик и дополнительные значения характеристик. 
  • Согласно условия задачи заводим 3 предопределенных элемента "Номенклатура"  и "Склад"(новый справочник "склады")  и "партия". (тип "документссылка.приходная накладная)

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

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

  • "Тюнингуем"  как Приходную.
  • Пишем процедуру проведения.

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

 8) Переходим к Перемещению.
процедура обработки проведения практически такая же как и в расходной.

9) Делаем простейший отчет по виртуальной таблице остатков.
Единственное отмечу, что для того чтобы получить отчет в точности такой как требуется в задании необходимо включить признак "расположение полей группировок"= "отдельно и только в точках"





Скачать решение задачи 2.16 (1с специалист)



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




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