Закажите бесплатный расчет стоимости вашей задачи по 1С!
Перезвоним за 10 минут!

Бюджетирование в 1С управление торговлей 11

Если Вас интересует автоматизация бюджетирования, внедрения казначейства или учета по МСФО — ознакомьтесь с нашим специальным предложением.

Обновление: на экзамене попалась эта задача, преподаватель сказал что делать на своем регистре — не правильно, следует использовать типовые регистры.

Установка бюджета

Информация о лимитах будет хранится в зависимом и периодическом (месяц) регистре сведений «ЛимитыПодразделений». Измерение — Подразделение, Ресурс — Сумма.

структура регистра

Движения в регистре будет создавать специальный документ — «БюджетПодразделения». Документ будет содержать простой набор реквизитов: табличная часть «Бюджеты», в которой будет два реквизита — «Подразделение» и «Сумма».

документ

Пропишем простые движения для документа с помощью конструктора движений:

Движения.пкм_ЛимитыПодразделений.Записывать = Истина;
Для Каждого ТекСтрокаБюджеты Из Бюджеты Цикл
Движение = Движения.пкм_ЛимитыПодразделений.Добавить();
Движение.Период = Дата;
Движение.Подразделение = ТекСтрокаБюджеты.Подразделение;
Движение.Сумма = ТекСтрокаБюджеты.Сумма;
КонецЦикла;

Документ для заполнения бюджета готов.

Сбор фактических данных и контроль бюджета

Приступим к реализации сбора данных о платежах. Для этого создадим оборотный регистр накопления «ВыработкаБюджета». Регистратор — «СписаниеБезналичныхДенежныхСредств». Измерение  — Подразделение, ресурс — Сумма.

регистр накопления

 

В документе «СписаниеБезналичныхДенежныхСредств» добавим новый реквизит и выведем его на форму — «ОтветственноеПодразделение». Данные о том, какое подразделение расходует денежные средства будут браться из этого реквизита:

указание подразделения

 

Движения в регистр накопления будем писать с помощью подписки на событие — «ДвиженияВыработкаБюджета», которая привязана к событию «ОбработкаПроведения» документа «СписаниеБезналичныхДенежныхСредств «. Для обработчика данного события создадим новый общий модуль «Бюджетирование».

подписка на событие

 

В модуле укажем следующий программный код:

Процедура ДвиженияВыработкаБюджетаОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт

Получите 267 видеоуроков по 1С бесплатно:

//запись движений
НаборЗаписей = Источник.Движения.ВыработкаБюджета;
НоваяСтрока = НаборЗаписей.Добавить();
НоваяСтрока.Подразделение = Источник.ОтветственноеПодразделение;
НоваяСтрока.Сумма = Источник.РасшифровкаПлатежа.Итог(«Сумма»);
НоваяСтрока.Период = Источник.Дата;
НоваяСтрока.Регистратор = Источник.Ссылка;
НаборЗаписей.Записать();

// Проверка
Если НЕ ЗначениеЗаполнено(Источник.ЗаявкаНаРасходованиеДенежныхСредств) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| пкм_ЛимитыПодразделенийСрезПоследних.Сумма КАК Лимит,
| ЕСТЬNULL(ВыработкаБюджетаОбороты.СуммаОборот,0) КАК УжеСписали
|ИЗ
| РегистрСведений.пкм_ЛимитыПодразделений.СрезПоследних(&Дата, Подразделение = &ОтветственноеПодразделение) КАК пкм_ЛимитыПодразделенийСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВыработкаБюджета.Обороты(НачалоПериода(&Дата, Месяц), &Дата, , Подразделение = &ОтветственноеПодразделение) КАК ВыработкаБюджетаОбороты
| ПО пкм_ЛимитыПодразделенийСрезПоследних.Подразделение = ВыработкаБюджетаОбороты.Подразделение»;

Запрос.УстановитьПараметр(«Дата», Источник.Дата);
Запрос.УстановитьПараметр(«ОтветственноеПодразделение», Источник.ОтветственноеПодразделение);

Выборка = Запрос.Выполнить().Выбрать();

Если Выборка.Следующий() Тогда
Если Выборка.УжеСписали > Выборка.Лимит Тогда
Отказ = Истина;
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр(«ru = ‘Невозможно провести документ, исчерпан лимит! Возможный лимит » + Выборка.Лимит + «, уже израсходовано » + Выборка.УжеСписали + «‘»);
КонецЕсли;
КонецЕсли;
КонецЕсли;

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

Сделано для внесение минимальный изменений в модуль типового объекта. Первая часть программного кода делает записи в регистр,  а вторая проверяет возможно ли проведение или нет. Проверка отрабатывает только в том случае, когда документ создан без заявки на расходование средств.

Если подразделение превысит бюджет — система выдаст соответствующее сообщение:

