8.х Сумма

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем SpiritAT, 13 авг 2013.

  1. TopicStarter Overlay
    SpiritAT
    Offline

    SpiritAT Опытный в 1С

    Регистрация:
    8 авг 2013
    Сообщения:
    157
    Симпатии:
    0
    Баллы:
    26
    Есть Поле в ней хоронится значение 0458 нужно их сложить. Помогите как это поле разбить на 0 4 5 8 чтобы сложить.
  2. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.639
    Симпатии:
    948
    Баллы:
    204
    Вам надо брать из строки слева один символ и прибавлять к нему следующий
    Вам понадобяться операторы ЛЕВ и стрЗаменить, и СтрДлина - что бы узнать длину строки
    Лев - берет левый символ первый,
    СтрЗаменить - заменяет
    в цикле по длине строки
    Берете левый символ католько взяли в исходной строке заменяете его на пусто и так в цикле т.е строка у вас будет уменьшаться
    0458
    458
    58
    8

    ну и плюсуйте в это время
  3. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.639
    Симпатии:
    948
    Баллы:
    204
    Ну или если быстро код написать, то вот так


    Код:
    строкаСимволов=Реквизит1;
    ДлинаСтроки=СтрДлина(строкаСимволов);
    итератор=1;
    сумма=0;
    Пока итератор<=ДлинаСтроки Цикл
    
    сумма=сумма+Число(Лев(строкаСимволов,1));
    строкаСимволов=СтрЗаменить(строкаСимволов,Лев(строкаСимволов,1),"");
    итератор=итератор+1;
    ОбработкаПрерыванияПользователя();
    
    КонецЦикла;
    
    Сообщить(сумма);
    Реквизит1- строковое поле на форме
  4. TopicStarter Overlay
    SpiritAT
    Offline

    SpiritAT Опытный в 1С

    Регистрация:
    8 авг 2013
    Сообщения:
    157
    Симпатии:
    0
    Баллы:
    26
    Извините А можно привести пример мне так проще понять?

    сп увидел
  5. TopicStarter Overlay
    SpiritAT
    Offline

    SpiritAT Опытный в 1С

    Регистрация:
    8 авг 2013
    Сообщения:
    157
    Симпатии:
    0
    Баллы:
    26
    Подскажите плиз
    я понял как это работает но столкнулся с такой проблемой если после цифр встречается пробел он вылетает с ошибкой "{Отчет.Отчет_2.Форма.ФормаОтчета.Форма(71)}: Преобразование значения к типу Число не может быть выполнено
    сумма=сумма+Число(Лев(строкаСимволов,1));

    "
  6. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.639
    Симпатии:
    948
    Баллы:
    204
    Ну так про пробелы никто ничего не говорил - надо их убирать.
    что мешает в самом начале СтрЗаменить выполнить и заменить все проблелы на ""

    у то в этом коде ошибка
    Попробуйте ввести число 0545
    Будет ошибка т.к при второй итерации стрЗаменить - заменить все пятерки

    Лучше использовать Сред
    цикл вот так изменить
    Код:
    Пока итератор<=ДлинаСтроки Цикл
    
    сумма=сумма+Число(Сред(строкаСимволов,итератор,1));
    итератор=итератор+1;
    ОбработкаПрерыванияПользователя();
    
    КонецЦикла;
  7. TopicStarter Overlay
    SpiritAT
    Offline

    SpiritAT Опытный в 1С

    Регистрация:
    8 авг 2013
    Сообщения:
    157
    Симпатии:
    0
    Баллы:
    26
    А как получить сумму столбца?
  8. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.639
    Симпатии:
    948
    Баллы:
    204
    Какого столбца? если столбец в табличной части или в таблице значений и у него тип число то для этих объектов есть метод Итог()
    типа

    ВсегоПоДокументу = Состав.Итог("Сумма");
  9. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    а можно было не заменять, а просто отбрасывать обработанный символ
    Код:
    строкаСимволов=СокрЛП(Реквизит1);
    СтрокаСимволов = СтрЗаменить(СтрокаСимволов, " ", "");
    ДлинаСтроки=СтрДлина(строкаСимволов);
    сумма=0;
    Пока ДлинаСтроки>0 Цикл
    сумма=сумма+Число(Лев(строкаСимволов,1));
    строкаСимволов=Прав(СтрокаСимволов, ДлинаСтроки - 1);
    ДлинаСтроки = ДлинаСтроки - 1;
    ОбработкаПрерыванияПользователя();
    КонецЦикла;
    Сообщить(сумма);
  10. TopicStarter Overlay
    SpiritAT
    Offline

    SpiritAT Опытный в 1С

    Регистрация:
    8 авг 2013
    Сообщения:
    157
    Симпатии:
    0
    Баллы:
    26
    да табличноя часть но тип заблокирован((
  11. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    что значит тип заблокирован?
  12. TopicStarter Overlay
    SpiritAT
    Offline

    SpiritAT Опытный в 1С

    Регистрация:
    8 авг 2013
    Сообщения:
    157
    Симпатии:
    0
    Баллы:
    26
    [​IMG]я не могу там нечего выбрать

    Вложения:

  13. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    а при чем тут это? вы может всю задачу целиком озвучите, а то не понятно что вы получить хотите

    что касается скрина - это свойство будет доступно, если вы установите галочку "СодержитЗначение"
  14. TopicStarter Overlay
    SpiritAT
    Offline

    SpiritAT Опытный в 1С

    Регистрация:
    8 авг 2013
    Сообщения:
    157
    Симпатии:
    0
    Баллы:
    26
    Есть столбец Сумма_Кода Нужна вывести Сумму общею из него. Но Сумма_Кода это не запросные данные они получены через програмкод

    Вложения:

  15. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.639
    Симпатии:
    948
    Баллы:
    204
    Вопрос не корректно поставили - вам надо для отчета - получить итог по столбцу.
    Вы заводите в самом начале переменную Итого
    затем кода выводите область делали - там вы заполняете параметр, в котором есть сумма, так вот после того как заполнили Итого=Итого+ эта сумма
    а потом кода выводите область итог в параметр пишите значение Итого
  16. TopicStarter Overlay
    SpiritAT
    Offline

    SpiritAT Опытный в 1С

    Регистрация:
    8 авг 2013
    Сообщения:
    157
    Симпатии:
    0
    Баллы:
    26
    Простите за мою несовершенность но при ОбщийИтого=Итого+ эта сумма Итог всегда =0 и при прибавлении суммы прирост не идет.
    Код:
    ТабДок = новый ТабличныйДокумент();[/font][/color]
    [color=#282828][font=helvetica]Итого;
    СчетчикСтрок = 0;
    ОбщаяСумма = 0;[/font][/color]
    [color=#282828][font=helvetica]Макет = ЭтотОбъект.ПолучитьМакет("Макет");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ФизическиеЛица.Наименование КАК ФИО,
    | ФизическиеЛица.ДатаРождения,
    | ФизическиеЛица.Пол,
    | КонтактнаяИнформация.Представление КАК Адрес_по_прописке,
    | ФизическиеЛица.Код
    |ИЗ
    | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |  ПОЛНОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица
    |  ПО КонтактнаяИнформация.Объект = ФизическиеЛица.Ссылка";
    
    Результат = Запрос.Выполнить();[/font][/color]
    [color=#282828][font=helvetica]ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    ОбластьСумма_кода = Макет.ПолучитьОбласть("Сумма_кода");
    ОбластьИтог = Макет.ПолучитьОбласть("Итог");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");[/font][/color]
    [color=#282828][font=helvetica]ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.Вывести(ОбластьИтог);
    ТабДок.НачатьАвтогруппировкуСтрок();[/font][/color]
    [color=#282828][font=helvetica]ВыборкаДетальныеЗаписи = Результат.Выбрать();[/font][/color]
    [color=#282828][font=helvetica] 
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    
    строкаСимволов=ВыборкаДетальныеЗаписи.Код;
    ССимволов=СтрЗаменить(строкаСимволов," ","");
    ДлинаСтроки=СтрДлина(ССимволов);
    итератор=1;
    сумма=0;
    
    Пока итератор<=ДлинаСтроки Цикл
    
    сумма=сумма+Число(Сред(строкаСимволов,итератор,1));
    итератор=итератор+1;
    ОбработкаПрерыванияПользователя();
    КонецЦикла;[/font][/color]
    
    [color=#282828][font=helvetica]    СчетчикСтрок = СчетчикСтрок+1;[/font][/color]
    [color=#282828][font=helvetica]  ОбластьДетальныхЗаписей.Параметры.Наименование = ВыборкаДетальныеЗаписи.ФИО;  
    ОбластьДетальныхЗаписей.Параметры.ДатаРождения = ВыборкаДетальныеЗаписи.ДатаРождения;
    ОбластьДетальныхЗаписей.Параметры.Пол =  ВыборкаДетальныеЗаписи.Пол;
    ОбластьДетальныхЗаписей.Параметры.Представление =  ВыборкаДетальныеЗаписи.Адрес_по_прописке;
    ОбластьДетальныхЗаписей.Параметры.Код =  ВыборкаДетальныеЗаписи.Код;
    ОбластьДетальныхЗаписей.Параметры.Сумма_кода = сумма;
    
    ОбластьДетальныхЗаписей.Параметры.Порядковый_номер = СчетчикСтрок;
    
    ОбщаяСумма = (Итого+сумма);
    
    ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
    
    КонецЦикла;[/font][/color]
    [color=#282828][font=helvetica]//
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.Вывести(ОбластьПодвалТаблицы);
    ТабДок.Вывести(ОбластьПодвал);
    
    ТабДок.Показать("Вывод");
    
    Вот весь код что я делаю не так подскажите плиз.
  17. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ..

    Код:
    ОбщаяСумма = 0; //вот инициализация общей суммы
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    
    строкаСимволов=ВыборкаДетальныеЗаписи.Код;
    ССимволов=СтрЗаменить(строкаСимволов," ","");
    ДлинаСтроки=СтрДлина(ССимволов);
    итератор=1;
    сумма=0;
    Пока итератор<=ДлинаСтроки Цикл
    сумма=сумма+Число(Сред(строкаСимволов,итератор,1));
    итератор=итератор+1;
    ОбработкаПрерыванияПользователя();
    КонецЦикла;[/font][/color]
    [color=#282828][font=helvetica]    СчетчикСтрок = СчетчикСтрок+1;[/font][/color]
    [color=#282828][font=helvetica]  ОбластьДетальныхЗаписей.Параметры.Наименование = ВыборкаДетальныеЗаписи.ФИО; 
    ОбластьДетальныхЗаписей.Параметры.ДатаРождения = ВыборкаДетальныеЗаписи.ДатаРождения;
    ОбластьДетальныхЗаписей.Параметры.Пол =  ВыборкаДетальныеЗаписи.Пол;
    ОбластьДетальныхЗаписей.Параметры.Представление =  ВыборкаДетальныеЗаписи.Адрес_по_прописке;
    ОбластьДетальныхЗаписей.Параметры.Код =  ВыборкаДетальныеЗаписи.Код;
    ОбластьДетальныхЗаписей.Параметры.Сумма_кода = сумма;
    
    ОбластьДетальныхЗаписей.Параметры.Порядковый_номер = СчетчикСтрок;
    
    ОбщаяСумма = ОбщаяСумма+сумма; //вот тут заменила
    
    ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
    
    КонецЦикла;[/font][/color]
  18. TopicStarter Overlay
    SpiritAT
    Offline

    SpiritAT Опытный в 1С

    Регистрация:
    8 авг 2013
    Сообщения:
    157
    Симпатии:
    0
    Баллы:
    26
    Спасибо все тема закрыта

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