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

23.05.19

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

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

Скачать исходный код

Наименование Файл Версия Размер
Расширение реализующее список дат
.cfe 57,65Kb
1
.cfe 57,65Kb 1 Скачать

Не очень давно в Телеграм на канале 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.

См. также

БСП. Добавляем отчет в меню Отчеты

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

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

02.04.2024    3205    John_d    10    

89

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1751    dimanich70    8    

14

Заполнение поля адреса в своей обработке [БСП]

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

Небольшая шпаргалка по функциям БСП касательно адреса. Так скажем, еще один способ помимо https://infostart.ru/1c/articles/1060970/

12.02.2024    806    FilippovRI    0    

15

Расширяем возможности дополнительных обработок и настраиваем их отладку

БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Уже не одна веб-страница исписана знаниями о дополнительных обработках, как создать, как подключить. Есть масса вариантов, как их можно отладить. Я разобрался в кишках работы библиотеки и покажу, как можно расширить возможности дополнительных отчетов, а также покажу удобный способ отладки.

07.02.2024    2662    YA_418728146    11    

44

1С:БСП Дополнительные реквизиты и сведения

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

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

19.01.2024    6489    PROSTO-1C    5    

46

Бесплатный митап 9 февраля «Библиотеки и фреймворки на 1С и всё, что с этим связано»

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

Митап посвящен вопросам создания, использования и поддержке переиспользуемого кода при разработке решений на платформе 1С:Предприятие 8.

15.01.2024    3901    0    Infostart    0    

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