сообщение об ошибки

Отчет по бюджету

Отчет по бюджету будем делать как внешний, дополнительный отчет. Для этого сделаем простой отчет на СКД. Данные будут браться из следующего запроса:

ВЫБРАТЬ
ВыработкаБюджетаОбороты.Подразделение,
ВЫБОР
КОГДА пкм_ЛимитыПодразделенийСрезПоследних.Сумма — ВыработкаБюджетаОбороты.СуммаОборот > 0
ТОГДА пкм_ЛимитыПодразделенийСрезПоследних.Сумма — ВыработкаБюджетаОбороты.СуммаОборот
ИНАЧЕ 0
КОНЕЦ КАК ОстатокЛимита,
ВЫБОР
КОГДА ВыработкаБюджетаОбороты.СуммаОборот — пкм_ЛимитыПодразделенийСрезПоследних.Сумма > 0
ТОГДА ВыработкаБюджетаОбороты.СуммаОборот — пкм_ЛимитыПодразделенийСрезПоследних.Сумма
ИНАЧЕ 0
КОНЕЦ КАК Перерасход,
пкм_ЛимитыПодразделенийСрезПоследних.Сумма КАК Лимит,
ВыработкаБюджетаОбороты.СуммаОборот КАК Выработка
ИЗ
РегистрСведений.пкм_ЛимитыПодразделений.СрезПоследних(КОНЕЦПЕРИОДА(&Период, МЕСЯЦ), ) КАК пкм_ЛимитыПодразделенийСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВыработкаБюджета.Обороты(НАЧАЛОПЕРИОДА(&Период, МЕСЯЦ), КОНЕЦПЕРИОДА(&Период, МЕСЯЦ), , ) КАК ВыработкаБюджетаОбороты
ПО пкм_ЛимитыПодразделенийСрезПоследних.Подразделение = ВыработкаБюджетаОбороты.Подразделение

Необходимо вывести в форму отчета параметр — &Период. Сделать настройки оформления СКД.

Проверяем отчет:

лимиты

Встраиваем отчет в конфигурацию

Встроим отчет в конфигурацию. Для это воспользуемся механизмов внешних обработок и отчетов. Для этого необходимо подготовить отчет, встроим в модуль объекта техническую функцию механизма внешних обработок:

Функция СведенияОВнешнейОбработке() Экспорт

РегистрационныеДанные = Новый Структура;
РегистрационныеДанные.Вставить(«Наименование», «Бюджет подразделений»);
РегистрационныеДанные.Вставить(«БезопасныйРежим», Ложь);
РегистрационныеДанные.Вставить(«Версия», «1.0»);
РегистрационныеДанные.Вставить(«ВерсияБСП», «1.2.1.4»);

РегистрационныеДанные.Вставить(«Вид», «ДополнительныйОтчет»);

РегистрационныеДанные.Вставить(«Информация», «Отчет по бюджету подразделений»);

ТЗКоманд = Новый ТаблицаЗначений;
ТЗКоманд.Колонки.Добавить(«Идентификатор»);
ТЗКоманд.Колонки.Добавить(«Представление»);
ТЗКоманд.Колонки.Добавить(«Модификатор»);
ТЗКоманд.Колонки.Добавить(«ПоказыватьОповещение»);
ТЗКоманд.Колонки.Добавить(«Использование»);

СтрокаКоманды = тзКоманд.Добавить();
СтрокаКоманды.Идентификатор = Новый УникальныйИдентификатор;
СтрокаКоманды.Представление = «Отчет по бюджету подразделений»;
СтрокаКоманды.ПоказыватьОповещение = Истина;
СтрокаКоманды.Использование = «ОткрытиеФормы»;

СтрокаКоманды = тзКоманд.Добавить();
СтрокаКоманды.Идентификатор = Новый УникальныйИдентификатор;
СтрокаКоманды.Представление = «Отчет по бюджету подразделений»;
СтрокаКоманды.ПоказыватьОповещение = Истина;
СтрокаКоманды.Использование = «ВызовСерверногоМетода»;

РегистрационныеДанные.Вставить(«Команды», ТЗКоманд);

Возврат РегистрационныеДанные;

КонецФункции

После этого, вы сможете добавить свой отчет в справочник «Дополнительные отчеты и обработки«:

внешние обработки

 

Расположим наш отчет на вкладке «Финансы»:

допольнительный отчет

 

 

P.S. Наша компания предоставляет услуги по настройке, доработке и комплексному внедрению 1С. Закажите бесплатный расчет стоимости вашей задачи на странице Услуги 1С или по телефону +7 (499) 350 29 00.

Остались вопросы?

СПРОСИТЕ в комментариях!

