Форум Чистова. Подготовка к экзаменам 1С

Аттестация "1С:Специалист" => Аттестация "1С:Специалист" УТ 11 => Тема начата: oltie от Август 15, 2013, 01:35:01 pm

Название: Задача 2.31
Отправлено: oltie от Август 15, 2013, 01:35:01 pm
Предлагаю решение, жду комментариев.

 1. настройка «Администрирование» -> «Организация иденежные средства» : поставить галочку «Планирование денежных средств».
 2. Создать новый регистр сведений«ЛимитыПоПодразделениям»: Измерение «подразделение», ресурс «Сумма».
 Независимый, периодический: месяц.
 

 Включить новый регистр в подсистему «планирование иконтроль денежных средств»:
 
 3. Реквизит документа СБДС«ЗаявкаНаРасходываниеДенежныхСредств» в свойствах – «проверка заполнения»
 поставить «не проверять».
 

 4. Вносим изменения в модуль менеджера документа СБДС
 Процедура ЗаполнитьИменаРеквизитовПоХозяйственнойОперации :
 
 5. Вносим изменения в модуль документа СБДС (Делаемпроверку заполнения «заявки на расходование денежные средств», в случае если
 это не оплата поставщику. Проверяем лимиты с помощью новой функции
 «ПроверитьЛимиты»)
 

 6. Вносим изменения в модуль формы документа СБДС

 7. Создаем отчет "Остатки по лимитам".

 Файл с решением можно скачать тут http://myfolder.ru/files/37620938
Вложения:
3237801.jpg
3606001.jpg
0674538.jpg
s8282489.jpg
s7283930.jpg
Название: Задача 2.31
Отправлено: Nechipury от Август 15, 2013, 02:47:50 pm
Правильное решение)
Название: Задача 2.31
Отправлено: kindzadza от Август 16, 2013, 02:57:03 pm
а куда вводится этот остаток по лимиту,не вижу?) просто делал немного по другому(есть документ для добавления лимита)...а у тебя все как то по проще)
Название: Задача 2.31
Отправлено: oltie от Август 19, 2013, 12:06:13 pm
Цитата (Nechipury)
а куда вводится этот остаток по лимиту,не вижу?)

 создается независимый регистр для самих лимитов. 
 сами лимиты вводятся просто как новая запись этого регистра (без документа).
 а остатки по лимитам выводят в отчете.
Название: Задача 2.31
Отправлено: kastrtroy2006 от Август 19, 2013, 01:34:12 pm
А почему сведений а не накопления?
Название: Задача 2.31
Отправлено: DrShust от Август 19, 2013, 01:52:20 pm
kastrtroy2006, странный вопрос... А по ценам номенклатуры, например, тоже тогда регистр накопления должен быть?
Название: Задача 2.31
Отправлено: kastrtroy2006 от Август 19, 2013, 02:03:21 pm
Цитата (DrShust)
kastrtroy2006, странный вопрос... А по ценам номенклатуры, например, тоже тогда регистр накопления должен быть?

 По ценам номенклатуры отчет об остатках не надо строить.

Добавлено (19.08.2013, 14:03)
---------------------------------------------
Делал так:
 РегистрНакопления: ОстаткиПоЛимитам.
 Документ - УстановкаЛимита.

 УстановкаЛимита движения:
 + Лимит на текущий месяц
 - Остаттки по лимитам за прошлый

 Подписка на проведение СписаниеДС

 - На сумму списания

 Ну и проверки соответственно.

Название: Задача 2.31
Отправлено: freefly от Август 19, 2013, 02:19:56 pm
kastrtroy2006, поверь, лучше ргистр сведений. Даже не так. Только регистр сведений. Независимый.
Название: Задача 2.31
Отправлено: kastrtroy2006 от Август 19, 2013, 02:21:44 pm
Объясните почему.
Название: Задача 2.31
Отправлено: freefly от Август 19, 2013, 02:32:12 pm
По условию нужно просто указать лимиты на месяц для подразделений. Регистр накопления - избыточная штука для таких задач.
 Ведь не факт, что вообще будут продажи (теоретически). Зачем гонять такой объект платформы, как регистр накопления.
 А вот движения денежных средств (даже слово "движение" не выкинуть из фразы) уже пишем в регистр накопления, скажем "ОборотыЛимитов".
