Очистка истории изменения цен номенклатуры для снижения размера регистра Цены Номенклатуры (2.0; 2.5)

17.09.24

База данных - Чистка данных

Из-за роста размера базы данных УТ11.1 столкнулся с задачей очистки документов “УстановкаЦенНоменклатуры” и регистров “ЦеныНоменклатуры” и “ЦеныНоменклатуры25”.

Скачать файл

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

Наименование По подписке [?] Купить один файл
Очистка истории изменения цен номенклатуры для снижения размера регистра Цены Номенклатуры (2.0; 2.5) :
.epf 24,00Kb
2
2 Скачать (3 SM) Купить за 2 450 руб.

ВНИМАНИЕ: Использование на рабочей базе на свой страх и риск! Лучше сначала проверить интерактивно на копии базы! Обязательно создавайте архивные копии!!! 

  • Получить остатки по регистрам “ЦеныНоменклатуры” и “ЦеныНоменклатуры25”, если включено формирование цен 2.5 на каждый конец года, если в периоде 01.01-31.12 года есть документы “УстановкаЦенНоменклатуры”;
  • Сформировать остатки по регистру ЦеныНоменклатуры, если дата перехода на цены 2.5 > периода формирования цен; Иначе на конец года формируем остатки по регистру ЦеныНоменклатуры25;
  • На основании периодов обработки (например, 31.12.2017 – 31.12.2018) сформировать новые документы, каждый по одному виду цен, заполненные Срезом Последних цен на конец периода “Год” по логике предыдущего пункта. При этом для разгрузки документов установки цен, не устанавливать цены на товары, у которых они на срез последних по периоду равны нулю или пустые. Провести документы.
  • Помнить, что если таблица документа содержит более 99 999 строк, то при сохранении будет ошибка и документ не проведётся. Максимальное количество строк документа в результате действий обработки установить в 99 900 строк (и так медленно открывается документ с таким количеством строк);

Описание решений

1. Запросы к ценам номенклатуры выполняются макетами СКД, для каждого регистра он свой, никакого "ОБЪЕДИНИТЬ"

2. Разбиваем результаты по годам; 

3. В первую очередь документы "Установка цен номенклатуры" формируются на конец года каждого периода по одному виду цены, в них вносятся остатки только с ценой отличной от нуля. При этом максимальное количество строк документа 99 999, и если строк в запросе больше, то разбиваем по нескольким документам с ограничением в 99 900 строк; 

4. Затем распроводятся документы за период, которые не были созданы в шаге 3; 

5. В итоге распроведенные документы помечаются на удаление;

В обработке реализовано фоновое задание, которым, например, настроив на 08.03.ТекущегоГода, можно обработать предыдущий текущему год в фоне без падений сервера 1С

Существует возможность запустить интерактивно очистку пошагово (например мне так больше нравится, пошагово), то есть вторая команда - открытие формы обработки. 

 

Внешний вид обработки и очередность навигации по кнопкам

 

Весь рабочий код расположен в модуле обработки, так как реализовано фоновое задание: 

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

Функции выполнения запланированного фонового задания (все значения по-умолчанию, ДатаФормирования = КонецГода(ТекущаяДатаСеанса() - 1Год)): 

Функция ВыполнитьКоманду(ИдентификаторКоманды) Экспорт
	
	Если ИдентификаторКоманды = "ВыполнитьОперацииВФоновомЗадании" Тогда
		ВыполнитьОперацииВФоновомЗадании();
	КонецЕсли;
	
КонецФункции

Процедура ВыполнитьОперацииВФоновомЗадании() Экспорт

	ЗапускСвертки();
	ЗаполнитьДанныеЗаПериод(Истина);
	ОбработатьДанныеВМодулеОбъекта();
	
КонецПроцедуры 

 

Особенности алгоритма следующие, разобью по процедурам: 

