• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

Guest

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

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

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

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

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

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

КонецЦикла;
 
P

puh14

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

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

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

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

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

КонецЦикла;

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

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

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

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

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

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

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

Guest

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

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

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

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

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

КонецЦикла;
 
P

puh14

Ну значит такие движения были по регистрам. Для точной проверки создай на форме ТЗ и выгрузи в неё результаты запроса с детализацией до документов. А потом разбирайся - мож они в проведении накосячили.

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

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

Guest

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!