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