Процедура ЗаполнитьДанныеЗаПериод(ФоноваяЗадача = Ложь) Экспорт

	Если НЕ ЗначениеЗаполнено(ЭтотОбъект.ДатаФормирования) Тогда 
		ЭтотОбъект.ДатаФормирования = КонецГода(ТекущаяДатаСеанса()- 60 * 60 * 24 * 365); 
	КонецЕсли; 
	Запрос = Новый Запрос; 	
	Запрос.Текст = "ВЫБРАТЬ
	               |	УстановкаЦенНоменклатуры.Ссылка КАК ДокументЦен,
	               |	КОНЕЦПЕРИОДА(УстановкаЦенНоменклатуры.Дата, ГОД) КАК ПериодДокумента,
	               |	ЛОЖЬ КАК Обработан
	               |ИЗ
	               |	Документ.УстановкаЦенНоменклатуры КАК УстановкаЦенНоменклатуры
	               |ГДЕ
	               |	УстановкаЦенНоменклатуры.Проведен
	               |	И НЕ УстановкаЦенНоменклатуры.Комментарий ПОДОБНО ""%Автоматическая свертка установок цен номенклатуры за прошлые периоды%""
	               |	И УстановкаЦенНоменклатуры.Дата МЕЖДУ &ДатаНачалаПериода И &ДатаОкончанияПериода";
	Запрос.УстановитьПараметр("ДатаОкончанияПериода", ЭтотОбъект.ДатаФормирования); 
	Запрос.УстановитьПараметр("ДатаНачалаПериода", ?(ФоноваяЗадача, Дата(1,1,1), НачалоГода(ЭтотОбъект.ДатаФормирования))); 
	ЭтотОбъект.ТаблицаДокументов.Загрузить(Запрос.Выполнить().Выгрузить()); 
	
КонецПроцедуры

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

В дальнейшем циклом по заполненной таблице проходит длительная процедура распроведения и пометки на удаление документов "ОбработатьДанныеВМодулеОбъекта()". Для интерактивного использования на форме результат работы процедуры - "Обработан", булево, не редактируется интерактивно. 

Процедура ЗапускСвертки(ФоноваяЗадача = Ложь) Экспорт

// Некоторый код формирования периодов

	Попытка 
		ИспользуютсяЦены25 = Константы.ИспользуетсяЦенообразование25.Получить(); 
		ДатаНачала25 = КонецГода(Константы.ДатаПереходаНаЦенообразование25.Получить()); 
	Исключение
		ИспользуютсяЦены25 = Ложь; 
		ДатаНачала25 = Дата(2099,12,31);
	КонецПопытки;
	Для Каждого ДатаОбработки Из ТаблицаДат Цикл 
		Если ДатаОбработки.ЕстьАвтоматЗаГод Тогда 
			Продолжить;
		КонецЕсли; 
		Если ИспользуютсяЦены25 И ДатаНачала25 <= ДатаОбработки.ДатаОкончанияПериода Тогда 
			ТаблицаЦен = ВернутьТаблицуЗначенийПоМакету(МакетВходящиеЦены, ДатаОбработки.ДатаОкончанияПериода);	
		Иначе			
			ТаблицаЦен = ВернутьТаблицуЗначенийПоМакету(МакетВходящиеЦены, ДатаОбработки.ДатаОкончанияПериода);
		КонецЕсли; 
		ТаблицаВидовЦен = ТаблицаЦен.Скопировать(,"ВидЦены"); 
		ТаблицаВидовЦен.Свернуть("ВидЦены"); 
		ОшибкаЗаписи = Ложь; 
		МассивСозданныхДоков = Новый Массив; 
		КонстантаСтрокВДок = 99900; 
		Для Каждого ВидЦены Из ТаблицаВидовЦен Цикл 
			ЦеныКЗагрузке = ТаблицаЦен.Скопировать(Новый Структура("ВидЦены",ВидЦены.ВидЦены)); 
			ВсегоДокументов = Окр(ЦеныКЗагрузке.Количество() / КонстантаСтрокВДок ,0); 
			ВсегоДокументов = ?(ВсегоДокументов=0,1,ВсегоДокументов); 
			КоличествоСтрок = ЦеныКЗагрузке.Количество() / ВсегоДокументов; 
			Для х = 1 По ВсегоДокументов Цикл 

//Далее код формирования документа

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

Реализация заполнения в запуске свертки следующая: если строк в результате больше, чем 99 900, то бьем по максимально этому количеству строк и создаем некоторое кратное количество документов. 
Виды цен получаем из результатов запроса, что снижает количество формируемых "Пустых" документов. 

