Автоматическое снятие резервов. УТ 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 не будет опубликован. Обязательные поля помечены *