Комментариев: 16 на “Бюджетирование в 1С управление торговлей 11
  1. А что в итоге? Оценку снизили или полностью забраковали решение на отдельном регистре?

    Ответить

    • Оценку до 3 с минусом снизил.. Поставил потому что быстро всё сделал, около 45 минут делал)

      Ответить

      • Т.е. вы сделали без ошибок первое задание, затем второе вот этим типа некорректным способом и вам на два балла снизили оценку? Еще и при условии, что быстро.. А я думал, нужно полностью свои три часа отсиживать.. Страно. Почему бы тогда не отдать было ее вам на переделку, раз столько времени.

        Ответить

        • Я сам не понял, но преподы разные — у каждого свои заморочки. Наверное возится больше не хотел 🙂

          Ответить

  2. Поздравляю со сдачей! А больше никаких моментов не было чего стоит учесть? Просто мне тоже совсем скоро сдавать..

    Ответить

    • Если честно — самый простой экзамен получился у меня. Не волнуйтесь, если прорешали все задачи — у вас получится 🙂

      Ответить

  3. Снизили оценку за использование своего РН или РН и РС?

    Ответить

    • Да, именно.
      Преподаватель конечно прав — экзамен на знание типового функционала — его и надо использовать.

      Ответить

  4. Решение аналогично Билету №3 (задача 2.30)

    1. Включил в Администрировании функциональные опции “Заявки на расходование денежных средств” (все галочки).
    2. Добавил у справочника “Банковские счета” реквизит “ИспользоватьЗаявкиСверхЛимита” с типом “булево” и вынес его на форму элемента справочника.
    3. В модуле менеджера док-та “СписаниеБезналичныхДенежныхСредств” в процедуре “ЗаполнитьИменаРеквизитовПоХозяйственнойОперации” добавил реквизит хозяйственной операции с видом “Оплата поставщику”:
    МассивРеквизитовОперации.Добавить(“Подразделение”);
    4. В обработку проведения док-так СписаниеБезналичныхДС добавил следующий код после строки “ДенежныеСредстваСервер.ОтразитьЛимитыРасходаДенежныхСредств(ДополнительныеСвойства, Движения, Отказ);” :
    //Проверим, установлен ли для текущей кассы режим контроля расходов при превышении допустимого лимита
    Если БанковскийСчет.ИспользоватьЗаявкиСверхЛимита Тогда

    //Проверим наличие отрицательных остатков в регистре
    Запрос = Новый Запрос(«ВЫБРАТЬ
    | СписаниеБезналичныхДенежныхСредствРасшифровкаПлатежа.СтатьяДвиженияДенежныхСредств КАК СтатьяДвиженияДенежныхСредствВВыписке,
    | СУММА(СписаниеБезналичныхДенежныхСредствРасшифровкаПлатежа.Сумма) КАК СуммаВВыписке
    |ПОМЕСТИТЬ СтатьиДДССуммы
    |ИЗ
    | Документ.СписаниеБезналичныхДенежныхСредств.РасшифровкаПлатежа КАК СписаниеБезналичныхДенежныхСредствРасшифровкаПлатежа
    |ГДЕ
    | СписаниеБезналичныхДенежныхСредствРасшифровкаПлатежа.Ссылка = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    | СписаниеБезналичныхДенежныхСредствРасшифровкаПлатежа.СтатьяДвиженияДенежныхСредств
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    | ЕСТЬNULL(-ЛимитыРасходаДенежныхСредствОбороты.ЛимитОборот + ЛимитыРасходаДенежныхСредствОбороты.РасходСверхЛимитаОборот + ЛимитыРасходаДенежныхСредствОбороты.РасходВПределахЛимитаОборот + СтатьиДДССуммы.СуммаВВыписке, 0) КАК Перерасход,
    | ЛимитыРасходаДенежныхСредствОбороты.РасходСверхЛимитаОборот,
    | ЛимитыРасходаДенежныхСредствОбороты.ЛимитОборот,
    | ЛимитыРасходаДенежныхСредствОбороты.РасходВПределахЛимитаОборот,
    | ЛимитыРасходаДенежныхСредствОбороты.СтатьяДвиженияДенежныхСредств,
    | ЛимитыРасходаДенежныхСредствОбороты.Организация,
    | ЛимитыРасходаДенежныхСредствОбороты.Подразделение
    |ПОМЕСТИТЬ ПредИтог
    |ИЗ
    | СтатьиДДССуммы КАК СтатьиДДССуммы
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЛимитыРасходаДенежныхСредств.Обороты(
    | &ПериодНач,
    | &ПериодКон,
    | ,
    | Организация = &Организация
    | И Подразделение = &Подразделение
    | И СтатьяДвиженияДенежныхСредств В
    | (ВЫБРАТЬ
    | Т1.СтатьяДвиженияДенежныхСредствВВыписке
    | ИЗ
    | СтатьиДДССуммы КАК Т1)) КАК ЛимитыРасходаДенежныхСредствОбороты
    | ПО СтатьиДДССуммы.СтатьяДвиженияДенежныхСредствВВыписке = ЛимитыРасходаДенежныхСредствОбороты.СтатьяДвиженияДенежныхСредств
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    | ПредИтог.Перерасход,
    | ПредИтог.СтатьяДвиженияДенежныхСредств,
    | ПредИтог.Организация,
    | ПредИтог.Подразделение
    |ИЗ
    | ПредИтог КАК ПредИтог
    |ГДЕ
    | ПредИтог.Перерасход > 0»);
    Запрос.УстановитьПараметр(«ПериодНач»,НачалоМесяца(Дата));
    Запрос.УстановитьПараметр(«ПериодКон»,КонецМесяца(Дата));
    Запрос.УстановитьПараметр(«Организация»,Организация);
    Запрос.УстановитьПараметр(«Подразделение»,Подразделение);
    Запрос.УстановитьПараметр(«Ссылка»,Ссылка);

    РезультатЗапроса = Запрос.Выполнить();
    Если НЕ РезультатЗапроса.Пустой() Тогда
    //Есть перерасход
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
    Сообщить(«Возник перерасход по статье ДДС «+Выборка.СтатьяДвиженияДенежныхСредств+» в размере «+Выборка.Перерасход+» «+Валюта.Наименование+»!»);

    КонецЦикла;
    Отказ = Истина;
    Возврат;
    КонецЕсли;

    КонецЕсли;

    Ответить

  5. Релиз 11.1.9.61
    1) Включить ф.о. “Заявки на расходование денежных средств” (все галочки).
    2) Для р/с включить флаг «Разрешить списание ДС без заявок»
    3) Документ Списание безналичных ДС – модуль менеджера
    В процедуре “ЗаполнитьИменаРеквизитовПоХозяйственнойОперации” добавить реквизит для хозяйственной операции с видом “Оплата поставщику”:
    МассивРеквизитовОперации.Добавить(“Подразделение”);
    4) Документ Списание безналичных ДС – модуль менеджера
    В функции ТекстЗапросаТаблицаЛимитыРасходаДенежныхСредств для хоз. операции Оплата поставщику переопределить выборку суммы в поле РасходВПределахЛимита, а не РасходСверхЛимита
    ЕСТЬNULL(ТаблицаРасшифровкаПлатежа.Сумма, ДанныеДокумента.СуммаДокумента) * &КоэффициентПересчетаВВалютуУпр КАК РасходВПределахЛимита,
    0 КАК РасходСверхЛимита
    Для остальных операций соответственно добавить
    0 КАК РасходВПределахЛимита,
    5) Документ Списание безналичных ДС – модуль объекта
    В процедуре СформироватьСписокРегистровДляКонтроля() добавить после Массив.Добавить(Движения.ДенежныеСредстваКВыплате); след. код.
    Если ЭтотОбъект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ОплатаПоставщику Тогда
    Массив.Добавить(Движения.ЛимитыРасходаДенежныхСредств);
    КонецЕсли;
    6) Общий модуль ПроведениеСервер, Процедура ВыполнитьКонтрольРезультатовПроведения
    В ветку
    Если ЕстьИзмененияВТаблице(ДанныеТаблиц,»ДвиженияЛимитыРасходаДенежныхСредствИзменение») Тогда
    добавить след. код (где именно добавить понятно при проведении – выскакивает ошибка Поле ДатаПлатежа не найдено)
    Если ТипЗнч(Объект) = Тип(«ДокументОбъект.СписаниеБезналичныхДенежныхСредств») Тогда
    Период = Объект.Дата;
    7) В отчете Лимиты расхода ДС создаем новый вариант с подразделениями

    Итого строк 40 кода, использование стандартного отчета, в конструктор запросов вообще не заходим, основная методика CtrlC — CtrlV.

    Или все так просто, или я чего-то не понимаю 8)

    Ответить

  6. Подскажите пожалуйста, надо ли при решении экзамена специалист УТ 11.1 писать вордовский файл с ходом решения (аналогично с экзаменом специалист-консультант УТ 11.1)?

    Ответить

    • Я очно сдавал и спеца и спеца-консультанта по УТ и при этом не писал хода решения. Никто не заставлял писать ход решения 🙂

      Ответить

      • Это да, но при заочной сдаче (для специалиста-консультанта) необходимо писать ход решения.

        Ответить

  7. И еще вопрос: В билете 2 задачи — допускается ли решение обеих задач в одной и той же ДЕМО базе?

    Ответить

    • Решал обе задачи в одной базе — нормально приняли)

      Ответить

  8. danissimo, блин и как самому дойти, до такого решения, не понимаю!

    Ответить

Добавить комментарий:

Ваш e-mail не будет опубликован.