gifts2017

Обработка регистров сведений

Опубликовал Валерий Дубовой (Valerich) в раздел Обработки - Обработка справочников

Обработка предназначена для обработки данных регистров сведений. С ее помощью можно удалить записи, изменить значения реквизитов, выполнить произвольный код для каждой обрабатываемой записи. РС, подчиненные регистратору не обрабатываются. Для скачивания доступны варианты для обычных форм и для управляемых форм - 2 разных файла.

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

Отличительные (на мой взгляд) особенности:

  • для подбора обрабатываемых записей в варианте обычных форм применяется построитель отчетов, в варианте управляемых форм - СКД, что дает возможность очень гибко настраивать отбор записей;
  • учитывается тот факт, что регистр может быть периодическим;
  • при изменении записей (даже если изменяются измерения) не происходит "задваивания" записей (т.е. не остаются записи со старым набором значений измерений).

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

Обновление от 21.04.2011

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

Обновление от 14.12.2014

  • добавлен вариант обработки для работы в УФ. Ее так же можно подключить к дополнительным внешним обработкам в конфигурациях, использующих БСП. В режиме тонкого клиента не работают некоторые фишки в СКД (выбор свойств полей для возможностей отбора - через точку) + при изменении регистра не всегда после этого корректно работает отбор (можно закрыть и открыть снова).

Обновление от 16.02.2016

  • исправлен вариант обработки для работы в УФ. Если реквизит или ресурс имел тип "Хранилище значение", происходила ошибка

Обновление от 29.04.2016

  • исправлен вариант обработки для работы в УФ: теперь все должно корректно работать и в тонком клиенте

Обновление от 05.08.2016

  • исправлена ошибка  вварианте обработки для работы в УФ для операции удаления записей.

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

Наименование Файл Версия Размер Кол. Скачив.
ОбработкаРС
.epf 21,43Kb
05.08.16
1186
.epf 21,43Kb 1186 Скачать
ОбработкаРС_УФ
.epf 17,00Kb
05.08.16
191
.epf 1.1 17,00Kb 191 Скачать

См. также

Contragent+ 5.0 от 2 500
Подписаться Добавить вознаграждение

Комментарии

1. Роман Ершов (MRAK) 10.10.09 19:01
плюсану авансом... позже гляну... делал как-то такую, тока без построителя... хотя по мне, лучше сюда СКД замутить...
2. Валерыч (Valerich) 12.10.09 09:04
(1) если обоснуете чем СКД для отбора круче построителя, замучу СКД :)
3. Игорь <...> (I_G_O_R) 12.10.09 09:32
можно вот такие отборы делать:
Прикрепленные файлы:
4. Артур Аюханов (artbear) 12.10.09 09:58
(3+) Точнее, можно делать даже группы отборов с условиями И, ИЛИ и т.д.
5. poZZitive erm (poZZitive) 21.10.09 13:57
Абалденная вещь. Лучшая из найденных (бесплатных)
6. dosen (dosen) 13.11.09 20:42
Спасибо, ибо ................................ (почему сам не сделал, каждый добавит или придумает ) :D
7. Михаил Приходько (pri_hod) 08.01.10 02:25
Исправь ошибку

ИначеЕсли ДействиеУдалить = 1 Тогда //Нужно "2"
// выполнение алгоритма

За обработку +
8. Леонид Лесин (Leoway) 10.06.10 10:41
9. Elena (erderugina) 17.08.10 13:07
Благодарю. Обработка помогла.
10. Алексей (Алексей-29) 28.09.10 13:34
Обработка отличная. Давно искал такую. :)
11. Валерий Дубовой (Valerich) 29.09.10 01:48
(7) а почему нужно 2? где ошибается и на чем?

(5), (6), (7), (8), (9), (10). Вам всем спасибо за время , которое Вы потратили, чтобы выразить свое мнение.

Ваше мнение всегда очень важно для меня.
12. Михаил Приходько (pri_hod) 29.09.10 02:00
ну не логично же

Если ДействиеУдалить = 0 Тогда

// удаление записей
ОбработаноЗаписей = 0;
УдалитьЗаписи(ТаблицаРезультат, ОбработаноЗаписей);
Предупреждение("Обработано " + ОбработаноЗаписей + " зап.", 15);
ИначеЕсли ДействиеУдалить = 1 Тогда
//Изменение записей
ОбработаноЗаписей = 0;
ИзменитьЗаписи(ТаблицаРезультат, Реквизиты, ОбработаноЗаписей);
Предупреждение("Обработано " + ОбработаноЗаписей + " зап.", 15);
ВыполнитьОтбор(); // заново считаем набор
ИначеЕсли ДействиеУдалить = 1 Тогда
// выполнение алгоритма
ТекстАлгоритма = ЭлементыФормы.ТекстПроизвольногоАлгоритма.ПолучитьВыделенныйТекст();
Если СтрДлина(ТекстАлгоритма) = 0 Тогда
ТекстАлгоритма = ЭлементыФормы.ТекстПроизвольногоАлгоритма.ПолучитьТекст();
КонецЕсли;
ОбработаноЗаписей = 0;
ВыполнитьАлгоритм(ТаблицаРезультат, ТекстАлгоритма, ОбработаноЗаписей);
Предупреждение("Обработано " + ОбработаноЗаписей + " зап.", 15);
ВыполнитьОтбор(); // заново считаем набор
КонецЕсли;
13. Саўка Збянтэжаны (Збянтэжаны Саўка) 21.04.11 17:22
(11) Как правильно замечено в (7) и (12) Вариант:

ИначеЕсли ДействиеУдалить = 1 Тогда

повторяется дважды, т.е. 3-й вариант (ДействиеУдалить = 2) не сработает, нужно исправить

Очень ценю Ваши статьи и обработки, потому считаю данную ошибку мелкой опиской!
14. Валерий Дубовой (Valerich) 21.04.11 17:56
(7), (12), (13)

Проверил, действительно опечатка вышла. Спасибо, коллеги.
Исправил, прикрутил фантик.

Пользуйтесь на здоровье
15. Артур Аюханов (artbear) 11.08.11 10:09
(0) Ошибка в обработке исключений при попытке записи неверных данных в регистр сведений
Вместо
				Исключение
					Сообщить("Строка таблицы " + СтрокаТаблицы.НомерСтроки + ": ошибка изменения записи " + ОписаниеОшибки());
				КонецПопытки;

Правильно писать
				Исключение
					Сообщить("Строка таблицы " + СтрокаТаблицы.Владелец().Индекс(СтрокаТаблицы) + ": ошибка изменения записи " + ОписаниеОшибки());
				КонецПопытки;
...Показать Скрыть

Иначе будет исключение и обработка остановится :(
16. Артур Аюханов (artbear) 11.08.11 11:41
(15) + Ну и вообще СтрокаТаблица.НомерСтроки там еще встречается, также нужно устранить.
17. Сергей (seandr) 03.10.11 09:37
Все не доходили руки сделать подобное.. но сейчас с успехом использую эту обработку. Спасибо огромное...
18. Валерий Дубовой (Valerich) 03.10.11 14:12
(15), (16) там же вроде как "СтрокаТаблицы" - это строка таблицы значений... или я чего-то неправильно помню ?
19. Виталий Журавлев (dmd) 11.10.11 19:38
Прекрасно работает. Очень пригодилась +100500
20. Мара (Maranet) 18.10.11 14:27
Спасибо, очень пригодилась...
21. Виктор Молочков (vik77) 20.10.11 15:03
Спасибо, обработка очень выручила.
22. Наталья Густелева (gusteleva) 04.11.11 21:29
Обработка замечательная, автору респект!
23. jack eee (UJF) 23.11.11 15:44
Обработка реально очень полезная. Однозначно +
24. Сергей Шепелев (redgoll) 01.12.11 08:57
Большое спасибо. Очень помогло. Конечно, можно и самому было регистры обработать...но на программирование время бы ушло, а так быстро и хорошо. Не раз еще выручит.
25. nataon (nataon) 07.03.12 14:07
26. Михаил (mdzen) 28.03.12 03:53
Пытаюсь выполнить код:
(Регистр сведений Штрихкоды - штрихкоду надо установить ед.измерения как у владельца базовая)

Объект.ЕдиницаИзмерения = Объект.Владелец.БазоваяЕдиницаИзмерения;
Объект.Записать(Истина);

что-то не взлетает...
27. Валерий Дубовой (Valerich) 28.03.12 05:14
(26) Не знаю какая у вас конфигурация, но, возможно, идет несовпадение типов данных. Например, "ОКЕИ" и "Единицы измерения". Проверьте.
28. Михаил (mdzen) 28.03.12 10:56
Точно, несовпадение типов...
4 утра - туплю однако ....
29. Денис Кузнецов (kuza_87) 06.06.12 05:31
Спасибо, пригодилось. Нужная в хозяйстве вещь
30. Петр Петров (Adoms) 25.07.12 15:43
Большое спасибо!!! ооочень пригодилась!!!
31. Ирина Киселева (irishka77) 08.11.12 13:29
Спасибо.Использовала для приведения в порядок штатного расписания
32. Oleg Sys (olsy) 07.12.12 12:24
Классная обработка! Давно искал, спасибо Поручику за наводку!
33. Олег Шалимов (CaSH_2004) 13.12.12 21:11
Все замечательно! Но странно что не видно сколько записей то найдено. Это что никому не интересно сколько он чего грохнет или заменит? Или все выводят в список и смотрят что же там внизу за цифра :) Я конечно понимаю что бесплатное, но сам то как угадываеш то?

И вот еще интересно можно ли ее так универсально сделать чтобы например отобрать те записи у которых Измерение/Ресурс имеет указанный тип, например "Справочник.ДоговораКонтрагентов"? А то ведь и такие замутки встречаются, именно они создают сложность.
Если у кого идеи есть - выкладывайте, может кто и доработает.
34. Александр Никитин (ManyakRus) 27.12.12 17:41
работает отлично :)
сделал ширину колонок не более 25
35. Ольга (_n26__) 15.01.13 15:07
36. sanches (sanches) 24.01.13 10:56
Скажите, с помощью данной обработки я смогу убрать из значений регистра пробелы?
37. Валерий Дубовой (Valerich) 24.01.13 15:13
(36) а что Вы понимаете под пробелами в регистре сведений ?
38. sanches (sanches) 24.01.13 15:32
(37) Конфигурация 1С Аптека.
В ней есть регистр сведений Штрихкоды, в нем есть измерение Штрихкод типа ПланВидовХарактеристик.
В самом плане видов характеристик хранятся строковые значения длиной 200 символов.
Сейчас у меня для номенклатуры штрихкоды представляют такое значение
"4607012390615       "
, из-за чего при печати этикеток выходит ошибка компоненты barcode о неверном штрихкоде. В ручную поправил несколько штрихкодов, после чего печать этикеток для них заработала. Вот, хочу исправить все значения теперь в регистре сведений.
39. Валерий Дубовой (Valerich) 24.01.13 15:37
(38) из Вашего описания проблемы я понял, что править то надо не регистр сведений, а план видов характеристик.

Теоретически эта обработка может помочь: Отобрать записи РС, где реквизит ПВХ реквизита штрихкод содержит пробел. Далее с помощью выполнения произвольного кода можно получить объект ПВХ, обрезать пробелы и записать его обратно.
40. sanches (sanches) 24.01.13 16:01
41. Игорь (ProkopyukIN) 25.12.13 16:45
старовата однако. надо бы уже модифицировать под 8.2, 8.3 и управляемое приложение
42. Leo Po (webresurs) 19.02.15 14:04
Подскажите пож... а можно устранить ошибку вашей обработкой в счетах?

Ошибка в прошлых годах :"Выполните повторно регламентную операцию "Закрытие счетов 20, 23, 25, 26" за тот месяц, в котором образовалось отрицательное сальдо"
43. Валерий Дубовой (Valerich) 20.02.15 02:41
(42) тут дело не в счетах и не в регистрах сведений, а в проводках. Если у вас образовалось отрицательное сальдо на затратных счетах, то, либо как-то скорректировать вручную, либо перезакрывать соответствующий месяц с возможной пересдачей отчетности, если такое пеерзакрытие повлияет на финансовые результаты.
webresurs; +1 Ответить
44. Roman Tesla (RTesla) 31.03.15 22:00
45. Ольга (Ольга_tmp) 17.06.15 03:46
Спасибо, отлично сработало для коррекции штрихкодов в УТ10
46. Иван Чаклия (vanya201) 20.10.15 16:20
Поменяйте в коде (стр 310) Если НЕ СтрокаТаблицы.ПомМетка Тогда
на Если НЕ СтрокаТаблицы.Пометка Тогда
47. Михаил Зыков (ZyMik) 21.10.15 22:12
Не работает.
21.10.2015 22:09:56
Ошибка создания источника доступных настроек компоновки данных

