Расширения... Использование на практике. Пример заполнения табличных частей в 1С Бухгалтерия 3.0.

05.08.15

Разработка - Механизмы типовых конфигураций

В 1С Бухгалтерия 3.0, возникла проблема, может мелочь но дико мешает. При заполнении табличных частей постоянно просит записать документ.

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

Наименование Файл Версия Размер
Расширение ЗаполнениеТЧ
.cfe 47,93Kb
3
.cfe 47,93Kb 3 Скачать
Пример заполнения табличной части (Перемещение товаров, по всем остаткам)
.epf 16,56Kb
5
.epf 16,56Kb 5 Скачать

Пользователям после перехода с 2.0 эта функция очень не нравиться: документ проведен, пользователь нажимает заполнение, разумеется, не читая о чем, его спрашивает программа. Далее  документ записывается, остатки двигаются, оригинал документа теряется, шум, гам, крик, истерика.

Посмотрели БСП.... никаких настроек по этому поводу нет. Проблема та вроде ерундовая, как заноза, вроде мелочь а неприятно.

И вот наконец то вышел релиз Бухгалтерии 3.0.41.48, с которого разрешено создавать расширения, с помощью них мы и решили данную проблему.

И так, мы создали расширение с названием "ЗаполнениеТЧ", перенесли в него документ "Перемещение материалов" и его основную форму. 

В Форме разместили следующий код:

&НаКлиенте
Процедура Расш_ЗаполнениеТЧ_ПриОткрытии(Отказ)
	Расш_ЗаполнениеТЧ_ПриОткрытииНаСервере();
КонецПроцедуры

&НаСервере
Процедура Расш_ЗаполнениеТЧ_ПриОткрытииНаСервере()
	
	ПриСозданииФормыНаСервере();
	
КонецПроцедуры

Процедура ПриСозданииФормыНаСервере() Экспорт 
	
	Попытка
		ОчиститьЭлементыФормы();        	
		ПриСозданииНаСервере_1();
	Исключение
		ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтаФорма);
	КонецПопытки;
	
КонецПроцедуры
Процедура "ОчиститьЭлементыФормы" убирает кнопки заполнения и команды с формы, которые были созданы типовым кодом в процедуре "ПриСозданииНаСервере":
Процедура ОчиститьЭлементыФормы() Экспорт 
	
	ИИ = 0 ;
	
	Пока Истина Цикл 
		
		Попытка
			Этаформа.Элементы.Удалить(Этаформа.Элементы.Найти("КомандаДополнительнойОбработки"+ Формат(ИИ, "ЧГ=")));
			ЭтаФорма.Команды.Удалить(ЭтаФорма.Команды.Найти("КомандаДополнительнойОбработки"+ Формат(ИИ, "ЧГ=")));
		Исключение  
			Прервать;
		КонецПопытки;
		
	КонецЦикла;
	
	ЭтаФорма.Команды.Удалить(ЭтаФорма.Команды.Найти("АдресКомандДополнительныхОбработокВоВременномХранилище"+ Формат(ИИ, "ЧГ=")));
	
КонецПроцедуры
Следующая процедура: "ПриСозданииНаСервере_1" взята из БСП, с одним изменением, действия команды изменено.
Процедура ПриСозданииНаСервере_1(ТипФормы = Неопределено) Экспорт
	
	Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда
		Возврат;
	КонецЕсли;
	
	// Установка параметров формы для команд вызова дополнительных отчетов и обработок.
	Параметры_1 = ДополнительныеОтчетыИОбработкиПовтИсп.ПараметрыФормыНазначаемогоОбъекта(ЭтаФорма.ИмяФормы, ТипФормы);
	Если ТипЗнч(Параметры_1) <> Тип("ФиксированнаяСтруктура") Тогда
		Возврат;
	КонецЕсли;
	
	ПараметрыФункциональныхОпций = Новый Структура;
	ПараметрыФункциональныхОпций.Вставить("ДополнительныеОтчетыИОбработкиОбъектНазначения", Параметры_1.СсылкаРодителя);
	ПараметрыФункциональныхОпций.Вставить("ДополнительныеОтчетыИОбработкиТипФормы",         ?(ТипФормы = Неопределено, Параметры_1.ТипФормы, ТипФормы));
	
	УстановитьПараметрыФункциональныхОпцийФормы(ПараметрыФункциональныхОпций);
	            
	Если Параметры_1.ВыводитьПодменюЗаполнениеОбъекта Тогда
		СформироватьПодменюКомандЗаполнения(Параметры_1);
	КонецЕсли;
	
