Количество питающихся заполняет неверно.

1. Intercititude 13.07.19 16:45 Сейчас в теме +0.5 $m
Всем доброе время суток! Я новичок. Есть дошкольное питание 2.0.
Столкнулся со следующей проблемой.

В программе есть подразделения питающихся ( 5 штук ).
На 2019 год если делать "заявку на питание" на 1 день по каждому подразделению, то в "Калькуляции" при выборе дня и нажатии на "Заполнить" общее количество и количество питающихся по категориям заполняет всё верно.

Но! Клиенту уже сейчас потребовалось создать заявки и калькуляции на 2020 год с новым типовым меню.
Создаём "Заявку на питание" На 13.01.2020 год с количеством людей 1 человек по одному подразделению. Делаем "Калькуляцию" на 13.01.2010 год. Жму заполнить.
И в итоге заполняет почему то по всем подразделениям и количество становится как в заявках на питание на 2019 год.
Cуть в том, что если и на 2019 год создать только "Заявку на питание" на одно подразделения, то он всё равно подставляет кол-во из всех подразделении!

Готов предоставить код или дт.

Склоняюсь к тому, что берёт СрезПоследних и вообще в принципе будущим числом нельзя делать "Заявки на питание". Но как обойти это и возможно ли вообще?
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. K_Sergei 223 13.07.19 21:39 Сейчас в теме
так посмотри код который выполняется по кнопке "Заполнить", скорей всего там запрос и с параметрами и условиями. От него уже и все поймешь
3. Intercititude 14.07.19 20:04 Сейчас в теме
(2)Всё так и есть. Но подскажите как решить мою проблему ?

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

КонецПроцедуры
Показать
4. catena 110 15.07.19 06:36 Сейчас в теме
(3)Из приведенного кода можно сказать, что численность он берет из регистратора Питание_АктуальнаяЗаявкаНаПитание.
Связи по подразделению в запросе нет и без структуры регистров/документов сложно сказать, возможно ли эту связь протянуть.
Что там во временных таблицах - осталось за кадром.
5. Intercititude 15.07.19 11:13 Сейчас в теме
(4) Да. Как раз таки в Питание_АктуальнаяЗаявкаНаПитание стоит 2 человека. Непонятно почему он суммирует по всем подразделениям старые кол-ва.
Про какую структуру регистров/документов вы говорите ?

ИнициализироватьВременнуюТаблицу(ДанныеРасчетов, "КатегорииПитающихся"); и ИнициализироватьВременнуюТаблицу(ДанныеРасчетов, "ПолучателиВидаКалькуляции");
он туда не попадает.

А в ИнициализироватьВременнуюТаблицу(ДанныеРасчетов, "ПодразделенияВидаКалькуляции");
попадает(в условие ИначеЕсли ИмяТаблицы = "ПодразделенияВидаКалькуляции" Тогда
) :

