Графики работы из БСП

23.05.19

Разработка - БСП (Библиотека стандартных подсистем)

Не очень давно на канале 1С:БСП была опубликована заметка по использованию Графиков работы и Календарных графиков.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Расширение реализующее список дат
.cfe 57,65Kb
2
2 Скачать (1 SM) Купить за 1 850 руб.

Не очень давно в Телеграм на канале 1С:БСП (https://t.me/learn_ssl1c) была опубликована заметка по использованию Графиков работы и Календарных графиков. Пример был предоставлен из документации БСП к этой подсистеме. Попробовал разобраться как все же можно использовать данную подсистему в работе. Пример буду делать на основе типовой УТ11.
 

Работа со справочником Графики работы доступно НСИ и Администрирование - Графики работы.

 

Рассмотрим пример - десяток складов и у каждого склада свой график приемки товаров. Нам потребуется создать свой график для каждого склада и определить ближайшую дату доставки.

Справочник графики работы не является подчиненным, но в нем есть реквизит определяющий владельца. Если посмотреть на реквизиты справочника Календари, можно найти реквизит ВладелецГрафика (Служебный реквизит для связи с владельцем графика работы).

Посмотрев по коду, механизмов заполнения это реквизита нет. Через интерфейс он так же не заполняется.

При открытии формы списка справочника графиков на нее накладывается отбор на Владельца где он не заполнен.

ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
		Список, "ВладелецГрафика", , ВидСравненияКомпоновкиДанных.НеЗаполнено, , ,
		РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный);

Если попробовать выбрать например График работы из формы элемента справочника склады (НСИ и администрирование - Склады и магазины) мы получим все доступные графики независимо есть в них владелец или нет. При создании нового элемента справочника ВладелецГрафика заполнен не будет.

Попробуем доработать механизм выбора и создания новых графиков. Для этого добавим новый реквизит КалендарьПриемки с типом - СправочникСсылка.Календари

На событие НачалоВыбора поля КалендарьПриемки напишем следующее:

&НаКлиенте
Процедура КалендарьПриемкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	 СтандартнаяОбработка = Ложь;
	  
	 ПараметрыФормы = Новый Структура;
	 ПараметрыФормы.Вставить("Отбор", Новый Структура("ВладелецГрафика", Объект.Ссылка));
	 
	 ОповещениеФормы = Новый ОписаниеОповещения("ОбработкаВыбораКалендаряИзСправочника", ЭтотОбъект);
	 
	 ОткрытьФорму("Справочник.Календари.ФормаВыбора", ПараметрыФормы, ЭтотОбъект,,,, ОповещениеФормы); 
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбораКалендаряИзСправочника(Результат, ДополнительныеПараметры) Экспорт

	Если Результат <> Неопределено Тогда
		Объект.КалендарьПриемки = Результат;
	КонецЕсли;
	
КонецПроцедуры

теперь на форму в явном виде передается отбор списка по владельцу графика и не видны графики у которых не заполнен владелец или владельцем является другой объект. При передаче отбора на форму списка нам становится доступны ДанныеЗаполнения в процедуре модуля объекта ОбработкаЗаполнения.

В модуле объекта Календари создадим процедуру:

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
	
	 Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
		
		Если ДанныеЗаполнения.Свойство("ВладелецГрафика") И ЗначениеЗаполнено(ДанныеЗаполнения.ВладелецГрафика) Тогда
			
			ВладелецГрафика = ДанныеЗаполнения.ВладелецГрафика;
			Наименование = СтрШаблон("График %1", ДанныеЗаполнения.ВладелецГрафика.Наименование);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

Теперь при создании нового календаря из формы выбора сразу заполняется владелец и наименование по шаблону.

Интерфейсная часть готова.

 

Например у нас дни приемки товаров по субботам.

На форме документа ЗаказНаПеремещение создадим команду ПолучитьБлижайшуюДату 

&НаКлиенте
Процедура ПолучитьБлижайшуюДату(Команда)
	ПолучитьБлижайшуюДатуНаСервере();
КонецПроцедуры

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

 

При обработке команды она вернет ближайшую дату по графику.

Минусы реализации:

  • нельзя использовать общие графики

UPD: Заполнение списка желаемых дат по графику. Например нам нужно получать три ближайшие даты поступления и выводить их в список дат.

На форме документа нужно для свойства поля - ЖелаемаяДатаПоступления установить КнопкаВыпадающегоСписка - Да

Реализовать функцию заполняющую список выбора:

