Дата создания во всех документах, не снимая документы с поддержки

08.01.18

Задачи пользователя - Адаптация типовых решений

Дата создания во всех документах, при этом документы остаются на поддержке

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

Наименование Файл Версия Размер
Расширение по дате создания:
.cfe 8,75Kb
1
.cfe 8,75Kb 1 Скачать

Здравствуйте! Я расскажу на примере конфигурации Бухгалтерия предприятия 3.0 как я добавила реквизит "Дата создания" во все документы не снимая документы с поддержки. Предлагаю два варианта решения:

Первый вариант:


1. Создать общий реквизит "_ДатаСоздания", указать состав документов, которые будут содержать данный реквизит;

2. Найти процедуру, в которую обращаются все документы при создании, у меня это процедура "ПриСозданииНаСервере" в общем модуле "ПодключаемыеКоманды" и написать там одну строчку: 

Процедура ПриСозданииНаСервере(Форма, ПараметрыРазмещения = Неопределено) Экспорт

_Общий.ПриСозданииФормыНаСервере(Форма);

//*Дальше стандартный код, я не буду его здесь показывать

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

 

3. И последнее:) Создать общий модуль под названием "_Общий" или использовать существующий, в котором будут лежать нужные процедуры для прорисовки реквизита "Дата создания" на форме документа и на форме списка. Процедуры модуля:

Процедура ПриСозданииФормыНаСервере(Форма) Экспорт
	 
	 МДФормы	  = Метаданные.НайтиПоПолномуИмени(Форма.ИмяФормы);
	 МДОбъекта = МДФормы.Родитель();
	 
	 Если Метаданные.Документы.Содержит(МДОбъекта) Тогда
		 // это какая то из форм документа
		 Если Метаданные.ОбщиеРеквизиты._ДатаСоздания.Состав.Найти(МДОбъекта).Использование = Метаданные.СвойстваОбъектов.ИспользованиеОбщегоРеквизита.Использовать Тогда
			 //общий реквизит _ДатаСоздания есть
			 Если МДФормы = МДОбъекта.ОсновнаяФормаДляВыбора Тогда
				 //ничего не делаем
			 ИначеЕсли МДФормы = МДОбъекта.ОсновнаяФормаСписка Тогда
				 // это основная форма списка
				 Реквизиты = Форма.ПолучитьРеквизиты();
				 //МДОбъекта.Движения.Содержит(Метаданные.РегистрыБухгалтерии.Хозрасчетный)
				 
				 Для каждого Рекв из Реквизиты цикл
					 Если Рекв.ТипЗначения.СодержитТип(Тип("ДинамическийСписок")) Тогда
						 Список = Форма[Рекв.Имя];
						 
						 Если Список.ОсновнаяТаблица = МДОбъекта.ПолноеИмя() Тогда
							 // Это динамический список с нужными документами
							 ДобавитьДопПоляВДинСписок(Форма, Рекв.Имя);
						 КонецЕсли;
					 КонецЕсли;
				 КонецЦикла;
			 ИначеЕсли НЕ (Форма.Элементы.Найти("Дата") = Неопределено ИЛИ Форма.Элементы.Найти("Номер") = Неопределено) Тогда
				 //это форма документа
				 Если Форма.Параметры.Ключ.Пустая() Тогда
					 //новый документ - заполним дату создания
					 Форма.Объект._ДатаСоздания = ТекущаяДата();
				 КонецЕсли;
				 
				 ОтобразитьДатуСозданияНаФорме(Форма);
			 КонецЕсли;
		 КонецЕсли;
		 
	 ИначеЕсли Метаданные.ЖурналыДокументов.Содержит(МДОбъекта) Тогда
		 //журнал документов - добавим поле
		 ПолеФормы_ДатаСоздания = Форма.Элементы.Добавить("_ДатаСоздания", Тип("ПолеФормы"),Форма.Элементы.Список);	
		 ПолеФормы_ДатаСоздания.Вид		   = ВидПоляФормы.ПолеВвода;
		 ПолеФормы_ДатаСоздания.ПутьКДанным = "Список.Ссылка._ДатаСоздания";
		 ПолеФормы_ДатаСоздания.Заголовок   = "Создан";
		 
	 КонецЕсли;
	 
 КонецПроцедуры
 

