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

29.07.22

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Обновление наименований ключей аналитки. :
.epf 8,96Kb
21
21 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

Обработка будет работать на 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 часть результата выполнения обработки, видно, что было и что стало.

 

 

 

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

См. также

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

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

7200 руб.

02.08.2023    4170    14    1    

32

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

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

29400 руб.

29.06.2023    5995    14    5    

24

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

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с установленными именами. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

3000 руб.

07.02.2023    6707    73    10    

30

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

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

2 стартмани

22.04.2024    5267    dimanich70    15    

22

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

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

01.03.2024    6826    dimanich70    9    

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