Руководство администратора

  1. Главная
  2. Документы
  3. Руководство администратора
  4. Загрузка данных
  5. Дополнительная фильтрация

Дополнительная фильтрация

В случае расширения поискового запроса и усечения выборки на уровне записи документов, а также направления потоков по рабочим спискам или рабочим местам рекомендуется использовать общий модуль <code>ENTОбменДаннымиПереопределяемый,</code>для добавления в расширении своих процедур и функций. Функция ВыполнитьДополнительнуюФильтрациюДанных_ЗагрузкаЗакупокПоПоисковомуФильтру(ДанныеДокументаЗакупки) Экспорт
 //Если (дополнительные условия фильтрации) Тогда 
// // В случае если закупка удовлетворяет условиям дополнительной фильтрации 
// Возврат Истина; 
//Иначе 
// // В случае если закупка НЕ удовлетворяет условиям дополнительной фильтрации 
// Возврат Ложь; 
//КонецЕсли; 
Возврат Истина; 
КонецФункции Функция ВыполнитьДополнительнуюФильтрациюДанных_ПроверкаПоисковыхФильтров(ДанныеДокументаЗакупки) Экспорт
//Если (дополнительные условия фильтрации) Тогда
// // В случае если закупка удовлетворяет условиям дополнительной фильтрации
// Возврат Истина; 
//Иначе
// // В случае если закупка НЕ удовлетворяет условиям дополнительной фильтрации
// Возврат Ложь; 
//КонецЕсли;
Возврат Истина;
КонецФункции
Для создания фильтрации из своих слов и исключений и прочих параметров, таких как наименование номенклатуры, характеристики номенклатуры и прочих сведений рекомендуется добавлять свою структуру в расширениях, проверять выполнение условий и передавать результат в общий модуль <code>ENTОбменДаннымиПереопределяемый</code>, который будет передавать соответствующий результат в  <code>ENTОбменДанными_API </code>для записи документа Закупка.
<h4>Примеры процедур и функций</h4>
Для отбора по своим регионам можно добавить свой регистр сведений АДПТ_СтопРегионы Функция СтопРегионы() Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| АДПТ_СтопРегионы.Регион КАК Регион
|ИЗ
| РегистрСведений.АДПТ_СтопРегионы КАК АДПТ_СтопРегионы";
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0);
КонецФункции
Для отбора по своим регионам можно добавить свой регистр сведений АДПТ_СтопПлощадки 
Функция СтопПлощадки()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| АДПТ_СтопПлощадки.Площадка КАК Площадка
|ИЗ
| РегистрСведений.АДПТ_СтопПлощадки КАК АДПТ_СтопПлощадки";
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0);
КонецФункции
Для отбора по своим кодам ОКПД 2 создайте  РегистрСведений.АДПТ_СтопОКПД2 
Функция СтопОКПД2()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| АДПТ_СтопОКПД2.КодОКПД2 КАК КодОКПД2
|ИЗ
| РегистрСведений.АДПТ_СтопОКПД2 КАК АДПТ_СтопОКПД2";
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0);
КонецФункции
Функция ОКПД2ВСтопЛисте(Знач ДанныеДокументаЗакупки) Экспорт
МассивСтопОКПД2 = СтопОКПД2();
Для эл1 = 0 По ДанныеДокументаЗакупки.ЛотыЗакупки.ВГраница() Цикл
Для эл2 = 0 По ДанныеДокументаЗакупки.ЛотыЗакупки[эл1].ОбьектыЗакупкиЛота.ВГраница() Цикл
ОКПД2КодОЗ = СокрЛП(НРег(ДанныеДокументаЗакупки.ЛотыЗакупки[эл1].ОбьектыЗакупкиЛота[эл2].ОКПД2КодОЗ));
Если ПустаяСтрока(ОКПД2КодОЗ) Тогда
Продолжить;
КонецЕсли;
Для инд = 0 По МассивСтопОКПД2.ВГраница() Цикл
Если СтрНачинаетсяС(ОКПД2КодОЗ, МассивСтопОКПД2[инд]) Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла
КонецЦикла;
КонецЦикла;
Возврат Ложь;
КонецФункции
Для исключения по контрагентам используйте функцию Функция КонтрагентВСтопЛисте(Знач ДанныеДокументаЗакупки) Экспорт
Массив = Новый Массив;
Массив.Добавить(ДанныеДокументаЗакупки.ОрганизаторИнн);
Для эл = 0 По ДанныеДокументаЗакупки.ЗаказчикиЗакупки.ВГраница() Цикл
Массив.Добавить(ДанныеДокументаЗакупки.ЗаказчикиЗакупки[эл].ЗаказичкИНН);
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| АДПТ_СтопКонтрагенты.ИНН КАК ИНН
|ИЗ
| РегистрСведений.АДПТ_СтопКонтрагенты КАК АДПТ_СтопКонтрагенты
|ГДЕ
| АДПТ_СтопКонтрагенты.ИНН В(&МассивИНН)";
Запрос.УстановитьПараметр("МассивИНН", Массив);
Возврат Не Запрос.Выполнить().Пустой();
КонецФункции
Для исключения строк из своих регионов используйте Функция МестоДоставкиВСтопРегионе(Знач ДанныеДокументаЗакупки) Экспорт
МассивСтопРегионы = СтопРегионы();
ПустыеРегионы = Новый Массив;
ПустыеРегионы.Добавить("0");
ПустыеРегионы.Добавить("88");
Если ПустыеРегионы.Найти(ДанныеДокументаЗакупки.ИдентификаторРегиона) = Неопределено Тогда
Если МестоПодходитПодСтопРегион(Справочники.ОкругаИРегионы.НайтиПоКоду(ДанныеДокументаЗакупки.ИдентификаторРегиона).Наименование, МассивСтопРегионы) Тогда
ЗаписьЖурналаРегистрации("Загрузка документов закупки. Исключение по идентификатору региона",
УровеньЖурналаРегистрации.Информация,,,
"Регион: " + ДанныеДокументаЗакупки.ИдентификаторРегиона + "; Закупка: " + ДанныеДокументаЗакупки.ИдентификаторЗакупкиИБ + "; НМЦК: " + ДанныеДокументаЗакупки.НМЦК);
Возврат Истина;
КонецЕсли;
КонецЕсли;
//Проверяем на регионы в адресе доставки
МестоДоставки = НРег(ДанныеДокументаЗакупки.МестоДоставки);
Если ДанныеДокументаЗакупки.Свойство("ЗаказчикиЗакупки") Тогда
СтопСлова = Новый Массив;
СтопСлова.Добавить("согласно");
СтопСлова.Добавить("соответствии");
СтопСлова.Добавить("неопределено");
СтопСлова.Добавить("указано");
СтопСлова.Добавить("указаны");
Для эл = 0 По СтопСлова.ВГраница() Цикл
Если СтрНайти(МестоДоставки, СтопСлова[эл]) > 0 Тогда
Для Каждого ОчереднойЗаказчик Из ДанныеДокументаЗакупки.ЗаказчикиЗакупки Цикл
Если МестоПодходитПодСтопРегион(ОчереднойЗаказчик.ЗаказичкАдрес, МассивСтопРегионы) Тогда
ЗаписьЖурналаРегистрации("Загрузка документов закупки. Исключение по адресу заказчика",
УровеньЖурналаРегистрации.Информация,,,
"Адрес: " + ОчереднойЗаказчик.ЗаказичкАдрес + "; Закупка: " + ДанныеДокументаЗакупки.ИдентификаторЗакупкиИБ + "; НМЦК: " + ДанныеДокументаЗакупки.НМЦК);
Возврат Истина;
КонецЕсли;
КонецЦикла;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Для эл = 0 По МассивСтопРегионы.ВГраница() Цикл
Если СтрНайти(МестоДоставки, МассивСтопРегионы[эл]) > 0 Тогда
ЗаписьЖурналаРегистрации("Загрузка документов закупки. Исключение по месту доставки",
УровеньЖурналаРегистрации.Информация,,,
"Место: " + МестоДоставки + "; Закупка: " + ДанныеДокументаЗакупки.ИдентификаторЗакупкиИБ + "; НМЦК: " + ДанныеДокументаЗакупки.НМЦК);
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
Функция ЭлектроннаяПлощадкаВСтопПлощадкe(Знач ДанныеДокументаЗакупки) Экспорт
Возврат Не(СтопПлощадки().Найти(НРег(ДанныеДокументаЗакупки.ИдентификаторТорговойПлощадки)) = Неопределено);
КонецФункции
 Функция МестоПодходитПодСтопРегион(Знач Место, Знач МассивРегионов)