КонецПроцедуры

Процедура СформироватьПодменюКомандЗаполнения(Параметры_1)
	
	ТекстЗапроса =
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
	|	ДополнительныеОтчетыИОбработкиНазначение.Ссылка
	|ПОМЕСТИТЬ втСсылки
	|ИЗ
	|	Справочник.ДополнительныеОтчетыИОбработки.Назначение КАК ДополнительныеОтчетыИОбработкиНазначение
	|ГДЕ
	|	ДополнительныеОтчетыИОбработкиНазначение.ОбъектНазначения = &ОбъектНазначения
	|	И ДополнительныеОтчетыИОбработкиНазначение.Ссылка.Вид = &Вид
	|	И ДополнительныеОтчетыИОбработкиНазначение.Ссылка.ИспользоватьДляФормыОбъекта = ИСТИНА
	|	И ДополнительныеОтчетыИОбработкиНазначение.Ссылка.Публикация = &Публикация
	|	И ДополнительныеОтчетыИОбработкиНазначение.Ссылка.ПометкаУдаления = ЛОЖЬ
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ДополнительныеОтчетыИОбработкиКоманды.Ссылка,
	|	ДополнительныеОтчетыИОбработкиКоманды.Идентификатор,
	|	ДополнительныеОтчетыИОбработкиКоманды.ВариантЗапуска,
	|	ДополнительныеОтчетыИОбработкиКоманды.Представление КАК Представление,
	|	ДополнительныеОтчетыИОбработкиКоманды.ПоказыватьОповещение,
	|	ДополнительныеОтчетыИОбработкиКоманды.Модификатор,
	|	ДополнительныеОтчетыИОбработкиКоманды.Ссылка.Вид
	|ИЗ
	|	втСсылки КАК втСсылки
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Команды КАК ДополнительныеОтчетыИОбработкиКоманды
	|		ПО втСсылки.Ссылка = ДополнительныеОтчетыИОбработкиКоманды.Ссылка
	|
	|УПОРЯДОЧИТЬ ПО
	|	Представление";
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("ОбъектНазначения", Параметры_1.СсылкаРодителя);
	Запрос.УстановитьПараметр("Вид", Перечисления.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта);
	Запрос.УстановитьПараметр("ВариантЗапуска", Перечисления.СпособыВызоваДополнительныхОбработок.ЗаполнениеФормы);
	Если Пользователи.РолиДоступны("ДобавлениеИзменениеДополнительныхОтчетовИОбработок") Тогда
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Публикация = &Публикация", "Публикация <> &Публикация");
		Запрос.УстановитьПараметр("Публикация", Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена);
	Иначе
		Запрос.УстановитьПараметр("Публикация", Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется);
	КонецЕсли;
	Запрос.Текст = ТекстЗапроса;
	
	Результат = Запрос.Выполнить();
	Если Результат.Пустой() Тогда
		Возврат;
	КонецЕсли;
	
	// Определение группы, в которую будут добавлены команды.
	
	ПредустановленныеКоманды = Новый Массив;
	Подменю = Элементы.Найти("ПодменюДополнительныхОбработокЗаполнения");
	Если Подменю = Неопределено Тогда
		КоманднаяПанель = Элементы.Найти("КоманднаяПанель");
		Если КоманднаяПанель = Неопределено Тогда
			КоманднаяПанель = ЭтаФорма.КоманднаяПанель;
		КонецЕсли;
		Подменю = Элементы.Вставить("ПодменюДополнительныхОбработокЗаполнения", Тип("ГруппаФормы"), КоманднаяПанель);
		Подменю.Заголовок = НСтр("ru = 'Заполнить'");
		Подменю.Вид = ВидГруппыФормы.Подменю;
		Подменю.Картинка = БиблиотекаКартинок.ЗаполнитьФорму;
		Подменю.Отображение = ОтображениеКнопки.КартинкаИТекст;
	Иначе
		Для Каждого Элемент Из Подменю.ПодчиненныеЭлементы Цикл
			ПредустановленныеКоманды.Добавить(Элемент);
		КонецЦикла;
	КонецЕсли;
	
	ТаблицаКоманд = Результат.Выгрузить();
	ТаблицаКоманд.Колонки.Добавить("ИмяЭлемента", Новый ОписаниеТипов("Строка"));
	ТаблицаКоманд.Колонки.Добавить("ЭтоОтчет", Новый ОписаниеТипов("Булево"));
	
	Для НомерЭлемента = 0 По ТаблицаКоманд.Количество() - 1 Цикл
		ОписаниеКоманды = ТаблицаКоманд[НомерЭлемента];
		ИмяЭлемента = "КомандаДополнительнойОбработки" + Формат(НомерЭлемента, "ЧГ=");
		ОписаниеКоманды.ИмяЭлемента = ИмяЭлемента;
		
		Команда = ЭтаФорма.Команды.Добавить(ИмяЭлемента);
		Команда.Действие  = "Подключаемый_ВыполнитьНазначаемуюКоманду_Зеркало";
		Команда.Заголовок = ОписаниеКоманды.Представление;
		
		Элемент = ЭтаФорма.Элементы.Добавить(ИмяЭлемента, Тип("КнопкаФормы"), Подменю);
		Элемент.ИмяКоманды = ИмяЭлемента;
		Элемент.ТолькоВоВсехДействиях = Ложь;
	КонецЦикла;
	
	Команда = ЭтаФорма.Команды.Добавить("АдресКомандДополнительныхОбработокВоВременномХранилище");
	Команда.Действие = ПоместитьВоВременноеХранилище(ТаблицаКоманд, ЭтаФорма.УникальныйИдентификатор);
	
	Для Каждого Элемент Из ПредустановленныеКоманды Цикл
		Элементы.Переместить(Элемент, Подменю);
	КонецЦикла;
	
КонецПроцедуры
Готово, теперь на форме типовые команды заполнения ТЧ, которые вызывают нашу процедуру:
&НаКлиенте
Процедура Подключаемый_ВыполнитьНазначаемуюКоманду_Зеркало(Команда)
	
	Попытка
		
		Если НЕ ВыполнитьНазначаемуюКомандуНаКлиенте(Команда.Имя) Тогда
			РезультатВыполнения = Неопределено;
			ДополнительныеОтчетыИОбработкиВыполнитьНазначаемуюКомандуНаСервере(Команда.Имя, РезультатВыполнения);
			ДополнительныеОтчетыИОбработкиКлиент.ПоказатьРезультатВыполненияКоманды(ЭтаФорма, РезультатВыполнения);
		КонецЕсли;
				
	Исключение
		
		Если НЕ ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьНазначаемуюКомандуНаКлиенте(Команда.Имя) Тогда
			РезультатВыполнения = Неопределено;
			ДополнительныеОтчетыИОбработкиВыполнитьНазначаемуюКомандуНаСервере(Команда.Имя, РезультатВыполнения);
			ДополнительныеОтчетыИОбработкиКлиент.ПоказатьРезультатВыполненияКоманды(ЭтаФорма, РезультатВыполнения);
		КонецЕсли;
		
	КонецПопытки;
	
КонецПроцедуры

&НаКлиенте
Функция ВыполнитьНазначаемуюКомандуНаКлиенте(ИмяЭлемента) Экспорт
	ОчиститьСообщения();
	
	ВыполняемаяКоманда = ДополнительныеОтчетыИОбработкиВызовСервера.ОписаниеКомандыОбработки(ИмяЭлемента, 
		ЭтаФорма.Команды.Найти("АдресКомандДополнительныхОбработокВоВременномХранилище").Действие);
	
	Если ВыполняемаяКоманда.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ЗаполнениеФормы") Тогда
		Возврат Ложь; // Для выполнения команды требуется контекстный вызов сервера.
	КонецЕсли;
		
	ДополнительныеПараметры = Новый Структура;
	ДополнительныеПараметры.Вставить("Форма",  ЭтаФорма);
	ДополнительныеПараметры.Вставить("Объект", Объект);
	ДополнительныеПараметры.Вставить("ВыполняемаяКоманда", ВыполняемаяКоманда);
	//
	//Если Объект.Ссылка.Пустая() Или Форма.Модифицированность Тогда
	//	ТекстВопроса = СтрШаблон(
	//		НСтр("ru = 'Для выполнения команды ""%1"" необходимо записать данные.'"),
	//		ВыполняемаяКоманда.Представление);
	//	
	//	Кнопки = Новый СписокЗначений;
	//	Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Записать и продолжить'"));
	//	Кнопки.Добавить(КодВозвратаДиалога.Отмена);
	//	
	//	Обработчик = Новый ОписаниеОповещения("ВыполнитьНазначаемуюКомандуНаКлиентеЗавершение", ЭтотОбъект, ДополнительныеПараметры);
	//	ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки, 60, КодВозвратаДиалога.Да);
	//Иначе
		ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьНазначаемуюКомандуНаКлиентеЗавершение(-1, ДополнительныеПараметры);
	//КонецЕсли;
	
	Возврат Истина; // Для выполнения команды достаточно клиентского контекста.
	
