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

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

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

Доработка отчета "Структура подчиненности"

Отчеты - Анализ учета

Расширение типового поведения отчета. Небольшая доработка позволяет сразу построить дерево документов "от корня", при этом текущий документ также остаётся выделен жирным шрифтом.

Несколько небольших изменений в коде общей команды и общей форме  "Структура подчиненности" позволяют получить удобный отчет по всему дереву подчиненных документов. 

Вся информация по доработке представлена на рисунках к публикации.

Файлы можно скачать, если только нет желания набрать вручную код, показанный на рисунках.

В качестве оригинала для доработки использовался код Библиотеки стандартных подсистем, редакция 2.2 (2.2.4.45).
Отчет "Структура подчиненности" используется во всех типовых конфигурациях 1С.

Скачать файлы

Наименование Файл Версия Размер
ФайлыПубликации
.rar 214,15Kb
07.11.16
34
.rar 1.0 214,15Kb 34 Скачать

См. также

Комментарии
Сортировка: Древо
1. vlastapov 48 28.03.15 22:35 Сейчас в теме
Да, очень необходимо, спасибо!
2. vlastapov 48 28.03.15 22:38 Сейчас в теме
Жаль только с изменением исходной конфигурации. Может 1С сама встроит этот механизм?
3. AndrewVVS 13.05.15 17:34 Сейчас в теме
Да, жесть! убрать суммы из прошлого варианта. А чтобы еще и вернуть возможность прямо из структуры проводить, распроводить, помечать на удаление документы - долго делать?
4. hobi 522 13.05.15 22:48 Сейчас в теме
(3) AndrewVVS, делать не долго.

Добавьте в модуль общей формы "СтруктураПодчиненности", например такой код:

&НаСервере
Процедура Действие(Док,Действие)
	
	Попытка
		Об = Док.ПолучитьОбъект();
		Если Действие = "Проведение" Тогда
			Если Об.ПометкаУдаления Тогда
				Об.УстановитьПометкуУдаления(Ложь);
			КонецЕсли;
			Если Об.Проведен Тогда
				Об.Записать(РежимЗаписиДокумента.ОтменаПроведения);
			Иначе	
				Об.Записать(РежимЗаписиДокумента.Проведение);
			КонецЕсли;	
		ИначеЕсли Действие = "ПометкаУдаления" Тогда
			Об.УстановитьПометкуУдаления(Не Об.ПометкаУдаления);
		КонецЕсли;	
		ОбновитьДеревоСтруктурыПодчиненности();
	Исключение
		Сообщить("Не удалось выполнить: " + Действие);
	КонецПопытки;
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция СтатусДокумента(Док)
	
	Возврат Новый Структура("Проведен,ПометкаУдаления",Док.Проведен,Док.ПометкаУдаления);
	
КонецФункции

&НаКлиенте
Процедура ТаблицаОтчетаОбработкаДополнительнойРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
	
	Статус = СтатусДокумента(Расшифровка);
	СписокЗн = Новый СписокЗначений;
	
	Если Статус.Проведен Тогда
		АктивнаяСтрока = 
		СписокЗн.Добавить("Проведение","Отмена проведения",,БиблиотекаКартинок.ОтменаПроведения);
	Иначе
		АктивнаяСтрока = 
		СписокЗн.Добавить("Проведение","Проведение документа",,БиблиотекаКартинок.Провести);
	КонецЕсли;   
	Если Статус.ПометкаУдаления Тогда
	   СписокЗн.Добавить("ПометкаУдаления","Снять пометку удаления",,БиблиотекаКартинок.ПометитьНаУдаление);
	Иначе
	   СписокЗн.Добавить("ПометкаУдаления","Пометка удаления",,БиблиотекаКартинок.ПометитьНаУдаление);
	КонецЕсли;   
	   
	ВыбранныйЭлемент = СписокЗн.ВыбратьЭлемент("Действие:",АктивнаяСтрока);
	Если ВыбранныйЭлемент = Неопределено Тогда
		Возврат;
	КонецЕсли;		
	Действие(Расшифровка,ВыбранныйЭлемент.Значение);
	