Место = СтрСоединить(СтрРазделить(НРег(Место), " ", Ложь), " ");
Для эл = 0 По МассивРегионов.ВГраница() Цикл
Если СтрНайти(Место, МассивРегионов[эл]) > 0 Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
 Функция ПолучитьДокументЗакупкиИнформационнойБазыПриЗагрузке(МассивИндентификаторовСервер)
МассивИндентификаторов = Новый Массив;
Для Каждого Элемент из МассивИндентификаторовСервер Цикл
МассивИндентификаторов.Добавить(Элемент.ИдентификаторЗакупкиИБ);
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДокументЗакупки.Ссылка КАК Ссылка
|ИЗ
| Документ.ДокументЗакупки КАК ДокументЗакупки
|ГДЕ
| ДокументЗакупки.id_тендера В(&МассивИдентификаторов)";
Запрос.УстановитьПараметр("МассивИдентификаторов", МассивИндентификаторов);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Ссылка;
КонецЕсли;
Возврат Документы.ДокументЗакупки.ПустаяСсылка();
КонецФункции
Проверяем, если документ был ранее записан не новый Функция ВыполнитьДополнительнуюФильтрациюДанных_ЗагрузкаЗакупокПоПоисковомуФильтру(ДанныеДокументаЗакупки)
Если Не(ПолучитьДокументЗакупкиИнформационнойБазыПриЗагрузке(ДанныеДокументаЗакупки.МассивИдентификаторов) = Документы.ДокументЗакупки.ПустаяСсылка()) Тогда
Возврат Истина;
КонецЕсли;
Возврат Не (МестоДоставкиВСтопРегионе(ДанныеДокументаЗакупки) Или ЭлектроннаяПлощадкаВСтопПлощадкe(ДанныеДокументаЗакупки) Или КонтрагентВСтопЛисте(ДанныеДокументаЗакупки) Или ОКПД2ВСтопЛисте(ДанныеДокументаЗакупки));
КонецФункции
Функция ВыполнитьДополнительнуюФильтрациюДанных_ПроверкаПоисковыхФильтров(ДанныеДокументаЗакупки)
//Проверяем на регионы в адресе доставки
Возврат Не (МестоДоставкиВСтопРегионе(ДанныеДокументаЗакупки) Или ЭлектроннаяПлощадкаВСтопПлощадкe(ДанныеДокументаЗакупки));
КонецФункции
Был ли данный материал полезен вам? Да 1 Нет