Пример доработки проведения в ERP 2.5 по одному регистру накопления

27.04.22

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

В дополнение к публикации № 1343740 показан быстрый способ встраивания в механизмы конфигурации проведения существующего документа "ПриобретениеТоваровУслуг" по добавленному новому регистру накопления "АТХ_ПартииНоменклатурыДляРемонтовТверь_НД". Пример реализован на 1С:ERP Управление предприятием 2 (2.5.7.390).

В примере требуется вести учет партий закупки запчастей (Номенклатура) на автомобили (НаправленияДеятельности), используя при этом существующий в конфигурации ERP 2.5 документ "ПриобретениеТоваровУслуг". Для этого в конфигурацию добавляем новый регистр накопления "АТХ_ПартииНоменклатурыДляРемонтовТверь_НД" со следующими измерениями и ресурсами:

 
 АТХ_ПартииНоменклатурыДляРемонтовТверь_НД:
 
 Измерения
НаправлениеДеятельности (СправочникСсылка.НаправленияДеятельности)
ПТУ (ДокументСсылка.ПриобретениеТоваровУслуг)
Номенклатура (СправочникСсылка.Номенклатура)
Цена (ОпределяемыйТип.ДенежнаяСуммаНеотрицательная)
 
 Ресурсы
 Количество (Число (15,3) Неотрицательное)

 

Включаем как обычно РегистрНакопления.АТХ_ПартииНоменклатурыДляРемонтовТверь_НД в движения  Документ.ПриобретениеТоваровУслуг. Но сами движения будем делать через "Механизмы конфигурации". 

1. Сначала ищем в общем модуле ПроведениеДокументов функцию УчетныеМеханизмыКонфигурации и добавляем туда новый механизм конфигурации АТХ_ПартииНоменклатурыДляРемонтовТверь_НД:

Функция УчетныеМеханизмыКонфигурации() Экспорт
	
	МеханизмыКонфигурации = Новый Структура;
	
	МеханизмыКонфигурации.Вставить("АдресныйСклад", "СкладыСервер");

    // ..............

	МеханизмыКонфигурации.Вставить("ФинансовыйРезультат", "РегистрыНакопления.ФинансовыеРезультаты");

	//++ НЕ УТ
	МеханизмыКонфигурации.Вставить("ОбесценениеВНА", "ОбесценениеВНАСервер");
	//-- НЕ УТ
	
	//доработка {
	МеханизмыКонфигурации.Вставить("АТХ_ПартииНоменклатурыДляРемонтовТверь_НД", "РегистрыНакопления.АТХ_ПартииНоменклатурыДляРемонтовТверь_НД");
	//доработка }
	
	ПроведениеДокументовЛокализация.ДополнитьУчетныеМеханизмыКонфигурации(МеханизмыКонфигурации);
	
	Возврат МеханизмыКонфигурации;
	
КонецФункции

 

Здесь в качестве значения механизма берется РегистрыНакопления.АТХ_ПартииНоменклатурыДляРемонтовТверь_НД, что означает расположение механизма в модуле менеджера данного регистра накопления. (для более сложного случая добавляется общий модуль механизма конфигурации, как показано в публикации № 1343740)

Чтобы не выносить себе мозги структурой модуля менеджера АТХ_ПартииНоменклатурыДляРемонтовТверь_НД, копируем в него содержимое подобного модуля менеджера из другого механизма конфигурации ФинансовыйРезультат (РегистрыНакопления.ФинансовыеРезультаты) и заменяем там обращение к регистру накопления ФинансовыеРезультаты  на обращение к регистру накопления АТХ_ПартииНоменклатурыДляРемонтовТверь_НД. Получается в итоге следующий результат:

 
РегистрыНакопления.АТХ_ПартииНоменклатурыДляРемонтовТверь_НД.МодульМенеджера

 

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

#Область Проведение

