Бюджетирование в 1С управление торговлей 11
Если Вас интересует автоматизация бюджетирования, внедрения казначейства или учета по МСФО — ознакомьтесь с нашим специальным предложением.
Обновление: на экзамене попалась эта задача, преподаватель сказал что делать на своем регистре — не правильно, следует использовать типовые регистры.
Содержание
Установка бюджета
Информация о лимитах будет хранится в зависимом и периодическом (месяц) регистре сведений «ЛимитыПодразделений». Измерение — Подразделение, Ресурс — Сумма.
Движения в регистре будет создавать специальный документ — «БюджетПодразделения». Документ будет содержать простой набор реквизитов: табличная часть «Бюджеты», в которой будет два реквизита — «Подразделение» и «Сумма».
Пропишем простые движения для документа с помощью конструктора движений:
Получите понятные самоучители по 1С бесплатно:
Движения.пкм_ЛимитыПодразделений.Записывать = Истина;
Для Каждого ТекСтрокаБюджеты Из Бюджеты Цикл
Движение = Движения.пкм_ЛимитыПодразделений.Добавить();
Движение.Период = Дата;
Движение.Подразделение = ТекСтрокаБюджеты.Подразделение;
Движение.Сумма = ТекСтрокаБюджеты.Сумма;
КонецЦикла;
Документ для заполнения бюджета готов.
Сбор фактических данных и контроль бюджета
Приступим к реализации сбора данных о платежах. Для этого создадим оборотный регистр накопления «ВыработкаБюджета». Регистратор — «СписаниеБезналичныхДенежныхСредств». Измерение — Подразделение, ресурс — Сумма.
В документе «СписаниеБезналичныхДенежныхСредств» добавим новый реквизит и выведем его на форму — «ОтветственноеПодразделение». Данные о том, какое подразделение расходует денежные средства будут браться из этого реквизита:
Движения в регистр накопления будем писать с помощью подписки на событие — «ДвиженияВыработкаБюджета», которая привязана к событию «ОбработкаПроведения» документа «СписаниеБезналичныхДенежныхСредств «. Для обработчика данного события создадим новый общий модуль «Бюджетирование».
В модуле укажем следующий программный код:
Процедура ДвиженияВыработкаБюджетаОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт
//запись движений
НаборЗаписей = Источник.Движения.ВыработкаБюджета;
НоваяСтрока = НаборЗаписей.Добавить();
НоваяСтрока.Подразделение = Источник.ОтветственноеПодразделение;
НоваяСтрока.Сумма = Источник.РасшифровкаПлатежа.Итог(«Сумма»);
НоваяСтрока.Период = Источник.Дата;
НоваяСтрока.Регистратор = Источник.Ссылка;
НаборЗаписей.Записать();
// Проверка
Если НЕ ЗначениеЗаполнено(Источник.ЗаявкаНаРасходованиеДенежныхСредств) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| пкм_ЛимитыПодразделенийСрезПоследних.Сумма КАК Лимит,
| ЕСТЬNULL(ВыработкаБюджетаОбороты.СуммаОборот,0) КАК УжеСписали
|ИЗ
| РегистрСведений.пкм_ЛимитыПодразделений.СрезПоследних(&Дата, Подразделение = &ОтветственноеПодразделение) КАК пкм_ЛимитыПодразделенийСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВыработкаБюджета.Обороты(НачалоПериода(&Дата, Месяц), &Дата, , Подразделение = &ОтветственноеПодразделение) КАК ВыработкаБюджетаОбороты
| ПО пкм_ЛимитыПодразделенийСрезПоследних.Подразделение = ВыработкаБюджетаОбороты.Подразделение»;
Запрос.УстановитьПараметр(«Дата», Источник.Дата);
Запрос.УстановитьПараметр(«ОтветственноеПодразделение», Источник.ОтветственноеПодразделение);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Если Выборка.УжеСписали > Выборка.Лимит Тогда
Отказ = Истина;
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр(«ru = ‘Невозможно провести документ, исчерпан лимит! Возможный лимит » + Выборка.Лимит + «, уже израсходовано » + Выборка.УжеСписали + «‘»);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Сделано для внесение минимальный изменений в модуль типового объекта. Первая часть программного кода делает записи в регистр, а вторая проверяет возможно ли проведение или нет. Проверка отрабатывает только в том случае, когда документ создан без заявки на расходование средств.
Если подразделение превысит бюджет — система выдаст соответствующее сообщение:
Отчет по бюджету
Отчет по бюджету будем делать как внешний, дополнительный отчет. Для этого сделаем простой отчет на СКД. Данные будут браться из следующего запроса:
ВЫБРАТЬ
ВыработкаБюджетаОбороты.Подразделение,
ВЫБОР
КОГДА пкм_ЛимитыПодразделенийСрезПоследних.Сумма — ВыработкаБюджетаОбороты.СуммаОборот > 0
ТОГДА пкм_ЛимитыПодразделенийСрезПоследних.Сумма — ВыработкаБюджетаОбороты.СуммаОборот
ИНАЧЕ 0
КОНЕЦ КАК ОстатокЛимита,
ВЫБОР
КОГДА ВыработкаБюджетаОбороты.СуммаОборот — пкм_ЛимитыПодразделенийСрезПоследних.Сумма > 0
ТОГДА ВыработкаБюджетаОбороты.СуммаОборот — пкм_ЛимитыПодразделенийСрезПоследних.Сумма
ИНАЧЕ 0
КОНЕЦ КАК Перерасход,
пкм_ЛимитыПодразделенийСрезПоследних.Сумма КАК Лимит,
ВыработкаБюджетаОбороты.СуммаОборот КАК Выработка
ИЗ
РегистрСведений.пкм_ЛимитыПодразделений.СрезПоследних(КОНЕЦПЕРИОДА(&Период, МЕСЯЦ), ) КАК пкм_ЛимитыПодразделенийСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВыработкаБюджета.Обороты(НАЧАЛОПЕРИОДА(&Период, МЕСЯЦ), КОНЕЦПЕРИОДА(&Период, МЕСЯЦ), , ) КАК ВыработкаБюджетаОбороты
ПО пкм_ЛимитыПодразделенийСрезПоследних.Подразделение = ВыработкаБюджетаОбороты.Подразделение
Необходимо вывести в форму отчета параметр — &Период. Сделать настройки оформления СКД.
Проверяем отчет:
Встраиваем отчет в конфигурацию
Встроим отчет в конфигурацию. Для это воспользуемся механизмов внешних обработок и отчетов. Для этого необходимо подготовить отчет, встроим в модуль объекта техническую функцию механизма внешних обработок:
Функция СведенияОВнешнейОбработке() Экспорт
РегистрационныеДанные = Новый Структура;
РегистрационныеДанные.Вставить(«Наименование», «Бюджет подразделений»);
РегистрационныеДанные.Вставить(«БезопасныйРежим», Ложь);
РегистрационныеДанные.Вставить(«Версия», «1.0»);
РегистрационныеДанные.Вставить(«ВерсияБСП», «1.2.1.4»);
РегистрационныеДанные.Вставить(«Вид», «ДополнительныйОтчет»);
РегистрационныеДанные.Вставить(«Информация», «Отчет по бюджету подразделений»);
ТЗКоманд = Новый ТаблицаЗначений;
ТЗКоманд.Колонки.Добавить(«Идентификатор»);
ТЗКоманд.Колонки.Добавить(«Представление»);
ТЗКоманд.Колонки.Добавить(«Модификатор»);
ТЗКоманд.Колонки.Добавить(«ПоказыватьОповещение»);
ТЗКоманд.Колонки.Добавить(«Использование»);
СтрокаКоманды = тзКоманд.Добавить();
СтрокаКоманды.Идентификатор = Новый УникальныйИдентификатор;
СтрокаКоманды.Представление = «Отчет по бюджету подразделений»;
СтрокаКоманды.ПоказыватьОповещение = Истина;
СтрокаКоманды.Использование = «ОткрытиеФормы»;
СтрокаКоманды = тзКоманд.Добавить();
СтрокаКоманды.Идентификатор = Новый УникальныйИдентификатор;
СтрокаКоманды.Представление = «Отчет по бюджету подразделений»;
СтрокаКоманды.ПоказыватьОповещение = Истина;
СтрокаКоманды.Использование = «ВызовСерверногоМетода»;
РегистрационныеДанные.Вставить(«Команды», ТЗКоманд);
Возврат РегистрационныеДанные;
КонецФункции
После этого, вы сможете добавить свой отчет в справочник «Дополнительные отчеты и обработки«:
Расположим наш отчет на вкладке «Финансы»:
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
kreck:
А что в итоге? Оценку снизили или полностью забраковали решение на отдельном регистре?
Программист 1С:
Оценку до 3 с минусом снизил.. Поставил потому что быстро всё сделал, около 45 минут делал)
kreck:
Т.е. вы сделали без ошибок первое задание, затем второе вот этим типа некорректным способом и вам на два балла снизили оценку? Еще и при условии, что быстро.. А я думал, нужно полностью свои три часа отсиживать.. Страно. Почему бы тогда не отдать было ее вам на переделку, раз столько времени.
Программист 1С:
Я сам не понял, но преподы разные — у каждого свои заморочки. Наверное возится больше не хотел 🙂
kreck:
Поздравляю со сдачей! А больше никаких моментов не было чего стоит учесть? Просто мне тоже совсем скоро сдавать..
Программист 1С:
Если честно — самый простой экзамен получился у меня. Не волнуйтесь, если прорешали все задачи — у вас получится 🙂
СК:
Снизили оценку за использование своего РН или РН и РС?
Программист 1С:
Да, именно.
Преподаватель конечно прав — экзамен на знание типового функционала — его и надо использовать.
Михаил Щербаков:
Решение аналогично Билету №3 (задача 2.30)
1. Включил в Администрировании функциональные опции “Заявки на расходование денежных средств” (все галочки).
2. Добавил у справочника “Банковские счета” реквизит “ИспользоватьЗаявкиСверхЛимита” с типом “булево” и вынес его на форму элемента справочника.
3. В модуле менеджера док-та “СписаниеБезналичныхДенежныхСредств” в процедуре “ЗаполнитьИменаРеквизитовПоХозяйственнойОперации” добавил реквизит хозяйственной операции с видом “Оплата поставщику”:
МассивРеквизитовОперации.Добавить(“Подразделение”);
4. В обработку проведения док-так СписаниеБезналичныхДС добавил следующий код после строки “ДенежныеСредстваСервер.ОтразитьЛимитыРасходаДенежныхСредств(ДополнительныеСвойства, Движения, Отказ);” :
//Проверим, установлен ли для текущей кассы режим контроля расходов при превышении допустимого лимита
Если БанковскийСчет.ИспользоватьЗаявкиСверхЛимита Тогда
//Проверим наличие отрицательных остатков в регистре
Запрос = Новый Запрос(«ВЫБРАТЬ
| СписаниеБезналичныхДенежныхСредствРасшифровкаПлатежа.СтатьяДвиженияДенежныхСредств КАК СтатьяДвиженияДенежныхСредствВВыписке,
| СУММА(СписаниеБезналичныхДенежныхСредствРасшифровкаПлатежа.Сумма) КАК СуммаВВыписке
|ПОМЕСТИТЬ СтатьиДДССуммы
|ИЗ
| Документ.СписаниеБезналичныхДенежныхСредств.РасшифровкаПлатежа КАК СписаниеБезналичныхДенежныхСредствРасшифровкаПлатежа
|ГДЕ
| СписаниеБезналичныхДенежныхСредствРасшифровкаПлатежа.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| СписаниеБезналичныхДенежныхСредствРасшифровкаПлатежа.СтатьяДвиженияДенежныхСредств
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЕСТЬNULL(-ЛимитыРасходаДенежныхСредствОбороты.ЛимитОборот + ЛимитыРасходаДенежныхСредствОбороты.РасходСверхЛимитаОборот + ЛимитыРасходаДенежныхСредствОбороты.РасходВПределахЛимитаОборот + СтатьиДДССуммы.СуммаВВыписке, 0) КАК Перерасход,
| ЛимитыРасходаДенежныхСредствОбороты.РасходСверхЛимитаОборот,
| ЛимитыРасходаДенежныхСредствОбороты.ЛимитОборот,
| ЛимитыРасходаДенежныхСредствОбороты.РасходВПределахЛимитаОборот,
| ЛимитыРасходаДенежныхСредствОбороты.СтатьяДвиженияДенежныхСредств,
| ЛимитыРасходаДенежныхСредствОбороты.Организация,
| ЛимитыРасходаДенежныхСредствОбороты.Подразделение
|ПОМЕСТИТЬ ПредИтог
|ИЗ
| СтатьиДДССуммы КАК СтатьиДДССуммы
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЛимитыРасходаДенежныхСредств.Обороты(
| &ПериодНач,
| &ПериодКон,
| ,
| Организация = &Организация
| И Подразделение = &Подразделение
| И СтатьяДвиженияДенежныхСредств В
| (ВЫБРАТЬ
| Т1.СтатьяДвиженияДенежныхСредствВВыписке
| ИЗ
| СтатьиДДССуммы КАК Т1)) КАК ЛимитыРасходаДенежныхСредствОбороты
| ПО СтатьиДДССуммы.СтатьяДвиженияДенежныхСредствВВыписке = ЛимитыРасходаДенежныхСредствОбороты.СтатьяДвиженияДенежныхСредств
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ПредИтог.Перерасход,
| ПредИтог.СтатьяДвиженияДенежныхСредств,
| ПредИтог.Организация,
| ПредИтог.Подразделение
|ИЗ
| ПредИтог КАК ПредИтог
|ГДЕ
| ПредИтог.Перерасход > 0»);
Запрос.УстановитьПараметр(«ПериодНач»,НачалоМесяца(Дата));
Запрос.УстановитьПараметр(«ПериодКон»,КонецМесяца(Дата));
Запрос.УстановитьПараметр(«Организация»,Организация);
Запрос.УстановитьПараметр(«Подразделение»,Подразделение);
Запрос.УстановитьПараметр(«Ссылка»,Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
//Есть перерасход
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(«Возник перерасход по статье ДДС «+Выборка.СтатьяДвиженияДенежныхСредств+» в размере «+Выборка.Перерасход+» «+Валюта.Наименование+»!»);
КонецЦикла;
Отказ = Истина;
Возврат;
КонецЕсли;
КонецЕсли;
danissimo:
Релиз 11.1.9.61
1) Включить ф.о. “Заявки на расходование денежных средств” (все галочки).
2) Для р/с включить флаг «Разрешить списание ДС без заявок»
3) Документ Списание безналичных ДС – модуль менеджера
В процедуре “ЗаполнитьИменаРеквизитовПоХозяйственнойОперации” добавить реквизит для хозяйственной операции с видом “Оплата поставщику”:
МассивРеквизитовОперации.Добавить(“Подразделение”);
4) Документ Списание безналичных ДС – модуль менеджера
В функции ТекстЗапросаТаблицаЛимитыРасходаДенежныхСредств для хоз. операции Оплата поставщику переопределить выборку суммы в поле РасходВПределахЛимита, а не РасходСверхЛимита
ЕСТЬNULL(ТаблицаРасшифровкаПлатежа.Сумма, ДанныеДокумента.СуммаДокумента) * &КоэффициентПересчетаВВалютуУпр КАК РасходВПределахЛимита,
0 КАК РасходСверхЛимита
Для остальных операций соответственно добавить
0 КАК РасходВПределахЛимита,
5) Документ Списание безналичных ДС – модуль объекта
В процедуре СформироватьСписокРегистровДляКонтроля() добавить после Массив.Добавить(Движения.ДенежныеСредстваКВыплате); след. код.
Если ЭтотОбъект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ОплатаПоставщику Тогда
Массив.Добавить(Движения.ЛимитыРасходаДенежныхСредств);
КонецЕсли;
6) Общий модуль ПроведениеСервер, Процедура ВыполнитьКонтрольРезультатовПроведения
В ветку
Если ЕстьИзмененияВТаблице(ДанныеТаблиц,»ДвиженияЛимитыРасходаДенежныхСредствИзменение») Тогда
добавить след. код (где именно добавить понятно при проведении – выскакивает ошибка Поле ДатаПлатежа не найдено)
Если ТипЗнч(Объект) = Тип(«ДокументОбъект.СписаниеБезналичныхДенежныхСредств») Тогда
Период = Объект.Дата;
7) В отчете Лимиты расхода ДС создаем новый вариант с подразделениями
Итого строк 40 кода, использование стандартного отчета, в конструктор запросов вообще не заходим, основная методика CtrlC — CtrlV.
Или все так просто, или я чего-то не понимаю 8)
Иван:
Подскажите пожалуйста, надо ли при решении экзамена специалист УТ 11.1 писать вордовский файл с ходом решения (аналогично с экзаменом специалист-консультант УТ 11.1)?
Программист 1С:
Я очно сдавал и спеца и спеца-консультанта по УТ и при этом не писал хода решения. Никто не заставлял писать ход решения 🙂
Иван:
Это да, но при заочной сдаче (для специалиста-консультанта) необходимо писать ход решения.
Иван:
И еще вопрос: В билете 2 задачи — допускается ли решение обеих задач в одной и той же ДЕМО базе?
Программист 1С:
Решал обе задачи в одной базе — нормально приняли)
Дмитрий:
danissimo, блин и как самому дойти, до такого решения, не понимаю!