Создание и обработка запроса в 1с 77

1. EvaMendes 20.01.17 00:28 Сейчас в теме
Доброго времени суток! Создаю запрос, все вроде отрабатывает. Но, как я понимаю, в результат идет только первая партия. Хотя группировку по партиям я не заказывала. Почему так происходит? Что с этим делать? Может есть какой-то отладчик, который покажет мне идет ли группировка по партиям?
Смотрю конкретный товар. Он приходил тремя партиями: 1шт, 1шт, 6шт. Моя процедура показывает, что на остатке 1 шт....
Запрос = СоздатьОбъект("Запрос");
	ТекстЗапроса = "
	|Период с ВыбНачПериода по ДатаОст; 
	|Обрабатывать НеПомеченныеНаУдаление;  
	|Фирма = Регистр.СкладУчетПарт.Фирма;
	|Товар = Регистр.СкладУчетПарт.Номенклатура;
	|Колво = Регистр.СкладУчетПарт.Количество;
	//|Партия = Регистр.СкладУчетПарт.Партия; 
	|Цена = Регистр.СкладУчетПарт.УчетнаяЦена; 
	|Функция ТовОстаток = КонОст(Колво);
	|Группировка Фирма без групп; 
	|Группировка Товар без групп;  
	|"; 
   
	Запрос.Выполнить(ТекстЗапроса); 
	СчетчикСтр = СводнаяТаблица.КоличествоСтрок();
	Пока Запрос.Группировка(1) = 1 Цикл 
		ФирмаОбщ = Запрос.Фирма; 
		Если (ФирмаОбщ = Фирма1) или (ФирмаОбщ = Фирма2) тогда 
			Если  Строка(ФирмаОбщ) = Строка(ФЛ) тогда
				ФирмаОбщ = "Л";
			ИначеЕсли Строка(ФирмаОбщ) = Строка(ФШ) тогда  
				ФирмаОбщ = "Ш";
			иначе
				продолжить;
			КонецЕсли;
			
			СводнаяТаблица.НоваяКолонка(СокрЛП(Строка(ФирмаОбщ) + "Цена"), "Число");
			СводнаяТаблица.НоваяКолонка(СокрЛП(Строка(ФирмаОбщ)), "Число"); 
			
			НомерКол = СводнаяТаблица.КоличествоКолонок();  
			
			Пока Запрос.Группировка(2) = 1 Цикл  
				СчетчикСтр = СчетчикСтр +1;
				СводнаяТаблица.НоваяСтрока();
				СводнаяТаблица.Номенклатура = Запрос.Товар;
				СводнаяТаблица.Количество = Запрос.Колво;
				СводнаяТаблица.Единица = Шт.ТекущийЭлемент(); 
				//СводнаяТаблица.Цена = Запрос.Цена;
				СводнаяТаблица.Сумма = Запрос.Цена*Запрос.Колво; 
				СводнаяТаблица.УстановитьЗначение(СчетчикСтр, НомерКол, Запрос.Колво);
				//по сути сумма, потом она разделится на количество
				СводнаяТаблица.УстановитьЗначение(СчетчикСтр, НомерКол-1, Запрос.Цена*Запрос.Колво);
			КонецЦикла; 
		КонецЕсли;
	КонецЦикла; 
Показать
По теме из базы знаний
Найденные решения
13. EvaMendes 21.01.17 12:33 Сейчас в теме
(1) ошибка из разряда "а слона-то я и не приметил". Вместо Колво должно быть ТовОстаток:
СводнаяТаблица.Количество = Запрос.ТовОстаток;
                СводнаяТаблица.Единица = Шт.ТекущийЭлемент(); 
                //СводнаяТаблица.Цена = Запрос.Цена;

Всем спасибо =)))
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ture 606 20.01.17 08:59 Сейчас в теме
(1) хе-хе, пишите запросы через 1с++
5. корум 287 20.01.17 16:34 Сейчас в теме
(1)
ФирмаОбщ = Запрос.Фирма;
Если (ФирмаОбщ = Фирма1) или (ФирмаОбщ = Фирма2) тогда

... может, остальное на Фирма3, и в условие не попадает?
7. EvaMendes 20.01.17 16:57 Сейчас в теме
(5)нет =) я ж специально смотрю по этим двум фирмам. Остатки у меня разбиты по фирмам. Всего 4 фирмы, меня интересует 2 из них. По некоторой конкретной номенклатуре по фирме1 остаток = 1шт и пишется как 1шт (мб случайно), по фирме2 = 8шт (но пишет 1), по фирме3 = 0шт, по фирме4 = 0шт.
9. корум 287 20.01.17 17:26 Сейчас в теме
(7)
я ж специально смотрю по этим двум фирмам

