INFOSTART EVENT 2018 EDUCATION

Второй тур голосования за доклады.
Окончание 5 сентября.

Котов Дмитрий | Программист-разработчик | ООО "Саянскгазобетон"

«Автоматизация обработки потока документов, на примере разработки "Терминала путевых листов" для диспетчерской службы»

Пример возможности разработки полностью автоматизированного места для получения, обработки и возврата документов через терминал на платформе 1С:Предприятие 8.3, без участия оператора. В примере демонстрирую возможность реализации "Терминала путевых листов" в диспетчерской службе компании ООО "Саянскгазобетон". Основное направление компании - производство автоклавного газобетона. Диспетчерская служба не имеет возможности круглосуточной работы, в связи с чем сложилась проблема в своевременным возврате путевых листов от водителей. «Терминал путевых листов», продемонстрированный в докладе, позволяет решит данную проблему путем создания интерфейса прямого доступа в информационную систему с помощью нового режима запуска 1С – "Киоск". Водитель самостоятельно получает и возвращает путевой лист в прикладном решении 1С: Управление автотранспортом 2.1.

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С
Одесса (Украина)
зарплата от 40 000 руб.
Полный день

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

Аналитик 1С
Москва
зарплата от 80 000 руб. до 120 000 руб.
Полный день

1С Developer
Одесса (Украина)
зарплата от 60 000 руб. до 120 000 руб.
Полный день

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