Таблица значений

1. RALik_Minsk 08.08.18 15:09 Сейчас в теме
Все доброго дня Подскажите как быть
Цель: При разноске обедов обрабатываются ручные ведомости, их несколько и бывают ситуации что в разных ведомостях пообедал один человек. Это ошибка и такого не должно быть. Как ввести проверку по эти трем позициям Обед/Ужин/Собойка
Вот запрос. В файле картинка отработки в Консоль. В запросе ужин и собойку пока не прописывал.
Процедура СписокКолПриИзменении(Элемент)
	// Вставить содержимое обработчика.
	Строка = ЭлементыФормы.Список.ТекущиеДанные;
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ВедомостьРаздачиПищи.Список.(
	|		ФИОСотрудника,
	|		КолОбед,
	|		КолУжин,
	|		КолСобойка,
	|		КолМинВода
	|	),
	|	ВедомостьРаздачиПищи.Ссылка КАК Документ,
	|	ВедомостьРаздачиПищи.МестоХранения,
	|	ВедомостьРаздачиПищи.Проведен
	|ИЗ
	|	Документ.ВедомостьРаздачиПищи КАК ВедомостьРаздачиПищи
	|ГДЕ
	|	КОНЕЦПЕРИОДА(ВедомостьРаздачиПищи.Дата, ДЕНЬ) = КОНЕЦПЕРИОДА(&Дата, ДЕНЬ)
	|	И ВедомостьРаздачиПищи.Список.ФИОСотрудника = &ФИОСотрудника
	|	И ВедомостьРаздачиПищи.Проведен = &Проведен";
	Запрос.УстановитьПараметр("Дата", Дата);
	Запрос.УстановитьПараметр("Проведен", ИСТИНА);
	
	Запрос.УстановитьПараметр("ФИОСотрудника", Строка.ФИОСотрудника); 
	Результат = Запрос.Выполнить();
	
	//Массив = Результат.Выгрузить();
	//СтрокиЗапроса = Массив.ВыгрузитьКолонку("Список");
	//КоличествоСтрокЗапроса = СтрокиЗапроса.Количество();
	//Массив[0].Список[0]
	//СтрокиЗапроса[] = Массив.ВыгрузитьКолонку("КолОбед");
	
	
	Если  Результат.Пустой()  тогда
		Строка = ЭлементыФормы.Список.ТекущаяСтрока;
		Строка.СуммаОбеда = СтоимостьОбеда *  Строка.КолОбед;
		Строка.СуммаУжина = СтоимостьУжина *  Строка.КолУжин;
		Строка.СуммаСобойка = СтоимостьСобойки *  Строка.КолСобойка;
		Строка.СуммаМинВода = СтоимостьМинВоды *  Строка.КолМинВода;
		РасчетПолнойСтоимости();
		РасчетЛьготнойСтоимости(); 
	Иначе
					
		Пока  Выборка.Следующий() Цикл
			Документ = Выборка.Документ;
			Склад = Выборка.МестоХранения;
			Обед = Выборка.Список.Колонки.КолОбед;
			//СтрокиЗапроса = Массив.ВыгрузитьКолонку("Список");
			//СтрокиЗапроса1 = Массив.ВыгрузитьКолонку("КолОбед");
		КонецЦикла;
		Если Обед > 0 Тогда
			Обед = "обедал";
			Предупреждение("Он уже " + Обед + " у " + Склад + " (" + Документ + ")" );
		Иначе
			Строка = ЭлементыФормы.Список.ТекущаяСтрока;
			Строка.СуммаОбеда = СтоимостьОбеда *  Строка.КолОбед;
			Строка.СуммаУжина = СтоимостьУжина *  Строка.КолУжин;
			Строка.СуммаСобойка = СтоимостьСобойки *  Строка.КолСобойка;
			Строка.СуммаМинВода = СтоимостьМинВоды *  Строка.КолМинВода;
			РасчетПолнойСтоимости();
			РасчетЛьготнойСтоимости();
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры
Показать
Прикрепленные файлы:
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. DarkUser 08.08.18 15:20 Сейчас в теме
Выберите запросом все записи сотрудников из документов ВедомостьРаздачиПищи а потом сгруппируйте их с суммой по количеству. Если у сотрудника количество больше 1, значит он пообедал несколько раз.
+
3. RALik_Minsk 08.08.18 15:24 Сейчас в теме
(2) На картинке все выбирается. Как мне обратится к значению КолОбед в Таблице значений. Какой командой или методом!
+
4. DarkUser 08.08.18 15:30 Сейчас в теме
(3) Ну так это у вас вложенная таблица в запросе. Для её обхода надо ещё раз выполнить запрос:

Результат = Запрос.Выполнить();
Пока  Выборка.Следующий() Цикл
            ВложеннаяТаблицаВыборка = Выборка.Список.Выбрать(); // Или может Выборка.ВедомостьРаздачиПищиСписок
            Пока  ВложеннаяТаблицаВыборка .Следующий() Цикл
                    // Действия
            КонецЦикла;
КонецЦикла;
Показать


Только это не правильно. У вас в этом запросе всегда будет количество обедов = 1. А вот одинаковых физ лиц запросто может быть несколько.
+
5. RALik_Minsk 08.08.18 15:42 Сейчас в теме
(4)ФизЛицо всегда только одно оно параметром назначается ранее
+
6. DarkUser 08.08.18 15:47 Сейчас в теме
(5) Я надеюсь у вас там не запрос в цикле? И, например, как сработает ваш запрос если в таблице документа Список будет две записи с одинаковым физ.лицом?
+
7. RALik_Minsk 08.08.18 15:51 Сейчас в теме
(6){Документ.ВедомостьРаздачиПищи.Форма.ФормаДокумента(177)}: Метод объекта не обнаружен (Следующий)
Пока Выборка.Следующий() Цикл
+
8. Octopus 337 08.08.18 15:54 Сейчас в теме
(7)
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока  Выборка.Следующий() Цикл

Но лучше
Выборка = Запрос.Выполнить().Выбрать();
Пока  Выборка.Следующий() Цикл
+
9. RALik_Minsk 08.08.18 15:55 Сейчас в теме
(6)А как может появится вторая запись если при внесении её должна сработать первая. Человека уже не будут вносить а пометят как ошибка и будут разбираться с раздатчицами.
+
11. RALik_Minsk 08.08.18 16:23 Сейчас в теме
(6) Проработал я эту ситуацию да две строчки с одним ФизЛицом может быть место если он обедал у одной раздатчицы, а ужинал у другой. Две разные ведомости. Вот задачка(
+
10. RALik_Minsk 08.08.18 16:05 Сейчас в теме
Пока вроде работает буду пробовать далее
Прикрепленные файлы:
+
Внимание! Тема сдана в архив

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