M_Volkov
Gold Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору dmitronn Цитата: А в выборке - есть данные , когда начинаешь цикл? | Засомневался из-за Код: |ПОМЕСТИТЬ ОтрицательныеОстатки | вроде это не весь запрос, он вызывается Код: ЗарегистрироватьПроблемыВыполненияПроверки( ПараметрыПроверки, ПараметрыРегистрации, ЗапросОтрицательныеОстаткиТоваровОрганизаций()); | Которая Код: // Записывает в ИБ информацию о проблеме, диагностированной при выполнении проверки этапа закрытия месяца. // // Параметры: // ПараметрыПроверки - Структура - параметр процедуры-обработчика проверки, см. АудитСостоянияСистемы.ИнициализироватьПараметрыПроверки() // ПараметрыРегистрации - Массив - результат функции ИнициализироватьПараметрыРегистрацииПроблемПроверки() // ТекстЗапросаФормированияТаблиц - Строка - текст запроса для формирования временной таблицы с информацией о найденных проблемах // ДополнительныеПараметрыЗапроса - Структура - дополнительные параметры для запроса формирования временной таблицы, используемые только в данной проверке. // Процедура ЗарегистрироватьПроблемыВыполненияПроверки(ПараметрыПроверки, ПараметрыРегистрации, ТекстЗапросаФормированияТаблиц = "", ДополнительныеПараметрыЗапроса = Неопределено) Экспорт ПроверкаДоРасчета = ЗначениеДополнительногоПараметраПроверки(ПараметрыПроверки, "ПроверкаДоРасчета", Ложь); ПроверкаПослеРасчета = ЗначениеДополнительногоПараметраПроверки(ПараметрыПроверки, "ПроверкаПослеРасчета", Ложь); Если ПроверкаДоРасчета ИЛИ ПроверкаПослеРасчета Тогда ПараметрыОбработчика = ИнициализироватьПараметрыОбработчикаЭтапаЗакрытияМесяцаДляПроверки(ПараметрыПроверки); Если ПроверкаДоРасчета И РасчетЭтапаНеТребуется(ПараметрыОбработчика.ДанныеЭтапа) Тогда Возврат; КонецЕсли; ПараметрыРасчета = ПараметрыОбработчика.ПараметрыРасчета; Иначе ПараметрыРасчета = ИнициализироватьПараметрыРасчетаДляПроверки(ПараметрыПроверки); КонецЕсли; МаксКоличествоОшибок = КоличествоРегистрируемыхОднотипныхОшибок(); Запрос = Новый Запрос; ИнициализироватьЗапрос( Запрос, ?(ПроверкаДоРасчета ИЛИ ПроверкаПослеРасчета, ПараметрыОбработчика, ПараметрыРасчета)); // получим МенеджерВременныхТаблиц ОбщегоНазначенияУТ.УстановитьПараметрыЗапроса( Запрос, ДополнительныеПараметрыЗапроса); // установим уникальные доп. параметры для проверки Если ЗначениеЗаполнено(ТекстЗапросаФормированияТаблиц) Тогда // Таблица с данными формируется не в процедуре проверки использования этапа - сформируем ее здесь. Запрос.Текст = ТекстЗапросаФормированияТаблиц; Запрос.Выполнить(); КонецЕсли; Для Каждого ОписаниеРегистрации Из ПараметрыРегистрации Цикл Запрос.Текст = ОписаниеРегистрации.ТекстЗапросаВыборки; ВыборкаОрганизаций = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаОрганизаций.Следующий() Цикл // Зарегистрируем проблему. ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ОписаниеРегистрации.ШаблонТекстаОшибки, ВыборкаОрганизаций.Организация, ПротоколРасчетаПартийИСебестоимости.ПредставлениеПериодаРасчета(ПараметрыРасчета.ПериодРегистрации)); АудитСостоянияСистемы.ДобавитьСтрокуВТаблицуВыявленныхПроблем( ПараметрыПроверки, ВыборкаОрганизаций.Организация, ПараметрыРасчета.ПериодРегистрации, ТекстОшибки); Выборка = ВыборкаОрганизаций.Выбрать(); НомерОшибки = 0; Пока Выборка.Следующий() Цикл НомерОшибки = НомерОшибки + 1; Если МаксКоличествоОшибок > 0 И НомерОшибки > МаксКоличествоОшибок Тогда КоличествоНезарегистрированных = Выборка.Количество() - МаксКоличествоОшибок; ДобавитьИнформациюОНезарегистрированныхОбъектахКЗафиксированнойПроблеме( ПараметрыПроверки, ТекстОшибки, КоличествоНезарегистрированных); Прервать; КонецЕсли; // Добавим расшифровку проблемы по объектам. Если ЗначениеЗаполнено(ОписаниеРегистрации.ИмяПоляОбъекта) Тогда ДобавитьОбъектКЗафиксированнойПроблеме( ПараметрыПроверки, Выборка, ТекстОшибки, ОписаниеРегистрации.СписокПолей, ОписаниеРегистрации.ИмяПоляОбъекта); Иначе ДобавитьСоставнойОбъектКЗафиксированнойПроблеме( ПараметрыПроверки, Выборка, ТекстОшибки, ОписаниеРегистрации.СписокПолей, ОписаниеРегистрации.ИмяРегистраДляРасшифровки); КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; КонецПроцедуры | В ней Запрос.Текст = ОписаниеРегистрации.ТекстЗапросаВыборки; формируется ДополнитьПараметрыРегистрацииПроблемПроверки(ПараметрыРегистрации, ИмяВременнойТаблицы, ШаблонТекстаОшибки, СписокПолей, ИмяПоляОбъекта = "", ИмяРегистраДляРасшифровки = "") запросом Код: ОписаниеРегистрации.ТекстЗапросаВыборки = "ВЫБРАТЬ | Т КАК Организация, | Т КАК АналитикаУчетаНоменклатуры, | Т КАК ВидЗапасов, | Т КАК НомерГТД, | Т КАК Количество, |ИЗ ОтрицательныеОстатки КАК Т | |УПОРЯДОЧИТЬ ПО | Т КАК Организация, | Т КАК АналитикаУчетаНоменклатуры, | Т КАК ВидЗапасов, | Т КАК НомерГТД, | Т КАК Количество, | |ИТОГИ ПО | Организация"; | Какой в итоге ЗапросОтрицательныеОстаткиТоваровОрганизаций() выбирающий данные - не знаю? Пока не разобрался... | Всего записей: 5795 | Зарегистр. 23-06-2008 | Отправлено: 16:53 26-04-2019 | Исправлено: M_Volkov, 16:59 26-04-2019 |
|