8.х Помогите написать процедуру

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем ILD17, 10 июн 2010.

  1. TopicStarter Overlay
    ILD17
    Offline

    ILD17

    Регистрация:
    10 июн 2010
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Существует табличная часть в которой по формуле вычисляется сумма строки, сама формула вынесена как отдельная процедура. Процедура в свою очередь берет значение из справочника единого для всех строк. Суть проблемы при выборе из справочника другого наименования сумма изменяется только в той строке на которой находится курсор. Что нужно сделать чтобы он пересчитывал все строки?
  2. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Показывайте код.
  3. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
  4. TopicStarter Overlay
    ILD17
    Offline

    ILD17

    Регистрация:
    10 июн 2010
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Толи что то делаю не так, но в соответствии с топиком не получилось.

    Сама процедура расчета строки выглядит так

    Код:
    Процедура РасходГСМ()
    
    
    БазоваяНорма=Автомобиль.БазоваяНорма;
    
    СтрокаТЧ=ЭлементыФормы.РасходТоплива.ТекущиеДанные;
    
    
    если СтрокаТЧ.МестоОтправления.КоличествоЖителей > 2999999 
    тогда КофЛюди = БазоваяНорма/100*25 иначе 
    если СтрокаТЧ.МестоОтправления.КоличествоЖителей > 999999 
    тогда КофЛюди = БазоваяНорма/100*20 иначе
    если СтрокаТЧ.МестоОтправления.КоличествоЖителей > 249999
    тогда КофЛюди = БазоваяНорма/100*15 иначе 
    если СтрокаТЧ.МестоОтправления.КоличествоЖителей > 99999 
    тогда КофЛюди = БазоваяНорма/100*10 иначе КофЛюди = 0
    КонецЕсли;	КонецЕсли; КонецЕсли;КонецЕсли;
    
    
    если СтрокаТЧ.МестоНазначения=СтрокаТЧ.МестоОтправления	тогда КофГород = 
    КофЛюди иначе КофГород = 0 конецесли;
    
    
    если СтрокаТЧ.Дата > '20091231'
    тогда если СтрокаТЧ.Дата < '20100401'
    тогда КофЗима = БазоваяНорма/100*10 иначе КофЗима = 0
    КонецЕсли; КонецЕсли;
    
    если СтрокаТЧ.Дата-Автомобиль.ДатаВыпуска > 2920 и 
    СпидометрНачало > 150000 тогда КофЛет = БазоваяНорма/100*10 иначе 
    если  СтрокаТЧ.Дата-Автомобиль.ДатаВыпуска > 1825 и 
    СпидометрНачало > 100000 тогда КофЛет = БазоваяНорма/100*5 иначе
    КофЛет = 0 КонецЕсли; КонецЕсли;
    
    если Автомобиль.КлиматКонтроль = Булево(Истина) тогда КофКлимат = БазоваяНорма/100*7 
    иначе КофКлимат = 0 КонецЕсли;
    
    если СтрокаТЧ.Поле = Булево(Истина) тогда КофПоле = БазоваяНорма/100*30 иначе КофПоле = 0 КонецЕсли;
    
    КофПрицеп=строкаТЧ.Прицеп.МассаПрицепа/1000*2;
    
    
    
    СтрокаТЧ.РасходГСМПоНормативу=СтрокаТЧ.Обогрев+СтрокаТЧ.Прогрев+(СтрокаТЧ.ПройденоКиллометров/
    100*(БазоваяНорма+КофГород+КофЗима+КофЛет+КофКлимат+КофПоле+КофПрицеп));
    
    
    
    ПройденоПути=РасходТоплива.Итог("РасходГСМПоНормативу");
    
    
    
    КонецПроцедуры
    
  5. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    1. Откуда вы вызываете эту процедуру?
    2. Для того что бы все считались

    надо вместо

    СтрокаТЧ=ЭлементыФормы.РасходТоплива.ТекущиеДанные -это только 1 строка

    Начать цикл

    Для каждого СтрокаТЧ из РасходТоплива Цикл

    потом сюда вставляете что дальце

    КонецЦикла
  6. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ну так ставите эту процедуру на поле Автомобиль, "ПриИзменении()" (я так понимаю это и есть ваше поле). А в процедуру добавляете цикл (как в вышеуказанной теме), все же один в один:
    Код:
    Для Каждого ЭлементСписка Из РасходТоплива Цикл
    
    ,
    это
    Код:
    СтрокаТЧ=ЭлементыФормы.РасходТоплива.ТекущиеДанные;
    
    уберите, вместо этого у вас будет фигурировать переменная "ЭлементСписка".
    Только
    Код:
    ПройденоПути=РасходТоплива.Итог("РасходГСМПоНормативу");
    
    за циклом оставьте, последним выражением в процедуре.
  7. TopicStarter Overlay
    ILD17
    Offline

    ILD17

    Регистрация:
    10 июн 2010
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Все заработало. Всем Спасибо!

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