Обновление наименований ключей аналитики

29.07.22

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

Зачастую работая в базе несколько лет, у контрагентов изначальные наименования приводятся к корректным, синхронизируясь с ЕГРЮЛ, или же у договора меняется имя на корректное. Но программистам / аналитикам или консультантам приходится видеть ключи аналитики со старыми наименованиями. Для этого есть такая маленькая обработка, обновляющая наименования ключей аналитики.

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

Наименование Файл Версия Размер
Обновление наименований ключей аналитки. :
.epf 8,96Kb
16
.epf 8,96Kb 16 Скачать

Зачастую работая в базе несколько лет, у контрагентов изначальные наименования приводятся к корректным, синхронизируясь с ЕГРЮЛ, или же у договора меняется имя на корректное. Или же вы объединяли дубли разных контрагентов, анализируя проводки документов, вам выводится именно ключ аналитики, это может сбивать вас с толку. Программистам / аналитикам или консультантам приходится видеть ключи аналитики со старыми наименованиями. Для этого есть такая маленькая обработка, обновляющая наименования ключей аналитики. 

Это внешняя обработка, которая работает как регламентное задание, её можно прикрепить в справочник дополнительных отчётов и обработок, она будет работать как регламентное задание. Или же можно ее использовать просто через "Файл - Открыть" при необходимости. 

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

Обработка будет работать на ERP 2.4.ххх и ERP 2.5.7 - 2.5.8 гарантированно, имена процедур генерации имени оставлены оригинальные, так что даже при использовании поздней версии (когда ее выпустят) можно будет за пару минут модернизировать код.

Код:


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

Функция ПолучитьПолноеНаименованиеКлючаАналитики_АналитикаУчетаНоменклатуры(МенеджерЗаписи)

	Возврат СокрЛП(МенеджерЗаписи.Номенклатура) + "; " 
		+ ?(ЗначениеЗаполнено(МенеджерЗаписи.Характеристика), СокрЛП(МенеджерЗаписи.Характеристика) + "; ", "")
		+ ?(ЗначениеЗаполнено(МенеджерЗаписи.Серия), СокрЛП(МенеджерЗаписи.Серия) + "; ", "")
		+ ?(ЗначениеЗаполнено(МенеджерЗаписи.Назначение), СокрЛП(МенеджерЗаписи.Назначение) + "; ", "")
		+ ?(ЗначениеЗаполнено(МенеджерЗаписи.СтатьяКалькуляции), СокрЛП(МенеджерЗаписи.СтатьяКалькуляции) + "; ", "")
		+ СокрЛП(МенеджерЗаписи.МестоХранения);

КонецФункции

Функция НаименованиеКлючаАналитики_АналитикаУчетаПартий(СтруктураРеквизитовКлюча)
	
	Наименование = "";
		
	Если ЗначениеЗаполнено(СтруктураРеквизитовКлюча.ГруппаФинансовогоУчета) Тогда
		Наименование = Наименование + НСтр("ru = 'Группа';
											|en = 'Group'") + ": " + СтруктураРеквизитовКлюча.ГруппаФинансовогоУчета + "; ";
	КонецЕсли;
	
	Если ЗначениеЗаполнено(СтруктураРеквизитовКлюча.Поставщик) Тогда
		Наименование = Наименование + НСтр("ru = 'Поставщик';
											|en = 'Vendor'") + ": " + СтруктураРеквизитовКлюча.Поставщик + "; ";
	КонецЕсли;
	
	Если ЗначениеЗаполнено(СтруктураРеквизитовКлюча.Контрагент) Тогда
		Наименование = Наименование + НСтр("ru = 'Контрагент';
											|en = 'Counterparty'") + ": " + СтруктураРеквизитовКлюча.Контрагент + "; ";
	КонецЕсли;
	
	Если ЗначениеЗаполнено(СтруктураРеквизитовКлюча.НалогообложениеНДС) Тогда
		Наименование = Наименование + НСтр("ru = 'Налогообложение НДС';
											|en = 'VAT taxation'") + ": " + СтруктураРеквизитовКлюча.НалогообложениеНДС + "; ";
	КонецЕсли;
		
	Если ЗначениеЗаполнено(СтруктураРеквизитовКлюча.СтавкаНДС) Тогда
		Наименование = Наименование + НСтр("ru = 'Ставка НДС';
											|en = 'VAT rate'") + ": " + СтруктураРеквизитовКлюча.СтавкаНДС + "; ";
	КонецЕсли;  	
   		
	Если ЗначениеЗаполнено(СтруктураРеквизитовКлюча.ВидЦенности) Тогда
		Наименование = Наименование + НСтр("ru = 'Вид ценности';
											|en = 'Asset tax class'") + ": " + СтруктураРеквизитовКлюча.ВидЦенности + "; ";
	КонецЕсли;  	
	
	Если ЗначениеЗаполнено(СтруктураРеквизитовКлюча.КодСтроки) Тогда
		Наименование = Наименование + НСтр("ru = 'Код строки (продукция)';
											|en = 'Line code (manufactured products)'") + ": " + СтруктураРеквизитовКлюча.КодСтроки;
	КонецЕсли;
	
	Наименование = СокрЛП(Наименование);
	
	Если Прав(Наименование, 1) = ";" Тогда
		Наименование = СокрЛП(Сред(Наименование, 1, СтрДлина(Наименование) - 1));
	КонецЕсли;
	
	Если НЕ ЗначениеЗаполнено(Наименование) Тогда
		Наименование = "<>";
	КонецЕсли;
	
	Возврат Наименование;
	
КонецФункции
	
Функция ПолучитьПолноеНаименованиеКлючаАналитики_АналитикаУчетаНаборов(МенеджерЗаписи)

	Возврат СокрЛП(МенеджерЗаписи.НоменклатураНабора) + "; " 
		+ ?(ЗначениеЗаполнено(МенеджерЗаписи.ХарактеристикаНабора), СокрЛП(МенеджерЗаписи.ХарактеристикаНабора), "");

КонецФункции

Чтобы было понимание, насколько это актуально, вот, например, из демоверсии ERP 2.5.8 часть результата выполнения обработки, видно, что было и что стало.

 

 

 

Изначально, разумеется, рекомендуется посмотреть на результат на тестовой базе. Но обработка работает по типовым принципам, и шанс сбоя ничтожен. 

См. также

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

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

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

29400 руб.

29.06.2023    4454    9    4    

18

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

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

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

7200 руб.

02.08.2023    2957    4    0    

19

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

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

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

01.03.2024    1297    dimanich70    6    

13

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

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

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

1 стартмани

27.10.2023    1997    13    avmartynov    10    

43

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

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

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

2 стартмани

22.08.2023    2077    21    progmaster    7    

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