Процедура ОтобразитьДатуСозданияНаФорме(Форма)
	 
	 мЭлементы = Форма.Элементы;
	 ЭУ = мЭлементы.Найти("_ДатаСоздания"); 
	 Если ЭУ = Неопределено Тогда
		 ГруппаДатаСоздания = мЭлементы.Найти("_ГруппаДатаСоздания");
		 Если НЕ ГруппаДатаСоздания = Неопределено Тогда
			 ЭУ = мЭлементы.Добавить("_ДатаСоздания", Тип("ПолеФормы"), ГруппаДатаСоздания);
		 Иначе
			 ЭлементОрганизация = мЭлементы.Найти("Организация");
			 Если ЭлементОрганизация = Неопределено Тогда
				 //пока просто добавим поле
				 ЭУ = мЭлементы.Добавить("_ДатаСоздания", Тип("ПолеФормы"));
			 Иначе
				 //создадим группу _ДатаСоздания и поместим туда
				 Если ТипЗнч(ЭлементОрганизация.Родитель) = Тип("ГруппаФормы") Тогда
					 ГруппаДатаСоздания = мЭлементы.Добавить("_ГруппаДатаСоздания", Тип("ГруппаФормы"), ЭлементОрганизация.Родитель);
				 Иначе
					 ГруппаДатаСоздания = мЭлементы.Добавить("_ГруппаДатаСоздания", Тип("ГруппаФормы"));
				 КонецЕсли;
				 
				 ГруппаДатаСоздания.Вид				   = ВидГруппыФормы.ОбычнаяГруппа;
				 ГруппаДатаСоздания.Группировка		   = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;
				 ГруппаДатаСоздания.Отображение		   = ОтображениеОбычнойГруппы.Нет;	
				 ГруппаДатаСоздания.ОтображатьЗаголовок = Ложь;	
				 
				 //перемещаем группу перед организацией
				 мЭлементы.Переместить(ГруппаДатаСоздания, ГруппаДатаСоздания.Родитель, ЭлементОрганизация);
				 
				 //меняем группу у организации
				 мЭлементы.Переместить(ЭлементОрганизация, ГруппаДатаСоздания);
				 
				 //добавляем в созданную группу дату создания
				 ЭУ = мЭлементы.Добавить("_ДатаСоздания", Тип("ПолеФормы"), ГруппаДатаСоздания);
			 КонецЕсли;
		 КонецЕсли;
	 КонецЕсли;
	 
	 ЭУ.Вид						= ВидПоляФормы.ПолеВвода;
	 ЭУ.ПутьКДанным				= "Объект._ДатаСоздания";
	 ЭУ.Ширина					= 12;
	 ЭУ.РастягиватьПоГоризонтали = Ложь;
	 ЭУ.Заголовок				= "Создан";
	 ЭУ.ПоложениеЗаголовка		= ПоложениеЗаголовкаЭлементаФормы.Лево;
	 ЭУ.Доступность				= Ложь;
	 
	 Если НЕ Форма.Параметры.Ключ.Пустая() Тогда
		 //существующий документ
		 Если Форма.Объект._ДатаСоздания <> '00010101' Тогда
			 //дата создания заполнена
			 РазностьВСекундах = НачалоДня(Форма.Объект._ДатаСоздания) - НачалоДня(Форма.Объект.Дата);
			 Если РазностьВСекундах / 86400 > 15 Тогда
				 //совсем задним число ввели - обведем рамку
				 ЭУ.ЦветРамки = WebЦвета.КрасноФиолетовый;
			 КонецЕсли;
		 КонецЕсли;
	 КонецЕсли;
	 
 КонецПроцедуры //ОтобразитьДатуСозданияНаФорме()
 