Название: Задача 2.31
Отправлено: kastrtroy2006 от Август 19, 2013, 02:42:25 pm
Вроде правильно. Но когда в задании указано, что надо строить отчет по остаткам чего либо, в голове первое, что надо делать регистр накопления.
Название: Задача 2.31
Отправлено: DrShust от Август 19, 2013, 05:01:11 pm
kastrtroy2006, Документ - УстановкаЛимита интересная тема. Но если и делать этот документ, тогда следом зависимый регистр сведений, у которого регистратор как раз этот документ. Но в условии задачи об этом не сказано - значит, излишество. Будет если время на экзамене, то, может быть, в плюс пойдёт. Но только, если время останется.
Название: Задача 2.31
Отправлено: oltie от Август 20, 2013, 09:35:03 am
Цитата (kastrtroy2006)
Но когда в задании указано, что надо строить отчет по остаткам чего либо, в голове первое, что надо делать регистр накопления.

 поэтому и строится отчет по регистру накопления "Расчеты с поставщиками". зачем создавать новый регистр, изменять проведение документов, если в конфигурации уже всё есть ?
Название: Задача 2.31
Отправлено: gugenotka от Август 27, 2013, 04:23:10 pm
oltie, в предложенном решении же получается, что если лимиты исчерпаны, но заявка заполнена, то Списание всё равно не проводится. Думаю, это неправильно.
Название: Задача 2.31
Отправлено: Glime от Август 28, 2013, 04:33:31 pm
а у меня такой вопрос, если до исчерпания лимита делались СБДС на основание заявок на расходование средств, нужно ли учитывать их в списание лимита или они идут всегда как сверхлимитные.
Название: Задача 2.31
Отправлено: Nechipury от Август 29, 2013, 04:49:50 pm
Кто делал как я тот я....
 1.Создаем РС и Док с движениями например ЛимитДенежныхСредств
 2.Делаем общий модуль , где проверяем превышение лимита и возвращаем булево.
 3.Есть такой общий модуль ДенежныеСредстваСервер находим там РазрешеныПлатежиБезУказанияЗаявок и прям в этой функции вызываем наш модуль = в зависимости от значения возврат Ложь.

 Функция РазрешеныПлатежиБезУказанияЗаявок(ДокументОбъект) Экспорт
    //+2.30
     Если Задача.ПревышенЛимитДС(ДокументОбъект) = Истина Тогда
        Если ДокументОбъект.ЗаявкаНаРасходованиеДенежныхСредств.Пустая() Тогда
       Сообщение = Новый СообщениеПользователю;
       Сообщение.Текст = "Лимит ДС исчерпан!";
       Сообщение.Сообщить();
       Возврат Ложь;
       КонецЕсли;
       
    КонецЕсли;   
    //-2.30

 4.В менеджере док.СписаниеБезналичныхДенежныхСредств добавляем МассивРеквизитовОперации.Добавить("Подразделение");
 5.Ну и модулеОбъекта родимом нашем запиливаем

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

 ////+2.31   
 Если ДенежныеСредстваСервер.РазрешеныПлатежиБезУказанияЗаявок(ЭтотОбъект) = Ложь И
    ЭтотОбъект.ЗаявкаНаРасходованиеДенежныхСредств.Пустая() Тогда
    Отказ = Истина;
 Иначе
    Отказ = Ложь;
 КонецЕсли;
 6.Делаем Отчет в СКД