// Формирует параметры для проведения документа по регистрам учетного механизма через общий механизм проведения.
//
// Параметры:
//  Документ - ДокументОбъект - записываемый документ
//  Свойства - См. ПроведениеДокументов.СвойстваДокумента
//
// Возвращаемое значение:
//  Структура - См. ПроведениеДокументов.ПараметрыУчетногоМеханизма
//
Функция ПараметрыДляПроведенияДокумента(Документ, Свойства) Экспорт
	
	Параметры = ПроведениеДокументов.ПараметрыУчетногоМеханизма();
	
	// Проведение
	Если Свойства.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
		
		Параметры.ПодчиненныеРегистры.Добавить(Метаданные.РегистрыНакопления.АТХ_ПартииНоменклатурыДляРемонтовТверь_НД);
		
	КонецЕсли;
	
	// Контроль
	Если Свойства.РежимЗаписи <> РежимЗаписиДокумента.Запись Тогда
		
		Параметры.КонтрольныеРегистрыЗаданий.Добавить(Метаданные.РегистрыНакопления.АТХ_ПартииНоменклатурыДляРемонтовТверь_НД);
		
	КонецЕсли;
	
	Возврат Параметры;
	
КонецФункции

// Возвращает тексты запросов для сторнирования движений при исправлении документов
// 
// Параметры:
// 	МетаданныеДокумента - ОбъектМетаданныхДокумент - Метаданные документа, который проводится.
// 
// Возвращаемое значение:
// 	Соответствие - Соответствие полного имени регистра тексту запроса сторнирования
//
Функция ТекстыЗапросовСторнирования(МетаданныеДокумента) Экспорт
	
	ДвиженияДокумента = МетаданныеДокумента.Движения;

	ТекстыЗапросов = Новый Соответствие();
	
	МетаданныеРегистра = Метаданные.РегистрыНакопления.АТХ_ПартииНоменклатурыДляРемонтовТверь_НД;
	Если ДвиженияДокумента.Содержит(МетаданныеРегистра) Тогда
		ТекстДопУсловий = "";
		ТекстыЗапросов.Вставить(МетаданныеРегистра.ПолноеИмя(),
			ПроведениеДокументов.ТекстСторнирующегоЗапроса(
				МетаданныеРегистра,
				МетаданныеДокумента,
				ТекстДопУсловий));
	КонецЕсли;
	
	Возврат ТекстыЗапросов;
	
КонецФункции

// Процедура формирования движений по регистру.
//
// Параметры:
//	ТаблицыДляДвижений - Структура - таблицы данных документа
//	Движения - КоллекцияДвижений - коллекция наборов записей движений документа
//	Отказ - Булево - признак отказа от проведения документа.
//
Процедура ОтразитьДвижения(ТаблицыДляДвижений, Движения, Отказ) Экспорт
	
	Если Отказ Тогда
		Возврат;
	КонецЕсли;
	
	ПроведениеДокументов.ОтразитьДвижения(ТаблицыДляДвижений, Движения, "АТХ_ПартииНоменклатурыДляРемонтовТверь_НД");
	
КонецПроцедуры

// Дополняет текст запроса механизма проверки даты запрета по таблице изменений.
// 
// Параметры:
// 	Запрос - Запрос - используется для установки параметров запроса.
// 
// Возвращаемое значение:
//	Соответствие - соответствие имен таблиц изменения регистров и текстов запросов.
//	
Функция ТекстыЗапросовКонтрольДатыЗапретаПоТаблицеИзменений(Запрос) Экспорт

	СоответствиеТекстовЗапросов = Новый Соответствие();
	Возврат СоответствиеТекстовЗапросов;
	
КонецФункции

#КонецОбласти

#Область ДляВызоваИзДругихПодсистем

// СтандартныеПодсистемы.УправлениеДоступом

// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа.
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт

	Ограничение.Текст =
	"РазрешитьЧтениеИзменение
	|ГДЕ
	|	ЗначениеРазрешено(Организация)";

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

// Конец СтандартныеПодсистемы.УправлениеДоступом

#КонецОбласти

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

#Область ОбновлениеИнформационнойБазы

// см. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт

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

// Параметры:
// 	Параметры - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке
//
Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт
	
КонецПроцедуры

Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
КонецПроцедуры

#КонецОбласти

#КонецОбласти

#КонецЕсли

 

 

Теперь для документа  ПриобретениеТоваровУслуг надо указать, что будет использоваться новый механизм конфигурации АТХ_ПартииНоменклатурыДляРемонтовТверь_НД