Процедура ДобавитьДопПоляВДинСписок(Форма, ИмяРеквизита)
	 
	 Список	   = Форма[ИмяРеквизита];
	 ИмяТаблицы = Список.ОсновнаяТаблица;
	 
	 Если Список.ПроизвольныйЗапрос Тогда
		 
		 Схема = Новый СхемаЗапроса();
		 Схема.УстановитьТекстЗапроса(Список.ТекстЗапроса);
		 
		 // Теперь нужно добавить дату создания
		 Если Схема.ПакетЗапросов.Количество() > 1 Тогда
			 //внутренние таблицы в дин.списках только с 8.3.8 и пока нигде не используются
			 ЗаписьЖурналаРегистрации("Отладка", УровеньЖурналаРегистрации.Примечание, Метаданные.НайтиПоПолномуИмени(Форма.ИмяФормы), ,
			 "Не могу добавить доп.поля, т. к. в пакете больше одного запроса.
			 |" + Форма.ИмяФормы + ", " + ИмяРеквизита);
			 Возврат;
		 КонецЕсли;
		 
		 ЗапросПакета = Схема.ПакетЗапросов[0];
		 
		 Если ЗапросПакета.Операторы.Количество() > 1 тогда
			 ЗаписьЖурналаРегистрации("Отладка", УровеньЖурналаРегистрации.Примечание, Метаданные.НайтиПоПолномуИмени(Форма.ИмяФормы), ,
			 "Не могу добавить доп.поля, т. к. в запросе больше одного оператора.
			 |" + Форма.ИмяФормы + ", " + ИмяРеквизита);
			 Возврат;
		 КонецЕсли;
		 
		 ИндексОператора = 0;
		 Оператор  = ЗапросПакета.Операторы[ИндексОператора];
		 Источник1 = Оператор.Источники[0];
		 Если ТипЗнч(Источник1.Источник) <> Тип("ТаблицаСхемыЗапроса") или Источник1.Источник.ИмяТаблицы <> ИмяТаблицы тогда
			 ЗаписьЖурналаРегистрации("Отладка", УровеньЖурналаРегистрации.Примечание, Метаданные.НайтиПоПолномуИмени(Форма.ИмяФормы), ,
			 "Не могу добавить доп.поля, т. к. первый источник — не основная таблица.
			 |" + Форма.ИмяФормы + ", " + ИмяРеквизита);
			 Возврат;
		 КонецЕсли;
		 
		 Выражение = Оператор.ВыбираемыеПоля.Добавить(Источник1.Источник.Псевдоним + "._ДатаСоздания");
		 
		 Колонка = ЗапросПакета.Колонки[ЗапросПакета.Колонки.Количество()-1];
		 Колонка.Поля.Установить(ИндексОператора, Выражение);
		 Колонка.Псевдоним = "Создан";

 
		 ПсевдонимДока = Источник1.Источник.Псевдоним;
		 Список.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, ""+ПсевдонимДока+".ПометкаУдаления КАК ПометкаУдаления,", ""+ПсевдонимДока+".ПометкаУдаления,"); //Схема.ПолучитьТекстЗапроса();
		 Список.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, ""+ПсевдонимДока+".ПометкаУдаления,", ""+ПсевдонимДока+".ПометкаУдаления," + Символы.ПС + ПсевдонимДока +"._ДатаСоздания КАК Создан, "); //Схема.ПолучитьТекстЗапроса();
	 
		 Элт = Форма.Элементы.Добавить("Создан", Тип("ПолеФормы"), Форма.Элементы[ИмяРеквизита]);
		 Элт.Вид			= ВидПоляФормы.ПолеВвода;
		 Элт.Заголовок	= "Создан";
		 Элт.ПутьКДанным = ИмяРеквизита + ".Создан";
		 Элт.Видимость	= Истина;
		 
	 КонецЕсли;
	 
 КонецПроцедуры //ДобавитьДопПоляВДинСписок()

Второй вариант:


1. Создать общий реквизит "_ДатаСоздания", указать состав документов, которые будут содержать данный реквизит;

2. Установить расширение,  я его тестировала на релизе 3.0.57.10, в принципе будет работать и на прошлых релизах, но придется решить некоторые несоответствия совместимости расширения и конфигурации,  т.к. с выходом нового релиза приходится постоянно менять совместимость в расширении... С расширением не придется создавать и снимать общие модули с поддержки), также расширение необходимо снять с безопасного режима.

общий реквизит дата создания документа

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

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

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4448    9    4    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    2952    4    0    

19

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

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

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

01.03.2024    1281    dimanich70    6    

13

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

Адаптация типовых решений Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

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

1 стартмани

27.10.2023    1991    13    avmartynov    10    

43

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

3
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. script 128 08.01.18 03:58 Сейчас в теме
Вы хотя бы написали бы причину, почему это нельзя сделать через расширения.
motorsoft; Silenser; alexveraww; +3 Ответить
3. Margo462 478 08.01.18 09:43 Сейчас в теме
(1) можно попробовать в расширении добавить общий модуль и там процедуры те написать, и перехватить модуль подключаемых команд, я делала это давно когда расширения еще не перехватывали процедуры, надо будет попробовать, тут уже на Ваш вкус, как говориться))
4. Margo462 478 08.01.18 09:46 Сейчас в теме
(1) я не помню просто в 8.3.9 проблема была с общими модулями, поэтому если сделаю в расширении, то добавлю сюда
13. u_n_k_n_o_w_n 34 08.01.18 10:40 Сейчас в теме
(1),
Как только данные расширения "глючить" перестанут и будут поддерживать полный функционал изменения типовой конфигурации, тогда будет можно говорить, как про инструмент изменения типовых конфигураций.
А так можно все менять непосредственно в конфигурации, при этом спокойно обновляя на последующие релизы.

Расширения больше нужны для Freshа.
rpgshnik; +1 Ответить
2. tahir.akchurin 08.01.18 06:24 Сейчас в теме
Отличное решение, когда необходимо видеть дату создания именно в списке документов.
В других случаях можно настроить Версионирование объектов
igo1; rpgshnik; u_n_k_n_o_w_n; +3 Ответить
5. Alex_E 2353 08.01.18 09:46 Сейчас в теме
Сказать, что это удивительно
Правда этот общий модуль придется снять с поддержки;
- ничего не сказать...