... так и добавь условие по фирме в запрос.

Затем запрос выгрузи в ТЗ, и уже с ней работай.
Заодно будет легче отлаживать, в любой момент вставил тз.выбратьстроку() и посмотрел, что там лежит.
10. Black Cat 32 20.01.17 23:05 Сейчас в теме
(1) А покажите структуру регистра
11. EvaMendes 21.01.17 11:01 Сейчас в теме
12. starjevschik 21.01.17 12:26 Сейчас в теме
(11) учетная цена значит разная, получаются разные партии.
13. EvaMendes 21.01.17 12:33 Сейчас в теме
(1) ошибка из разряда "а слона-то я и не приметил". Вместо Колво должно быть ТовОстаток:
СводнаяТаблица.Количество = Запрос.ТовОстаток;
                СводнаяТаблица.Единица = Шт.ТекущийЭлемент(); 
                //СводнаяТаблица.Цена = Запрос.Цена;

Всем спасибо =)))
14. EvaMendes 21.01.17 12:39 Сейчас в теме
(1) ошибка из разряда "а слона-то я и не приметил". Вместо Колво должно быть ТовОстаток:
 СводнаяТаблица.Количество = Запрос.ТовОстаток;
                СводнаяТаблица.Единица = Шт.ТекущийЭлемент(); 
                //СводнаяТаблица.Цена = Запрос.Цена;

Всем спасибо =)))
(12)так я ж не делаю группировку по цене.
3. vcv 89 20.01.17 09:46 Сейчас в теме
Так может остаток реально 1 шт?
Просмотрите, что возвращает запрос.
ТЗ = СоздатьОбъект("ТаблицаЗначений");
Запрос.Выгрузить(ТЗ,0,0);
ТЗ.ВыбратьСтроку();

И взять какую-нибудь из многочисленных обработок, показывающих остатки в регистре, и сверить с данными, полученными из запроса.
Проверьте правильность ВыбНачПериода и ДатаОст.
4. EvaMendes 20.01.17 16:14 Сейчас в теме
(3)действительно на остатке есть 8 шт. и обработка по остаткам и мой запрос показывает верный остаток. Причем в результате запроса нет разбития по партиям (выдает одной строкой 8 шт). Не верно отрабатывает цикл. Блин, но что неверно-то? Хоть убей, не пойму!
6. корум 287 20.01.17 16:40 Сейчас в теме
Ещё момент.
СчетчикСтр = СводнаяТаблица.КоличествоСтрок(); ---стоит перед первым циклом, и это смущает...

попробуй по другому.

внутри второго цикла
 СводнаяТаблица.НоваяСтрока();
НомСтр = СводнаяТаблица.количествоСтрок();
                СводнаяТаблица.Номенклатура = Запрос.Товар;
                СводнаяТаблица.Количество = Запрос.Колво;
                СводнаяТаблица.Единица = Шт.ТекущийЭлемент(); 
                //СводнаяТаблица.Цена = Запрос.Цена;
                СводнаяТаблица.Сумма = Запрос.Цена*Запрос.Колво; 
                СводнаяТаблица.УстановитьЗначение(НомСтр, НомерКол, Запрос.Колво);
Показать
8. EvaMendes 20.01.17 17:01 Сейчас в теме
(6)разве? У меня таблица формируется из трех разных запросов. Перед циклом я узнаю количество строк и во втором цикле прибавляю, ведь до этого у меня не было новых строк. В принципе, думаю, можно и вашим способом, будет точнее. Сейчас попробую.

У меня еще до использования счетчика идет неверный результат...Что-то с перебором значений что ли... Вот здесь смотрю количество - пишет 1 шт (вместо 8):
СводнаяТаблица.НоваяСтрока();
				Номенклатура = Запрос.Товар;
				Если Номенклатура.Код = "00031433" тогда
					к = к + Запрос.Колво;
				КонецЕсли;
				СводнаяТаблица.Номенклатура = Запрос.Товар;
				СводнаяТаблица.Количество = Запрос.Колво;
				СводнаяТаблица.Единица = Шт.ТекущийЭлемент()

У меня такое чувство, что идет выборка по партиям, но даже если бы она была, то результат запроса бы не отрабатывал (по простой выгрузке). Аааааа
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот