Содержание
Как послать базу 1С через интернет программисту | оглавление | Настройка пользователей и их прав доступа |
Поиск и удаление дублей в 1С:Бухгалтерия 8.3 (редакция 3.0)
2017-04-17T11:25:19+00:00
Если за базой не следить, вовремя не подчищать, то неизбежно дублирование информации. Наиболее часто дублируются номенклатура и, конечно же, контрагенты.
В 1С:Бухгалтерия 8.3 уже встроен механизм для поиска и устранения дублей. Это универсальная обработка «Поиск и удаление дублей», которая подходит для поиска дубликатов не только в номенклатуре и контрагентах, но и в других справочниках.
Рассмотрим её использование на примере справочника «Контрагенты».
Ситуация
1. Итак, у нас есть контрагент «Аэрофлот» в папке покупатели.
2. И его дубликат (полная копия), случайно заведенная в папке поставщики. ИНН у обоих элементов совершенно одинаковый.
Наша задача воспользоваться обработкой по поиску и замене дублей так, чтобы она нашла эти элементы, указала (сопоставив их ИНН), что один дублирует другого и объединила их в один элемент.
Открываем обработку
3. Чтобы открыть обработку для поиска дублей нужно зайти в меню «Все функции»( Если у вас его нет — вам сюда. ).
И выбрать среди всех обработок «Поиск и удаление дублей».
Настраиваем условия
4. Форма обработки перед нами. Укажем область для поиска дублей, нажав на три точки в поле «Искать в».
5. Выберем «Контрагенты» и нажмем кнопку «Выбрать».
6. Нажмем на кнопку троеточие в поле «Пометка удаления равно нет»:
7. И добавим ещё одно правило отбора (кнопка «Добавить новый элемент»).
8. В качестве поля для отбора выберем …
9. … выберем ИНН.
10. В качестве вида сравнения укажем «Заполнено» и нажмём кнопку ОК:
Таким образом мы будем осуществлять поиск среди всех контрагентов, у которых заполнен ИНН.
11. Осталось задать критерий для сравнения. Нажмите пункт «Наименование совпадает по похожим словам».
12. В открывшихся правилах поиска дублей снимите галку рядом с полем «Наименование».
13. И установите галку рядом с полем «ИНН» и выберите в качестве правила для ИНН пункт «Совпадает». Нажмите кнопку «Выбрать».
Ищем дубли
14. Внизу окна нажмите кнопку «Найти дубли».
15. А вот и наш аэрофлот. Вернее два аэрофлота. И места использования каждого из них. Тот аэрофлот, рядом с которым зеленая стрелка, 1С считает главным и при удалении дублей останется именно он. Если выбор 1С оказался ошибочен — выделите другой элемент и нажмите кнопку «Отметить как оригинал». Установите галки рядом с элементами, которые по-вашему мнению являются дублями главных элементов. Теперь нажмите кнопку «Удалить дубли».
16. Обработка рапортует нам, что дубли объединены в один элемент и теперь вместо двух аэрофлотов у нас один, что и требовалось получить!
Мы молодцы, на этом всё
Кстати, подписывайтесь на новые уроки…
Важное замечание
Друзья, отдельно хочу заострить внимание на моменте, который ставит в тупик многих пользователей (я и сам не сразу это понял).
Обработка позволяет сравнивать поля друг с другом всего по двум правилам (пункт «Сравнивать»):
- полное совпадение
- совпадение по похожим словам, причём мы не можем настраивать эту похожесть
Всё. Других вариантов нет.
Это значит, что мы не можем настроить обработку на поиск дублей по своему принципу.
Например, нам не удастся настроить её так, чтобы она посчитала дублями все элементы, в которых встречается нужное нам слово.
Мы можем только сказать: ищи нам дубли среди такого-то справочника, при этом считай дублями те элементы у которых совпадают такие-то поля или полностью или похожи друг на друга. При этом как именно они похожи — решай сама.
Поле «Отбирать», которое и вводит всех в заблуждение, потому что оно расположено первым, предназначено для отбора элементов, которые обработка уже посчитала дублями.
То есть, если вы в поле «Отбирать» поставили «Все элементы» и дубли не нашлись — смысл в настройке поля «Отбирать» нет. Оно позволяет только сузить результаты, но не расширить.
Уфф.., надеюсь я кому-то помог сэкономить время. До меня самого почти час доходило что же я делаю не так.
А тем кому нужен более настраиваемый поиск по дублям я советую подсистему «Инструменты разработчика».
Только нужно учесть, что она уже для очень опытных пользователей. Начинающим может быть нелегко с ней разобраться.
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Нажмите одну из кнопок, чтобы поделиться:
Как послать базу 1С через интернет программисту | оглавление | Настройка пользователей и их прав доступа |
Программа «1С:Бухгалтерия 8» позволяет настроить групповую печать однотипных документов. Такая необходимость может возникнуть в разных случаях: при завершении месяца, когда надо выставить большое количество актов об оказании услуг и счетов-фактур; при печати платежных поручений на налоги с фонда оплаты труда за головную фирму и представительства и филиалы и т.п. Во всех этих случаях неоходимо произвести в программе определенные настройки. Методисты фирмы «1С» на примере рассказывают, как это сделать.
Одной из возможных сервисных функций «1С:Предприятия 8» является групповая обработка справочников и документов, которая доступна в меню «Сервис». С ее помощью, в частности, можно настроить групповую печать документов. Рассмотрим порядок настройки групповой печати документов на конкретном примере.
Примечание:
Предприятие, оказывающее консультационные услуги, выставляет клиентам счета-фактуры в конце месяца. Печатные формы счетов-фактур необходимо предоставить клиентам. Бухгалтеру необходимо распечатать все выставленные покупателям счета-фактуры за период с 01.05.2008 по 31.05.2008 включительно.
Для печати всех выставленных покупателям счетов-фактур в меню «Сервис» выберем «Групповая обработка справочников и документов». На закладке «Объекты отбора» в поле «Тип объекта» выберем — «Документы». Теперь необходимо указать, по каким документам будет произведен отбор. При добавлении нового элемента откроется окно со списком документов, в котором выберем документ «Счет-фактура выданный» (см. рис. 1).
Рис. 1
Теперь перейдем на закладку «Отбор». Нам необходимо отобрать счета-фактуры, выставленные за период с 01.05.2008 по 31.05.2008, и исключить из списка счета-фактуры на аванс. При помощи кнопки (или клавиша Insert) в окне отбора добавляем необходимые условия отбора — см. рис. 2.
Рис. 2
При нажатии кнопки «Отобрать» будут отобраны счета-фактуры, удовлетворяющие заданным условиям. Список отобранных счетов-фактур автоматически сформируется на закладке «Обработка» формы «Групповая обработка справочников и документов». Из списка действий выберем «Печать документов» (см. рис. 3).
Рис. 3
Далее следует выбрать «Печать с предварительным просмотром» или «Печать без предварительного просмотра». Для печати реестра отобранных документов следует выбрать соответствующее значение — «Реестр документов».
Теперь нажимаем кнопку «Выполнить», на вопрос «Выполнить печать документов?» отвечаем «Да».
При этом, если выбрано значение «Печать без предварительного просмотра», сразу будет запущена процедура печати документов. Если же выбрано значение «Печать с предварительным просмотром», на экран будут выведены печатные формы всех отобранных счетов-фактур. В этом случае после просмотра документов необходимо запустить процедуру печати из главного меню программы (меню «Файл» -> «Печать»). Если выбрано значение «Реестр документов», на экран также будет выведена печатная форма реестра со списком отобранных счетов-фактур, которую можно распечатать из главного меню программы (меню «Файл» -> «Печать»).
***
Реализованный в «Групповой обработке справочников и документов» алгоритм является универсальным и может использоваться не только для групповой печати документов.
При использовании обработки с группой справочников/документов доступны следующие действия: изменение даты, проведения документа, пометки на удаление, признака принадлежности к налоговому учету, ответственного, комментариев. Этой обработкой можно воспользоваться, например, для группового изменения реквизитов табличной части документов, даты документов.
Бывают ситуации когда в одном запросе необходимо объединить несколько запросов, причем соединения таблиц никак не могут в этом помочь. Проще всего показать на примере.
Допустим в нашей системе факты покупки и продажи товара регистрируются документами Приход и Расход соответственно. Контрагент может являться как покупателем, так и поставщиком. Зачет задолженности может производится поставкой товара:
Чтобы подсчитать общую задолженность контрагента необходимо сложить сумму всех расходов по этому контрагенту и вычесть сумму всех приходов от этого же контрагента, проще всего это сделать с помощью оператора ОБЪЕДИНИТЬ ВСЕ:
Запрос.Текст =
«
//посчитаем на какую сумму мы отгрузили контрагентам
|ВЫБРАТЬ
| Расход.Контрагент,
| СУММА(Расход.Сумма) КАК Долг
|ИЗ
| Документ.Расход КАК Расход
|
|СГРУППИРОВАТЬ ПО
| Расход.Контрагент
|
|ОБЪЕДИНИТЬ ВСЕ
|
//посчитаем на какую сумму контрагенты
//поставили нам товара
|ВЫБРАТЬ
| Приход.Контрагент,
//сумму берем с отрицательным знаком,
//что при объединении она вычлась из суммы расхода
| СУММА(-Приход.Сумма)
|ИЗ
| Документ.Приход КАК Приход
|
|СГРУППИРОВАТЬ ПО
| Приход.Контрагент»;
В первом запросе мы считаем сумму расходов по каждому контрагенту, во втором — сумму на которую нам поставил товар каждый из контрагентов. Сумма во втором запросе берется со знаком минус, что бы при свертке результирующей таблицы, она вычлась из суммы отгрузки данному контрагенту. В итоге получим таблицу вида:
Это не совсем то, что мы хотели, но уже близко. Для достижения требуемого результата осталось сгруппировать по контрагенту. Для этого запрос необходимо поместить во временную таблицу (работа с временными таблицами рассматривается в закрытой части курса) и уже из нее выбрать и сгруппировать поля:
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| Расход.Контрагент,
| СУММА(Расход.Сумма) КАК Долг
|ПОМЕСТИТЬ ВТ_ПриходРасход
|ИЗ
| Документ.Расход КАК Расход
|
|СГРУППИРОВАТЬ ПО
| Расход.Контрагент
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Приход.Контрагент,
| СУММА(-Приход.Сумма)
|ИЗ
| Документ.Приход КАК Приход
|
|СГРУППИРОВАТЬ ПО
| Приход.Контрагент
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ПриходРасход.Контрагент,
| СУММА(ВТ_ПриходРасход.Долг) КАК Долг
|ИЗ
| ВТ_ПриходРасход КАК ВТ_ПриходРасход
|
|СГРУППИРОВАТЬ ПО
| ВТ_ПриходРасход.Контрагент»;
Результат:
Требования к объединению запросов
При объединении двух запросов количество полей у них должно быть одинаковым, если в каком либо из запросов не хватает полей, то их надо добавить в виде констант. Обратимся к примеру выше, пусть в документе расход также есть поле скидка, которое уменьшает сумму долга контрагента, но в документе приход нет никаких скидок. Как быть в этом случае? Так:
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| Расход.Контрагент,
| СУММА(Расход.Сумма) КАК Долг,
| СУММА(Расход.Скидка) КАК Скидка
|ИЗ
| Документ.Расход КАК Расход
|
|СГРУППИРОВАТЬ ПО
| Расход.Контрагент
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Приход.Контрагент,
| СУММА(-Приход.Сумма),
//добавляем нулевое поле скидка
| 0
|ИЗ
| Документ.Приход КАК Приход
|
|СГРУППИРОВАТЬ ПО
| Приход.Контрагент»;
Осталось вычесть скидку и сгруппировать.
Также важен порядок. Поля будут объединятся именно в том порядке в котором они указаны в секциях ВЫБРАТЬ обоих запросов. Применительно к предыдущему примеру — поменяем местами поля скидка и сумма в выборке приходов:
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| Расход.Контрагент,
| СУММА(Расход.Сумма) КАК Долг,
| СУММА(Расход.Скидка) КАК Скидка
|ИЗ
| Документ.Расход КАК Расход
Допустим, мы делаем внешнюю обработку для модификации каких-то данных. Например, групповая перенумерация документов «Требование-накладная».
У нас создана форма обработки, в которой есть реквизит формы «СписокДокументов» с типом «ТаблицаЗначений». В эту таблицу мы выводим список ссылок на отобранные для перенумерации документы.
Проводим перенумерацию и обнаруживаем, что данные в форме обработки не обновились. То есть, в системе документы успешно получили новые номера, а в форме обработки по-прежнему ображаются старые данные.
Чтобы обновить данные в форме, нужно использовать функцию глобального контекста:
ОповеститьОбИзменении(<Ссылка>)
В нашем случае мы в модуле формы внешней обработки, в процедуре, выполняемой на клиенте, после завершения перенумерации добавляем код:
ОповеститьОбИзменении(Тип(«ДокументСсылка.ТребованиеНакладная»));
В результате выполнения этой функции обновится кэш представления ссылок указанного типа данных, и в форме обработки мы увидим обновлённые данные.
Также можно использовать метод:
ОбновитьОтображениеДаных()