&НаСервере
Процедура ЗаполнитьЖелаемыеДаты()
	
	Элементы.ЖелаемаяДатаПоступления.СписокВыбора.Очистить();
	
	ЖелаемаяДата = Дата(1,1,1);
	КоличествоДат = 3; // количество дат представленных в списке выбора
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	Календари.Ссылка КАК Ссылка
		|ИЗ
		|	Справочник.Календари КАК Календари
		|ГДЕ
		|	Календари.ВладелецГрафика = &ВладелецГрафика";
	Запрос.УстановитьПараметр("ВладелецГрафика", Объект.СкладПолучатель);
	
	Результат = Запрос.Выполнить();
	
	Если Не Результат.Пустой() Тогда
		
		Выборка = Результат.Выбрать();
		Выборка.Следующий();
		
		График = Выборка.Ссылка;
	Иначе 
		Возврат;
    КонецЕсли;  
		
		
	Для Сч = 1 По КоличествоДат Цикл
		
		Если ЖелаемаяДата = Дата(1,1,1) Тогда	
			НачальнаяДата = Объект.Дата;
		Иначе 
			НачальнаяДата = КонецДня(ЖелаемаяДата) + 1;			
		КонецЕсли;
		
		МассивДат = Новый Массив;
		МассивДат.Добавить(НачальнаяДата);
		
		РабочиеДни = КалендарныеГрафики.ДатыБлижайшихРабочихДней(График, МассивДат,, Ложь);
		
		ЖелаемаяДата = РабочиеДни.Получить(НачальнаяДата);
				
		Элементы.ЖелаемаяДатаПоступления.СписокВыбора.Добавить(ЖелаемаяДата, СтрШаблон("%1 (%2)", Формат(ЖелаемаяДата, "ДФ=dd.MM.yyyy") , Формат(ЖелаемаяДата, "ДФ=дддд")));
	КонецЦикла;
		
КонецПроцедуры

Для трех событий формы реализовать обращение к этой функции (ПриСозданииНаСервере, ДатаПриИзменении, СкладПолучательПриИзменении)

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ЗаполнитьЖелаемыеДаты();	
	
КонецПроцедуры

&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
	
	ЗаполнитьЖелаемыеДаты();

КонецПроцедуры

&НаКлиенте
Процедура СкладПолучательПриИзменении(Элемент)
	
	ЗаполнитьЖелаемыеДаты();
	
КонецПроцедуры

А как вы используете Графики работы?

Приложенное расширение тестировалось на платформе 8.3.13.1690 конфигурация УТ 11.4.7.150.

См. также

БСП (Библиотека стандартных подсистем) Программист Платные (руб)

Синтакс-помощник БСП - cправочник по библиотекам стандартных подсистем и электронных документов. В состав справочника входит описание экспортных процедур и функций, размещенных в областях кода ПрограммныйИнтерфейс БСП и БЭД.

1800 руб.

21.11.2024    5058    20    17    

24

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Россия Бесплатно (free)

Как создать внешнюю печатную форму для конфигураций на базе БСП с желанной всеми разработчиками фишкой - автоматическим открытием обработки в конфигураторе с остановкой отладчика внутри процедуры Печать() при выполнении интерактивной команды печати.

24.03.2025    920    GeraltSnow    4    

23

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

Добавим метки в новый документ средствами БСП.

10.02.2025    4679    John_d    24    

49

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

Расскажу, как использовать полезный функционал - инструментарий разработчика «1С:Библиотека стандартных подсистем» (БСП) в своих объектах метаданных. Статья будет полезна как шпаргалка при написании собственных объектов метаданных.

27.12.2024    5108    PROSTO-1C    16    

49

БСП (Библиотека стандартных подсистем) Программист Бесплатно (free)

Синтакс-помощник БСП - справочник по Библиотеке Стандартных Подсистем, профессиональный инструмент разработчика с интуитивно понятным интерфейсом. Читайте в статье как использовать все возможности справочника и сделать работу с БСП более комфортной и эффективной.

11.12.2024    4811    gorenski    0    

8

БСП (Библиотека стандартных подсистем) Менеджеры внешних отчетов Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление холдингом Абонемент ($m)

За последние лет 5 несколько раз сталкиваюсь с проблемой на разных проектах (в конфигурациях 1С:ERP, 1С:ERP УХ и многих других, основанных на БСП), когда много пользователей (около 30 тысяч) в информационной базе, время добавления доступа для пользователей занимает значительное время. Открытие списка занимает от 10 до 15 секунд, и каждое изменение списка еще примерно столько же.

1 стартмани

10.12.2024    1313    Iaskeliainen    2    

8

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

Некоторые нюансы, если вы захотите создавать свои расширения. Доработка отчета "Связанные документы" для отражения документов расширения. Печатные формы с шаблоном Word.

20.11.2024    4078    milkers    3    

14
Оставьте свое сообщение