В предыдущих версиях УТ11.5 нет регистра ЦеныНоменклатуры25 и Константы "ИспользуетсяЦенообразование25", поэтому для обратной совместимости реализовано через Попытка ... Исключение. 

ВНИМАНИЕ: Использование на рабочей базе на свой страх и риск! Лучше сначала проверить интерактивно на копии базы! Обязательно создавайте архивные копии!!!  

Проверена на конфигурации УТ 11.4.12.71; УТ 8.3.25.1374

Версии платформы: 8.3.25.1374; 8.3.24.1548; 8.3.24.1342; 8.3.23.1912; 8.3.23.1865.

Проверено на следующих конфигурациях и релизах:

  • Управление торговлей, редакция 11, релизы 11.4.12.71
  • 1С:ERP Управление предприятием 2, релизы 2.4.1.211
  • 1С:Комплексная автоматизация 2, релизы 2.4.3.126

обработка очистка регистра ЦеныНоменклатуры ЦеныНоменклатуры25

См. также

SALE! 15%

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 7140 руб.

20.08.2024    7728    55    22    

66

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

Позволяет удалить организации из любых из информационных баз 1С на управляемых формах (БП 3.0, УТ 11, КА 2, ERP 2, ЗУП 3.0, УНФ, Розница 2.0 и пр.). Главное требование - программа должна содержать справочник "Организации". Реализован самый быстрый алгоритм непосредственного удаления объектов. Работает даже на базах большого размера. Для ускорения работы алгоритма не запускается проверка контроля ссылочной целостности. Проверку учета можно запустить отдельно с помощью дополнительной обработки. Необходимо перед удалением самостоятельно проверить базу на наличие перекрестных ссылок разных организаций в одном документе. Эту дополнительную обработку проверки перекрестных ссылок по запросу предоставляем бесплатно нашим покупателям.

3582 руб.

16.03.2015    171318    209    81    

244

Чистка данных Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Управление торговлей 10 1С:Управление торговлей 11 Платные (руб)

Данные обработки помогут Вам легко и, главное быстро, выполнить удаление любых данных в Ваших базах 1С на платформах 8.1-8.3. Обработки помогут легко просмотреть связи ссылок в виде дерева, выбрать что удалять, а что нет, используя любые отборы. Это позволит уменьшить объем лишней и не нужной информации в справочниках и документах, планах видов характеристик и др. объектах и облегчит работу с данными пользователям и Вам. Понятное расположение команд и настроек, в сочетании с описанием и справкой, еще упростят процесс. (Обновление от 29.06.2023, версия 4.2)

9600 руб.

22.02.2013    138394    258    144    

429

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

Обработка позволяет удобно и выборочно удалить данные из базы 1С. Это могут быть как неиспользуемые элементы справочников, так и неактуальные организации. При этом есть возможность провести анализ пересечений документов с другими организациями и таким образом уберечься от того, что при удалении обороты по другой организации изменятся.

3350 руб.

28.11.2019    25850    58    16    

73

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

Если вы начали работать в программном продукте Управление Торговлей, редакция 11 или Комплексная Автоматизация редакция 2 и включили механизм учёта серий, то перейти обратно в учёт без серий будет не так-то просто. Сложность заключается в том, что нужно очистить серии в табличной части документа, например, Реализация Товаров и услуг. Предлагаем алгоритм перехода на учет без серий для программного продукта УТ11. (Очистка серий.)

2400 руб.

09.04.2019    29048    43    14    

45

Чистка данных Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Если в вашей информационной базе крутится очень много данных, или база должна быть доступна 24/7 (как в моем случае), или же вы боитесь запускать тестирование и исправление, НО существует потребность удалить битые ссылки, тогда эта обработка сможет Вам помочь. Обработка выявляет битые ссылки как в самих объектах метаданных, так и в их табличных частях(!), а так же может их удалить.

2400 руб.

23.08.2021    9927    19    3    

25

Чистка данных Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

21.01.2022    7692    1    dmbal    6    

12

Чистка данных Инструментарий разработчика Системный администратор Программист Платформа 1С v8.3 Абонемент ($m)

Очередная вариативная очистка кэша 1С с помощью Исполнителя 3.0.2.2.

1 стартмани

25.10.2023    5335    5    SerVer1C    26    

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