КонецПроцедуры
Показать


И не забудьте связать функцию ТаблицаОтчетаОбработкаДополнительнойРасшифровки() с событием обработка дополнительной расшифровки для элемента формы ТаблицаОтчета.
Тогда по правой кнопке мышки можно проводить/распроводить и изменять пометку удаления.
wakrush; AndrewVVS; +2 Ответить
5. AndrewVVS 14.05.15 11:33 Сейчас в теме
Спасибо! Заработало!! Правда все время пишет: "Использование модальных окон в данном режиме запрещено!" + когда стал переносить код В модуль команды пишет ошибку: Переменная не определена (Ссылка). ОткрытьФорму("ОбщаяФорма.СтруктураПодчиненности",Новый Структура("ОбъектОтбора,ВыбранныйОбъект", Ссылка, ПараметрКоманды),
7. hobi 522 14.05.15 15:07 Сейчас в теме
(5) AndrewVVS, кажется я понял, в чем проблема с "Переменная не определена (Ссылка)". Обычно реквизит "Ссылка" не размещают на форме, поэтому из модуля формы в клиентской процедуре обратиться к нему нельзя. Поэтому опять же, есть два пути:

1. Создать функцию &НаСервере, которая возвращает значение ссылки для использования в вызове формы.
2. В самой форме у реквизита "Ссылка" установить флажок "Использовать всегда".

Надеюсь, поможет.
9. AndrewVVS 14.05.15 18:09 Сейчас в теме
(7) хотел убрать действия: "проведение документа" и "отмена проведения документа" для тех документов, которые не проводятся, например счета или инвентаризации по Метаданные.СвойстваОбъектов.Проведение.Разрешить, НО оказалось, что в версии 3.0 у этих документов свойство Проведение из "запретить" - стало "разрешить"!!, хотя никаких движений они так и не делают :).
6. hobi 522 14.05.15 14:57 Сейчас в теме
Про модальные окна: я не стал заморачиваться для краткости кода. Если сильно мешает, есть два пути убрать сообщение о запрете модальности:

1. В свойствах конфигурации (всё равно уже сняли с поддержки, если исправили код общего модуля и общей формы) установить "Режим использования модальности" в значение "Использовать". Если не работаете в режиме Web-клиента, это быстрее и проще.

2. Сделать рефакторинг строки (как рекомендует 1С):
ВыбранныйЭлемент = СписокЗн.ВыбратьЭлемент("Действие:",АктивнаяСтрока);
Заменить процедуру ВыбратьЭлемент() на ПоказатьВыборЭлемента(). Как это сделать - есть пример в справке по процедуре
ПоказатьВыборЭлемента().

Про модуль команды не совсем понятно, что вы сделали. В публикации шла речь только об изменениях в общей форме и общем модуле.
Нужен ваш код, чтобы ответить.
8. AndrewVVS 14.05.15 16:08 Сейчас в теме
(6) и снова: СПАСИБО! уже заморочился с ВыбранныйЭлемент = СписокЗн.ПоказатьВыборЭлемента(Новый ОписаниеОповещения("Действие", ЭтотОбъект),"Действие:",АктивнаяСтрока);
http://its.1c.ru/db/metod8dev#content:5293:hdoc
P.S. в режиме Web-клиента не работаем, это ДЕЙСТВИТЕЛЬНО быстрее и проще!! :) установить "Режим использования модальности" в значение "Использовать"
10. hobi 522 14.05.15 19:55 Сейчас в теме
Проверку возможности проведения для документов, которые не проводятся, я не реализовал.
Просто минимальный код привел. Но сделать не проблема.
11. Светлый ум 233 06.11.16 07:59 Сейчас в теме
-1. Обработки в архиве нет.
12. wakrush 12.11.17 12:37 Сейчас в теме
Спасибо огромное автору за подсказку с кнопками
Оставьте свое сообщение