Автор Тема: Задача 2.31  (Прочитано 19968 раз)

0 Пользователей и 1 Гость просматривают эту тему.

LepRiKonS

  • Пользователь
  • **
  • Сообщений: 49
  • ФИО: Павел
Задача 2.31
« Ответ #30 : Январь 04, 2014, 03:54:35 pm »
Вот комментарии человека, кому попалась эта задача:
 http://programmist1s.ru/reshenie-zadachi-2-31-spetsialist-ut-11-1/

term1t

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Роман
Задача 2.31
« Ответ #31 : Январь 24, 2014, 04:44:36 pm »
Цитата reckoner ()
Делаем, чтобы док писал туда подразделение из шапки. (до изменений он пишет из ТЧ)

 Мне кажется это неправильно, ломать типовой механизм


katano

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: katano
Задача 2.31
« Ответ #32 : Апрель 21, 2014, 03:34:17 am »
Ошибка возникает в момент перепроведения документа Списание денежных средств. Программа пишет, что менеджер временных таблиц не обнаружен!

Oliver

  • Новичок
  • *
  • Сообщений: 5
  • ФИО: Юрий
Задача 2.31
« Ответ #33 : Апрель 26, 2014, 06:41:29 am »
А теперь как решать?)
Вложения:
2160301.png

Manticor

  • Пользователь
  • **
  • Сообщений: 25
Задача 2.31
« Ответ #34 : Май 16, 2014, 05:48:26 pm »
Цитата Oliver ()
А теперь как решать?)
Это на каком релизе сделали УТ? Вроде в старой предидущей версии такх настроек нет).
 нужноеще и утончить на какой версии будет экзамен приниматься.
 У кого есть правильнео решение этой задачи с использованием типовым механизмов?

Oliver

  • Новичок
  • *
  • Сообщений: 5
  • ФИО: Юрий
Задача 2.31
« Ответ #35 : Май 20, 2014, 05:55:48 am »
Это на релизе 11.1.6.*, а я сдавал на 11.1.2.*
 Ну методически всегда верное это как 1С делает. 1С сделала на оборотах, при записи проверяются обороты за текущий месяц.
 Однако, в требованиях: ошибочным является стиль программирования, при котором получение любых показателей остатков (ну у нас же лимит бюджета, и он расходуется) производится складываением оборотов smile

non1ka

  • Новичок
  • *
  • Сообщений: 5
  • ФИО: Тюрин Илья Александрович
Re: Задача 2.31
« Ответ #36 : Ноябрь 08, 2014, 07:57:13 pm »
Мне кажется, что решение должно строиться на дополнительном Регистре Накопления с видом Обороты, по аналогии с задачей из Специалиста по платформе и по аналогии с типовым механизмом в УПП.

Отдельный документ "Установка лимита" оборот по ресурсу "Лимит"
Подписка на событие к документу "Расходный кассовый ордер", в случае если оплата поставщику, оборот по ресурсу "Расход".
Если обнаруживается оплата сверх лимита оборот по ресурсу "Сверх лимита" достаточно простое решение

non1ka

  • Новичок
  • *
  • Сообщений: 5
  • ФИО: Тюрин Илья Александрович
Re: Задача 2.31
« Ответ #37 : Ноябрь 10, 2014, 02:50:17 pm »
При создании новых объектов включаем их в подсистему «Планирования ДС», так же включаем использование при включенной функциональной опции «ИспользоватьПланированиеДенежныхСредств». И включаем объекты в роль «РазделДенежныеСредства», что бы был доступ не только у пользователей с полными правами.

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

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

Для хранения информации о Лимитах денежных средств, создаем регистр накопления с видом «Обороты»
В качестве регистраторов используем документы «Установка лимитов» и «Списание безналичных денежных средств».


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

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



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

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

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

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

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


non1ka

  • Новичок
  • *
  • Сообщений: 5
  • ФИО: Тюрин Илья Александрович
Re: Задача 2.31
« Ответ #38 : Ноябрь 10, 2014, 02:51:17 pm »
Выкладываю отчет.

zainaz

  • Новичок
  • *
  • Сообщений: 2
  • ФИО: Aynaz Ziganov
Re: Задача 2.31
« Ответ #39 : Ноябрь 13, 2014, 03:27:07 pm »
Мелкая ошибочка в имени документа Экзамен_УстановкаЛимитаДенежныхСрепдств

JL

  • Новичок
  • *
  • Сообщений: 4
Re: Задача 2.31
« Ответ #40 : Январь 19, 2015, 12:21:36 pm »
Результаты с экзамена.
1. Надо обязательно использовать типовые регистр и документ.
2. Остатки нельзя получать сложением оборотов.
3. Регистр накопления оборотов в регистр остатков преобразовать нельзя, т.к. рушится работа конфигурации.

Как тогда быть? И какой период надо указывать в отчете?

danissimo

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

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

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

PS: на экзамене попался другой билет

danissimo

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

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

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

Минусы - вмешиваемся в работу типового механизма.
Плюсы - все делается просто и быстро, вмешательство опять же использует стандартные механизмы.

frd

  • Пользователь
  • **
  • Сообщений: 40
  • ФИО: Павел
Re: Задача 2.31
« Ответ #43 : Август 05, 2015, 05:58:38 pm »
Для проведения "Заявки на расходование денежных средств" нужно поставить птичку "Сверх лимита" ?

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

ВиталийЧебан

  • Проверенный
  • ***
  • Сообщений: 106
  • ФИО: Виталий Чебан
Re: Задача 2.31
« Ответ #44 : Август 06, 2015, 09:05:35 am »
Для проведения "Заявки на расходование денежных средств" нужно поставить птичку "Сверх лимита" ?

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

Да.