Новости для бухгалтера, бухучет, налогообложение, отчетность, ФСБУ, прослеживаемость и маркировка, 1С:Бухгалтерия

Вход или Регистрация

Показывать по 10 20 40 сообщений
Новая тема Ответить
Письмо в техподдержку 1С
[Прочее]

Вывод Итога через запрос

DreamMaster
читатель
офлайн
Дата регистрации: 03.08.2012
Сообщений: 21
Пост №1
 
03.08.2012 23:04

"В Табличной части документа нужно в одной ячейке вывести среднее значение суммы всех товаров ( взять таблицу проданных товаров регистре накопления)<br> <br>Как я понял должно получиться что-то вроде <br>Функция ВозвратСреднегоЗначения(Склад,Товар)<br>Запрос = Новый Запрос;<br>Запрос.Текст = "ВЫБРАТЬ<br>| ОстаткиТоваровОстатки.СкладКомпании КАК СкладКомпании,<br>| ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура,<br>| ОстаткиТоваровОстатки.ОстатокОстаток КАК ОстатокОстаток,<br>| ОстаткиТоваровОстатки.СуммаОстаток КАК СуммаОстаток<br>|ИЗ<br>| РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки<br>|ГДЕ<br>| ОстаткиТоваровОстатки.СкладКомпании = &СкладКомпании<br>| И ОстаткиТоваровОстатки.Номенклатура = &Номенклатура<br>Запрос.УстановитьПараметр("Номенклатура", Номенклатура);<br>Запрос.УстановитьПараметр("СкладКомпании", СкладКомпании);<br> Результат = Запрос.Выполнить();<br>Sum = Итог("СуммаОстаток");                               (В регистре накопления это значение суммы товаров) <br>Kol = Итог("ОстатокОстаток");                               (В регистре накопления это значение кол-ва товаров)<br>itog = sum / kol ;       <br>Возврат itog;"

Bloodwiser
читатель
офлайн
Дата регистрации: 09.05.2010
Сообщений: 712
Пост №2
 
03.08.2012 23:58

"<pre>Функция ВозвратСреднегоЗначения()<br> Запрос = Новый Запрос;<br> Запрос.Текст = "ВЫБРАТЬ<br>              | СРЕДНЕЕ(ВЫБОР<br>              | КОГДА ЕСТЬNULL(ОстаткиНаСкладеОстатки.ОстатокОстаток, 0) = 0<br>              | ТОГДА 0<br>              | ИНАЧЕ ЕСТЬNULL(ОстаткиНаСкладеОстатки.ЦенаОстаток, 0) / ОстаткиНаСкладеОстатки.ОстатокОстаток<br>              | КОНЕЦ) КАК Средняя<br>              |ИЗ<br>              | РегистрНакопления.ОстаткиНаСкладе.Остатки(<br>              | &Период,<br>              | Номенклатура = &Номенклатура<br>              | И СкладКомпании = &СкладКомпании) КАК ОстаткиНаСкладеОстатки";<br> Запрос.УстановитьПараметр("Номенклатура", Объект.Товар);<br> Запрос.УстановитьПараметр("СкладКомпании", Объект.СкладКомпании);<br> Запрос.УстановитьПараметр("Период", Объект.Период);<br> Результат = Запрос.Выполнить().Выбрать();<br> Пока Результат.Следующий() Цикл<br> Возврат Результат.Средняя;<br> КонецЦикла;<br>КонецФункции </pre>"

DreamMaster
читатель
офлайн
Дата регистрации: 03.08.2012
Сообщений: 21
Пост №3
 
04.08.2012 14:14

"Увы получаю такое сообщение об ошибке:<br>{Документ.РеализацияТоваров.Форма.ФормаДокумента.Форма(20)}: Ошибка при вызове метода контекста (Выполнить)      Результат = Запрос.Выполнить().Выбрать();по причине:{(10, 25)}: Неверные параметры "РегистрНакопления.ОстаткиТоваров.Остатки, 0"<<?>>И СкладКомпании = &СкладКомпании) КАК ОстаткиТоваровОстатки"

