Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Нужна помощь с БухИтогами
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
Циган
доброго времени суток, попала мне в наследство модуль. Я никак не могу понять в чем дело.
Значить так: нужно было внести изменения задним числом, и после их внесения, во время формирования нарядов, непонятная ситуацыя.
Нужно чтобы система проверяла только данные на РабочуюДату. а оно гребёт все последующии дни за которые есть записи.
Можете сказать что заставляет модуль так себя вести?))))
Вот код:
Если Фневиходи=1 Тогда
        М  = СоздатьОбъект("Справочник.Маршруты");
        Ит = СоздатьОбъект("БухгалтерскиеИтоги");
        Сп = СоздатьОбъект("СписокЗначений");
        Ит.ИспользоватьСубконто(ВидыСубконто.ПричиныНевыходов,,1,);
        Ит.ИспользоватьКорСубконто(ВидыСубконто.Сотрудники,,1,);
        Ит.ВыполнитьЗапрос(РабочаяДата(),РабочаяДата(),СчетПоКоду("04"),,,,,);
        
        КолСтрок = 0;
        Стр = Симв(27)+"M"+Симв(27)+"x0"+Симв(27)+"W0"+Симв(27)+Симв(18);
        Текст.ДобавитьСтроку(СтрЗаменить(СтрЗаменить(Стр,"і","i"),"І","I"));
        
        М.ПорядокКодов();
        М.ВыбратьЭлементы();
        Пока М.ПолучитьЭлемент()=1 Цикл
            Если ПустаяСТрока(Фмаршрут)=0 Тогда //В розрезе марщрутов
                Если м.ТекущийЭлемент()<>Фмаршрут Тогда Продолжить; КонецЕсли;
            КонецЕсли;
            
            КолСтрок = 0;
            Стр = Симв(27)+"M"+Симв(27)+"x0"+Симв(27)+"W0"+Симв(27)+Симв(18);
            Текст.ДобавитьСтроку(СтрЗаменить(СтрЗаменить(Стр,"і","i"),"І","I"));
            
            Стр = "                      "+"НЕВИХОДИ на "+ РабочаяДата();
            Текст.ДобавитьСтроку(СтрЗаменить(СтрЗаменить(Стр,"і","i"),"І","I")); КолСтрок = КолСтрок+1;
            ПустаяСтрочка(2);
            Стр = "      "+М.ТекущийЭлемент();
            Текст.ДобавитьСтроку(СтрЗаменить(СтрЗаменить(Стр,"і","i"),"І","I")); КолСтрок = КолСтрок+1;
            ШапкаНевихода();
            
            Ит.ВыбратьСубконто();
            Пока Ит.ПолучитьСубконто()=1 Цикл
                Сп.УдалитьВсе();
                Ит.ВыбратьКорСубконто();
                Пока Ит.ПолучитьКорСубконто()=1 Цикл
                    Если Ит.КорСубконто().Маршрут.Получить(РабочаяДата())=М.ТекущийЭлемент() Тогда
                        Сп.Установить(Прав("      "+Строка(Ит.КорСубконто().Код),6),Ит.КорСубконто());
                    КонецЕсли;
                КонецЦикла;
                
                Если Сп.РазмерСписка()>0 Тогда
                    Стр = "";
                    Текст.ДобавитьСтроку(СтрЗаменить(СтрЗаменить(Стр,"і","i"),"І","I")); КолСтрок = КолСтрок+1;
                    
                    Стр = "     "+Строка(Ит.СубКонто());
                    Текст.ДобавитьСтроку(СтрЗаменить(СтрЗаменить(Стр,"і","i"),"І","I")); КолСтрок = КолСтрок+1;
                    
                    Стр = "--------------------------------------------------------------------------------";
                    Текст.ДобавитьСтроку(СтрЗаменить(СтрЗаменить(Стр,"і","i"),"І","I")); КолСтрок = КолСтрок+1;
                    
                    Сп.СортироватьПоПредставлению();
                    Для НомПП=1 По Сп.РазмерСписка() Цикл
                        Сотрудник = Сп.ПолучитьЗначение(НомПП);
                        Стр = Формат(НомПП,"С5")+Формат(Сотрудник.Код,"Ч9")+"   "+
                        Формат(ФИО(Сотрудник.Наименование),"С30")+" "+
                        Формат(Сотрудник.Должность.Получить(РабочаяДата()),"С14")+" ";
                        Текст.ДобавитьСтроку(СтрЗаменить(СтрЗаменить(Стр,"і","i"),"І","I")); КолСтрок = КолСтрок+1;
                        
                        Если  КолСтрок+8>КоличествоСтрок Тогда
                            ДоконцаСтраницы();
                            КолСТрок = 0;
                            Стр = Симв(27)+"M"+Симв(27)+"x0"+Симв(27)+"W0"+Симв(27)+Симв(18);
                            Текст.ДобавитьСтроку(СтрЗаменить(СтрЗаменить(Стр,"і","i"),"І","I"));
                            Стр = "     "+Строка(Ит.СубКонто());
                            Текст.ДобавитьСтроку(СтрЗаменить(СтрЗаменить(Стр,"і","i"),"І","I")); КолСтрок = КолСтрок+1;
                            Стр="--------------------------------------------------------------------------------";
                            Текст.ДобавитьСтроку(СтрЗаменить(СтрЗаменить(Стр,"і","i"),"І","I")); КолСтрок = КолСтрок+1;
                        КонецЕсли;
                    КонецЦикла;
                    ПустаяСтрочка(4);
                КонецЕсли;
            КонецЦикла;
            
            Стр = "           НАРЯДНИК      _________________________________";
            Текст.ДобавитьСтроку(СтрЗаменить(СтрЗаменить(Стр,"і","i"),"І","I")); КолСтрок = КолСтрок+1;
            ПустаяСтрочка(1);
            Если КолСтрок>55 Тогда
                ДоконцаСтраницы();
                КолСТрок = 0;
            КонецЕсли;
        КонецЦикла;
        Если  КолСТрок<>0 Тогда
            ДоконцаСтраницы();
            КолСТрок = 0;
        КонецЕсли;
    КонецЕсли
