Автоматическое снятие резервов. УТ 10.3





Модуль полностью программно повторяет действие пользователя (в тексте модуля все действия выделены для удобства использования): Создаёт документ «Закрытие заказов покупателей» с видом операции «снятие резервов и размещения» — заполнить(ТЧ) — форма «Отобрать заказы покупателей» с вариантом отбора «Неоплаченные в срок заказы», после чего форма «Отобрать заказы покупателей» принимает следующий вид

Если заказы были найдены то по ним резервы снимаются.

Из опыта использования:

   те заказы которые установлены в документах оплаты (сумма оплаты не контролируется) — по ним резерв висит, если не снят документом продажи.

   товары которые были убраны с "Заказа покупателя", но остались в "Резервирование товаров" висят, т.к. в документе они отсутствуют

Для проверки в режиме 1С:Предприятие, в тексте модуля найдите и приведите к виду строки

Стр 11
ЗакрытиеЗаказовПокупателейФорма.Открыть();//Разкоментируйте для проверки (!!!!!1)
Стр 167
//ЗакрытиеЗаказовПокупателейФормаОтбораЗаказов.Закрыть();//Закоментируйте для проверки (!!!!!2)

Для  Клиент-серверного варианта работы.

Для Клиент-серверного варианта работы:  т.к. обработка использует формы, то регламентным заданием на сервере выполнятся не будет, но можно в процедуру ПриНачалеРаботыСистемы() добавить условие с её выполнением.

1. Добавляем модуль в "Общие модули", со свойствами "Сервер" "Вызов сервера" "Привилегированный"

Вносим процедуру из модуля вложенной внешней обработки "ПроцедураСнятиеРезервов.epf" во вновь созданный модуль.

2. В Модуль обычного приложения

ПриНачалеРаботыСистемы()

в конце 

Если РольДоступна("ПолныеПрава") Тогда// Где РольДоступна("ПолныеПрава") - обозначение пользователя
""ВашМодуль"".СнятиеРезервов();
КонецЕсли;

 

Для Файлового варианта работы.

Для Файлового варианта работы:  Для автоматического снятия резервов нужно добавить "Регламентное задание" и "Общий модуль", заводской код при этом править нет необходимости. 

1. Добавляем модуль в "Общие модули", со свойствами "Сервер" "Вызов сервера" "Привилегированный"

Вносим процедуру из модуля вложенной внешней обработки "ПроцедураСнятиеРезервов.epf" во вновь созданный модуль.

2. Добавляем задание в "Регламентные задания", со свойствами "Использование" "Предопределенное", а в "Имя метода" выбираем созданный модуль. (Если свойство "Предопределенное" не устанавливать, то задание нужно будет добавлять через обработку КонсольЗаданий.epf)

В "Расписание" задания, в закладке "Общее" — "Повторять каждые" добавляем 1 (Выполнять: каждый  день;), в закладке "Дневное" — "Время начала" — "18:00:00" (с 18:00:00 один раз в день)

После проделанного каждый день в конце рабочего дня будет создаваться документ "Закрытие заказов покупателей" с видом операции — снятие резервов и размещений с настройками отбора из последнего изображения. Если такие заказы отсутствуют, то документ не будет создан.

Работает как внешняя обработка, в ручном режиме

Единственное — ищет причину закрытия по ссылке, но закомментированное

//ЗакрытиеЗаказовПокупателейФормаОтбораЗаказов.ПричинаЗакрытия = Справочники.ПричиныЗакрытияЗаказов.ПолучитьСсылку(Новый УникальныйИдентификатор("d11d6223-f487-11e6-b485-0cc47a6c5738"));//881

 