Добавить нужный модуль в расширение, создать там процедуру

&После("ПриСозданииНаСервере")
Процедура _ПриСозданииНаСервереФорма, ПараметрыРазмещения = Неопределено) Экспорт 


и все дела... А то как - то смысл заголовка "не снимая документы с поддержки" смазывается...
vovan_victory; rpgshnik; u_n_k_n_o_w_n; +3 Ответить
6. Margo462 478 08.01.18 09:50 Сейчас в теме
(5) этот вариант точно работает, можете попробовать в расширении перехватить
7. Margo462 478 08.01.18 09:53 Сейчас в теме
(5) там же не написано не снимая конфы с поддержки, там только про документы, так что не придирайтесь)
u_n_k_n_o_w_n; +1 Ответить
8. Alex_E 2353 08.01.18 09:56 Сейчас в теме
(7) Да я и не придираюсь, просто удивляюсь, что сказав "А" Вы говорите что "Б" не бывает))))

ЗЫ а в (6) это что? вопрос, пожелание, утверждение?

ЗЫЫ вообще-то я Вам помочь хотел - вернуться на поддержку полностью (в чём, собственно, ИМХО, суть расширений). А то как у Ширвинта - "тут играем, тут пропускаем, тут мы рыбу заворачивали")))))
9. Margo462 478 08.01.18 10:02 Сейчас в теме
(8) ахах))))) полностью не вернемся на поддержку там общий реквизит надо вставлять, расширение позже будет)
10. Alex_E 2353 08.01.18 10:08 Сейчас в теме
(9) Дополнительное сведение спасёт отца русской демократии ситуацию не дожидаясь выхода релиза в режиме совместимости с 8.3.11...понимаю, что с ДС работать чуть сложнее, чем с добавленным реквизитом (кстати, что есть общий реквизит просветите пожалуйста, как создаётся, с чем едят?), но снятия с поддержки тут ни разу не нужно...
11. Margo462 478 08.01.18 10:17 Сейчас в теме
(10) согласна, придется заморочиться с ДС, у меня конфа давно снята с поддержки, поэтому общий реквизит не мешает) в отличие от ДС общий реквизит можно создать один раз и указать в каких объектах будет участвовать, удобно и быстро)
12. Alex_E 2353 08.01.18 10:38 Сейчас в теме
(11) ДС тоже разные бывают, общие в том числе...
u_n_k_n_o_w_n; +1 Ответить
14. Margo462 478 08.01.18 10:41 Сейчас в теме
15. q_i 577 08.01.18 15:28 Сейчас в теме
s/снять с поддержки/разрешить редактирование с сохранением поддержки/ ;)
rpgshnik; +1 Ответить
16. BigBoss 2 09.01.18 09:54 Сейчас в теме
Очень интересное решение!!!
17. sasha777666 321 10.01.18 10:46 Сейчас в теме
Функция ДатаСозданияСсылки(Ссылка)
    ГУИД = Ссылка.УникальныйИдентификатор();
    Строка16 = Сред(ГУИД, 16, 3) + Сред(ГУИД, 10, 4) + Сред(ГУИД, 1, 8);
    Разрядность = СтрДлина(Строка16);
    ЧислоСек = 0;
    Для Позиция = 1 По Разрядность Цикл
        ЧислоСек = ЧислоСек + Найти("123456789abcdef",Сред(Строка16,Позиция,1))*Pow(16,Разрядность - Позиция);
    КонецЦикла;
    ЧислоСек = ЧислоСек / 10000000;
    Возврат Дата(1582, 10, 15, 04, 00, 00) + ЧислоСек;
КонецФункции
Показать
klinval; almierm; корум; itriot11; ixijixi; Korolev; 02RUSlan; primat; DarkAn; Margo462; +10 1 Ответить
18. primat 3572 10.01.18 14:43 Сейчас в теме
Пока смотрел публикацию, думал о том, что ведь правда в ссылке хранится дата создания объекта. В (17) привели пример. Считаю, решение более корректно и повлиять никто не сможет на эту дату. Недостаток только в том, что в форму списка это не получится вывести.
19. Margo462 478 10.01.18 14:59 Сейчас в теме
(18) это да, с формой списка заморочка)
20. palsergeich 10.01.18 15:13 Сейчас в теме
(17) (18) Вы же понимаете, что дата создания документа в конкрентой базе и дата из GUID могут быть различные (такое возможно например при обмене при синхронизации по guid)
AZel84; Irwin; корум; +3 Ответить
21. unichkin 1559 22.04.18 18:01 Сейчас в теме
Только идентификаторы не стоит начинать с нижнего подчеркивания... https://its.1c.ru/db/v8std#content:2149184103:hdoc, п.3
Оставьте свое сообщение