Процедура ИнициализироватьВременнуюТаблицу(ДанныеРасчетов, ИмяТаблицы)

	Если ДанныеРасчетов.СуществующиеВременныеТаблицы.Найти(ИмяТаблицы) <> Неопределено Тогда
	
		Возврат;
	
	КонецЕсли; 
	
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = ДанныеРасчетов.МенеджерВременныхТаблиц;
	
	Если ИмяТаблицы = "КатегорииПитающихсяВидаКалькуляции" Тогда
	
		Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВЫБРАТЬ
		|	Питание_ВидыКалькуляцийКатегорииПитающихся.КатегорияПитающихся
		|ПОМЕСТИТЬ КатегорииПитающихсяВидаКалькуляцииБезДопЗаполнения
		|ИЗ
		|	Справочник.Питание_ВидыКалькуляций.КатегорииПитающихся КАК Питание_ВидыКалькуляцийКатегорииПитающихся
		|ГДЕ
		|	Питание_ВидыКалькуляцийКатегорииПитающихся.Ссылка = &ВидКалькуляции
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	КатегорииПитающихсяВидаКалькуляцииБезДопЗаполнения.КатегорияПитающихся КАК КатегорияПитающихся
		|ПОМЕСТИТЬ КатегорииПитающихсяВидаКалькуляции
		|ИЗ
		|	КатегорииПитающихсяВидаКалькуляцииБезДопЗаполнения КАК КатегорииПитающихсяВидаКалькуляцииБезДопЗаполнения
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	Питание_КатегорииПитающихся.Ссылка
		|ИЗ
		|	Справочник.Питание_КатегорииПитающихся КАК Питание_КатегорииПитающихся
		|ГДЕ
		|	0 В
		|			(ВЫБРАТЬ
		|				КОЛИЧЕСТВО(РАЗЛИЧНЫЕ КатегорииПитающихсяВидаКалькуляцииБезДопЗаполнения.КатегорияПитающихся) КАК КатегорияПитающихся
		|			ИЗ
		|				КатегорииПитающихсяВидаКалькуляцииБезДопЗаполнения КАК КатегорииПитающихсяВидаКалькуляцииБезДопЗаполнения)", ИмяТаблицы);
		Запрос.УстановитьПараметр("ВидКалькуляции", ВидКалькуляции);
		
	ИначеЕсли ИмяТаблицы = "ПодразделенияВидаКалькуляции" Тогда
	
		Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВЫБРАТЬ
		|	Питание_ВидыКалькуляцийПодразделения.Подразделение
		|ПОМЕСТИТЬ ПодразделенияВидаКалькуляцииБезДопЗаполнения
		|ИЗ
		|	Справочник.Питание_ВидыКалькуляций.Подразделения КАК Питание_ВидыКалькуляцийПодразделения
		|ГДЕ
		|	Питание_ВидыКалькуляцийПодразделения.Ссылка = &ВидКалькуляции
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	ПодразделенияВидаКалькуляцииБезДопЗаполнения.Подразделение КАК Подразделение
		|ПОМЕСТИТЬ ПодразделенияВидаКалькуляции
		|ИЗ
		|	ПодразделенияВидаКалькуляцииБезДопЗаполнения КАК ПодразделенияВидаКалькуляцииБезДопЗаполнения
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	Питание_Подразделения.Ссылка
		|ИЗ
		|	Справочник.Питание_Подразделения КАК Питание_Подразделения
		|ГДЕ
		|	0 В
		|			(ВЫБРАТЬ
		|				КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПодразделенияВидаКалькуляцииБезДопЗаполнения.Подразделение) КАК Подразделение
		|			ИЗ
		|				ПодразделенияВидаКалькуляцииБезДопЗаполнения КАК ПодразделенияВидаКалькуляцииБезДопЗаполнения)
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	ЗНАЧЕНИЕ(Справочник.Питание_Подразделения.ПустаяСсылка)
		|ГДЕ
		|	0 В
		|			(ВЫБРАТЬ
		|				КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПодразделенияВидаКалькуляцииБезДопЗаполнения.Подразделение) КАК Подразделение
		|			ИЗ
		|				ПодразделенияВидаКалькуляцииБезДопЗаполнения КАК ПодразделенияВидаКалькуляцииБезДопЗаполнения)", ИмяТаблицы);
		Запрос.УстановитьПараметр("ВидКалькуляции", ВидКалькуляции);
	
	ИначеЕсли ИмяТаблицы = "ПолучателиВидаКалькуляции" Тогда
		
		Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВЫБРАТЬ
		|	Питание_ВидыКалькуляцийПолучатели.Получатель
		|ПОМЕСТИТЬ ПолучателиВидаКалькуляцииБезДопЗаполнения
		|ИЗ
		|	Справочник.Питание_ВидыКалькуляций.Получатели КАК Питание_ВидыКалькуляцийПолучатели
		|ГДЕ
		|	Питание_ВидыКалькуляцийПолучатели.Ссылка = &ВидКалькуляции
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	ПолучателиВидаКалькуляцииБезДопЗаполнения.Получатель КАК Получатель
		|ПОМЕСТИТЬ ПолучателиВидаКалькуляции
		|ИЗ
		|	ПолучателиВидаКалькуляцииБезДопЗаполнения КАК ПолучателиВидаКалькуляцииБезДопЗаполнения
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	Питание_Получатели.Ссылка
		|ИЗ
		|	Справочник.Питание_Получатели КАК Питание_Получатели
		|ГДЕ
		|	0 В
		|			(ВЫБРАТЬ
		|				КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПолучателиВидаКалькуляцииБезДопЗаполнения.Получатель) КАК Получатель
		|			ИЗ
		|				ПолучателиВидаКалькуляцииБезДопЗаполнения КАК ПолучателиВидаКалькуляцииБезДопЗаполнения)
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	ЗНАЧЕНИЕ(Справочник.Питание_Получатели.ПустаяСсылка)
		|ГДЕ
		|	0 В
		|			(ВЫБРАТЬ
		|				КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПолучателиВидаКалькуляцииБезДопЗаполнения.Получатель) КАК Получатель
		|			ИЗ
		|				ПолучателиВидаКалькуляцииБезДопЗаполнения КАК ПолучателиВидаКалькуляцииБезДопЗаполнения)", ИмяТаблицы);
		Запрос.УстановитьПараметр("ВидКалькуляции", ВидКалькуляции);
	
	Иначе
	
		Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВЫБРАТЬ
		|	ТаблицаДанных.* 
		|ПОМЕСТИТЬ %1
		|ИЗ 
		|	&Таблица КАК ТаблицаДанных", ИмяТаблицы);
		Запрос.УстановитьПараметр("Таблица", ЭтотОбъект[ИмяТаблицы].Выгрузить());
	
	КонецЕсли; 
	
	Запрос.Выполнить();
	
	ДанныеРасчетов.СуществующиеВременныеТаблицы.Добавить(ИмяТаблицы);

КонецПроцедуры
Показать
Оставьте свое сообщение

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