Название: Задача 2.31
Отправлено: VaKiSe от Сентябрь 18, 2013, 11:38:01 pm
Предлагаю такое решение очень простое и быстрое:

 1.) Создаем Рег. Нак. "ЛимитыПоПодразделениям"
 2.) Создаем документ "Ввод лимита на месяц"
 документ обнуляет лимит по всем подразделениям за прошлый месяц "-"(если они не израсходованы) и вводит записи на новый (как сказано в условии)со знаком "+".
 3.) При проведении документов расходования Д/С (через подписку на события) расходуем из РН лимит и контролируем остаток(как сказано в условии), если лимита не хватает выводим сообщение мол сделайте заявку на не хватаемую сумму.
 4.) При проведении документа "Заявка на расход Д/С" опять же через подписку делаем запись в регистр со знаком "+" тем самым увеличиваем лимит по выбранному подразделению!
 5.) Лепим примитивный отчет в СКД по остаткам Рег.нак. "ЛимитыПоПодразделениям"
 6.) Все!
Название: Задача 2.31
Отправлено: asu2 от Октябрь 02, 2013, 09:30:40 am
Мой вариант... на проверку

Добавлено (02.10.2013, 09:29)
---------------------------------------------
.

Добавлено (02.10.2013, 09:30)
---------------------------------------------
блин почему не прикрепляются файлы............

Название: Задача 2.31
Отправлено: reckoner от Октябрь 06, 2013, 02:21:36 pm
Если бы я делал, то сделал бы вариант как у VaKiSe, тоже так думаю.
 Один Рег. Накопления, по нему устанавливаем изначально лимиты ПРИХОД, а документ Списание делает РАСХОД по ним с соответствубщенй проверкой на не превышение.
 Только непонятно зачем пункт 4, про это в задаче не сказано, лимит повышать не нужно. На то он и лимит, чтобы один раз установиться.
 Кто что думает еще?
Название: Задача 2.31
Отправлено: VaKiSe от Октябрь 09, 2013, 12:02:56 am
reckoner, согласен с тобой думаю пункт 4 не нужен. Да и еще, я думаю, что в этой задаче нужна управляемая блокировка, перед запросом к остатку лимита по подразделению. И еще, я дела подразделение доп. сведением, чтобы не вносить в типовую форму документа изменение(хотя реквизит подразделение есть, но он не виден при оплате поставщику)
Название: Задача 2.31
Отправлено: SanPav от Октябрь 10, 2013, 03:49:43 pm
В данной задаче дополнительный регистр не нужен.
 Вполне можно обойтись штатным регистром "Денежные средства к выплате".
 Мой вариант решения:
 1. Использование заявок на расходование ДС в настройках программы включаем.
 2. У банковских счетов разрешаем списание ДС без заявок. Контролировать будем через доп. обработку сами.
 3. Лимиты устанавливаем документами  "Заявки на расходование ДС" для каждого подразделения, где операция = "Прочие расходы", Дата платежа = начало месяца на который устанавливается лимит, а контрагент, счет = предопределенные значения, например, с наименованием "Для лимитов", статья расходов с аналитикой "Подразделение".
 4. Включаем видимость реквизита "Подразделение" в форме документа "Списание безналичных ДС" для операций "Оплата поставщику". Изменения вносятся в процедуру ЗаполнитьИменаРеквизитовПоХозяйственнойОперации модуля менеджера документа. Нужно заполнять для проверки далее.
 5. Создаем подписку на событие проведения документа "Списание безналичных ДС". Где если заявка не заполнена, то проверяем остаток по регистру "Денежные средства к выплате" по предопределенным значениям аналитики учета по партнерам, статье расхода, подразделению, заявке, статье движения ДС и периоду установки.  Сравниваем ее с суммой документа, если все ОК, то списываем сумму документа с этого регистра по проверочным измерениям. Иначе отказ от проведения с соответствующим сообщением об ошибке.
 6. Отчет строим все по тому же штатному регистру  "Денежные средства к выплате".
Название: Задача 2.31
Отправлено: reckoner от Октябрь 10, 2013, 04:19:28 pm
Интересно вот что - откуда брать проверяемое подразделение для документа СписаниеБезналичныхДенежныхСредств?
 И еще насколько я понял, все таки нужно использовать типовой регистр, а не создавать свой. Вот к примеру подойдет Движения Денежные средства Контрагент (там есть подразделение).
 Но с другой стороны документ может писать туда РАЗНЫМИ подразделениями. Как тогда реализоывать условие проверки для Заявки на расходование? (оно действует по одному подразделению). Вообщем запутался.