Сначала в модуле менеджера документа находим процедуру ЗарегистрироватьУчетныеМеханизмы и добавляем туда наш новый учетный механизм АТХ_ПартииНоменклатурыДляРемонтовТверь_НД:

 
 Документы.ПриобретениеТоваровУслуг.МодульМенеджера.Процедура ЗарегистрироватьУчетныеМеханизмы(МеханизмыДокумента) Экспорт

 

Процедура ЗарегистрироватьУчетныеМеханизмы(МеханизмыДокумента) Экспорт
	
	МеханизмыДокумента.Добавить("Взаиморасчеты");
	МеханизмыДокумента.Добавить("Закупки");
	//++ НЕ УТКА
	МеханизмыДокумента.Добавить("МеждународныйУчет");
	//-- НЕ УТКА
	МеханизмыДокумента.Добавить("Обеспечение");
	МеханизмыДокумента.Добавить("ОборотныеРегистрыУправленческогоУчета");
	МеханизмыДокумента.Добавить("ОперативныйУчетТоваровОрганизаций");
	МеханизмыДокумента.Добавить("ПриемНаОтветхранение");
	МеханизмыДокумента.Добавить("ОформлениеОтчетовКомитентуОЗакупках");
	МеханизмыДокумента.Добавить("РасчетыСПодотчетниками");
	МеханизмыДокумента.Добавить("РеестрДокументов");
	МеханизмыДокумента.Добавить("СебестоимостьИПартионныйУчет");
	МеханизмыДокумента.Добавить("СерийныйУчет");
	МеханизмыДокумента.Добавить("СуммыДокументовВВалютахУчета");
	МеханизмыДокумента.Добавить("АдресныйСклад");
	МеханизмыДокумента.Добавить("УчетДоходовРасходов");
	МеханизмыДокумента.Добавить("УчетНДС");
	МеханизмыДокумента.Добавить("УчетПрочихАктивовПассивов");
	МеханизмыДокумента.Добавить("УчетРабот");
	МеханизмыДокумента.Добавить("ЦеныИСкидки");

	//доработка {
	МеханизмыДокумента.Добавить("АТХ_ПартииНоменклатурыДляРемонтовТверь_НД");
	//доработка }
	
	ПриобретениеТоваровУслугЛокализация.ЗарегистрироватьУчетныеМеханизмы(МеханизмыДокумента);
	
КонецПроцедуры

После этого в модуле менеджера документа находим функцию ДанныеДокументаДляПроведения и добавляем туда текст запроса для проведения по регистру АТХ_ПартииНоменклатурыДляРемонтовТверь_НД:

 

 Документы.ПриобретениеТоваровУслуг.МодульМенеджера.Функция ДанныеДокументаДляПроведения

 

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

//доработка {
Функция ТекстЗапросаТаблицаАТХ_ПартииНоменклатурыДляРемонтовТверь_НД(Запрос, ТекстыЗапроса, Регистры)
	
	ИмяРегистра = "АТХ_ПартииНоменклатурыДляРемонтовТверь_НД";
	
	ТекстЗапроса = 
		"ВЫБРАТЬ
		|	&Период КАК Период,
		|	ПриобретениеТоваровУслугТовары.АТХ_НД_Тверьэнерго КАК НаправлениеДеятельности,
		|	ПриобретениеТоваровУслугТовары.Ссылка КАК ПТУ,
		|	ПриобретениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
		|	ПриобретениеТоваровУслугТовары.Цена КАК Цена,
		|	ПриобретениеТоваровУслугТовары.Количество КАК Количество
		|ИЗ
		|	Документ.ПриобретениеТоваровУслуг.Товары КАК ПриобретениеТоваровУслугТовары
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АТХ_ВидТарифаТранспортныхСредств.СрезПоследних(&Период, ) КАК АТХ_ВидТарифаТранспортныхСредствСрезПоследних
		|		ПО ПриобретениеТоваровУслугТовары.АТХ_НД_Тверьэнерго = АТХ_ВидТарифаТранспортныхСредствСрезПоследних.НаправлениеДеятельности
		|ГДЕ
		|	НЕ ПриобретениеТоваровУслугТовары.АТХ_НД_Тверьэнерго = ЗНАЧЕНИЕ(Справочник.НаправленияДеятельности.ПустаяСсылка)
		|	И ПриобретениеТоваровУслугТовары.Ссылка = &Ссылка
		|	И АТХ_ВидТарифаТранспортныхСредствСрезПоследних.ВидТарифа.Код = 63
		|	И &Период >= ДАТАВРЕМЯ(2021, 7, 1, 0, 0, 0)
		|	И НЕ АТХ_ВидТарифаТранспортныхСредствСрезПоследних.ВидТарифа ЕСТЬ NULL";
	
	ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
	Возврат ТекстЗапроса;

