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

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

LepRiKonS

  • Пользователь
  • **
  • Сообщений: 49
    • www.korolevpavel.ru
  • ФИО: Павел
Задача 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
1С:Специалист: Платформа 8.2, УТ11
1С:Специалист-Консультант УТ11

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
1С:Специалист: Платформа 8.2, УТ11
1С:Специалист-Консультант УТ11

non1ka

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

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

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

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

1С:Специалист по платформе 8.2
1С:Специалист-консультант УТ 11

non1ka

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

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: на экзамене попался другой билет
1С:Специалист по платформе 8.3
1С:Специалист-консультант УТ 11
1С:Специалист УТ 11

danissimo

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

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

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

Минусы - вмешиваемся в работу типового механизма.
Плюсы - все делается просто и быстро, вмешательство опять же использует стандартные механизмы.
1С:Специалист по платформе 8.3
1С:Специалист-консультант УТ 11
1С:Специалист УТ 11

frd

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

И тогда движение по регистру "Лимиты расхода денежных средств" сделаем эта заявка, а не сам док "Списание безналичных ДС" ??
1С:Специалист. Платформа 8.3
1С:Специалист. Бухгалтерия 8 (ред 3.0)
1С:Специалист. Управление торговлей 8 (ред 11.1)
1С:Специалист-Консультант. Управление торговлей 8 (ред 10.3)

1C:Проф: Платформа, УТ, БП, УПП, БГУ, Розница

В процессе
1С:Специалист-Консультант.Зарплата и Управление Персоналом(3.0)

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

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

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

Да.