7.7 Отчет По Продажам ТМЦ добавление столбца

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем egorkin, 21 май 2012.

  1. TopicStarter Overlay
    egorkin
    Offline

    egorkin Опытный в 1С

    Регистрация:
    28 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте. На платформе 1С 7.7 конфигурация Торговля + Склад редакция 9.2 релиз 7.70.953 пытаюсь добавить новый столбец в отчете По Продажам ТМЦ, который бы выводил скидку не в процентах, а в рублях. И в итоге у меня это получилось посредством
    Код:
    ПечСуммаСкидка = глФРМ(Окр(Док.Цена*Док.Количество,2,1)-Док.Сумма);
    Но как в Итогах вывести сумму скидок (т.е. как их сложить-то)??? Пока разобраться не могу, будьте добры подскажите... Буду очень признателен.

    Вложения:

    • 1.JPG
      1.JPG
      Размер файла:
      139,6 КБ
      Просмотров:
      114
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Через переменную. Суммируйте в цикле и выводите итог.
  3. TopicStarter Overlay
    egorkin
    Offline

    egorkin Опытный в 1С

    Регистрация:
    28 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Баллы:
    26
    Создал переменную ВсегоСкидка

    Суммируйте в цикле, а можно расширенно написать? и как суммировать значения в определенной строке??

    Итог выводить глФРМ(ВсегоСкидка);
  4. TopicStarter Overlay
    egorkin
    Offline

    egorkin Опытный в 1С

    Регистрация:
    28 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Баллы:
    26
    Значит методом тыка и эксперемента добавил переменную и попробывал организовать след действие:
    Код:
    Перем ВсегоСкидка;
    .....
    Процедура ПечатьСтрокиДокумента
    ....
    Если (глЕстьРеквизитМнЧ("Цена", Док.Вид()) = 1) и (глЕстьРеквизитШапки("Скидка", Док.Вид()) = 1) Тогда
    Если Окр(Док.Цена*Док.Количество,2,1) <> 0 Тогда
    ПечСкидка = глФРМ(Окр(Док.Цена*Док.Количество,2,1)-Док.Сумма);///Окр(Док.Цена*Док.Количество,2,1)*100);
    Если ПустоеЗначение(ПечСкидка) = 0 Тогда
    ПечСкидка = ПечСкидка; //+ "%";
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    
    ВсегоСкидка =  ВсегоСкидка + ПечСкидка;
    ......
    Процедура Сформировать(ЗакрытьДиалог=0)
    .....
    ВсегоСкидка = 0;
    В итоге вот что получилось в отчете
    Посмотреть вложение 11165
    Начал что-то считать , но явно не то что нужно((((

    Вложения:

    • 2.JPG
      2.JPG
      Размер файла:
      137,1 КБ
      Просмотров:
      83
  5. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Функция "глФРМ()" возвращает строку, поэтому напрямую возвращаемые значения складывать нет смысла.
    делаем примерно так:
    Код:
    ИтогоСкидка = 0;
    // .... тут начало цикла перебора строк
    СуммаСкидка = Окр(Док.Цена*Док.Количество,2,1)-Док.Сумма;
    ПечСуммаСкидка = глФРМ(СуммаСкидка);
    ИтогоСкидка = ИтогоСкидка + СуммаСкидка;
    //... Конец цикла перебора строк
    // А тут уже имеем "ИтогоСкидка" - итоговое значение скидки по всем строкам
  6. TopicStarter Overlay
    egorkin
    Offline

    egorkin Опытный в 1С

    Регистрация:
    28 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Баллы:
    26
    [sub]WaRDeR туда ли я вставил код??? Просто результат такой же что и был...[/sub]
    [sub]есть сомнения что я напутал....[/sub]

    [sub]
    Код:
    Перем ИтогоСкидка;
    .....
    Процедура ПечатьСтрокиДокумента
    ....
    Если (глЕстьРеквизитМнЧ("Цена", Док.Вид()) = 1) и (глЕстьРеквизитШапки("Скидка", Док.Вид()) = 1) Тогда
    Если Окр(Док.Цена*Док.Количество,2,1) <> 0 Тогда
    СуммаСкидка = глФРМ(Окр(Док.Цена*Док.Количество,2,1)-Док.Сумма);
    Если ПустоеЗначение(СуммаСкидка) = 0 Тогда
    СуммаСкидка=СуммаСкидка;
    ПечСуммаСкидка = глФРМ(СуммаСкидка);
    ИтогоСкидка = ИтогоСкидка + СуммаСкидка;
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    ......
    Процедура Сформировать(ЗакрытьДиалог=0)
    .....
    ИтогоСкидка = 0;
    [/sub]
  7. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Думаю, как-то так
    Код:
    Если (глЕстьРеквизитМнЧ("Цена", Док.Вид()) = 1) и (глЕстьРеквизитШапки("Скидка", Док.Вид()) = 1) Тогда
    Если Окр(Док.Цена*Док.Количество,2,1) <> 0 Тогда
    СуммаСкидка = Окр(Док.Цена*Док.Количество,2,1)-Док.Сумма; // В этой строке убрано глФРМ (получаем число а не строку)
    ПечСуммаСкидка = ""; // Добавлена очистка переменной, на случай, если по строке нет скидки
    Если ПустоеЗначение(СуммаСкидка) = 0 Тогда
    // 	  СуммаСкидка=СуммаСкидка;   -- что это, не понятно, можно удалить
    ПечСуммаСкидка = глФРМ(СуммаСкидка);
    ИтогоСкидка = ИтогоСкидка + СуммаСкидка;
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
  8. TopicStarter Overlay
    egorkin
    Offline

    egorkin Опытный в 1С

    Регистрация:
    28 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Баллы:
    26
    Выдает такую ошибку:

    СуммаСкидка = Окр(Док.Цена*Док.Количество,2,1)-Док.Сумма<<?>>);
    {Отчет.ОтчетПоПродажамТМЦ.Форма.Модуль(921)}: Неопознанный оператор
  9. TopicStarter Overlay
    egorkin
    Offline

    egorkin Опытный в 1С

    Регистрация:
    28 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Баллы:
    26
    Код:
    Если (глЕстьРеквизитМнЧ("Цена", Док.Вид()) = 1) и (глЕстьРеквизитШапки("Скидка", Док.Вид()) = 1) Тогда
    Если Окр(Док.Цена*Док.Количество,2,1) <> 0 Тогда
    // ПечСкидка = глФРМ((Окр(Док.Цена*Док.Количество,2,1)-Док.Сумма)/Окр(Док.Цена*Док.Количество,2,1)*100);
    СуммаСкидка = глФРМ(Окр(Док.Цена*Док.Количество,2,1)-Док.Сумма);
    ПечСкидка = "";
    
    Если ПустоеЗначение(СуммаСкидка) = 0 Тогда
    // ПечСкидка = ПечСкидка + "%";
    ПечСкидка = глФРМ(СуммаСкидка);
    ИтогоСкидка = ИтогоСкидка + СуммаСкидка;
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    Запустив в таком коде выдает такое окно
    Посмотреть вложение 11168
    И вроде как суммирует и правильно, только вот скидку считает не верно, а именно
    где скидка больше 1000 он выдает 1...
    Если строку
    Код:
    ПечСкидка = глФРМ(СуммаСкидка);
    поменять на
    Код:
    ПечСкидка = СуммаСкидка;
    то получаем что скидку в таблице печатает правильную, но сумма вновь не правильная и вновь все что больше 1000 становится равно 1

    Вложения:

    • 3.JPG
      3.JPG
      Размер файла:
      101,7 КБ
      Просмотров:
      40
  10. TopicStarter Overlay
    egorkin
    Offline

    egorkin Опытный в 1С

    Регистрация:
    28 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Баллы:
    26
    Спасибо за внимание, все-таки Warder был прав, скопировал заново базу прописал в коде
    Код:
    Если (глЕстьРеквизитМнЧ("Цена", Док.Вид()) = 1) и (глЕстьРеквизитШапки("Скидка", Док.Вид()) = 1) Тогда
    Если Окр(Док.Цена*Док.Количество,2,1) <> 0 Тогда
    ПечСкидка1 = глФРМ((Окр(Док.Цена*Док.Количество,2,1)-Док.Сумма)/Окр(Док.Цена*Док.Количество,2,1)*100);
    СуммаСкидка = Окр(Док.Цена*Док.Количество,2,1)-Док.Сумма;
    ПечСкидка = "";
    
    Если ПустоеЗначение(СуммаСкидка) = 0 Тогда
    ПечСкидка1 = ПечСкидка1 + "%";
    ПечСкидка = глФРМ(СуммаСкидка);
    ИтогоСкидка = ИтогоСкидка + СуммаСкидка;
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    и все заработало как надо... Спасибо!!

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