Добавлено (10.10.2013, 16:19)
---------------------------------------------
SanPav,  Можете сделать выкладки кода? Интересует как вы реализовали условия на проверку заполненности Заявки на Расходование в зависимости от введенности лимита.

Название: Задача 2.31
Отправлено: SanPav от Октябрь 10, 2013, 04:20:19 pm
reckoner
 см. п. 4
 регистр используем один = "Денежные средства к выплате". 
 Пробуем сделать по шагам в базе, смотрим движения, и все станет ясно.
Название: Задача 2.31
Отправлено: VaKiSe от Октябрь 10, 2013, 08:51:06 pm
Кто бы мог подумать! Спасибо,  SanPav!
Название: Задача 2.31
Отправлено: reckoner от Октябрь 10, 2013, 08:54:13 pm
Кто-нибудь запилите сам код проверки на превышение лимита.
 Непонятно как это делается у oltie и у Nechipury.

 SanPav, вы хоть и предложили вариант, он мне не очень понятен.

 Вот мой вариант -
 1. Включаем видимость подразделения.
 2. Используем регистр ДвиженияДенежныеСредстваКонтрагент (там есть подразделение). Делаем, чтобы док писал туда подразделение из шапки. (до изменений он пишет из ТЧ)
 3. Проверяем чтобы лимит не был превышен -> Обороты с начала месяца по ДвиженияДенежныеСредстваКонтрагент не превышали наш лимит по подразделению.

 НО, оно мне не нравится. Судя по всему люди в топике по другому решали..

 ---------
 SanPav, поделитесь кодом!
Название: Задача 2.31
Отправлено: SanPav от Октябрь 12, 2013, 08:40:58 am

 Подписка на событие проведения документа "Списание безналичных ДС":
  

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


Вложения:
7708093.erf
Название: Задача 2.31
Отправлено: samson12 от Октябрь 24, 2013, 10:22:37 pm
Добрый день! Что то не работает ваш код. Ошибка возникает в момент перепроведения документа Списание денежных средств. Программа пишет, что менеджер временных таблиц не обнаружен!. Может что-нибудь ещё надо было сделать, кроме как добавить в модуль менеджера строку для подразделения?
Название: Задача 2.31
Отправлено: Avet от Октябрь 30, 2013, 05:05:25 pm
http://forum.chistov.pro/index.php?topic=1850.msg19690#msg19690
Название: Задача 2.31
Отправлено: brazil от Ноябрь 14, 2013, 12:11:14 pm
ключевые моменты: остатки лимитов не переходят на следующий месяц, оплата поставщику, безналичный расчет.

 ошибки в решениях (на мой взгляд):
  - получение информации не из регистров, а из реквизитов документов (в отчетах, в функциях), например у SanPav . При сдаче платформы  это было бы сразу НЕ сдача.
  - не сведение остаточного регистра в ноль (в некоторых решениях есть попытки выхода в ноль).
  - использовании РН."Движение средства к выплате", без проверки реквизитов регистратора невозможно определить способ оплаты (нал/безнал)

 пока вижу два решения:
 1. РС.Лимиты,
     Суммы сверх лимитов (т.е. по заявкам) - берем из РН."Движение средства к выплате".Обороты(Периодичность=Регистратор) где регистратор=СписаниеБезналки
     Сумма в рамках лимита = Сумма по РН."Движение средств контрагент".Оборот(хоз.опер=оплата пост, тип ден средств=безнал) - Суммы сверх лимитов
 Заставить Документ.СБДС заполнять измерение Подразделение в РН."Движение средств контрагент" при незаполненной заявке.
 Почему-то этот вариант не нравиться.

 2. Все завязываем на новый РН.ОБОРОТНЫЙ "Бюджет" с измерением ТипДвижения=Лимит/СуммаПоЛимиту/СуммаПоЗаявке. новый документ делает движения по лимиту. Документ.СБДС -по суммам в зависимости от заполнения.
 это решение более гибкое к дальнейшим хотелкам клиента.
Название: Задача 2.31
Отправлено: Nathalie от Ноябрь 18, 2013, 08:28:33 pm
brazil, для этой задачи нужно использовать существующие регистры.
Название: Задача 2.31
Отправлено: LepRiKonS от Январь 04, 2014, 03:54:35 pm
Вот комментарии человека, кому попалась эта задача:
 http://programmist1s.ru/reshenie-zadachi-2-31-spetsialist-ut-11-1/
Название: Задача 2.31
Отправлено: term1t от Январь 24, 2014, 04:44:36 pm
Цитата reckoner ()
Делаем, чтобы док писал туда подразделение из шапки. (до изменений он пишет из ТЧ)

 Мне кажется это неправильно, ломать типовой механизм
Название: Задача 2.31
Отправлено: katano от Апрель 21, 2014, 03:34:17 am
Ошибка возникает в момент перепроведения документа Списание денежных средств. Программа пишет, что менеджер временных таблиц не обнаружен!
Название: Задача 2.31
Отправлено: Oliver от Апрель 26, 2014, 06:41:29 am
А теперь как решать?)
Вложения:
2160301.png
Название: Задача 2.31
Отправлено: Manticor от Май 16, 2014, 05:48:26 pm
Цитата Oliver ()
А теперь как решать?)
Это на каком релизе сделали УТ? Вроде в старой предидущей версии такх настроек нет).
 нужноеще и утончить на какой версии будет экзамен приниматься.
 У кого есть правильнео решение этой задачи с использованием типовым механизмов?
Название: Задача 2.31
Отправлено: Oliver от Май 20, 2014, 05:55:48 am
Это на релизе 11.1.6.*, а я сдавал на 11.1.2.*
 Ну методически всегда верное это как 1С делает. 1С сделала на оборотах, при записи проверяются обороты за текущий месяц.
 Однако, в требованиях: ошибочным является стиль программирования, при котором получение любых показателей остатков (ну у нас же лимит бюджета, и он расходуется) производится складываением оборотов smile
Название: Re: Задача 2.31
Отправлено: non1ka от Ноябрь 08, 2014, 07:57:13 pm
Мне кажется, что решение должно строиться на дополнительном Регистре Накопления с видом Обороты, по аналогии с задачей из Специалиста по платформе и по аналогии с типовым механизмом в УПП.

Отдельный документ "Установка лимита" оборот по ресурсу "Лимит"
Подписка на событие к документу "Расходный кассовый ордер", в случае если оплата поставщику, оборот по ресурсу "Расход".
Если обнаруживается оплата сверх лимита оборот по ресурсу "Сверх лимита" достаточно простое решение
Название: Re: Задача 2.31
Отправлено: non1ka от Ноябрь 10, 2014, 02:50:17 pm
При создании новых объектов включаем их в подсистему «Планирования ДС», так же включаем использование при включенной функциональной опции «ИспользоватьПланированиеДенежныхСредств». И включаем объекты в роль «РазделДенежныеСредства», что бы был доступ не только у пользователей с полными правами.

При определении способа решения задачи, основной задаче для себя ставил минимальное количество модификаций объектов конфигурации поставщику.

В конфигурации затронут МодульМенеджера Документа «Списание безналичных денежных средств», пришлось вывести реквизит «Подразделение» на форму.
Затронут состав подсистемы «Финансы» и роль «РазделДенежныеСредства»