1С:Предприятие 8.3 (8.3.6.2332)
Система проектирования прикладных решений, редакция 1.1 (1.1.10.4)
48. Валерий Дубовой (Valerich) 22.10.15 02:10
(46) Уточните, пожалуйста, в какой версии обработки такой код и в каком модуле (формы, объекта).
49. Валерий Дубовой (Valerich) 22.10.15 02:13
(47) попробуйте запустить в толстом клиенте. Кажется такая ошибка случается в тонком
50. Сергей Богайчук (bsa1968) 12.11.15 11:50
Все просто и понятно. Спасибо за работу!
Версия для "управляемого приложения" работает только в "толстом клиенте"?
51. Валерий Дубовой (Valerich) 13.11.15 04:04
(50) в толстом клиенте работает как было задумано. А в тонком наблюдаются какие-то необъяснимые спецэффекты - в отборе нельзя выбрать свойства измерений/ресурсов/реквизитов, если они являются ссылками на объекты; при смене регистра сведений вообще бывают ошибки инициализации СКД. Видимо у меня не хватает каких-то знаний и навыков для борьбы с этими багами.
52. Сергей Т (Sergspectr) 06.01.16 23:08
53. Александр Долгушин (White_and_Fluffy) 16.02.16 02:28
На УФ не читает регистр "ПрисоединенныеФайлы"
Прикрепленные файлы:
54. Валерий Дубовой (Valerich) 16.02.16 08:24
(53) Исправил ошибку, обработку перезалил. Спасибо за Ваше сообщение
55. Сергей Галюк (dj_serega) 16.02.16 12:59
Все комменты не читал.

1. На скринах нашел "ЭтаФорма". В 8.3 без режима совмести "ЭтаФорма" уже "ЭтотОбъект".
2. Как обстоят дела с модальностью и асинхронностью?
56. Валерий Дубовой (Valerich) 17.02.16 05:52
(55)
1. В 8.3 в управляемых формах не "ЭтотОбъект", а "Объект". А вот при выполнении на серере доступ к данным формы идет чере "ЭтаФорма". Вроде как все работает.
2. Модальных окон нет. Асинхронности тоже (во всяком случае пока).
57. Сергей Галюк (dj_serega) 17.02.16 11:50
(56) Valerich, 1.
Конфликт имен свойств

Нельзя использовать имена переменных, совпадающие с новыми свойствами, которые появились в "1С:Предприятии 8.3":

Новое свойство ЭтотОбъект в управляемых формах и общих модулях.
Новые свойства в управляемых формах:
АвтоНавигационнаяСсылка,
НавигационнаяСсылка,
ВертикальнаяПрокрутка,
ОписаниеОповещенияОЗакрытии,
ПараметрыВыбора.
Для устранения несовместимости необходимо найти переменные и реквизиты форм с такими названиями и переименовать их.

Что переименовано _____________Старое наименование _____Новое наименование
Свойство управляемой формы ____ ЭтаФорма (ThisForm) ______ ЭтотОбъект (ThisObject)

источник
58. Валерий Дубовой (Valerich) 18.02.16 06:25
(57) а я и не объявляю эти переменные, просто подсказка как можно добраться до реквизитов формы. Если используется другая версия платформы, где произошла замена, следует пользоваться новыми свойствами формы и объекта
59. Сергей Галюк (dj_serega) 01.04.16 17:07
Неизвестная ошибка. В ЖР пусто...
Прикрепленные файлы:
60. Валерий Дубовой (Valerich) 03.04.16 06:07
(59) Попробуйте работать в толстом клиенте. В тонком клиенте многие операции с метаданными недоступны. Из-за этого и появляются такие странные ошибки.
61. Dima Z (dimaz666) 20.04.16 10:10
Платформа: 1С:Предприятие 8.3 (8.3.7.1993)
Режим: Файловый (без сжатия)
Приложение: Толстый клиент
Вариант интерфейса: Такси

Ошибки:
--------------------------------------------------------------------------------
Ошибка создания источника доступных настроек компоновки данных

Воспроизводится при удалении записей.
62. Валерий Дубовой (Valerich) 21.04.16 12:26
(61) Уточните, пожалуйста в какой момент времени происходит ошибка: в момент после нажатия на кнопку "Выполнить чтение данных регистра" или при удалении после нажатия на кнопку "Выполнить удаление"?

Если работаете в стандартной конфигурации, то прошу так же уточнить конфигурацию, релиз, имя регистра и настройки отбора. Может быть мне удастся смоделировать ситуацию. До сих пор с такой ошибкой сталкивался только в тонком клиенте, но Вы указали, что режим запуска "Толстый клиент".
63. Денис Литош (Si-ned) 09.06.16 13:59
Хорошая и полезная обработка. +1
64. юрий гулидов (gull22) 11.07.16 09:34
(62) Valerich,
Аналогичная ситуация. Происходит при нажатии кнопки "Выполнить удаление".
Удалял записи РС Аналитика учета НДС
Платформа: 1С:Предприятие 8.3 (8.3.8.1747)
Конфигурация: Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.43.241)
Режим: Файловый (без сжатия)
Приложение: Тонкий клиент
Локализация: Информационная база: русский (Россия), Сеанс: русский (Россия)
Вариант интерфейса: Такси

