gifts2017

Отбор заказов, по которым создана реализация

Опубликовал Гайк Аракелян (arakelyan) в раздел Программирование - Практика программирования

В данной статье описан простой способ реализации отбора заказов, по которым создана реализация.

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

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

Добавление реквизита

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

Свойства реквизита

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

Размещение данных

Последнее, что нам нужно сделать в конфигураторе, это найти в дереве документ РеализацияТоваровУслуг и открыть его модуль объекта.  Для этого правкой кнопкой мыши кликаем по документу и в контекстном меню выбираем нужный пункт.

РеализацияМоудльОбъекта

В модуле объекта нужно найти стандартную процедуру ПередЗаписью

ПередЗаписью

и где-нибудь в конце этой процедуры добавляем следующий код:


//Устанавливаем реквизит ЗаказаПокупателя "ЕстьРеализация" в значение истина.
	
	Попытка
		Если НЕ ЭтотОбъект.Сделка.Пустая() Тогда	
			Заказ = Сделка.ПолучитьОбъект();
			Заказ.ЕстьРеализация = Истина;
			Заказ.Записать();
		КонецЕсли
	Исключение;		
	КонецПопытки;

Добавляем комментарии к коду, чтобы в будущем без труда распознать его. На этом работа в конфигураторе окончена.

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

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

Когда все действия выполнены, заходим в программу в режиме пользователя и наслаждаемся результатом. 

Результат

Ну и совсем уж напоследок укажу минусы, которые я заметил, но в принципе необходимоси их исправить у меня не появилось, так как они совершенно не мешают работе:

  • Если реализация была создана, записана, а потом удалена, значение реквизита будет все равно в положении Истина. Так как моим коллегам не приходится удалять реализации, мне данная проблема жизнь не портит.

Замечания, предложения и конструктивную критику жду в комментариях. 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Обработка для начального заполнения
.epf 6,58Kb
07.10.16
0
.epf 6,58Kb 0 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Мария Квасова (mariakw) 07.10.16 15:49
Добрый день, уважаемый Гайк Аракелян!
Спасибо за полезную статью, как раз искали что-то похожее для бухгалтерии.
Подскажите, можно ли сделать подобный отбор для документов "Поступление товаров, услуг" по признаку - введена ли счет-фактура или нет?
2. Дмитрий Егоров (Diego_Iv) 07.10.16 16:12
Если конфигурация на поддержке и обновляется, то кусок кода из модуля документа "Реализация" лучше вынести в подписку на событие.
3. Гайк Аракелян (arakelyan) 07.10.16 16:20
(1) mariakw, Здравствуйте, Мария. Да, можно, но для этого придется вносить изменения в документах ПоступлениеТоваровУслуг и СчетНаОплатуПоставщика.
4. Гайк Аракелян (arakelyan) 07.10.16 16:23
(2) Diego_Iv, Здравствуйте, Дмитрий. Конфигурация снята с поддержки, обновляется вручную. Но спасибо за совет, поэкспериментирую.
5. Олег Родионов (Ovrfox) 07.10.16 16:36
Этот вариант не учитывает тот факт, что документ "заказ" может быть кем-то заблокирован.
Этот вариант устанавливает уже установленное при перепроведении реализации.
Ну и сам автор отмечает, что он не учел удаление реализации (или ее пометку на удаление)

Намного более работоспособный способ - Это регистрация заказов в плане обмена, если нужно изменить реквизит "ЕстьРеализация" (как при записи реализации, так и при пометке на удаление и при снятии пометки на удаление). И Регламентное задание , которое по зарегистрированным объектам изменяет атрибут.
При этом учитываются все варианты. К-во попыток изменить атрибут - неограничено и когда заказ разблокируют атрибут сменяет свое значение.

Еще более работоспособный вариант , если формы управляемые - это просто завести регистр сведений, в который при записи Реализация записывает заказы (а при пометке на удаление эти заказы удаляются). Никто никогда не мешает заполнять регистр, работает прозрачно. Все что нужно - это дополнить динамический список на форме списка заказов, соединив список заказов с регистром и соотвественно получив дополнительное поле "ЕстьРеализация"
6. Гайк Аракелян (arakelyan) 07.10.16 17:21
(5) Ovrfox, добрый день. Насчет блокировки заказа актуально только при выполнении обработки. Чем блокировка еще может помешать? Во всяком случае у УТ 10.3 никаких проблем с этим не возникает. Второй и третий пункт - да. Хотя я в повторной установке реквизита ничего криминального не вижу, на крайний случай это очень легко исправить добавив условие.

В первом, по вашему мнению, работоспособном способе немного смущает добавление регламентного задания. Если сделать так, то его придется выполнять очень часто и большинство раз практически впустую. Разве это более эффективный метод в плане экономии ресурсов?

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

Спасибо, за предложения, надеюсь их будет много.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа