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

Хранилище

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

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



> Нужна помощь с БухИтогами , Не могу понять, как оно работает          
Циган Подменю пользователя
сообщение 22.01.13, 9:10
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 20
Спасибо сказали: 0 раз
Рейтинг: 0

доброго времени суток, попала мне в наследство модуль. Я никак не могу понять в чем дело.
Значить так: нужно было внести изменения задним числом, и после их внесения, во время формирования нарядов, непонятная ситуацыя.
Нужно чтобы система проверяла только данные на РабочуюДату. а оно гребёт все последующии дни за которые есть записи.
Можете сказать что заставляет модуль так себя вести?))))
Вот код:
Если Фневиходи=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;
        КонецЕсли;
    КонецЕсли


Signature
Использую 1С 7.7 (7.70.027)

Стрелок Подменю пользователя
сообщение 23.01.13, 3:01
Сообщение #2

Говорящий
***
Группа: Пользователи
Сообщений: 96
Спасибо сказали: 8 раз
Рейтинг: 0

Кошмар

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

а по вопросу - советую запрос выгрузить в таблицу значений и посмотреть что и как. Кроме того - отчего вдруг появилось мнение что "а оно гребёт все последующии дни за которые есть записи"? поставьте периодичность запроса "День" добавьте "ВыбратьПериоды()... ПолучитьПериод() и опять же выгрузите в ТЗ. на первый взгляд криминала я не вижу а остальное отладчик покажет


Signature
Программист 1С - любимчик бухгалтеров

Cthulhu Подменю пользователя
сообщение 25.01.13, 16:42
Сообщение #3

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 224
Из: не ту страну назвали Гондурасом
Спасибо сказали: 83 раз
Рейтинг: 0

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

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

Стрелок Подменю пользователя
сообщение 29.01.13, 14:14
Сообщение #4

Говорящий
***
Группа: Пользователи
Сообщений: 96
Спасибо сказали: 8 раз
Рейтинг: 0

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

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



Ой ли. ну ладно. вопрос - можно ли получить быстро список сотрудников у которых на рабочую дату установлен маршрут из списка маршрутов? Ответ - запрос по справочнику "сотрудники". разме нет? дальше используем корсубконто с фильтром по сотрудникам. Мы избавляемся от цикла по справочнику маршрутов и соответственно от запроса в цикле


Signature
Программист 1С - любимчик бухгалтеров

Cthulhu Подменю пользователя
сообщение 29.01.13, 17:28
Сообщение #5

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 224
Из: не ту страну назвали Гондурасом
Спасибо сказали: 83 раз
Рейтинг: 0

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

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


 ! 

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


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

Сообщение отредактировал Vofka - 29.01.13, 17:22

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Тема закрыта Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

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