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

23.05.19

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

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

Файлы

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

Наименование Скачано Купить файл
Расширение реализующее список дат
.cfe 57,65Kb
2 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

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

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Адаптация типовых решений БСП (Библиотека стандартных подсистем) Кадровый учет ЭДО и ОФД 1C:Бухгалтерия 1С:Зарплата и кадры 7.7 1C:ERP 1С:ЗУП 1С:УТ 1С:ДО Платные (руб)

Наше расширение 1С Госключ обеспечивает интеграцию любой конфигурации 1С на базе БСП с мобильным приложением «Госключ», позволяя сотрудникам подписывать кадровые документы (КЭДО) и документы материальной ответственности (МОЛ, ПБ) усиленной электронной подписью прямо со смартфона. Решение автоматизирует формирование и отправку документов на подпись, отслеживает статусы подписания и хранит подписанные файлы непосредственно в базе 1С

25000 руб.

06.03.2026    2281    4    0    

5

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

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

3254 руб.

21.11.2024    14353    51    30    

59

БСП (Библиотека стандартных подсистем) Разработчик 1С:Предприятие 8 1С:Библиотека стандартных подсистем Бесплатно (free)

Наиболее часто используемые методы БСП 3.1.12. На момент публикации БСП 3.1.12 - является последней версией, и на ней построены все новые типовые конфигурации.

28.09.2026    3122    SergMuravev    2    

16

БСП (Библиотека стандартных подсистем) Разработчик 1С 8.3 1С:Библиотека стандартных подсистем Россия Абонемент ($m)

Все мы когда-то писали свои функции для получения реквизита через точку или парсинга строк. В этой статье собрана выжимка самых полезных и ежедневно необходимых процедур и функций БСП. Никакой сухой документации ИТС — только жизненные кейсы, чистый код и разбор ситуаций, когда стандартные подсистемы делают работу за нас.

1 стартмани

30.07.2026    8740    Elya_Elya    14    

20

БСП (Библиотека стандартных подсистем) Разработчик Стажер 1С:Предприятие 8 1С:Библиотека стандартных подсистем Бесплатно (free)

Часто требуется вывести понятное пользователю сообщение, ткнув его в конкретный проблемный реквизит, что называется, "носом"... И вот тут довольно часто приходится перечитывать параметры функции ОбщегоНазначения[Клиент].СообщениеПользователю. Решила написать для себя шпаргалку и поделиться с сообществом.

24.07.2026    2744    check2    2    

11

БСП (Библиотека стандартных подсистем) Разработчик 1С 8.3 1С:Библиотека стандартных подсистем Бесплатно (free)

Каждый раз, когда разработчик 1С пишет очередной цикл для свертки массива или использует конструкцию Попытка / Исключение для проверки наличия реквизита, где-то грустит один архитектор фирмы «1С». Мы привыкли изобретать велосипеды там, где в Библиотеке стандартных подсистем (БСП) уже давно лежат готовые, оптимизированные и протестированные на тысячах баз решения. Ниже — практическая подборка из 8 методов актуальных релизов БСП (3.X), которые сделают ваш код чище, быстрее и профессиональнее. Разберем на примерах «Было / Стало».

04.06.2026    13211    Kaliostr0    21    

36

БСП (Библиотека стандартных подсистем) Универсальные функции Разработчик 1С 8.3 1С:Библиотека стандартных подсистем Бесплатно (free)

Когда появляется необходимость сделать подключаемую внешнюю обработку, будь это печатная форма или отчет - нам всегда приходится прописывать сведения о внешней обработке для подключения их в соответствующий справочник. И это занимает некоторое время, что не очень удобно. Как для себя, так и для вас - я подготовил ряд примеров использования этой функции, можете выбрать один из них, чтобы в дальнейшем использовать их в шаблонах текста. Комментарии по дополнению и исправлению статьи - приветствуются.

06.02.2026    22954    manul1c    7    

28
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. e.kogan 1909 17.07.25 17:19 Сейчас в теме
А как вы решали это:

Параметры Отбора, Сортировки, Группировки или список отображаемых полей заданы неверно.
[ОшибкаНастроекКомпоновкиДанных]
по причине:
Невозможно применить фиксированные настройки. Пересекаются элементы отбора.
[ОшибкаНастроекКомпоновкиДанных]

Ставишь Отбор по владельцу - он не ставится, потому что уже задан в фиксе...
2. e.kogan 1909 24.07.25 15:42 Сейчас в теме
ДатыБлижайшихРабочихДней в современной БСП отсутствует, вы чем-то новым пользуетесь или просто перестали использовать?
Для отправки сообщения требуется регистрация/авторизация