7.7 Движение регистров

  • Автор темы -
  • Дата начала

Гость
#1
Подскажите пожалуйста, не могу получить сумму движений регистра, как функцию в запросе правильно прописать?

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Клиент = Регистр.Рекламации.Контрагент;
|КолН = Регистр.Рекламации.КоличествоНед;
|ИтогНе = Регистр.Рекламации.ИтогНедостачи;
|Группировка Клиент Без Групп;

|Функция КолПрихН = Приход(КолН);
|Функция ИтогНед = Сумма(ИтогНе);

|Условие(Клиент в ВыбПокупатели);
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

Пока Запрос.Группировка(1) = 1 Цикл

ТЗРасчёт.НоваяСтрока();
Стр = ТЗРасчёт.НомерСтроки;
ТЗРасчёт.УстановитьЗначение(Стр,1,Стр);
ТЗРасчёт.УстановитьЗначение(Стр,2,Запрос.Клиент);
ТЗРасчёт.УстановитьЗначение(Стр,3,Запрос.ИтогНе); / / Здесь некорректно выдаёт.

КонецЦикла;
 

puh14

Well-Known Member
11.07.2008
1 412
0
НеРезиновая
#2
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Клиент = Регистр.Рекламации.Контрагент;
|КолН = Регистр.Рекламации.КоличествоНед;
|ИтогНе = Регистр.Рекламации.ИтогНедостачи;
|Группировка Клиент Без Групп;

|Функция КолПрихН = Приход(КолН);
|Функция ИтогНед = Сумма(ИтогНе);

|Условие(Клиент в ВыбПокупатели);
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

Пока Запрос.Группировка(1) = 1 Цикл

ТЗРасчёт.НоваяСтрока();
Стр = ТЗРасчёт.НомерСтроки;
ТЗРасчёт.УстановитьЗначение(Стр,1,Стр);
ТЗРасчёт.УстановитьЗначение(Стр,2,Запрос.Клиент);
ТЗРасчёт.УстановитьЗначение(Стр,3,Запрос.ИтогНе); / / Здесь некорректно выдаёт.

КонецЦикла;
Функция Сумма иметт смысл только для регистра оборотов - а у тебя, суда по функции Приход - регистр остатков.
Лучше так

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Клиент = Регистр.Рекламации.Контрагент;
|КолН = Регистр.Рекламации.КоличествоНед;
|ИтогНе = Регистр.Рекламации.ИтогНедостачи;
|Группировка Клиент Без Групп;

|Функция КолПрихН = Приход(КолН);
|Функция ИтогНед = КонОст(ИтогНе);// Показывает итог недостач. Если нужны увеличения недостач, тогда Приход(ИтогНе)

|Условие(Клиент в ВыбПокупатели);
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

Пока Запрос.Группировка(1) = 1 Цикл

ТЗРасчёт.НоваяСтрока();
Стр = ТЗРасчёт.НомерСтроки;
ТЗРасчёт.УстановитьЗначение(Стр,1,Стр);
ТЗРасчёт.УстановитьЗначение(Стр,2,Запрос.Клиент);
ТЗРасчёт.УстановитьЗначение(Стр,3,Запрос.ИтогНеД);
КонецЦикла;

Можно не пеербирать строки а написать Запрос.Выгрузить(ТЗРасчет) - он там сам все колонки нарисует.
 

Гость
#3
Дело в том, что он при таком раскладе, подставляя результат любой функции, результат выдаёт умноженный на 10.

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Клиент = Регистр.Рекламации.Контрагент;
|ИтогНе = Регистр.Рекламации.СуммаНедИ;

|Функция КолПрихН = Приход(ИтогНе);
|Функция ИтогНед = КонОст(ИтогНе);

|Группировка Клиент Без Групп;
|Условие(Клиент в ВыбПокупатели);
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

Пока Запрос.Группировка(1) = 1 Цикл
Сообщить("1");
ТЗРасчёт.НоваяСтрока();
Стр = ТЗРасчёт.НомерСтроки;
ТЗРасчёт.УстановитьЗначение(Стр,1,Стр);
ТЗРасчёт.УстановитьЗначение(Стр,2,Запрос.Клиент);
ТЗРасчёт.УстановитьЗначение(Стр,3,Запрос.КолПрихН);

КонецЦикла;
 

puh14

Well-Known Member
11.07.2008
1 412
0
НеРезиновая
#4
Ну значит такие движения были по регистрам. Для точной проверки создай на форме ТЗ и выгрузи в неё результаты запроса с детализацией до документов. А потом разбирайся - мож они в проведении накосячили.

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Клиент = Регистр.Рекламации.Контрагент;
|ИтогНе = Регистр.Рекламации.СуммаНедИ;
|Док = Регистр.Рекламации.ТекущийДокумент;
|Функция ИтогНач= НачОст(ИтогНе);
|Функция КолПрихН = Приход(ИтогНе);
|Функция КолРасх= Расход(ИтогНе);
|Функция ИтогКон = КонОст(ИтогНе);
|Группировка Клиент Без Групп;
|Группировка док;
|Условие(Клиент в ВыбПокупатели);
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

Запрос.выгрузить(ТЗ); // ТЗ - таблица значений на форме
 

Гость
#5
Спасибо Пух, с помощью твоей внешней обработки выцепил свой баг! Это я регистры коряво писал.