Bloodwiser
читатель
офлайн
Дата регистрации: 09.05.2010
Сообщений: 712
Пост №4
 
04.08.2012 14:45

В приведенной мной функции такого кода нет, а т.к. телепатическими способностями меня природа не наделила, то приводите сюда свой код функции полностью методом copy-past.

DreamMaster
читатель
офлайн
Дата регистрации: 03.08.2012
Сообщений: 21
Пост №5
 
04.08.2012 15:37

Есть документ "РеализацияТоваров". При выборе реквизита "Склад" и выбора реквизита "Номенклатура" нужно, чтобы осуществился запрос к регистру "ОстаткиТовара". Во время результата запроса должен быть посчитан общая стоимость товара (в регистре есть соответствующий ресурс) (которые лежат на выбранном складе) и их общее кол-во (в регистре также есть ресурс кол-во). Результатом запроса должен служить результат выражения Общаясумма/общее кол-во.

DreamMaster
читатель
офлайн
Дата регистрации: 03.08.2012
Сообщений: 21
Пост №6
 
04.08.2012 17:36

"Пока пробую что-то вроде этого, но без успешно <br><br>&НаСервереБезКонтекста<br>Функция ПолучитьЗакупочнуюЦенуТовара(Склад, Номенклатура)<br> <br> Запрос = Новый Запрос;<br>      Запрос.Текст =<br> "ВЫБРАТЬ<br> | ОстаткиТоваровОстатки.СкладКомпании,<br> | ОстаткиТоваровОстатки.Номенклатура,<br> | СУММА(ОстаткиТоваровОстатки.ОстатокОстаток) / СУММА(ОстаткиТоваровОстатки.СуммаОстаток) КАК ИТОГ<br> |ИЗ<br> | РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки<br> |ГДЕ<br> | ОстаткиТоваровОстатки.СкладКомпании = &Склад<br> | И ОстаткиТоваровОстатки.Номенклатура = &Номенклатура";<br> <br> Запрос.УстановитьПараметр("СкладКомпании", Склад);<br> Запрос.УстановитьПараметр("Номенклатура", Номенклатура);<br> Результат = Запрос.Выполнить().Выбрать();<br>      Пока Результат.Следующий() Цикл<br>            Возврат Результат.Итог;<br>      КонецЦикла;<br> <br>КонецФункции"

Bloodwiser
читатель
офлайн
Дата регистрации: 09.05.2010
Сообщений: 712
Пост №7
 
04.08.2012 19:49

"Зачем Вам в результате запроса нужна номенклатура и склад? Вам ведь нужна только средняя цена - вот ее и оставьте ("ИТОГ"). Номенклатура и склад итак известны.<br>Т.к. количество в регистре может оказаться нулем (допустим отсторнировали количество), то нужна проверка на "деление на ноль"<br><pre>ВЫБОР<br>КОГДА ОстаткиТоваровОстатки.ОстатокОстаток = 0 ТОГДА 0<br>ИНАЧЕ ОстаткиТоваровОстатки.СуммаОстаток / ОстаткиТоваровОстатки.ОстатокОстаток<br>КОНЕЦ </pre><br><br>Далее вышеприведенную конструкцию добавляете в группировку (в суммируемое поле) с функцией "Среднее", т.е. сложить все строки и разделить на количество<br><pre>СРЕДНЕЕ(ВЫБОР<br>КОГДА ОстаткиТоваровОстатки.ОстатокОстаток = 0 ТОГДА 0<br>ИНАЧЕ ОстаткиТоваровОстатки.СуммаОстаток / ОстаткиТоваровОстатки.ОстатокОстаток<br>КОНЕЦ) КАК ИТОГ</pre><br><br>Условие ГДЕ, в данном случае, лучше поместить в параметры виртуальной таблицы остатки:<br><pre>ИЗ<br>| РегистрНакопления.ОстаткиТоваров.Остатки(&Период, Номенклатура = &Номенклатура И СкладКомпании = &Склад) КАК ОстаткиТоваровОстатки </pre><br><br>&Период - это дата на которую вы хотите получить остатки.<br>В итоге:<br><pre>Запрос = Новый Запрос;<br>Запрос.Текст = "ВЫБРАТЬ<br>| СРЕДНЕЕ(ВЫБОР<br>| КОГДА ОстаткиТоваровОстатки.ОстатокОстаток = 0 ТОГДА 0<br>| ИНАЧЕ ОстаткиТоваровОстатки.СуммаОстаток / ОстаткиТоваровОстатки.ОстатокОстаток<br>| КОНЕЦ) КАК ИТОГ<br>| ИЗ<br>| РегистрНакопления.ОстаткиТоваров.Остатки(&Период, Номенклатура = &Номенклатура И СкладКомпании = &Склад) КАК ОстаткиТоваровОстатки";<br>Запрос.УстановитьПараметр("СкладКомпании", Склад);<br>Запрос.УстановитьПараметр("Номенклатура", Номенклатура);<br>Результат = Запрос.Выполнить().Выбрать();<br>Пока Результат.Следующий() Цикл<br> Возврат Результат.Итог;<br>КонецЦикла;<br> Возврат 0;<br>КонецФункции</pre><br><br>P.S.: Попробуйте использовать для построения запросов конструктор (в тексте кода правый клик - конструктор запроса с обработкой результата)."