38 Comments

  1. 1C82

    Спасибо! Все работает.

    Reply
  2. 88wau24ru

    Пожалуйста.

    Reply
  3. user817897

    (2) а где настроить через сколько дней чтобы снимался резерв?

    Reply
  4. 88wau24ru

    (3)

    В модуле обработки

    ЗакрытиеЗаказовПокупателейФормаОтбораЗаказов.ПросроченоДнейОплаты   = 11;//Число рабочих дней просроченной оплаты
    

    Рабочих или календарных то что в константе

    Константы.СпособКонтроляДнейЗадолженности.Получить()
    

    Если используете рабочие то Регламентированный производственный календарь должен быть сформирован.

    Дата от которой идёт отсчёт — это «Оплата» в документе Заказ покупателя

    Reply
  5. 88wau24ru

    (3)

    Ищё там же есть

    ЗакрытиеЗаказовПокупателейФормаОтбораЗаказов.Закрыть();//Закоментируйте для проверки (!!!!!2)
    
    Reply
  6. user817897

    (5) закомментировал, но пока не соображу как проверить,распишите пожалуйста ход действий,хочу очень вникнуть

    Reply
  7. 88wau24ru

    (6)

    у как проверить,распишите пожалуйста ход действий,хочу очень вникнуть

    В начале
    ЗакрытиеЗаказовПокупателейФорма.Открыть();//Разкоментируйте для проверки (!!!!!1)
    В конце
    //ЗакрытиеЗаказовПокупателейФормаОтбораЗаказов.Закрыть();//Закоментируйте для проверки (!!!!!2)
    

    После чего форма ОтбораЗаказов будет видна для проверки

    Reply
  8. 88wau24ru

    (6)

    Нужно в форме отбора заказов процедуру Процедура ПолеНастройкиВидЗаполненияПриИзменении(Элемент) сделать Экспортной

    а в Процедура СнятиеРезервов()

    ЗакрытиеЗаказовПокупателейФормаОтбораЗаказов.ДатаКон      = НачалоДня(ТекущаяДата())-1;
    ЗакрытиеЗаказовПокупателейФормаОтбораЗаказов.ВидЗаполнения     = 4;
    ЗакрытиеЗаказовПокупателейФормаОтбораЗаказов.ПолеНастройкиВидЗаполненияПриИзменении(ЗакрытиеЗаказовПокупателейФормаОтбораЗаказов.ЭлементыФормы.ПолеНастройкиВидЗаполнения);
    ЗакрытиеЗаказовПокупателейФормаОтбораЗаказов.ПросроченоДнейОплаты   = 11;//Число рабочих дней просроченной оплаты
    
    Reply
  9. 88wau24ru

    (8)

    После чего форма отбора примет вид файла

    Reply
  10. user817897

    (7) понял,я просто не понял где просмотреть это ))) но потом прочитал что открыть обработку

    Reply
  11. 88wau24ru

    (10)

    ЗакрытиеЗаказовПокупателейФорма.Открыть();//Разкоментируйте для проверки (!!!!!1)
    //ЗакрытиеЗаказовПокупателейФормаОтбораЗаказов.Закрыть();//Закоментируйте для проверки (!!!!!2)
    

    После этого откройте обработку в режиме предприятия (Фаил — Открыть — СнятиеРезервов.epf)

    Reply
  12. user817897

    (11)ссори,не заметил,проверил,всё гуд,работает))) ещё раз извините.

    а подскажите как переделать чтобы не по оплате вёлся контроль,а по количеству дней от даты в заказе?

    Reply
  13. user817897

    (9)я так понимаю надо часть кода закомментировать?

    Reply
  14. 88wau24ru

    (12)

    (11)ссори,не заметил,проверил,всё гуд,работает))) ещё раз извините.

    а подскажите как переделать чтобы не по оплате вёлся контроль,а по количеству дней от даты в заказе?

    В (8) написал

    добавте между

    ЗакрытиеЗаказовПокупателейФормаОтбораЗаказов.ДатаКон                        = НачалоДня(ТекущаяДата())-1;
    

    и

    ЗакрытиеЗаказовПокупателейФормаОтбораЗаказов.ПросроченоДнейОплаты            = 11;//Число рабочих дней просроченной оплаты
    

    код

    ЗакрытиеЗаказовПокупателейФормаОтбораЗаказов.ВидЗаполнения                    = 4;
    ЗакрытиеЗаказовПокупателейФормаОтбораЗаказов.ПолеНастройкиВидЗаполненияПриИзменении(ЗакрытиеЗаказовПокупателейФормаОтбораЗаказов.ЭлементыФормы.ПолеНастройкиВидЗаполнения);
    

    Нужно в форме отбора заказов процедуру Процедура ПолеНастройкиВидЗаполненияПриИзменении(Элемент) сделать Экспортной

    ЗакрытиеЗаказовПокупателейФормаОтбораЗаказов.ПолеНастройкиВидЗаполненияПриИзменении() — она должна быть Экспорт
    
    Reply
  15. 88wau24ru

    (14)

    После чего

    ЗакрытиеЗаказовПокупателейФормаОтбораЗаказов.ДатаНач = ДобавитьМесяц(ТекущаяДата(), -3);
    ЗакрытиеЗаказовПокупателейФормаОтбораЗаказов.ДатаКон = НачалоДня(ТекущаяДата())-1;
    

    период заказов участвующих в отборе

    Reply
  16. user817897

    (9)проверил,всё работает если открывать отдельно обработку,а вот по времени чё-то не работает,настроил в регламентном задании чтобы через две минуты сделалось к примеру, сейчас на часах 11:50,а поставил выполнять в 11:52,так вот никакой документ не создаётся,а если смотреть через обработку(открывая её и нажимать выполнить) документ закрытия создаётся. что не так делаю в настройках?

    Reply
  17. user817897

    (9)

    Reply
  18. user817897

    во втором фото там код лежит из обработки.

    но не срабатывает по времени которое я указал,из-за чего так может быть?может я не правильно что сделал?

    вы меня извините за мою тупость))))

    Reply
  19. 88wau24ru

    (18)

    во втором фото там код лежит из обработки.

    но не срабатывает по времени которое я указал,из-за чего так может быть?может я не правильно что сделал?

    вы меня извините за мою тупость))))

    Смотрите через консоль заданий?

    А база у вас Файловая или Серверная?

    Reply
  20. user817897

    (19)тестирую на файловой,потом закину на серверную)

    Reply
  21. 88wau24ru

    (19)

    не срабатывает по времени которое я указал

    И нужно обратно вернуть

    //ЗакрытиеЗаказовПокупателейФорма.Открыть();//Разкоментируйте для проверки (!!!!!1)
    ЗакрытиеЗаказовПокупателейФормаОтбораЗаказов.Закрыть();//Закоментируйте для проверки (!!!!!2)
    
    Reply
  22. user817897

    (21)это вернул я

    попробовал я сейчас запустить КонсольЗаданий, ошибка сразу выскочила,что она может значить?

    {ВнешняяОбработка.КонсольЗаданий.Форма.ФормаКонсоли.Форма(59)}: Ошибка при получении значения атрибута контекста (ПоследнееЗадание)

    ПоследнееЗадание = Регламентное.ПоследнееЗадание;

    по причине:

    Менеджер заданий не активен.

    Reply
  23. 88wau24ru

    На серверной работать не будет. из за работы с формами.

    Можно через

    Модуль обычного приложения

    ПриНачалеРаботыСистемы()

    в конце

    Если РольДоступна(«ПолныеПрава») Тогда// Где РольДоступна(«ПолныеПрава») — обозначение пользователя
    КлиентОбычноеEpartner.СнятиеРезервов();
    КонецЕсли;
    Reply
  24. user817897

    (23)просто вставить этот код в ПриНачалеРаботыСистемы() и будет работать?

    и Регламентное задание и общий модуль тоже оставлять? оно будет брать код из общего модуля Снятие резервов?

    Reply
  25. 88wau24ru

    (24)

    бщий модуль тоже оставлять? оно будет брать ко

    Модуль нужно оставлять

    КлиентОбычноеEpartner.СнятиеРезервов();

    КлиентОбычноеEpartner — название моего модуля.

    А вот регламентное нужно удалить, т.к. делалось под файловую базу, и после переноса на сервер выяснялось что не работает. Код в модуле просто повторяет программные нажатие стандартного документа ЗакрытиеЗаказовПокупателей, где перед открытием формы отбора вставляются нужные значения. Можно переделать под сервер, нужно заменить элементы формы на программные переменные, но это долго, да и так работает.

    Reply
  26. 88wau24ru

    (24)

    ПриНачалеРаботыСистемы() и будет работать?

    Будет отрабатывать при входе в систему определённого пользователя, РольДоступна(«ПолныеПрава») можно заменить на

    Справочники.Пользователи.НайтиПоНаименованию(«ОсновнойОтветственный») = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь, «ОсновнойОтветственный»);

    или

    ПараметрыСеанса.ТекущийПользователь = Справочники.Пользователи.НайтиПоНаименованию(«ТекущийПользователь»);
    Reply
  27. 88wau24ru

    Посмотрите ещё вот эти процедуры которые были в УТ10.2

    https://infostart.ru/public/70026/

    Reply
  28. user817897

    (25)я тебя понял. и на сервере будет работать если напишу вот так?

    Процедура ПриНачалеРаботыСистемы()
    
    УправлениеСоединениямиИБКлиент.УстановитьКонтрольРежимаЗавершенияРаботыПользователей();
    
    Если РольДоступна(«ПолныеПрава») Тогда   //Тут надо менять что??
    КлиентОбычноеEpartner.СнятиеРезервов(); //у меня модуль называ СнятиеРезервов? или написать СнятиеРезервов.СнятиеРезервов();
    КонецЕсли;
    
    КонецПроцедуры

    Показать

    Reply
  29. 88wau24ru

    (28)

     Если ПараметрыСеанса.ТекущийПользователь = Справочники.Пользователи.НайтиПоНаименованию(«Администратор») Тогда
    СнятиеРезервов.СнятиеРезервов();
    КонецЕсли;
    //88)
    КонецПроцедуры // ПриНачалеРаботыСистемы()
    Reply
  30. user817897

    (29) я понял,будет работать когда пользователь зашёл в 1с,а по регламентному заданию никак нельзя сделать ? я меня база на SQL server 2008 лежит

    Reply
  31. 88wau24ru

    (20)

    тестирую на файловой,потом закину на серверную)

    Вот это в корне не правильный подход. нужно тестировать там где оно и будет крутится, иначе время в пустую.

    Reply
  32. 88wau24ru

    (30) Смотрел (27)

    Reply
  33. user817897

    (32)да смотрел,но у меня уже закончились стартмани))

    Reply
  34. 88wau24ru

    (33)

    уже закончились стартмани))

    Написал в личку

    Reply
  35. user817897

    (34)ну,а всё же,вашу разработку,можно будет сделать чтобы она работала на сервере?или это вообще прям беда?

    Reply
  36. user817897

    (34) я вот проверил.если подвесить просто на кнопку текст

    СнятиеРезервов.СнятиеРезервов();

    то оно работает,а если как взять и подвесить чтобы нажималось на эту кнопку по времени??? можно так?

    Reply
  37. kozachenkoiv

    Здравствуйте, купил Вашу обработку, но она не работает в клиент серверном варианте, потому что использует формы, ошибка вываливается на строке ЗакрытиеЗаказовПокупателейФорма = Документы.ЗакрытиеЗаказовПокупателей.ПолучитьФорму(«ФормаДокумента»);

    Reply
  38. kozachenkoiv

    (37) Вы укажите что в случае клиент-серверного перед процедурой нужно указать директиву где исполнять &НаКлиенте и в общем модуле надо ставить галку «клиент», галка «привелигированный» там не нужна.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *