Поиск и замена дублей + v0.99
Бесплатные
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Узнавайте о новых бесплатных решениях в нашей телеграм-группе Инфостарт БЕСПЛАТНО
| Наименование | Скачано | Бесплатно |
|---|---|---|
|
Обработка (8.1.8+) v0.99
.1186121235 63,25Kb
8209
|
8209 | Скачать бесплатно |
Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
За основу была взята типовая обработка из УПП 1.2 со сходным названием.
Основные изменения.
Можно выполнять поиск дублей не только в справочниках, но и в планах видов характеристик. Сделан удобный выбор объекта метаданных.
Сопоставление дублей можно выполнять по любому количеству строгих критериев и одному нестрогому для строкового реквизита (по похожим словам). При выборе объекта метаданных автоматически добавляются рекомендуемые критерии сравнения (для подчиненных справочников равенство владельцев) и элементы отбора (для объектов с группами исключаются группы).
Реализовано удобное представление найденных групп дублей.
Можно задавать произвольный порядок сортировки результатов.
По двойному клику на ключе записи регистра сведений в списке найденных ссылок открывается форма списка этого регистра и текущей строкой устанавливается нужная запись, что позволяет быстро обработать ее руками в случае необходимости.
Перед замещением в независимых регистрах сведений в случае склеивания записей по новым ключам открывается диалог настройки замещения, где отображаются отличия в ресурсах конфликтующих записей и можно выбрать какую именно оставить. Это очень актуально, когда производится замена дублей объектов, у которых много свойств хранится в независимых непериодических регистрах сведений. В качестве примеров можно привести регистры из типовых конфигураций "Права доступа пользователей", "Значения свойств объектов", "Настройки пользователей". Если выполнять замену в них с помощью типовой обработки, то это может привести к потерям правильных данных в этих регистрах.
Выполнение замен с отключенными проверками регистрируется в журнале регистрации (событие - "Запись с флагом Загрузка").
Эта полностью мобильная версия обработки больше не обновляется.
Актуальная версия теперь в Подсистема "Инструменты разработчика"
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)
Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.
24900 руб.
20.08.2024 83600 431 171
Информационная безопасность Чистка данных Системный администратор Разработчик Руководитель проекта 1С 8.3 1С:Бухгалтерия 3.0 Платные (руб)
Обезличивает копию рабочей базы 1С перед передачей наружу и возвращает настоящие данные обратно, когда база вернулась. Это обратимая псевдонимизация: соответствия «исходное - псевдоним» пишутся в отдельный зашифрованный датасет, который остаётся у владельца. Работает на любой конфигурации - обходит метаданные и находит персональные данные сам, без списка реквизитов под конкретную базу. Суммы, количества, даты и номера документов не трогает никогда, оборотно-сальдовая до и после совпадает до копейки. Проверено на трёх конфигурациях: 106 031 объект, 215 642 замены, ноль ошибок, возврат 100 процентов.
42700 руб.
18.08.2026 1602 4 0
Чистка данных Системный администратор Разработчик 1С:Предприятие 8 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)
Update 2026: добавили многопоточное удаление данных по организациям. Ускорение х6 по сравнению с однопоточным алгоритмом! Позволяет удалить организации из любых из информационных баз 1С на управляемых формах (БП 3.0, УТ 11, КА 2, ERP 2, ЗУП 3, УНФ, Розница 3.0 и пр.). Главное требование - программа должна содержать справочник "Организации". Реализован самый быстрый алгоритм непосредственного удаления объектов. Работает даже на базах большого размера. Для ускорения работы алгоритма не запускается проверка контроля ссылочной целостности. Проверку учета можно запустить отдельно с помощью дополнительной обработки. Необходимо перед удалением самостоятельно проверить базу на наличие перекрестных ссылок разных организаций в одном документе. Эту дополнительную обработку проверки перекрестных ссылок по запросу предоставляем бесплатно нашим покупателям.
12139 руб.
16.03.2015 282955 272 84
Поиск данных Инструменты администратора БД Корректировка данных Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Россия Платные (руб)
Решение для автоматической сверки данных между любыми конфигурациями 1С. Помогает контролировать и проверять обмены, проверять наличие документов при переносах данных, находить изменения в закрытых периодах
9760 руб.
14.11.2025 6238 28 8
Задачи пользователя Инструментарий разработчика Корректировка данных Закрытие периода Разработчик Аналитик Бухгалтер Пользователь Руководитель проекта Стажер 1С 8.3 1С:ERP Управление предприятием 2 1С:Управление нашей фирмой 3.0 Управленческий учет Платные (руб)
Обработка предназначена для поиска, анализа и исправления отрицательных остатков во всех регистрах накопления информационной базы 1С.
6100 руб.
27.02.2026 3267 19 3
Мастера заполнения Поиск данных Инструментарий разработчика Подбор и обработка объектов 1С 8.3 1С 8.5 Платные (руб)
Infostart MagicInput улучшает подбор в полях ввода 1С: ищет по любой части названия и по нескольким ключевым фрагментам, распознаёт ввод в другой раскладке и показывает иконки/статусы объектов прямо в списке. Поддерживает вставку навигационной ссылки/представления документа для автоподбора; для разработчиков доступны поиск по GUID и полному имени предопределённого. Работает в управляемых формах и подключается в большинстве конфигураций 1С 8.3/8.5. Работает на возможностях платформы, внешние компоненты не используются.
6000 руб.
25.02.2026 6728 23 1
Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)
Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).
14640 руб.
29.04.2020 53025 146 164
Зарплата Корректировка данных Бухгалтер 1С 8.3 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Бухгалтерский учет НДФЛ Платные (руб)
Внешняя обработка сравнивает НДФЛ из расчетного листка и НДФЛ из регистра, на разницу формирует операцию учета НДФЛ. Исправляет расхождения, в том числе, когда Аванс больше Зарплаты Рассчитывает НДФЛ и сравнивает с исчисленным в программе. На отклонение формирует документ "Перерасчет НДФЛ"
9760 руб.
01.09.2023 10155 325 93
Устранил ошибку при поиске зависимых, которую сам же и сделал.
Добавил полноценный сохраняемый отбор.
Сделал более интеллектуальное обновление зависимых настроек. Теперь не очищаются поля настроек поиска без необходимости.
- расширены возможности по настройке критериев сравнения (теперь можно задавать любое количество строгих критериев сравнения и один нестрогий)
- заметно переработан интерфейс
- ускорен поиск
Эта версия позволяет в частности выполнять поиск в пределах владельца, что позволяет эффективно устранять дубли в подчиненных справочниках!
Справку по обработке пока не обновил, а также скриншоты. Позже сделаю.
- исправлены незначительные ошибки
- из доступных полей теперь исключаются хранилища значений и строки неограниченной длинны
- значительно ускорен поиск в режиме без сравнения по похожим словам за счет новых возможностей свежего релиза платформы 8.1.8.76
- актуализировал справку
- исправлены ошибки, связанные с ручным вводом состава группы
- исправлено обновление групп после автоматической замены во всех группах
- добавлен режим ручного ввода групп
- теперь по умолчанию отображается номер группы в списке групп
Выдаёт
| Код |
|---|
Форма.Форма(171)}: Ошибка при вызове метода контекста (Выполнить): {(8, 16)}: Ожидается выражение ")"
ИСТИНА И ( ИНН<<?>>, КПП)
мРезультатыПоиска = ЗапросПоиска.Выполнить().Выгрузить();
по причине:
{(8, 16)}: Ожидается выражение ")"
ИСТИНА И ( ИНН<<?>>, КПП)
Показать полностью |
{ВнешняяОбработка.ПоискИЗаменаДублирующихсяЭлементов(1424,11)}: Процедура или функция с указанным именем уже определена (ЛксСкопироватьЭлементОтбора)
Процедура <<?>>ЛксСкопироватьЭлементОтбора(пЭлементОтбораПриемник, пЭлементОтбораИсточник) Экспорт
Но тогда хотелось бы видеть один из двух вариантов
1) или выложить здесь второй файлик для работы с подсистемой
2) или включить данную разработку в подсистему :)
.
Мне больше импонирует второе решение :)
Что скажешь?
Возможно будет все таки принято решение о включении обработки в подсистему "Инструменты разработчика".
ИМХО подобные обработки по замене значений нельзя доверять конечному слабому пользователю типа обычных бухов/менеджеров.
Они должны быть инструментов для опытных внедренцев/разработчиков, что входит в предметную область твоей подсистемы :) !
При выборе некоторых справочников выдает ошибку:
Ошибка при установке значения атрибута контекста (Текст): {(5, 2)}: Неоднозначное поле "Объект.Код"
<<?>>Объект.Код.* КАК Код,
ПостроительОтчетаОтбора.Текст = "
по причине:
{(5, 2)}: Неоднозначное поле "Объект.Код"
<<?>>Объект.Код.* КАК Код,
Обработка попалась вовремя, когда напортачили с переносом из 7-ки.
Обработка позволяет выполнять гибкий поиск, замену и удаление дублирующихся элементов любого справочника или плана видов характеристик." - Это первые строки описания.
Принципиальных препятствий нет. Добавлю в следующей версии все ссылочные типы.
возможность пометки на удаление "лишних" кроме возможности их непосредственного удаления;
поиск и показ реквизитов типа Строка неограниченной длины;
очистку текущей группы по щелчку на колонке;
показ текущей группы по активизации строки (если активная колонка - "Вывести группу");
открытие значения реквизита ссылочного типа из таблицы состава текущей группы.
Могу скинуть, изменений мало. Если они будут включены в свежий релиз - буду рада.
Если НоваяТекущаяГруппа=Неопределено Тогда Отказ=Истина; Возврат; КонецЕсли;
ы=мРезультатыПоиска;
Для й=(-(мРезультатыПоиска.Количество()-1)) по 0 Цикл
Если мРезультатыПоиска[-й].НомерГруппы=НоваяТекущаяГруппа.НомерГруппы Тогда мРезультатыПоиска.Удалить(-й); КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура КоманднаяПанельНастройкиОтчетаПоиск(Кнопка)
....
КолонкаОчиститьГруппу = ЭлементыФормы.НайденныеГруппы.Колонки.Вставить(1, "Очистить группу");
КолонкаОчиститьГруппу.Имя = "ОчиститьГруппу";
КолонкаОчиститьГруппу.ТолькоПросмотр = Истина;
...
КонецПроцедуры
Процедура НайденныеГруппыВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
...
ИначеЕсли Колонка.Имя = "ОчиститьГруппу" Тогда
ОчиститьГруппу(Элемент.ТекущаяСтрока);
ВывестиГруппу(Элемент.ТекущаяСтрока);
ОбновитьТекущуюГруппуРезультатовПоиска();
...
КонецПроцедуры
{Форма.Форма(1036)}: Ошибка при установке значения атрибута контекста (Текст): {(5, 2)}: Неоднозначное поле "Объект.Наименование"
<<?>>Объект.Наименование.* КАК Наименование,
ПостроительОтчетаОтбора.Текст = "
по причине:
{(5, 2)}: Неоднозначное поле "Объект.Наименование"
<<?>>Объект.Наименование.* КАК Наименование,
ВЫБРАТЬ 0
ИЗ Справочник.ХранилищеДополнительнойИнформации КАК Объект
{ГДЕ
Объект.Наименование.* КАК Наименование,
Объект.Предопределенный.* КАК Предопределенный,
Объект.ПометкаУдаления.* КАК ПометкаУдаления,
Объект.Ссылка.* КАК Ссылка,
Объект.ВидДанных.* КАК ВидДанных,
Объект.Объект.* КАК Объект,
Объект.ИДФайлаПочтовогоПисьма.* КАК ИДФайлаПочтовогоПисьма,
Объект.ЗначениеРазделенияДоступа.* КАК ЗначениеРазделенияДоступа}
{УПОРЯДОЧИТЬ ПО
0 КоличествоЭлементовВГруппе
,
Объект.Наименование.* КАК Наименование,
Объект.Предопределенный.* КАК Предопределенный,
Объект.ПометкаУдаления.* КАК ПометкаУдаления,
Объект.Ссылка.* КАК Ссылка,
Объект.ВидДанных.* КАК ВидДанных,
Объект.Объект.* КАК Объект,
Объект.ИДФайлаПочтовогоПисьма.* КАК ИДФайлаПочтовогоПисьма,
Объект.ЗначениеРазделенияДоступа.* КАК ЗначениеРазделенияДоступа}
Исправление:
Для Каждого Последовательность ИЗ Метаданные.Последовательности Цикл
Если Последовательность.Документы.Содержит(СтрокаТаблицы.Метаданные) Тогда
НадоЗаписывать = Ложь;
НаборЗаписи = Последовательности[Последовательность.Имя].СоздатьНаборЗаписей();
НаборЗаписи.Отбор.Регистратор.Установить(СтрокаТаблицы.Данные);
НаборЗаписи.Прочитать();
// ++
Если НаборЗаписи.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
// --
- 1 Группа
- Первый обект
- Второй обект
- 2 Группа
- Первый обект
- Второй обект
- Третий объект
Зачем это нужно. А для того чтоьбы потом предоставить этот список двойников людям которые его могли создать и определить "человеком" какой элемент являеться правильный.
Вылезла ошибка, когда в строковом поле есть строки состоящие из пробелов, их обрезало до пустой строки функция СокрП.
Текст ошибки:
{Форма.Форма(182)}: Индекс находится за границами массива
СтрокаПоиска.НомерГруппы = НайденныеГруппы.НайтиСтроки(мСтруктураКлючаПоиска)[0].НомерГруппы;
Мои исправления:
Для Каждого СтрокаПоиска ИЗ мРезультатыПоиска Цикл
ЗаполнитьЗначенияСвойств(мСтруктураКлючаПоиска, СтрокаПоиска);
Для Каждого СтроковоеПоле Из МассивСтроковыхПолейСравнения Цикл
//Начало исправление
//мСтруктураКлючаПоиска[СтроковоеПоле] = Нрег(СокрП(мСтруктураКлючаПоиска[СтроковоеПоле]));
мСтруктураКлючаПоиска[СтроковоеПоле] = Нрег(мСтруктураКлючаПоиска[СтроковоеПоле]);
//Конец исправления
КонецЦикла;
СтрокаПоиска.НомерГруппы = НайденныеГруппы.НайтиСтроки(мСтруктураКлючаПоиска)[0].НомерГруппы;
ЗаполнитьЗначенияСвойств(СтрокаПоиска, мСтруктураКлючаПоиска);
КонецЦикла; ПоказатьРаботаю со справочником Контрагенты 1С БП ...
Почитал комментарии, у меня осталось 2 вопроса:
1. при замене Номенклатуры, что произойдет с подчиненными реквизитами такими как Ед., Серия? т.е. если в документе была указана номенклатура и ее ЕдИзм, то после замены что будет с ЕдИзм?
2. Как происходит замена в документах? после замены идет запись и перепроведение? (просто у меня есть старые документы, у которых я изменил перепроведение) = > если их перепровести, то пойдут косяки...
Спасибо!
А там нет такого флажка. Поля появляются только если по ним идет сравнение на первой закладке :(.
Поддерживаю (91), очень хочется выводить доп. поля в Результатах поиска, а не кликать по элементам на просмотр - поля всех реквизитов справочника.
- добавлено сохранение отборов и порядка в схеме (настроек отчета)
- добавлена возможность проверки зависимых элементов на полную идентичность по всем реквизитам ( оригинал - только по наименованию)
- добавленв возможность создания зависимого от правильного элемента, если он не найден ( например для замены договора при замене контрагентов)
Хочу еще сделать печать групп и их состава, а так же удаление групп из таблицы...
Предупреждать надо чайников, таких как я, что если поставить нестрогое соответствие по одному из реквизитов то остальные не проверяются на равенство. Я таким образом после слияния двух баз, стал чистить дубли. Дошел до справочника "Статьи затрат", поставил нестрогое соответствие по наименованию и строгое по "Вид Расходов НУ" и "Отнесение расходов к деятельности... ЕНВД чего-то там". Элементов нашлось порядка 100, на глаз вроде все правильно. Ну обработка и объединила мне, например, ЕСН по виду расходов "ЕСН", "Оплата труда", "Налоги и сборы из 3-ех в один. Пришлось писать обработку по отмене изменений, что не есть гуд.
Обработку скачивал 14 марта - может за эти дни версия поменялась. Написал собственно потому, что хотел поделиться алгоритмом восстановления: Значит я сделал в копии базы и в рабочей базе регистр сведений "Восстановление", туда записал всю таблицу ссылок из копии. Перекачал из копии в рабочую базу справочник статьи затрат и регистр "Восстановление". В рабочей базе запустил обработку по восстановлению. Вроде получилось, хотел через планы обмена, да не смог пока разобраться. Все сделал путем настройки обработки автора. Вроде работает. До настроенную обработку прикрепил, может кому пригодиться. :)
Скриншоты.zip
1) Заменить Процедуру НайтиПоСовпадающимСловам(ОтборПоиска):
Процедура НайтиПоСовпадающимСловам(ОтборПоиска)
ЕСли мФормаИндикатора <> Неопределено Тогда
мФормаИндикатора.КомментарийОбработкиДанных = "Поиск элементов";
мФормаИндикатора.КомментарийЗначения = "Получение элементов объекта";
мФормаИндикатора.ВладелецФормы = ЭтаФорма;
мФормаИндикатора.Открыть();
КонецЕсли;
ТекстВЫБРАТЬ = "";
ТекстИдексов = "";
ТаблицаСлов = Новый ТаблицаЗначений;
мРезультатыПоиска = Новый ТаблицаЗначений;
мСтруктураКлючаПоиска = Новый Структура;
Для Каждого ПолеСравнения Из ПостроительОтчетаОтбора.Порядок Цикл
Если ПолеСравнения.ПутьКДанным = "КоличествоЭлементовВГруппе" Тогда
Продолжить;
КонецЕсли;
ИмяПоля = ПолучитьИдентификаторИзПредставления(ПолеСравнения.ПутьКДанным);
Если ПолеСравнения.ПутьКДанным = мПутьКДаннымПоляНечеткогоСравнения Тогда
ИмяПоляНечеткогоСравнения = ИмяПоля;
Иначе
мСтруктураКлючаПоиска.Вставить(ИмяПоля);
ТекстИдексов = ТекстИдексов + ", " + ИмяПоля;
КонецЕсли;
мСтруктураПредставлений.Вставить(ИмяПоля, ПолеСравнения.Представление);
ПсевдонимОсновнойТаблицы = "_" + ПолучитьИдентификаторИзПредставления(Новый УникальныйИдентификатор);
ТекстВЫБРАТЬ = ТекстВЫБРАТЬ + ", " + ПсевдонимОсновнойТаблицы + "." + ПолеСравнения.ПутьКДанным;
ТаблицаСлов.Колонки.Добавить(ИмяПоля);
мРезультатыПоиска.Колонки.Добавить(ИмяПоля);
НайденныеГруппы.Колонки.Добавить(ИмяПоля);
КонецЦикла;
ТекстИдексов = Сред(ТекстИдексов, 2);
ПостроительОтчетаПоиска = Новый ПостроительОтчета;
ТекстЗапроса = "
|ВЫБРАТЬ " + ПсевдонимОсновнойТаблицы + ".Ссылка" + ТекстВЫБРАТЬ + ", NULL КАК КоличествоЭлементовВГруппе
|Из " + ПолноеИмяОбъекта + " КАК " + ПсевдонимОсновнойТаблицы + "
|";
ПостроительОтчетаПоиска.Текст = ТекстЗапроса;
ПостроительОтчетаПоиска.ЗаполнитьНастройки();
ЛксСкопироватьОтбор(ПостроительОтчетаПоиска.Отбор, ОтборПоиска, Истина);
ЛксСкопироватьПорядок(ПостроительОтчетаПоиска.Порядок, ПостроительОтчетаОтбора.Порядок);
ПостроительОтчетаПоиска.Выполнить();
ТаблицаОбъекта = ПостроительОтчетаПоиска.Результат.Выгрузить();
ТаблицаОбъекта.Индексы.Добавить(ТекстИдексов);
ТаблицаСлов.Колонки.Добавить("Ссылка");
ТаблицаСлов.Колонки.Добавить("СписокСлов");
СписокСлов = Новый СписокЗначений;
ЕСли мФормаИндикатора <> Неопределено Тогда
мФормаИндикатора.КомментарийОбработкиДанных = "Разбивка значения на отдельные слова";
мФормаИндикатора.МаксимальноеЗначение = ТаблицаОбъекта.Количество();
КонецЕсли;
Для Каждого СтрокаСсылки ИЗ ТаблицаОбъекта Цикл
ЕСли мФормаИндикатора <> Неопределено Тогда
мФормаИндикатора.Значение = ТаблицаОбъекта.Индекс(СтрокаСсылки) + 1;
КонецЕсли;
ЗначениеРеквизита = СтрокаСсылки[ИмяПоляНечеткогоСравнения];
СписокСлов = ПолучитьСписокСлов(ЗначениеРеквизита);
НовСтр = ТаблицаСлов.Добавить();
ЗаполнитьЗначенияСвойств(НовСтр, СтрокаСсылки);
НовСтр.СписокСлов = СписокСлов.Скопировать();
КонецЦикла;
ЕСли мФормаИндикатора <> Неопределено Тогда
мФормаИндикатора.КомментарийОбработкиДанных = "Выполняется анализ значений реквизита";
мФормаИндикатора.Значение = 0;
мФормаИндикатора.МаксимальноеЗначение = ТаблицаСлов.Количество();
КонецЕсли;
ТаблицаОбъекта = 0;
мРезультатыПоиска.Колонки.Добавить("Ссылка");
мРезультатыПоиска.Колонки.Добавить("НомерГруппы");
мРезультатыПоиска.Колонки.Добавить("Правильный", Новый ОписаниеТипов("Булево"));
мРезультатыПоиска.Колонки.Добавить("КоличествоСсылок");
НомерГруппы = 1;
Пока ТаблицаСлов.Количество() > 0 Цикл
ЕСли мФормаИндикатора <> Неопределено Тогда
мФормаИндикатора.Значение = мФормаИндикатора.ЭлементыФормы.Индикатор.МаксимальноеЗначение - ТаблицаСлов.Количество();
КонецЕсли;
ОбработкаПрерыванияПользователя();
ОбрабатываемаяСтрока = ТаблицаСлов[0];
ФильтрГруппыРавенства = Новый Структура(ТекстИдексов);
ЗаполнитьЗначенияСвойств(ФильтрГруппыРавенства, ОбрабатываемаяСтрока);
Если ФильтрГруппыРавенства.Количество() > 0 Тогда
СтрокиГруппыРавенства = ТаблицаСлов.НайтиСтроки(ФильтрГруппыРавенства);
Иначе
СтрокиГруппыРавенства = ТаблицаСлов;
КонецЕсли;
КоличествоСтрок = СтрокиГруппыРавенства.Количество();
СписокСтрок = Новый СписокЗначений;
СписокСтрок.Добавить(ОбрабатываемаяСтрока);
ТекущийСписокСлов = ОбрабатываемаяСтрока.СписокСлов.Скопировать();
Для индекс = 1 по КоличествоСтрок - 1 Цикл
СтрокаСравнения = СтрокиГруппыРавенства[индекс];
Если СтрокаСравнения = ОбрабатываемаяСтрока Тогда
Продолжить;
КонецЕсли;
СписокСловСравнения = СтрокаСравнения.СписокСлов.Скопировать();
СписокНеНайденных = Новый СписокЗначений;
ОдинаковыхСлов = 0;
Для Каждого Слово Из ТекущийСписокСлов Цикл
ЭлементСпискаСравнения = СписокСловСравнения.НайтиПоЗначению(Слово.Значение);
Если ЭлементСпискаСравнения = Неопределено Тогда
СписокНеНайденных.Добавить(Слово.Значение);
Иначе
СписокСловСравнения.Удалить(ЭлементСпискаСравнения);
ОдинаковыхСлов = ОдинаковыхСлов + 1;
КонецЕсли;
КонецЦикла;
Если СписокНеНайденных.Количество()=0 И СписокСловСравнения.Количество()=0 Тогда
ЕстьОтличия = Ложь;
Иначе
ЕСли ОдинаковыхСлов > 0 Тогда
ЕстьОтличия = АнализРазличийВСловах(СписокНеНайденных, СписокСловСравнения, ТекущийСписокСлов, ОдинаковыхСлов, ДопустимоеРазличиеСлов);
Иначе
ЕстьОтличия = Истина;
КонецЕсли;
КонецЕсли;
Если НЕ ЕстьОтличия Тогда
СписокСтрок.Добавить(СтрокаСравнения);
КонецЕсли;
КонецЦикла;
Для Каждого СтрокаИзСписка ИЗ СписокСтрок Цикл
Если СписокСтрок.Количество() > 1 Тогда
СтрокаРезультата = мРезультатыПоиска.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаРезультата, СтрокаИзСписка.Значение);
СтрокаРезультата.НомерГруппы = НомерГруппы;
Иначе
НомерГруппы = НомерГруппы - 1;
КонецЕсли;
ТаблицаСлов.Удалить(СтрокаИзСписка.Значение);
КонецЦикла;
НомерГруппы = НомерГруппы + 1;
КонецЦикла;
ЕСли мФормаИндикатора<>Неопределено Тогда
мФормаИндикатора.КомментарийОбработкиДанных = "Обработка результатов";
КонецЕсли;
НайденныеГруппы.Колонки.Добавить("КоличествоЭлементовВГруппе");
НайденныеГруппы.Колонки.Добавить("НомерГруппы");
НайденныеГруппы.Колонки.Добавить("ПравильныйЭлемент");
Если мРезультатыПоиска.Количество() > 0 Тогда
мРезультатыПоиска.Сортировать("НомерГруппы УБЫВ");
СтруктураПоиска = Новый Структура;
ВсегоГрупп = мРезультатыПоиска[0].НомерГруппы;
Для Индекс = 1 по ВсегоГрупп Цикл
СтруктураПоиска.Вставить("НомерГруппы", ВсегоГрупп - Индекс + 1);
МассивСтрок = мРезультатыПоиска.НайтиСтроки(СтруктураПоиска);
СтрокаГруппы = НайденныеГруппы.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаГруппы, МассивСтрок[0]);
СтрокаГруппы.КоличествоЭлементовВГруппе = МассивСтрок.Количество();
КонецЦикла;
НайденныеГруппы.Сортировать(ЛксПолучитьСтрокуПорядка(ПостроительОтчетаОтбора.Порядок));
Если мРезультатыПоиска.Количество() > 0 Тогда
ВывестиГруппу(НайденныеГруппы[0]);
КонецЕсли;
КонецЕсли;
ЕСли мФормаИндикатора<>Неопределено Тогда
мФормаИндикатора.Закрыть();
КонецЕсли;
КонецПроцедуры
2) Добавить 2 процедуры:
Функция ПолучитьИдентификаторИзПредставления(Представление)
Попытка
Пустышка = Новый Структура(Представление);
Возврат Представление;
Исключение КонецПопытки;
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.IgnoreCase = Истина;
RegExp.MultiLine = Ложь;
шБуква = "А-Яа-я_A-Za-z";
RegExp.Pattern = "\d";
НовоеПредставление = Представление;
ПервыйСимвол = Сред(Представление, 1, 1);
Если RegExp.Test(ПервыйСимвол) Тогда
// Первый символ - цифра
НовоеПредставление = "_" + НовоеПредставление;
КонецЕсли;
ПредыдущийСимвол = " ";
ТекущаяСтрока = "";
Для Счетчик = 1 По СтрДлина(НовоеПредставление) Цикл
ТекущийСимвол = Сред(НовоеПредставление, Счетчик, 1);
RegExp.Pattern = "\s";
Если RegExp.Test(ПредыдущийСимвол) Тогда
// Предыдущий символ - непечатаемый
ТекущийСимвол = ВРег(ТекущийСимвол);
КонецЕсли;
RegExp.Pattern = "[" + шБуква + "\d]";
Если RegExp.Test(ТекущийСимвол) Тогда
// Предыдущий символ - непечатаемый
ТекущаяСтрока = ТекущаяСтрока + ТекущийСимвол;
Иначе
RegExp.Pattern = "[\S]";
Если RegExp.Test(ТекущийСимвол) Тогда
ТекущаяСтрока = ТекущаяСтрока + "_";
КонецЕсли;
КонецЕсли;
ПредыдущийСимвол = ТекущийСимвол;
КонецЦикла;
Результат = ТекущаяСтрока;
Возврат ТекущаяСтрока;
КонецФункции // ПолучитьИдентификаторИзПредставления()
Процедура ЛксСкопироватьОтбор(пОтборПриемник, пОтборИсточник, пСоздаватьОтсутствующие = Ложь, ТолькоИспользуемые = Ложь)
//Если пСоздаватьОтсутствующие Тогда
// ДоступныеПоля = пОтборПриемник.ПолучитьДоступныеПоля();
//КонецЕсли;
Для Каждого ЭлементОтбораИсточника Из пОтборИсточник Цикл
Если Истина
И ТолькоИспользуемые
И Не ЭлементОтбораИсточника.Использование
Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(ЭлементОтбораИсточника) = Тип("КлючИЗначение") Тогда
ЭлементОтбораИсточника = ЭлементОтбораИсточника.Значение;
КонецЕсли;
//Если ЭлементОтбораИсточника.Имя = "" Тогда
// Сообщить("Невозможно определить элемент отбора приемника при копировании отбора.",
// СтатусСообщения.Внимание);
// Продолжить;
//КонецЕсли;
ЭлементОтбораПриемника = пОтборПриемник.Найти(ЭлементОтбораИсточника.Имя);
Если ЭлементОтбораПриемника = Неопределено Тогда
Если Истина
И пСоздаватьОтсутствующие
//И ЛксНайтиПолеНастройкиПоПутиКДанным(ДоступныеПоля, ЭлементОтбораИсточника.ПутьКДанным) <> Неопределено
Тогда
Попытка
ЭлементОтбораПриемника = пОтборПриемник.Добавить(ЭлементОтбораИсточника.ПутьКДанным, ЭлементОтбораИсточника.Имя);
Исключение
Продолжить;
КонецПопытки;
Иначе
Продолжить;
КонецЕсли;
КонецЕсли;
ЛксСкопироватьЭлементОтбора(ЭлементОтбораПриемника, ЭлементОтбораИсточника);
КонецЦикла;
КонецПроцедуры // ЛксСкопироватьОтбор()
Просто нету времени читать ВСЕ комментарии...
Вопрос к автору - У меня необычная ситуация:
1). есть справочник "Договоры Контрагентов" в конфигурации 1С 8.2 "Комплексная автоматизация"
2). аналогичный справочник в 1С 7.7 "Бухгалтерия"
Оба справочника заполнены, ведутся параллельно в обоих конфигурациях в одной и той-же организации.
Причем наименования одних и тех-же договоров в конфигурациях отличаются.
Кроме того, в 1С 8.2 некоторые реквизиты заполнялись вручную кривыми руками менеджеров, частично незаполнены.
В один прекрасный момент организация отказалась вести учет в 1С 7, перешла на учет в 1С 8.2
Справочник был перенесен в 1С 8.2 криво, по наименованиям (это делали другие программисты, не знаю, как и зачем).\
Таким образом, на данный момент в 1с 8.2 В СПРАВОЧНИКЕ хаос (множество элементов справочника с
отличающимися наименованиями (или с совпадающими), являющимися по сути одним и тем-же).
Необходимо удалить дубли.
Для этого в обработке необходимо отбирать элементы по правилу:
1). Владелец договора (контрагент) у дублей совпадает
2). наименования ПОДОБНЫ ("умный поиск похожих наименований")
Как это можно сделать в вашей обработке?
В принципе много аналогичных разработок.
Ваша понравилась удобным интерфейсом, наличием необходимого мне функционала для сложного поиска по нескольким критериям.
Интерфейс достаточно удобный.
Посмотреть другие подобные публикации времени, к сожалению, нету.
Если ваша меня устроит в моей ситуации, отлично.
Хотел попросить автора добавить версию для 1С 8.2
Я умею конвентировать под 1С 8.2. Эта просьба ради начинающих программистов, которые с этим не сталкивались.
Люди на данном сайте почему то забывают сделать простейшую операцию конвертации под 8.2 и 8.1
Хотя, если бы они это не забывали, спрос на разработку увеличился бы.
Потому что большинство людей идет по пути наименьшего сопротивления, если ваша обработка под 1С 8.2 не сконвектирована, они скачают другую, пусть и похуже, зато точно работающую на 8.2
Было бы полезно добавить функцию помечать на удаление, после замены дублей.
Сейчас этой функции нету, ОЧЕНЬ ЖАЛЬ!
Мне пришлось вручную колбасить (помечать на удаление после замены ссылок в документах) справочник.
Также замечу, что здесь несколько устаревшая версия обработки. Актуальная находится внутри подсистемы ИР . А эта мобильная давно не обновлялась.
Интересно реализовано...
Встречный вопрос - а если документ нестандартный, при проведении не делаются кроме движений, какие-либо дополнительные операции с БД?
В нестандартных конфах сталкивался с такими криворукими творениями всяких "умельцев".
В этом случае без перепроведения документов не обойтись.
Поэтому просьба добавить такую возможность в виде кнопки на закладке "Замена"!
На мой взгляд, такая кнопка совершенно необходима.
В описание обработки можно по этому вопросу пару слов черкнуть - дескать, замена ссылок в движениях проведенных документов есть, но добавлена кнопочка на всякий пожарный, кому нужна...
хочу добавить, что пробовал сделать следующий отбор:
1). Владелец договора (контрагент) у дублей совпадает
2). наименования ПОДОБНЫ
При этом в группах попадаются элементы справочника с ПОХОЖИМИ наименованиями, но разными владельцами!
Значит отбор неправильно работает, или я туплю?
Что касается сообщения 134:
большое спасибо за ссылку! Не знал, что есть такая полезная разработка, где все в одном...
Не было времени искать, еще раз спасибо!Скачаю, заценю!
Что касается сообщения 136:
К сожалению, не сейчас не смогу привести конкретный пример. Ранее работал в компании "СпецАвтобаза". Там есть сильно модифицированная конфигурация. Есть тяжелый документ "Путевой Лист", он при проведении очень много чего делает, в том числе выгружает данные в сторонние программы (в БД при этом изменений нету, но например изменяется информация в .DBF файле, предназначенном для системы автодозвона должников). Таким образом, если данный документ не перепроводить, то информация в этом внешнем файле перестанет быть актуальной, система автодозвона неправильно будет отрабатывать, за что программисту по шапке надает директор...
Вопрос не в том, что полезна или нет кнопочка проведения, просто должна быть возможность ее нажать. Нажимать ее будут на свой страх и риск. Ведь данная разработка для продвинутых пользователей, которые знают, зачем и что они делают.
По примеру когда при проведении документ подключается к другой базе и что то там меняет действительно не самый хороший прием, т.к. транзакция записи и проведения документа может получиться очень долгой. Из легких доработок могу предложить открытие списка обработанных документов в отдельной форме с кнопкой Провести.
Обработку скачал отсюда, проверял несколько раз, проблема с попаданием в группу элементов с разными владельцами остается.
Просьба выложить тут актуальную (или хотя бы рабочую) версию..., чтобы отбор по владельцам работал.
Что касается обработки, находящейся в рамках подсистемы ИР . Скачал, но не смог запустить обработку. Возникают ошибки с работой подсистемы - не хватает общих модулей. К сожалению, пока нет времени разбираться с причинами, читать сообщения. Подсистему загружал объединением-сравнением к конфе "Комплексная автоматизация".
{ВнешняяОбработка.ПоискИЗаменаДублирующихсяЭлементов(1424,11)}: Процедура или функция с указанным именем уже определена (ЛксСкопироватьЭлементОтбора)
Процедура <<?>>ЛксСкопироватьЭлементОтбора(пЭлементОтбораПриемник, пЭлементОтбораИсточник) Экспорт
+++
Опишите ситуацию, в которой потребовалось использовать старую мобильную версию этой обработки в базе с конфигурацией, содержащей более новую версию в составе подсистемы ИР.
Пока такая ситуация кажется очень искусственной.
Исправление:
Для Каждого Последовательность ИЗ Метаданные.Последовательности Цикл
Если Последовательность.Документы.Содержит(СтрокаТаблицы.Метаданные) Тогда
НадоЗаписывать = Ложь;
НаборЗаписи = Последовательности[Последовательность.Имя].СоздатьНаборЗаписей();
НаборЗаписи.Отбор.Регистратор.Установить(СтрокаТаблицы.Данные);
НаборЗаписи.Прочитать();
Если НаборЗаписи.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
Но с небольшой проблемой — вылетает:
{Форма.Форма.Форма(179)}: Индекс находится за границами массива
СтрокаПоиска.НомерГруппы = НайденныеГруппы.НайтиСтроки(мСтруктураКлючаПоиска)[0].НомерГруппы;Происходит это, когда в мСтруктураКлючаПоиска есть значение отбитой пробелами пустой строки, тогда в найденных группах оно идёт без сокращения пробелов, а в мСтруктураКлючаПоиска сворачивается в "" на строке 177:
мСтруктураКлючаПоиска[СтроковоеПоле] = Нрег(СокрП(мСтруктураКлючаПоиска[СтроковоеПоле]));Для воспроизведения ошибки можно запустить поиск дублей по справочнику Банков по полю Корр. счет
Если убрать СокрП в строке 177 то ошибка исчезает, но это неграмотное решение проблемы.
Пробовал на версии 0.99
Если <Исходник> + "2323232" Тогда
попадает в объединение по дублю
Иначе
НЕТ
Ситуация надо объединять не все.
Вручную долго
Отмечу, что в подсистеме ИР есть возможность из дерева результата запроса или дерева результата компоновки передать колонку в обработку "поиск дублей и замена ссылок" для заполнения групп дублей. Т.е. если нужен промежуточный уровень отношения универсальность/удобство, то это как раз он и есть сейчас.
А нельзя ли автоматизировать процесс замены и удаления?
Например я использую обработку для замены и удаления дублей номенклатуры в УТ 10.3.
Как я понял поиск и удаление зависимых элементов, в моем случае это единицы измерения, необходимо делать в ручном режиме, не в ручном у меня не получилось - если делаю автозамену, то единица измерения удаляемой номенклатуры просто добавляется в номенклатуру которую я указал как правильную.
В моем случае нужно обработать около 5000 позиций, которые идеально точно определяются дублями, сделать это в ручную очень сложно. Если бы еще можно было задавать алгоритм "Автоопределения правильных", например, для меня правильные, это позиции зарегистрированные позже (сам определяю по коду номенклатуры, если он выше, то правильный), то было бы здорово!
Заметил косячок в версии 0.99 (под платформой 8.2.16.352) пропадают отборы после обновления группы. То есть изначально ставил отбор на элементы справочника ЭтоГруппа=Истина - по нему отобралось 2 группы, в каждой по 2 элемента.
После обновления группы двойным тычком, в первой группе появилось 8 элементов, из которых 2 Группы и 6 НЕГруппы.
Где-то тут Текст ЗапросаПоиска меняется таким образом, что из него исчезают отборы:
ТекстЗапросаЭлементы = "
|ВЫБРАТЬ Объект.Ссылка КАК Ссылка" + ТекстВЫБРАТЬ + "
|ИЗ " + ПолноеИмяОбъекта + " КАК Объект
|ГДЕ ИСТИНА
|";
//Тут слетают Параметры отборов!!!:
МенеджерВременныхТаблиц = ЗапросПоиска.МенеджерВременныхТаблиц;
ПостроительЗапросаПоиска.Текст = ТекстЗапросаЭлементы;
ПостроительЗапросаПоиска.ЗаполнитьНастройки();
ЛксСкопироватьОтборСтатический(ПостроительЗапросаПоиска.Отбор, ОтборПоиска, Истина);
ЗапросПоиска = ПостроительЗапросаПоиска.ПолучитьЗапрос();
ЗапросПоиска.Текст = ЗапросПоиска.Текст + " И (" + Сред(ТекстСГРУППИРОВАТЬ, 2) + ")
|В (ВЫБРАТЬ " + Сред(ТекстИдексов, 2) + " ИЗ НайденныеГруппы)";
ЗапросПоиска.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
мРезультатыПоиска = ЗапросПоиска.Выполнить().Выгрузить(); ПоказатьИзначально текст запроса был:
ВЫБРАТЬ
Объект.Наименование КАК Наименование,
КОЛИЧЕСТВО(Объект.Ссылка) КАК КоличествоЭлементовВГруппе
ПОМЕСТИТЬ НайденныеГруппы ИЗ
Справочник.ТорговаяМарка КАК Объект
ГДЕ
ИСТИНА
И Объект.Наименование ЕСТЬ НЕ NULL
И Объект.ЭтоГруппа = &Параметр1
СГРУППИРОВАТЬ ПО
Объект.Наименование
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Объект.Ссылка) > 1 ПоказатьПосле обновления группы тест запроса стал:
ВЫБРАТЬ
Объект.Ссылка КАК Ссылка,
Объект.Наименование КАК Наименование
ИЗ
Справочник.ТорговаяМарка КАК Объект
ГДЕ
ИСТИНА И ( Наименование)
В (ВЫБРАТЬ Наименование ИЗ НайденныеГруппы)
ТекстЗапросаЭлементы = "
|ВЫБРАТЬ Объект.Ссылка КАК Ссылка" + ТекстВЫБРАТЬ + "
|ИЗ " + ПолноеИмяОбъекта + " КАК Объект
|ГДЕ ИСТИНА "+"
|";
На такой (по аналогии с предыдущим текстом):
ТекстЗапросаЭлементы = "
|ВЫБРАТЬ Объект.Ссылка КАК Ссылка" + ТекстВЫБРАТЬ + "
|ИЗ " + ПолноеИмяОбъекта + " КАК Объект
|ГДЕ ИСТИНА "+"
|{ГДЕ " + Сред(мСтрокаРеквизитов, 2) + "}
|";
ПоказатьОсталось проверить корректность работы такого исправления в разных случаях - с моим одним отбором вроде бы работает :)
Прочитал обсуждение, но так и не понял в чем отличия от ИТС и других обработок, представленных здесь.
А главный вопрос : стандартная обработка после замены в справочниках меняет дату последовательности документов. И чтобы ее восстановить - необходимо перепроведение...
МОЖНО ЗАМЕНИТЬ елементы справочников не нарушив последовательность документов?
Как в этой обработке обстоят дела с этим?
иногда надо некоторые ссылки отсавить, если случайно заменили клиента на сотрудника, например с одинаковыми ФИО.
И вообще - хотелось бы такую обработку - выбираешь что менять и на что менять и чтобы она меняла (без поиска, иногда список заранее известен). Хотя такая типовая есть "Поиск и замена значений называется". Туплю.
В Процедура НайтиПоРавенствуРеквизитов(ОтборПоиска)
//...
Для Каждого СтрокаПоиска ИЗ мРезультатыПоиска Цикл
ЗаполнитьЗначенияСвойств(мСтруктураКлючаПоиска, СтрокаПоиска);
Для Каждого СтроковоеПоле Из МассивСтроковыхПолейСравнения Цикл
если СтроковоеПоле<>"Код" тогда //20130520 ЛВЛ изменил
мСтруктураКлючаПоиска[СтроковоеПоле] = Нрег(СокрП(мСтруктураКлючаПоиска[СтроковоеПоле]));
иначе
//ничего справа сокращать не нужно
конецесли;
КонецЦикла;
//...
Не понравился вывод результата найденных дублей и процедуры действий с ними, сбит с толку Вашей системой логики, дубли нашел но вот что с ними сделать не получилось.
1. алгоритм поиска отличается от типовой обработке как например в 10.3
2. по причине в п.1 и непонятного глюка платформы 1С дубли находятся не все если запрос строится без использования УПОРЯДОЧИТЬ, а чтобы его использовать нужно использовать метод ПЕРВЫЕ с достаточно большим числом, например 999999999, думаю этого хватит :) если переборщить с числом то может и не заработать
Вобщем метод СГРУППИРОВАТЬ просто не работает корректно и все,
3. как и в типовой обработке поиск выполняется без буфферизации т.е. повторным обращением к базе, кстати интересно чей вариант быстрее в таком варианте, и после оптимизации обеих обработок, я до этого не дошел еще, может кто-то замерял?
4. исходя из п.3 происходит проблема что в состав групп попадают элементы которые отброшены фильтром, у меня например при условии ЭтоГруппа = Ложь в состав группы все равно попадает группа, а поиск производится только по элементам, т.к. фильтр накладывается на поиск дублей, а состав группы делается оттдельным запросом
Возможно это уже и исправлено, но это к размышлению чем пользоватся... я во всяком случае пользуюсь этой обработкой но сильно пришлось ее оптимизировать.
Пришлось долго делать Проверку логической целостности и пересчет итогов.
1) Использовалась ли актуальная версия обработки из инструментов разработчика?
2) О каком именно регистре речь и какие поля в нем предположительно имели значение NULL и потом стали иметь значение пустой ссылки?
Я так понимаю речь о регистре бухгалтерии и полях субконто?
если не ведется учет по измерению ("по подразделению"), но в записи установить значение (например, Подразделение.ПустаяСсылка), то не смотря на то, что учет по подразделению не ведется, записывается значение установленное в наборе.
Напротив, если ОбменДанными.Загрузка = Ложь, то в таком случае значение автоматически обNULLяется.
В результате такого поведения при заменах ссылок в регистрах бухгалтерии могли возникать ошибки, если замена велась с отключенным режимом записи (ОбменДанным.Загрузка = Истина).
Исправляется перезаписью записей регистра в режиме ОбменДанными.Загрузка = Ложь."
я знаю (229) Сергея, знаю что он создал инструмент, об этом я узнал может 5 лет назад. Тогда смотрел описание. Скачал первую версию - еще под 8.1. С тех пор не использовал в своей работе. Поэтому не понял вопроса про "аналогичный инструмент из ИР". О чем и написал.
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 14986
Создание 03.08.07 00:00
Обновление 19.08.15 13:38
Просмотры 100325
Загрузки 8209
Рейтинг
442
Комментарии 227
Код открыт Не указано
Рубрики Чистка данных Поиск данных Корректировка данных
Кому
Системный администратор
,
Разработчик
Тип файла Внешняя обработка (ert,epf)
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)