Версия для печати темы (https://pro1c.org.ua/index.php?s=761709117d6b7e571e5e57f0e3b68e90&showtopic=29551)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Расчет Количества клиентов в маршрутном листе

Автор: inna.innainna84 26.04.16, 22:36

В маршрутном листе есть список клиентов, есть такие что повторяються, но есть у клиента реквизит -Неиспользуется, то клиента нужно отнять, меня смущает ;Тз.СдвинутьСтроку(-1); "
вася-стоит реквизит неиспользовать
вася-стоит реквизит неиспользовать
петя
КолвоКлиентов-2, а нужно 1
или
вася-стоит реквизит неиспользовать
вася-стоит реквизит неиспользовать
петя
юра-стоит реквизит неиспользовать
юра-стоит реквизит неиспользовать
КолвоКлиентов-2, а нужно 1

Процедура РасчитатьКолвоКлиентов()       
    Тз = СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть(ТЗ,"Клиент");  
    Тз.ВыбратьСтроки();
    Пока Тз.ПолучитьСтроку()=1 Цикл
        Если Тз.Клиент.Неиспользуется = 1 Тогда
            Тз.УдалитьСтроку(Тз.НомерСтроки);
            Если Тз.НомерСтроки > Тз.Количествострок()  Тогда
                Тз.СдвинутьСтроку(-1);    
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    ТЗ.Свернуть("Клиент","");
    КолвоКлиент = Тз.КоличествоСтрок();
    
КонецПроцедуры    // РасчитатьКолвоКлиентов

Автор: Naghual 27.04.16, 11:07

по моему намного проще будет просто удалить неиспользуемые

Автор: Acid 27.04.16, 11:16

Процедура РасчитатьКолвоКлиентов()       
    Тз = СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть(ТЗ,"Клиент");  
    
    КолвоКлиент = 0;
    
    Тз.ВыбратьСтроки();
    Пока Тз.ПолучитьСтроку()=1 Цикл
        Если Тз.Клиент.Неиспользуется = 0 Тогда
            КолвоКлиент = КолвоКлиент  + 1;
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры    // РасчитатьКолвоКлиентов

Автор: inna.innainna84 27.04.16, 12:28

Ой, нет не считает
клиента с реквизитом не считает, вася,юра, но петю не группирует считает как-2, а не 1
вася-стоит реквизит неиспользовать ----0
юра-стоит реквизит неиспользовать----0
петя
петя

Автор: Acid 27.04.16, 13:17

Процедура РасчитатьКолвоКлиентов()       
    Тз = СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть(ТЗ,"Клиент");
    тз.Свернуть("Клиент");
    
    КолвоКлиент = 0;
    
    Тз.ВыбратьСтроки();
    Пока Тз.ПолучитьСтроку()=1 Цикл
        Если Тз.Клиент.Неиспользуется = 0 Тогда
            КолвоКлиент = КолвоКлиент  + 1;
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры    // РасчитатьКолвоКлиентов

Автор: inna.innainna84 27.04.16, 13:21

Спасибо.

Автор: Sharzem 29.04.16, 16:05

inna.innainna84 @ 26.04.16, 22:36 *,

Можно и с удалением строк ТЗ и их подсчетом (так как Вы хотели реализовать), но строки удаляются оттуда немного по-другому.
Можно так:

Процедура РасчитатьКолвоКлиентов()
    Тз = СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть(Тз,"Клиент");
    Тз.Свернуть("Клиент");
    КолСтрок = Тз.КоличествоСтрок();
    Для сч = 1 По КолСтрок Цикл
        НомерСтрокиТз = КолСтрок-сч+1;//Идем снизу ТЗ вверх
        Тз.ПолучитьСтрокуПоНомеру(НомерСтрокиТз);
        Если Тз.Клиент.Неиспользуется = 1 Тогда
            Тз.УдалитьСтроку();
        КонецЕсли;
    КонецЦикла;
    КолвоКлиент = Тз.КоличествоСтрок();
КонецПроцедуры    // РасчитатьКолвоКлиентов


При использовании оператора цикла с предусловием (Пока ТЗ.ПолучитьСтроку() = 1 Цикл) у Вас происходит переход на n+1 строку, при ее удалении Вы нарушаете выборку строк при чем, следующая строка становится текущей (то есть при переходе на следующую строку строка n+2 будет пропущена поскольку она стает строкой n+1).

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua