В случае расширения поискового запроса и усечения выборки на уровне записи документов, а также направления потоков по рабочим спискам или рабочим местам рекомендуется использовать общий модуль <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С. Контакты: info@enter-it.ru, +7 900 360-14-94 по рабочим дням с 9-00 до 19-00 по MSK