Prikum
активный пользователь
офлайн
Дата регистрации: 18.02.2002
Сообщений: 20951
Пост №8
 
05.08.2012 13:33

неужели не видишь,что он даже скопипастить не может!?

DreamMaster
читатель
офлайн
Дата регистрации: 03.08.2012
Сообщений: 21
Пост №9
 
05.08.2012 15:29

"Тут не в копипасте проблема. Если брать способ Bloodwiser , то выдаёт данную ошибку. Если пробую вот так:<br><br>Запрос = Новый Запрос;      <br> Запрос = Новый Запрос;<br>      Запрос.Текст =<br>       "ВЫБРАТЬ<br>       |      СУММА(ОстаткиТоваровОстатки.ОстатокОстаток) / СУММА(ОстаткиТоваровОстатки.СуммаОстаток) КАК ИТОГ<br>       |ИЗ<br>       |      РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки<br>       |ГДЕ<br>       |      ОстаткиТоваровОстатки.СкладКомпании = &Склад<br>       |      И ОстаткиТоваровОстатки.Номенклатура = &Номенклатура";<br>       <br>       Запрос.УстановитьПараметр("Склад", Склад);<br>       Запрос.УстановитьПараметр("Номенклатура", Номенклатура);<br>       Результат = Запрос.Выполнить().Выбрать();<br>      Пока Результат.Следующий() Цикл<br>            Возврат Результат.Итог;<br>      КонецЦикла;<br><br>То ошибок нет, но в возврате значений нет. (В табл. ОстаткиТоваров значения есть)"

Bloodwiser
читатель
офлайн
Дата регистрации: 09.05.2010
Сообщений: 712
Пост №10
 
05.08.2012 17:43

У вас проблема с переменной номенклатура.<br> <br>Но т.к. я в первом топике пропустил<br>> ...среднее значение суммы всех товаров...<br>то уберите отбор по номенклатуре.<br> <br>P.S.: получать остатки без даты - методологически неверно.<br>P.P.S.: считать среднюю цену по 5 мониторам за 5000 руб. и 3 мышкам за 500 руб. - маразм =).

Показывать по 10 20 40 сообщений

Читают тему:

Быстрый переход
Для технических специалистов
  • Книга жалоб и предложений по работе сайта
  • Для технических специалистов
  • Представление регламентированной отчетности
  • Говорильня
  • Бухгалтерский учет: обсуждаем проекты нормативных актов и рекомендаций по ведению учета от БМЦ
  • Новый порядок применения ККТ (онлайн кассы с передачей сведений в ФНС)
  • Интернет-конференция: Оформление командировок по новым правилам
  • МАРКИРОВКА
  • ЕГАИС
  • Учет, налогообложение, автоматизация