Для хранения информации о Лимитах денежных средств, создаем регистр накопления с видом «Обороты»
В качестве регистраторов используем документы «Установка лимитов» и «Списание безналичных денежных средств».
(http://i5.imageban.ru/out/2014/11/10/9cc3221681dc63de875a993ef16e1d1b.png) (http://imageban.ru)

Для регистрации лимита используем документ «Установка лимитов», прописываем обработку проведения.

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

(http://i5.imageban.ru/out/2014/11/10/35ace66559e62b05a83958a349a4a880.png) (http://imageban.ru)

Отражаем факт по расхода по лимиту, расхода сверх лимита и контроль проведения по лимиту реализуем через дополнительную подписку на событие «ОбработкаПроведенияДокумента». (важно поставить проверку на загрузку, в случае обмена данными отключаем проверку). При проверки остатка используем МоментВремени документа исключая движения самого документа для обеспечения перепроведенния документов. В задаче не указано, в случае наличия остатка лимита по подразделению и оплате по заявке списывать остаток или проводить как оплату сверх лимита. Решил списывать остаток, перерасход бюджета регистрирую в случае превышения остатка, причем первоначально закрываю сумму остатка а затем все остальное сверх лимита.

Процедура ОбработкаПроверкиЗаполнения(Источник, Отказ)

   Если Отказ ИЛИ Источник.ОбменДанными.Загрузка Тогда
      Возврат;
   КонецЕсли;

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

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

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

(http://i5.imageban.ru/out/2014/11/10/17bf9e1dee109247b861b737ab6fea66.png) (http://imageban.ru)
Название: Re: Задача 2.31
Отправлено: non1ka от Ноябрь 10, 2014, 02:51:17 pm
Выкладываю отчет.
Название: Re: Задача 2.31
Отправлено: zainaz от Ноябрь 13, 2014, 03:27:07 pm
Мелкая ошибочка в имени документа Экзамен_УстановкаЛимитаДенежныхСрепдств
Название: Re: Задача 2.31
Отправлено: JL от Январь 19, 2015, 12:21:36 pm
Результаты с экзамена.
1. Надо обязательно использовать типовые регистр и документ.
2. Остатки нельзя получать сложением оборотов.
3. Регистр накопления оборотов в регистр остатков преобразовать нельзя, т.к. рушится работа конфигурации.

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

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

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

PS: на экзамене попался другой билет
Название: Re: Задача 2.31
Отправлено: danissimo от Январь 22, 2015, 09:44:19 pm
Пояснение.
Релиз 11.1.9.61. Функционал лимита расхода ДС уже реализован.
Стандартная схема работает следующим образом. Документ Лимит расхода ДС делает запись суммы в регистр Лимит расхода ДС по полю Лимит.
Заявка на расходование ДС делает запись суммы по полю Расход в пределах лимита. При установке флага Сверх лимита - по полю Расход сверх лимита.
При установленом флаге для р/с Разрешить списание ДС без заявок на оплату документ Списание безналичных ДС делает запись суммы по регистру Лимит расхода ДС по полю Расход сверх лимита. В противном случае (при отключенном флаге для р/с Разрешить списание ДС без заявок на оплату) движение по регистру делает документ Заявка на расходование ДС, на основании которой был введен документ Списание безналичных ДС.
В конфигурации реализована новая схема контроля остатков, т.е. сначала делается проведение по регистру, а потом в случае наличия отрицательных остатков выдается сигнал об ошибке и транзакция откатывается.
Проведение по регистрам и контроль правильности провдения выполняется стандартными механизмами конфигурации.

Решение работает след. образом.
В документе Списание безналичных ДС при проведении без заявки для хоз. операции Оплата поставщику делаем запись суммы в регистр Лимит расхода ДС по полю Расход в пределах лимита, а не по Расход сверх лимита. Также для этого документа добавляем регистр Лимит расхода ДС в список контролируемых регистров на наличие отрицательных остатков. В случае исчерпания лимита выдается сообщение об ошибке и документ не проводится.
Та же ошибка и при проведении Заявки на расходование ДС, что вынуждает использовать флаг Сверхлимита.
Далее на основании заявки вводим документ Списание безналичных ДС, который движений по этому регистру уже не делает.

В отчете Лимит расхода ДС есть графа Недорасход - остаток лимита.

Минусы - вмешиваемся в работу типового механизма.
Плюсы - все делается просто и быстро, вмешательство опять же использует стандартные механизмы.
Название: Re: Задача 2.31
Отправлено: frd от Август 05, 2015, 05:58:38 pm
Для проведения "Заявки на расходование денежных средств" нужно поставить птичку "Сверх лимита" ?

И тогда движение по регистру "Лимиты расхода денежных средств" сделаем эта заявка, а не сам док "Списание безналичных ДС" ??
Название: Re: Задача 2.31
Отправлено: ВиталийЧебан от Август 06, 2015, 09:05:35 am
Для проведения "Заявки на расходование денежных средств" нужно поставить птичку "Сверх лимита" ?

И тогда движение по регистру "Лимиты расхода денежных средств" сделаем эта заявка, а не сам док "Списание безналичных ДС" ??

Да.
Название: Re: Задача 2.31
Отправлено: frd от Август 28, 2015, 12:26:47 pm
Пояснение.
Релиз 11.1.9.61. Функционал лимита расхода ДС уже реализован.
Стандартная схема работает следующим образом. Документ Лимит расхода ДС делает запись суммы в регистр Лимит расхода ДС по полю Лимит.
Заявка на расходование ДС делает запись суммы по полю Расход в пределах лимита. При установке флага Сверх лимита - по полю Расход сверх лимита.
При установленом флаге для р/с Разрешить списание ДС без заявок на оплату документ Списание безналичных ДС делает запись суммы по регистру Лимит расхода ДС по полю Расход сверх лимита. В противном случае (при отключенном флаге для р/с Разрешить списание ДС без заявок на оплату) движение по регистру делает документ Заявка на расходование ДС, на основании которой был введен документ Списание безналичных ДС.
В конфигурации реализована новая схема контроля остатков, т.е. сначала делается проведение по регистру, а потом в случае наличия отрицательных остатков выдается сигнал об ошибке и транзакция откатывается.
Проведение по регистрам и контроль правильности провдения выполняется стандартными механизмами конфигурации.

Решение работает след. образом.
В документе Списание безналичных ДС при проведении без заявки для хоз. операции Оплата поставщику делаем запись суммы в регистр Лимит расхода ДС по полю Расход в пределах лимита, а не по Расход сверх лимита. Также для этого документа добавляем регистр Лимит расхода ДС в список контролируемых регистров на наличие отрицательных остатков. В случае исчерпания лимита выдается сообщение об ошибке и документ не проводится.
Та же ошибка и при проведении Заявки на расходование ДС, что вынуждает использовать флаг Сверхлимита.
Далее на основании заявки вводим документ Списание безналичных ДС, который движений по этому регистру уже не делает.

В отчете Лимит расхода ДС есть графа Недорасход - остаток лимита.

Минусы - вмешиваемся в работу типового механизма.
Плюсы - все делается просто и быстро, вмешательство опять же использует стандартные механизмы.
Понравилось решение, вот только один момент смущает:
Если представить, что у нас установлен лимит 10000, и есть заявка (утверждена к оплате) на 1000 руб - мы не сможем оплатить 11000 руб, поскольку двинуть нужно 2 разных поля?
Название: Re: Задача 2.31
Отправлено: Dante от Октябрь 07, 2016, 09:42:47 am
 Добрый день, попадалась ли данная задача кому-либо за последний год?
Название: Re: Задача 2.31
Отправлено: Fizk_11 от Март 04, 2017, 06:05:27 pm
Доброго дня коллеги. Есть ли возможность использовать дату поставки и отгрузки настроенные в способе обеспечения в обработке "ФормированиеЗаказовПоставщикуПоПлану"??? Поставщиков она выдергивает, а вот дату поступления по заказу нет... в отличии от обработки "ПоПотребностям".
По утверждениям Справки:
"Период заказа (поле в обработке по потребностям) - расчитывается по рабочим дням компании, с учетом сроков исполнения заказов на закупку в способах обеспечения. Позволяет указать стандартный (расчитываемый) период, например "Сегодня", "Завтра", "Эта неделя", "Следующие 7 дней" для периодического формирования заказов поставщику, которые требуется создать для выполнения плана".
Толи я что то, где то упустил, или одно из двух. Помогите разобраться...
УТ(11.3.2.157) .