КонецФункции 

В процедуре "ВыполнитьНазначаемуюКомандуНаКлиенте" закоментарили проверку модифицированности формы. Готово, программа больше не заставляет записывать документ перед заполнением.
Для того что бы работала во всех документах, конечно необходимо процедуры вынести в общий модуль(для удобства), и раскидать вызовы этих процедур по другим документам.

Расширения... Использование на практике. Пример заполнения табличных частей в Бухгалтерия 3.0.

См. также

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

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

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

07.02.2024    2355    YA_418728146    11    

40

Регистры накопления в 1С:КА2 и 1С:ERP для расчета НДФЛ, страховых взносов и взаиморасчетов с сотрудниками на январь 2024 года. Краткое описание

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

Для расчета зарплаты и соответствующих налогов в конфигурациях 1С:КА2 и 1С:ERP используется 22 регистра накопления, 7 регистров сведений, 1 регистр расчета и бухгалтерские проводки. В таблице приведены названия этих регистров, указаны основные регистраторы и виды движений приход/расход. В описании приводится краткое функциональное назначение регистров в основных зарплатных процессах. Описание регистров родилось из черновиков при написании различных отчетов и обработок при эксплуатации 1С-овских конфигураций и исправлении ошибок по НДФЛ, взаиморасчетов с сотрудниками и прочих. Информация не претендует на полноценное описание работы регистров, скорее это дискуссионный материал. Но, возможно, кому-то пригодится и сократит время при подготовке отчетности за непростой (в плане учета зарплаты) 2023 год. А возможно, кто-то поделится своим опытом.

1 стартмани

10.01.2024    1026    6    2ncom    3    

8

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

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

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    4836    mrXoxot    11    

99

Ключи аналитик учета в ЕРП, КА, УТ

Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 Россия Управленческий учет Бесплатно (free)

Разбираемся, зачем в системе ЕРП созданы справочники: ключи аналитик учета, зачем созданы аналогичные по набору измерений регистры сведений. Какие проблемы они решают, какие создают новые и что с этим делать.

08.11.2023    7072    ids79    25    

74

Распределение по базе среднего в ЗИКГУ 3.1

Зарплата Механизмы типовых конфигураций Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 Россия Бюджетный учет Абонемент ($m)

Результат расчета начислений (отпуск, БЛ и т.д.) может распределятся по базе среднего заработка. У таких начислений на вкладке "Налоги, взносы, бухучет" стоит галка "По базе среднего заработка". Но бывают случаи, что данное распределение необходимо скорректировать.

1 стартмани

14.09.2023    445    2    Vlx    0    

1

Расширение типового механизма настройки заполнения бухгалтерской отчетности (на примере конфигурации 1С:ERP. Управление холдингом 3.1.8.15)

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление холдингом 1С:Франчайзи, автоматизация бизнеса Россия Бесплатно (free)

В статье приведен алгоритм доработок типового механизма настройки заполнения бухгалтерской отчетности на примере конфигурации 1С:ERP. Управление холдингом (3.1.8.15). Цель доработок - сделать процесс настроек более гибким и удобным для пользователей

11.09.2023    1931    ICL-Soft    3    

12

Разбор механизма "Настройки полей формы" в 1С:ERP. Управление холдингом

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

В данной статье я постараюсь разобрать механизм, который Вам может встретиться на просторах типовой конфигурации 1С:ERP. Управление холдингом. Я не могу гарантировать, что этот механизм не исключат из следующих версий конфигурации (как, собственно, и любой другой). К сожалению, мне не удалось найти его ни в одном модуле конфигурации "Библиотеки стандартных подсистем". Мне он показался интересным, и захотелось более детально во всем этом разобраться.

18.07.2023    2160    it_box    1    

7

Работа с контактной информацией. Часть 2

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

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

05.06.2023    6965    biimmap    4    

41
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Brawler 454 05.08.15 16:00 Сейчас в теме
Не вижу ничего страшного в том, что документы записываются перед изменением.
К тому же, если в базе данных включено версионирование при записи, то всегда можно вернуть документ в исходное состояние.
rimma_n; demkonst; +2 Ответить
2. mihey 11 05.08.15 16:16 Сейчас в теме
Запись перед заполнением это не ошибка ее исправлять не нужно.
demkonst; +1 Ответить
3. CratosX 112 09.01.17 18:51 Сейчас в теме
Что за функция МодульСтандартныхПроцедур_Сервер_Зеркало во внешней обработке?
Оставьте свое сообщение