8.х Сумма выбранных значений из столбца в документе.

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

  1. TopicStarter Overlay
    Addm
    Offline

    Addm Опытный в 1С

    Регистрация:
    22 ноя 2011
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    26
    Нет не могу, там много данных важных, которые не имею права разглашать и уже связок наделал.
  2. Tiger86
    Offline

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

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

    по последней ошибке - запрос не вернул данные видимо
  3. TopicStarter Overlay
    Addm
    Offline

    Addm Опытный в 1С

    Регистрация:
    22 ноя 2011
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    26
    Мне вот не понятно как в запрос
    Код:
    тз = ЭлементыФормы.ИнтернетнаФ.ТекущиеДанные;
    Запрос = Новый Запрос;
    Запрос.Текст = "Выбрать
    |Таб.СуммаОплаты КАК Сум,
    |Таб.Наименование
    |ПОМЕСТИТЬ врТаб
    |ИЗ
    |&Таб КАК Таб;
    Мы всё таки передали данные из ТЗ? Запрос ведь вроде пишется "выбрать <поля> ИЗ <типаБаза> условия...
    Может в самом запросе надо указать что брать из Табличного поля данные?

    А как скинуть конфигурацию без данных? Если удалю всю, вам придется заполнять много полей, у меня один справочник опирается на другой и проверок наделал, которые не дадут оставить поля пустыми или заполнить их символами от балды (
  4. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    вот сюда мы передали тз, в которую выгрузили заблаговременно данные
    Код:
    |&Таб КАК Таб;
    можно выгрузить конфигурацию в файл в конфигураторе, данных для проверки много не надо, достатоно лишь одной строки и все...
  5. TopicStarter Overlay
    Addm
    Offline

    Addm Опытный в 1С

    Регистрация:
    22 ноя 2011
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    26
    В ЛС отправил
  6. TopicStarter Overlay
    Addm
    Offline

    Addm Опытный в 1С

    Регистрация:
    22 ноя 2011
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    26
    с этим кодом

    Код:
    тз = ИнтернетнаФ.Выгрузить();
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | Таб.СуммаОплаты КАК Сум,
    | ВЫРАЗИТЬ(Таб.Наименование КАК СТРОКА) КАК Наименование
    |ПОМЕСТИТЬ врТаб
    |ИЗ
    | &Таб КАК Таб
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    | СУММА(врТаб.Сум) КАК Сум
    |ИЗ
    | врТаб КАК врТаб
    |ГДЕ
    | врТаб.Наименование ПОДОБНО &Наим";
    Запрос.УстановитьПараметр("Таб", тз);
    Запрос.УстановитьПараметр("Наим", "Свердл%");
    тз = Запрос.Выполнить().Выгрузить();
    ЭлементыФормы.СуммаСвоб = тз[0].Сум;
    ошибка:
    Код:
    {Документ.ОплатаИнтернет.Форма.ФормаДокументаОплаты(97)}: Ошибка при вызове метода контекста (Выполнить): {(3, 2)}: Несовместимые типы "ВЫРАЗИТЬ"
    <<?>>ВЫРАЗИТЬ(Таб.Наименование КАК СТРОКА) КАК Наименование
    тз = Запрос.Выполнить().Выгрузить();
    по причине:
    {(3, 2)}: Несовместимые типы "ВЫРАЗИТЬ"
    <<?>>ВЫРАЗИТЬ(Таб.Наименование КАК СТРОКА) КАК Наименование
    
    Может это просто не сделать из-за того что ключевое поле является ссылкой на справочник или может нужно конвертировать данные в другой формат?
  7. TopicStarter Overlay
    Addm
    Offline

    Addm Опытный в 1С

    Регистрация:
    22 ноя 2011
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    26
    Если делаю так:
    Код:
    ...
    | ВЫРАЗИТЬ(""Таб.Наименование"" КАК СТРОКА) КАК Наименование
    ....
    то такая ошибка:
    Код:
    {Документ.ОплатаИнтернет.Форма.ФормаДокументаОплаты(98)}: Поле объекта недоступно для записи (СуммаСвоб)
    ЭлементыФормы.СуммаСвоб = тз[0].Сум;
    
  8. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    А так:
    Код:
    СуммаСвоб = тз[0].Сум;
    А кавычки здесь зачем? Что у вас в Наименовании? Зачем вам ВЫРАЗИТЬ?
  9. TopicStarter Overlay
    Addm
    Offline

    Addm Опытный в 1С

    Регистрация:
    22 ноя 2011
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    26
    так всё работает, только значение не записывает в нужное поле и равносильно работе коду:
    Код:
    ЭлементыФормы.СуммаСвоб.Значение = тз[0].Сум;
    Если ставить кавычки, то решается проблема с ошибкой:
    Код:
    {Документ.ОплатаИнтернет.Форма.ФормаДокументаОплаты(97)}: Ошибка при вызове метода контекста (Выполнить): {(3, 2)}: Несовместимые типы "ВЫРАЗИТЬ"
    <<?>>ВЫРАЗИТЬ(Таб.Наименование КАК СТРОКА) КАК Наименование
    тз = Запрос.Выполнить().Выгрузить();
    по причине:
    {(3, 2)}: Несовместимые типы "ВЫРАЗИТЬ"
    <<?>>ВЫРАЗИТЬ(Таб.Наименование КАК СТРОКА) КАК Наименование
  10. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Что у вас в колонке Наименование? Тип значения какой?
    Если ставить кавычки, то вы получите строку "Таб.Наименование", а не значение в колонке Наименование.
  11. TopicStarter Overlay
    Addm
    Offline

    Addm Опытный в 1С

    Регистрация:
    22 ноя 2011
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    26
    Наименование ссылается на поле "Наименование" другого справочника тип которого строка и длина = 150, где содержаться и буквы и цифры.
  12. TopicStarter Overlay
    Addm
    Offline

    Addm Опытный в 1С

    Регистрация:
    22 ноя 2011
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    26
    попробовал по ному, взял за ключевое поле, для проверки, поле "Провайдер" (тип = строка):
    Код:
    тз = ИнтернетнаФ.Выгрузить();
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | Таб.СуммаОплаты КАК Сум,
    |Таб.Провайдер КАК Провайдер
    //| ВЫРАЗИТЬ(Таб.Наименование КАК СТРОКА) КАК Наименование
    |ПОМЕСТИТЬ врТаб
    |ИЗ
    | &Таб КАК Таб
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    | СУММА(врТаб.Сум) КАК Сум
    |ИЗ
    | врТаб КАК врТаб
    |ГДЕ
    | врТаб.Провайдер ПОДОБНО &Наим";
    Запрос.УстановитьПараметр("Таб", тз);
    Запрос.УстановитьПараметр("Наим", "ОА%");
    тз = Запрос.Выполнить().Выгрузить();
    ЭлементыФормы.СуммаСвоб = тз[0].Сум;
    
    вроде работает, но на выходе ошибка опять та же :
    Код:
    {Документ.ОплатаИнтернет.Форма.ФормаДокументаОплаты(99)}: Поле объекта недоступно для записи (СуммаСвоб)
    ЭлементыФормы.СуммаСвоб = тз[0].Сум;
    
  13. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Конечно ошибка. Причем система вам конкретно указывает какая.
    ЭлементыФормы.СуммаСвоб - это поле ввода, а вам нужно установить значение этого поля ввода.
  14. TopicStarter Overlay
    Addm
    Offline

    Addm Опытный в 1С

    Регистрация:
    22 ноя 2011
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    26
    Да я это уже исправил, сейчас разбираюсь с проблемой, что он:
    1. не суммирует, а записывает только первое значение
    2. Не сохраняет в этом поле сумму, если закрыть и открыть документ.
  15. TopicStarter Overlay
    Addm
    Offline

    Addm Опытный в 1С

    Регистрация:
    22 ноя 2011
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    26
    Но работает, если:
    Код:
    ...
    |Таб.Провайдер КАК Провайдер
    ...
    
    а при:
    Код:
    ...
    | ВЫРАЗИТЬ(Таб.Наименование КАК СТРОКА) КАК Наименование
    ...
    
    ошибка:
    Код:
    {Документ.ОплатаИнтернет.Форма.ФормаДокументаОплаты(100)}: Ошибка при вызове метода контекста (Выполнить): {(3, 2)}: Несовместимые типы "ВЫРАЗИТЬ"
    <<?>>ВЫРАЗИТЬ(Таб.Наименование КАК СТРОКА) КАК Наименование
    тз = Запрос.Выполнить().Выгрузить();
    по причине:
    {(3, 2)}: Несовместимые типы "ВЫРАЗИТЬ"
    <<?>>ВЫРАЗИТЬ(Таб.Наименование КАК СТРОКА) КАК Наименование
    
  16. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Попробуйте не тз[0].Сум, а тз.Итог("Сум").

    Для сохранения нужно, чтобы поле было связано с реквизитом объекта (документа).

    а так:
    Код:
    ...
    |Таб.Наименование.Наименование КАК Наименование
    ...
    
  17. TopicStarter Overlay
    Addm
    Offline

    Addm Опытный в 1С

    Регистрация:
    22 ноя 2011
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    26
    Таким образом результатов тоже нет.
    Подскажите, а как можно через переменную передать значение "Подвала" из табличной части в поле ввода на форме?
    Подобный вариант:
    Код:
    ...
    ЭлементыФормы.СердОбл.Колонки.СуммаОплаты.ТекстПодвала;
    ...
    результата не дал
  18. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Значит берите консоль запросов и отлаживайте там свой запрос.
    Либо вообще откажитесь от запроса и сделайте расчет через перебор строк ТЧ в цикле.

    Как именно не дал. Должны были получить значение подвала (с типом строка). Откуда данную конструкцию вызываете?
    Да и зачем вам значение подвала? Итоги можно получить и из табличной части:
    Код:
    СердОбл.Итог("СуммаОплаты");
  19. TopicStarter Overlay
    Addm
    Offline

    Addm Опытный в 1С

    Регистрация:
    22 ноя 2011
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    26
    Пытался сделать всё на самой форме в событии "ПриИзменении", тестировал:
    так:
    Код:
    ...
    ап = ЭлементыФормы.СвердОбл.Колонки.СуммаОплаты.ТекстПодвала;
    Предупреждение(ап);
    ...
    и так:
    Код:
    ...
    ап = ЭлементыФормы.СвердОбл.Колонки.СуммаОплаты.ТекстПодвала;
    ч = число(ап);
    Предупреждение(ч);
    ...
    в первом случае просто появлялось окно без текста
    во-втором:
    Код:
    {Документ.ОплатаИнтернета.Форма.Оплата(10)}: Преобразование значения к типу Число не может быть выполнено
    ч = число(ап);
    
  20. TopicStarter Overlay
    Addm
    Offline

    Addm Опытный в 1С

    Регистрация:
    22 ноя 2011
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    26
    Ошибся, т.к. до этого пробовал в таком синтаксисе
    Код:
    .Итог(СуммаОплаты);
    , а не
    Код:
    .Итог("СуммаОплаты");
    сделал так, работает:
    Код:
    ...
    ап = СвердОбл.Итог("СуммаОплаты");
    ЭлементыФормы.СуммаСвоб.Значение = ап;
    ...
    но это при изменении, а мне надо что бы динамически обрабатывалось. Какое это событие, у меня уже каша в голове от всего этого...
    И ещё вопрос, эти значения помещаются у меня в поле ввода с типом строка, мне потом их ещё и суммировать надо, для этого мне их нужно будет конвертировать в формат число? Или можно в свойствах поля ввода сразу тип=число установить?

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