Ошибки:
--------------------------------------------------------------------------------
11.07.2016 9:28:16
Ошибка создания источника доступных настроек компоновки данных
65. Валерий Дубовой (Valerich) 12.07.16 04:52
(64) Это очень странно. При нажатии на кнопку "Выполнить удаление" начинается работа с таблицей данных на форме и регистром сведений. Компоновщик настроек при этом никак не используется.

Обратите внимание, что 29.04.2016 я разместил обновление обработки, которая корректно работает в тонком клиенте. Если Вы скачивали обработку ранее, попробуйте скачать обновленную

У меня ошибка никак не воспроизводится. Но где-то проскальзывало сообщение, что подобная ошибка возможна на некоторых релизах платформы. Чаще проявляется, если установлена низкая скорость соединения.
66. Андрей Титов (andt) 14.07.16 05:22
Спасибо! Обработка помогла, но нужно поправить:
{Форма.ФормаУправляемая.Форма(316)}: Поле объекта не обнаружено (Помметка)
Если НЕ СтрокаТаблицы.Помметка Тогда
67. Сергей Пономарёв (izidakg) 04.08.16 13:58
нужно было в регистре РезультатыОбменаДанными убить запись с пустой ссылкой, там их было 3 шт
не вышло - в обработке УФ написано ЭтотОбъект, а нужно было Объект (удалял в Рознице 2.0)
а потом выяснилось что отобранные объекты удаляются по одному и сначала прочитать, потом удалить - а прочитать вызывает ошибку - более 1 записи по ключевым полям
так что удаление не удалось, редактирование невозможно по тем же причинам
пришлось свою обработку использовать, там также ЭтотОбъект править пришлось, она всетаки была изначально для КА, УТ - все что на 8.2 с УФ
но вот процедура по удалению справилась:
Выборка = РегистрыСведений[РегистрСедений].Выбрать();
	
	Прогресс = 0;	
	Удалено = 0;	
	Пока Выборка.Следующий() Цикл
		
		Объект = Выборка.ПолучитьМенеджерЗаписи();								
		Рез = Истина;
		Если ПустаяСтрока(КодРегистраСодержит) Тогда
			Для каждого УсловиеОтбора Из Отбор Цикл		
				Если УсловиеОтбора.Отбирать Тогда
					Если Сравнить(Объект[УсловиеОтбора.Имя], УсловиеОтбора.Значение, УсловиеОтбора.Действие) Тогда
						Рез = Рез И Истина
					Иначе
						Рез = Рез И Ложь;
					КонецЕсли;				
				КонецЕсли;				
			КонецЦикла;
		Иначе
			Если Найти(Врег(Объект.Код), Врег(КодРегистраСодержит)) = 0 Тогда
				Рез = Рез И Ложь;
			КонецЕсли;	
		КонецЕсли;
		
		Если Рез Тогда			
			Объект.Удалить();		
			Удалено = Удалено + 1;
		КонецЕсли;
		
		Прогресс = Прогресс + 1;
		Если ТекущийРежимЗапуска() = РежимЗапускаКлиентскогоПриложения.ОбычноеПриложение Тогда
			#Если НЕ Сервер Тогда 
				Состояние("Обработано: "+Строка(Прогресс)+" записей...");
			#КонецЕсли
		КонецЕсли;
		
	КонецЦикла;
...Показать Скрыть
68. Валерий Дубовой (Valerich) 05.08.16 05:09
(66) Ошибку исправил, большое спасибо
69. Валерий Дубовой (Valerich) 05.08.16 05:11
(67) не очень понял что там с Объект или ЭтотОбъект: где и что надо исправлять

Что касается ошибки при попытке чтения записей регистра, так у вас получается данные практически нечитаемые. Можно было сделать тестирование и исправление ИБ. Система бы сама нашла такие дублирующиеся по ключевым полям записи и удалили их.
maikl007; +1 Ответить
70. Евгений Сидилев (maikl007) 16.11.16 11:54
Спасибо за обработку, НУЖНАЯ ВЕЩЬ В ХОЗЯЙСТВЕ )
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа