Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Войти | Зарегистрироваться )



История благодарностей участнику AlenaS ::: Спасибо сказали: 7 раз
Дата поста: В теме: За сообщение: Спасибо сказали:
25.07.12, 7:35 Оптимизация кода в форме списка документа
Часто приходится решать задачку отображения наличия и состояния подчиненных документов в списке Счетов или Заказов.
И мое решение очень не оптимально в плане кода, потому что с увеличением количества документов в списке начинаются тормоза, список не просто медленно , а жутко медленно открывается и навигация по нему становится мучительным занятием для пользователя smile.gif

Это первая проблема . А вторая , которая ,возможно, первую усугубляет, это то, что приходится использовать картинки для отображения трех различных состояний флажка : 1- подчиненного документа нет, 2- подчиненный документ есть, но не проведен, 3- подчиненный документ есть и проведен.

Вот мое решение(код модуля формы списка):

Процедура ДокументСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    // Вставить содержимое обработчика.
    Ссылка = ДанныеСтроки.Ссылка;
    Если Ссылка = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    //
    рез = Привелегированный.ОбработатьЗаказ(ССылка);
    Если не рез.Пустой() Тогда
        Выборка = рез.Выбрать();
        Выборка.Следующий();
        ОформлениеСтроки.Ячейки.Оплата.УстановитьТекст(Формат(Выборка.сумма, \"ЧДЦ=2\"));
        
        ЯчейкаРН = ОформлениеСтроки.Ячейки.РН;
        ОбработатьЯчейку(ОформлениеСтроки.Ячейки.РН,Выборка.СуммаРН, Выборка.ПроведенРН);
        ОбработатьЯчейку(ОформлениеСтроки.Ячейки.НН,Выборка.СуммаНН, Выборка.ПроведенНН);
        ОбработатьЯчейку(ОформлениеСтроки.Ячейки.ПВ,Выборка.ПВ, Выборка.ПроведенПВ);
        ОбработатьЯчейку(ОформлениеСтроки.Ячейки.ПМ,Выборка.ПМ, Выборка.ПроведенПМ);
        
        Если Выборка.ПС <> null и  Выборка.ПС > 0 тогда
             ОформлениеСтроки.Ячейки.ПС.ЗначениеФлажка = истина;
             ОформлениеСтроки.Ячейки.ПС.ОтображатьФлажок = истина;
        КонецЕсли;    
    КонецЕсли;    
КонецПроцедуры

Процедура ОбработатьЯчейку(Ячейка,РезВыборки, РезВыборкиПроведен)
    Ячейка.ОтображатьКартинку = ложь;
    
    Если РезВыборки <> null и РезВыборки > 0 тогда
         Ячейка.ОтображатьКартинку = Истина;
         Ячейка.ИндексКартинки = 0;
         Если РезВыборкиПроведен тогда
               Ячейка.ИндексКартинки = 1;
         КонецЕсли;    
    КонецЕсли;    
    
КонецПроцедуры


В общем привилегированном модуле выполняется запрос на наличие подчиненных документов, дабы дать возможность видеть список пользователям с ограниченными правами:
        Запрос = новый запрос;
        Запрос.Текст = \"ВЫБРАТЬ
                       |    СУММА(ВнутрЗапрос.Сумма) КАК Сумма,
                       |    СУММА(ЕСТЬNULL(ВнутрЗапрос.СуммаРН, 0)) КАК СуммаРН,
                       |    СУММА(ЕСТЬNULL(ВнутрЗапрос.СуммаНН, 0)) КАК СуммаНН,
                       |    СУММА(ЕСТЬNULL(ВнутрЗапрос.Пс, 0)) КАК ПС,
                       |    СУММА(ЕСТЬNULL(ВнутрЗапрос.ПроведенРН, 0)) КАК ПроведенРН,
                       |    СУММА(ЕСТЬNULL(ВнутрЗапрос.ПроведенНН, 0)) КАК ПроведенНН,
                       |    СУММА(ЕСТЬNULL(ВнутрЗапрос.ПроведенПВ, 0)) КАК ПроведенПВ,
                       |    СУММА(ЕСТЬNULL(ВнутрЗапрос.ПроведенПС, 0)) КАК ПроведенПС,
                       |    СУММА(ЕСТЬNULL(ВнутрЗапрос.ПМ, 0)) КАК ПМ,
                       |    СУММА(ЕСТЬNULL(ВнутрЗапрос.ПроведенПМ, 0)) КАК ПроведенПМ,
                       |    СУММА(ЕСТЬNULL(ВнутрЗапрос.ПВ, 0)) КАК ПВ
                       |ИЗ
                       |    (ВЫБРАТЬ
                       |        ЕСТЬNULL(ХозрасчетныйОбороты.СуммаОборотКт, 0) КАК Сумма,
                       |        0 КАК СуммаРН,
                       |        0 КАК СуммаНН,
                       |        0 КАК ПВ,
                       |        0 КАК Пс,
                       |        NULL КАК ПМ,
                       |        NULL КАК ПроведенРН,
                       |        NULL КАК ПроведенНН,
                       |        NULL КАК ПроведенПВ,
                       |        NULL КАК ПроведенПС,
                       |        NULL КАК ПроведенПМ
                       |    ИЗ
                       |        РегистрБухгалтерии.Хозрасчетный.Обороты(, , , Счет = &Счет, , Субконто3 = &ссылка, корСчет = &корСчет, ) КАК ХозрасчетныйОбороты
                       |    ГДЕ
                       |        ХозрасчетныйОбороты.СуммаОборотКт > 0
                       |    
                       |    ОБЪЕДИНИТЬ ВСЕ
                       |    
                       |    ВЫБРАТЬ
                       |        0,
                       |        СУММА(РеализацияТоваровУслуг.СуммаДокумента),
                       |        0,
                       |        0,
                       |        0,
                       |        NULL,
                       |        ВЫБОР
                       |            КОГДА РеализацияТоваровУслуг.Проведен
                       |                ТОГДА 1
                       |            ИНАЧЕ 0
                       |        КОНЕЦ,
                       |        NULL,
                       |        NULL,
                       |        NULL,
                       |        NULL
                       |    ИЗ
                       |        Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
                       |    ГДЕ
                       |        (РеализацияТоваровУслуг.Сделка = &Ссылка
                       |                ИЛИ РеализацияТоваровУслуг.ДокументОснование = &Ссылка)
                       |    
                       |    СГРУППИРОВАТЬ ПО
                       |        ВЫБОР
                       |            КОГДА РеализацияТоваровУслуг.Проведен
                       |                ТОГДА 1
                       |            ИНАЧЕ 0
                       |        КОНЕЦ
                       |    
                       |    ОБЪЕДИНИТЬ ВСЕ
                       |    
                       |    ВЫБРАТЬ
                       |        0,
                       |        0,
                       |        СУММА(НалоговаяНакладная.СуммаДокумента),
                       |        0,
                       |        0,
                       |        NULL,
                       |        NULL,
                       |        ВЫБОР
                       |            КОГДА НалоговаяНакладная.Проведен
                       |                ТОГДА 1
                       |            ИНАЧЕ 0
                       |        КОНЕЦ,
                       |        NULL,
                       |        NULL,
                       |        NULL
                       |    ИЗ
                       |        Документ.НалоговаяНакладная КАК НалоговаяНакладная
                       |    ГДЕ
                       |        (НалоговаяНакладная.ДокументОснование = &Ссылка
                       |                ИЛИ НалоговаяНакладная.Сделка = &Ссылка)
                       |    
                       |    СГРУППИРОВАТЬ ПО
                       |        ВЫБОР
                       |            КОГДА НалоговаяНакладная.Проведен
                       |                ТОГДА 1
                       |            ИНАЧЕ 0
                       |        КОНЕЦ
                       |    
                       |    ОБЪЕДИНИТЬ ВСЕ
                       |    
                       |    ВЫБРАТЬ
                       |        0,
                       |        0,
                       |        0,
                       |        КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПеремещениеТоваров.Ссылка),
                       |        0,
                       |        NULL,
                       |        NULL,
                       |        NULL,
                       |        ВЫБОР
                       |            КОГДА ПеремещениеТоваров.Проведен
                       |                ТОГДА 1
                       |            ИНАЧЕ 0
                       |        КОНЕЦ,
                       |        NULL,
                       |        NULL
                       |    ИЗ
                       |        Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
                       |    ГДЕ
                       |        ПеремещениеТоваров.ДокументОснование = &Ссылка
                       |        И ПеремещениеТоваров.СкладПолучатель = &СкладВ
                       |    
                       |    СГРУППИРОВАТЬ ПО
                       |        ВЫБОР
                       |            КОГДА ПеремещениеТоваров.Проведен
                       |                ТОГДА 1
                       |            ИНАЧЕ 0
                       |        КОНЕЦ
                       |    
                       |    ОБЪЕДИНИТЬ ВСЕ
                       |    
                       |    ВЫБРАТЬ
                       |        0,
                       |        0,
                       |        0,
                       |        0,
                       |        КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СкладскаяНакладная.Ссылка),
                       |        NULL,
                       |        NULL,
                       |        NULL,
                       |        NULL,
                       |        ВЫБОР
                       |            КОГДА СкладскаяНакладная.Проведен
                       |                ТОГДА 1
                       |            ИНАЧЕ 0
                       |        КОНЕЦ,
                       |        NULL
                       |    ИЗ
                       |        Документ.СкладскаяНакладная КАК СкладскаяНакладная
                       |    ГДЕ
                       |        СкладскаяНакладная.ДокументОснование = &Ссылка
                       |    
                       |    СГРУППИРОВАТЬ ПО
                       |        ВЫБОР
                       |            КОГДА СкладскаяНакладная.Проведен
                       |                ТОГДА 1
                       |            ИНАЧЕ 0
                       |        КОНЕЦ
                       |    
                       |    ОБЪЕДИНИТЬ ВСЕ
                       |    
                       |    ВЫБРАТЬ
                       |        NULL,
                       |        NULL,
                       |        NULL,
                       |        NULL,
                       |        NULL,
                       |        КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПеремещениеТоваров.Ссылка),
                       |        NULL,
                       |        NULL,
                       |        NULL,
                       |        NULL,
                       |        ВЫБОР
                       |            КОГДА ПеремещениеТоваров.Проведен
                       |                ТОГДА 1
                       |            ИНАЧЕ 0
                       |        КОНЕЦ
                       |    ИЗ
                       |        Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
                       |    ГДЕ
                       |        ПеремещениеТоваров.ДокументОснование = &Ссылка
                       |        И ПеремещениеТоваров.СкладПолучатель = &СкладПМ
                       |    
                       |    СГРУППИРОВАТЬ ПО
                       |        ВЫБОР
                       |            КОГДА ПеремещениеТоваров.Проведен
                       |                ТОГДА 1
                       |            ИНАЧЕ 0
                       |        КОНЕЦ) КАК ВнутрЗапрос\";
                        
                      
                               
        Запрос.УстановитьПараметр(\"ссылка\", ссылка);
        Запрос.УстановитьПараметр(\"складВ\", Справочники.Склады.НайтиПоКоду(\"000000003\"));
        Запрос.УстановитьПараметр(\"складПМ\", Справочники.Склады.НайтиПоКоду(\"000000002\"));
        Запрос.УстановитьПараметр(\"Счет\", планыСчетов.Хозрасчетный.РасчетыСОтечественнымиПокупателями);
        Запрос.УстановитьПараметр(\"КорСчет\", планыСчетов.Хозрасчетный.ТекущиеСчетаВНациональнойВалюте);
        
        Возврат Запрос.Выполнить();


В итоге в форме списка получаем такую картинку:



Может у кого-то есть более красивое решение этой задачи, повышающее быстродействие системы? Или может кто-то подскажет как оптимизировать мой код?
nmf,
21.04.11, 12:45 Начисление аванса
Аванс начисляется сначала в документе Начисление ЗП с установленным флажком Предварительный расчет. В этом случае появляется опция за какое количество дней считаем. Делается расчет без налогов. Затем делаем Зарплата к выплате с видом Аванс(за попереднім розрахунком) и заполняем. Он выбирает данные, рассчитанные в Начислении. В этом же документе расчитываем налоги.
Если соблюдать такую последовательность и устанавливать флажки верно , то суммы расчитываются правильно.
Atali, yur, zetovich, Лелуш Ламперуж,
11.01.11, 19:51 1c 8.1 УТ для Украины
Цитата(Ученик_Покачто @ 11.01.11, 14:16) *
Вставил запрос - все равно не обнуляет


Словно с кассовым аппаратом работаете smile.gif ... Движение с минусом делает документ?
Просмотрите по отчету по взаиморасчетам почему вылазят остатки, может не все измерения учли, с датой(временем) что-то не так
Ученик_Покачто,
11.01.11, 13:02 1c 8.1 УТ для Украины
Примерно так:
    НаборДвижений = Движения.ВзаиморасчетыСКонтрагентами;
    ТаблицаДвижений = НаборДвижений.Выгрузить();
    ТаблицаДвижений.Очистить();
Запрос.Текст = "ВЫБРАТЬ
|    ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента,
|    ВзаиморасчетыСКонтрагентамиОстатки.Сделка,
|    ВзаиморасчетыСКонтрагентамиОстатки.Организация,
|    ВзаиморасчетыСКонтрагентамиОстатки.Контрагент,
|    -ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетов,
|    -ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток КАК СуммаУпр
|ИЗ
|    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&ДатаКон, Контрагент = &Контрагент) КАК ВзаиморасчетыСКонтрагентамиОстатки";
    
    ТаблицаОстатков = Запрос.Выполнить().Выгрузить();
    ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаОстатков, ТаблицаДвижений);
Ученик_Покачто,

RSS Текстовая версия Сейчас: 29.03.24, 4:02
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!