7.7 Переделать в запрос!

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем dapon, 24 окт 2008.

  1. TopicStarter Overlay
    dapon
    Offline

    dapon

    Регистрация:
    22 окт 2008
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Помогите, с обработкой переделать в запрос ниже приведенный код обработки если это возможно.
    Суть такая, Есть справочник Месяц,идет перебор элементов в нем,и сравнивается элементы Месяц и Все по реквизиту лСчетЖС и Наименование,если совпадение есть,то этот элемент и выбранные его реквизиты записываются в справочник Заявки. Помогите реализовать эту обработку запросом,плз!Чтоб делалось тоже самое но запросом.
    Справочник Все- реквизиты:
    Улица – строка,30
    Дом – строка,6
    Квартира – строка,5
    лСчетЖС – строка,8

    Справочник Заявки – реквизиты:
    Улица – строка,30
    Дом – строка,6
    Квартира – строка,5
    ЛицСчетЖС – строка,8
    ОплЭн – число,8,2
    ОплЖС – число,8,2
    Сумма – число,10,2

    Справочник НовСуб – реквизиты:
    ВидЭн – Перечисление.ВидЗаявки
    ВидЖС – Перечисление.ВидЗаявки

    Справочник Месяц – реквизиты:
    Адрес – строка,40
    лСчетЖС – строка,8
    субЭн – число,8,2
    субКв – число,8,2
    субСум – число,10,2


    Код:
    Процедура Выполнить()
    
    Если (сгл=0) И (глжс=0) И (глсб=0) И (глэн=0) Тогда  //чек боксы
    Предупреждение("Отметьте нужный список ! ");
    Возврат;
    КонецЕсли;
    ОчиститьОкноСообщений();
    спрПенсион=СоздатьОбъект("Справочник.Все"); 
    спрЖС=СоздатьОбъект("Справочник.Заявки");
    спрСуб=СоздатьОбъект("Справочник.НовСуб");
    спрЖС.ВыбратьЭлементы();
    Если глжс=1 Тогда 
    Пока спрЖС.ПолучитьЭлемент()=1 Цикл     
    спрЖС.Удалить();
    КонецЦикла;
    Сообщить("Создание списка ЖилСервис ...");
    месяц=СоздатьОбъект("Справочник.Месяц"); 
    месяц.ВыбратьЭлементы();   
    спрПенсион.ВыбратьЭлементы();
    Пока месяц.ПолучитьЭлемент() >0 Цикл
    спрПенсион.ВыбратьЭлементыПоРеквизиту("лСчетЖС",месяц.лСчетЖС,1,0);
    Если (месяц.лСчетЖС=спрПенсион.лСчетЖС) И   (спрПенсион.НайтиПоНаименованию(месяц.Наименование,1,1)= 1)  Тогда 
    спрСуб.ИспользоватьВладельца(спрПенсион);
    спрСуб.ВыбратьЭлементы(); 
    Если (ПустоеЗначение(спрСуб.ВидЭН)=1)  или (ПустоеЗначение(спрСуб.ВидЖС)=1) Тогда 
    Предупреждение("Не определен вид Заявки " + " у " + спрПенсион.Наименование);
    Возврат;
    ИначеЕсли ((спрСуб.ВидЭН=Перечисление.ВидЗаявки.ОплатаЖС) И (спрСуб.ВидЖС=Перечисление.ВидЗаявки.ОплатаЖС)) Тогда
    спрЖС.Новый();
    спрЖС.Наименование=спрПенсион.Наименование;
    спрЖС.Улица=СпрПенсион.Улица;
    спрЖС.Дом=спрПенсион.Дом;
    спрЖС.Квартира=спрПенсион.Квартира;
    спрЖС.ЛицСчетЖС=месяц.лСчетЖС;
    спрЖС.ОплЭн=месяц.субЭн;
    спрЖС.ОплЖС=месяц.субКв;
    спрЖС.Сумма=спрЖС.ОплЭн+спрЖС.ОплЖС;	
    спрЖС.Записать();
    Иначе 
    Если (спрСуб.ВидЖС=Перечисление.ВидЗаявки.ОплатаЖС) Тогда
    спрЖС.Новый();
    спрЖС.Наименование=спрПенсион.Наименование;
    спрЖС.Улица=СпрПенсион.Улица;
    спрЖС.Дом=спрПенсион.Дом;
    спрЖС.Квартира=спрПенсион.Квартира;
    спрЖС.ЛицСчетЖС=месяц.лСчетЖС;
    спрЖС.ОплЖС=месяц.субКв;
    спрЖС.Сумма=спрЖС.ОплЭн+спрЖС.ОплЖС;
    Сообщить("Записано");
    спрЖС.Записать();
    КонецЕсли; 
    
    КонецЕсли;
    Иначе 
    Сообщить("  ! " + спрПенсион.Наименование);	
    Сообщить(""+ СтрДлина(спрПенсион.Наименование));
    Сообщить("  ! " + спрПенсион.лСчетЖС);	
    Сообщить(""+ СтрДлина(спрПенсион.лСчетЖС));
    Сообщить("  ! " + месяц.Наименование);	
    Сообщить(""+ СтрДлина(месяц.Наименование));
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/предупреждение')">			Предупреждение ("ОШИБКА!");</span>
    Возврат;		
    КонецЕсли;
    КонецЦикла;		
    Иначе
    Сообщить("ЖилСервис не грузился");
    КонецЕсли;
    КонецПроцедуры
    
    
    
  2. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    А оно очень надо?
    Если переделывать в запрос, то для прироста производительности нужно еще структуру переделывать.
    Сокращение кода тоже не будет, т.к. уберутся только условия, зато добавится текст запроса.
    К тому же так логику кода видно, а с запросом могут возникнуть ньюансы.
    Ну и самое главное - на это надо потратить час-полтора, а это все-таки деньги.
  3. TopicStarter Overlay
    dapon
    Offline

    dapon

    Регистрация:
    22 окт 2008
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    ок.тогда может подскажете в чем проблема,ситуация следующая,при выполнении выше приведенной обработки происходит следующее
    Итак есть справочники, Месяц и Все

    Забиты в них реквизиты к примеру так (соответственно):

    Наименование1 Адрес1 ЛС1 Наименование1 Адрес2 ЛС2
    Наименование1 Адрес2 ЛС2 Наименование1 Адрес1 ЛС1

    т.е. наименование одинаковое а остальные реквизиты разные!порядок тоже разный этих элементов т.е .не один за другим.
    Идет перебор в Месяц ищу в Все сравниваю и тогда записываю в Заявки справочник,так вот ошибка или что это,когда я позицианируюсь на первом элементе в Месяц (Наименование1 Адрес1 ЛС1 ) он находит элемент в Все(Наименование1 Адрес2 ЛС1),т.е. Адрес он берет ошибочный от следующего элемента,почему не пойму уже все переделывал не менятеся,может подскажите где "копать"?
  4. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Странная, конечно, у тебя выборка. Если тебе надо использовать связи двух справочников, тогда используй подчиненные справочники, ну или на крайний случай в один из справочников добавь реквизит со значением из второго. Размер ИБ увеличется незначительно (на доли процента), а скорость возрастен во моного, т.к. не нужны будут переборы. Да и значения будут однозначно определены. Так что НЕ правильным путем идем, товарищи :)

Поделиться этой страницей