IE 2018

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 Сейчас в теме
Пока вроде работает буду пробовать далее
Прикрепленные файлы:
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Нижний Новгород
зарплата от 120 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 120 000 руб.
Полный день

Программист 1С
Новосибирск
зарплата от 80 000 руб. до 100 000 руб.
Полный день

Системный аналитик
Новосибирск
зарплата от 80 000 руб. до 100 000 руб.
Полный день

Программист 1С
Казань
Полный день