Стрелок
Кошмар

зачем обход результатов в цикле по справочнику?

а по вопросу - советую запрос выгрузить в таблицу значений и посмотреть что и как. Кроме того - отчего вдруг появилось мнение что "а оно гребёт все последующии дни за которые есть записи"? поставьте периодичность запроса "День" добавьте "ВыбратьПериоды()... ПолучитьПериод() и опять же выгрузите в ТЗ. на первый взгляд криминала я не вижу а остальное отладчик покажет
Cthulhu
Стрелок
Ничего не "Коошмар", нормальный код.
Затем, что составляется сводка по каждому из имеющихся в справочнике "Маршруты" элементов (или по одному выбранному).
Невыходы на который можно проанализировать и собрать только по невыходам тех сотрудников, у которых на рабочую дату установлено соответствующее значение периодического реквизита.
Работать должно достаточно быстро (во всяком случае способов оптимизировать кроме как предварительно собирать в списки фильтров значения и по ним пытаться лопатить, не видно - да и то, выгода очень сомнительна).
(что за манера такая у некоторых пришлых с ми3ды - сразу пальцы топырить?)

Циган
Код рабочий, выводит данные по оборотам за рабочую дату.
Вывод, увы, неутешительный: значить криво внелии изменения задним числом. Хотя, в принципе, возможен вариент, что при формировании оператор думает про рабочую дату что-то неправильное.
прим.: а без ёрничания и амикошонства - никак не получается?.. /просто спросил/
Стрелок
Цитата(Cthulhu @ 25.01.13, 17:42) необходимо зарегистрироваться для просмотра ссылки
Стрелок
Ничего не "Коошмар", нормальный код.
Затем, что составляется сводка по каждому из имеющихся в справочнике "Маршруты" элементов (или по одному выбранному).
Невыходы на который можно проанализировать и собрать только по невыходам тех сотрудников, у которых на рабочую дату установлено соответствующее значение периодического реквизита.
Работать должно достаточно быстро (во всяком случае способов оптимизировать кроме как предварительно собирать в списки фильтров значения и по ним пытаться лопатить, не видно - да и то, выгода очень сомнительна).
(что за манера такая у некоторых пришлых с ми3ды - сразу пальцы топырить?)

Циган
Код рабочий, выводит данные по оборотам за рабочую дату.
Вывод, увы, неутешительный: значить криво внелии изменения задним числом. Хотя, в принципе, возможен вариент, что при формировании оператор думает про рабочую дату что-то неправильное.
прим.: а без ёрничания и амикошонства - никак не получается?.. /просто спросил/



Ой ли. ну ладно. вопрос - можно ли получить быстро список сотрудников у которых на рабочую дату установлен маршрут из списка маршрутов? Ответ - запрос по справочнику "сотрудники". разме нет? дальше используем корсубконто с фильтром по сотрудникам. Мы избавляемся от цикла по справочнику маршрутов и соответственно от запроса в цикле
Cthulhu
Цитата(Стрелок @ 29.01.13, 14:14) необходимо зарегистрироваться для просмотра ссылки
вопрос - можно ли получить быстро список сотрудников у которых на рабочую дату установлен маршрут из списка маршрутов? Ответ - запрос по справочнику "сотрудники". разме нет? дальше используем корсубконто с фильтром по сотрудникам. Мы избавляемся от цикла по справочнику маршрутов и соответственно от запроса в цикле

там нет запроса в цикле. там есть обход результатов в цикле. который выполняется достаточно быстро для того, чтобы заморачиваться его (обхода в цикле) заменой на предварительный обход всего справочника сотрудников (большая часть которых может и вовсе никак не относиться к работе на маршрутах).
плюс - при процитированной методе изменится результат, а именно - не будут выведены данные-пустографки по маршрутам без невыходов.


 ! 

Участок с "ты" вырезан. Предупреждать устал.
 


прим: оптимизировать до единственного прохода по бух.итогам, в принципе, можно - усложнив код:
1) обходом бух.итогов по субконто+корсубконто - собрать все тройки сотрудник+невыход+ненулевойпоказатель;
2) перекомпоновать список п.1 в список маршрутов с вложенными списками тройки сотрудник+невыход+ненулевойпоказатель;
3) обходом по справочнику маршрутов - добить в список маршрутов (п.2) те, на которых не было невыходов, с пустыми вложенными списками;
4) eстроив пляски от списка маршрутов (п.3) с вложенным списком сотрудников - формировать что надо.
При этом изменить потребуется ещё и шаблон печати.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.