КонецФункции
//доработка }

// в доработке в табличную часть Товары документа	ПриобретениеТоваровУслуг добавлен 
// реквизит АТХ_НД_Тверьэнерго (СправочникСсылка.НаправленияДеятельности)- автомобиль, на который покупаются запчасти
// А также добавлен регистр сведений АТХ_ВидТарифаТранспортныхСредств:
// Измерения:
//    НаправлениеДеятельности (СправочникСсылка.НаправленияДеятельности)
// Ресурсы:
//    ВидТарифа (СправочникСсылка.ВидыТарифов)
// справочник ВидыТарифов - также добавлен

 

Вот и всё. Приступаем к отладке проведения документа ПриобретениеТоваровУслуг.

 

ERP 2.5 проведение регистр накопления механизмы конфигурации документа

См. также

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

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

29400 руб.

29.06.2023    5682    14    5    

24

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

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

7200 руб.

02.08.2023    3931    12    0    

29

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

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    5115    dimanich70    15    

21

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

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

01.03.2024    5586    dimanich70    9    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Brawler 458 03.05.22 09:54 Сейчас в теме
я считаю уже моветоном доработки внутри основной конфигурации
публикуйте еще одну статью как это все сделать в расширениях
2. RocKeR_13 1362 04.05.22 11:28 Сейчас в теме
(1) Кгм, по-моему, моветон - это требовать от автора бесплатной статьи переделать ее под те требования, которые вы считаете приемлемыми. Тем более что принципиальные моменты в статье изложены и указаны места доработок. Каких-то трудностей переноса в расширение не вижу: заимствуем типовые процедуры/Функции в режиме "ИзменениеИКонтроль" и добавляем только конструкции "#Вставка #КонецВставки". Если это вызывает трудности...ну наверное тогда стоит в принципе ознакомиться с механизмом расширений
wolfsoft; triviumfan; user874148; d4rkmesa; +4 Ответить
3. Brawler 458 04.05.22 12:25 Сейчас в теме
(2) Да мне как бы все равно напишет автор дополнение или нет, мы в расширениях и без этой статьи сами допилы делаем. Я больше ратую за то чтобы не ломали типовые конфигурации и не учили плохому!
4. RocKeR_13 1362 04.05.22 12:57 Сейчас в теме
(3)
Да мне как бы все равно

Еще раз: моветон ваш заключается в повелительном наклонении в (1)
публикуйте еще одну статью как это все сделать в расширениях

Мне, например, в силу воспитания такое даже в голову не придет. Можно же дипломатично отметить тот факт, что данную задачу можно было бы реализовать в виде расширения, так как:
1) ....
2) ....
n) ....
Либо написать собственную статью на эту тему, сделав ссылку на данную публикацию. А некоторые вообще до сих пор принципиально не признают механизм расширений.

P.S. При наличии комментариев в коде единственная проблема - это увеличение времени на процесс сравнения/объединения при обновлении версии конфигурации. С другой стороны, много любителей быстрых доработок с помощью расширений и директивы #Вместо: для временных патчей еще куда ни шло, но для постоянных доработок - это зло. Более того, некоторые вещи одними расширениями не реализовать. Например, была задача добавить присоединенные файлы с использованием БСП к документу "Расходный ордер на товары" в КА. И все, приехали: без поднятия режима совместимости определяемые типы не расширить новым справочником через расширение.
wolfsoft; d4rkmesa; +2 Ответить
5. triviumfan 96 09.05.22 23:09 Сейчас в теме
Оставьте свое сообщение