REGTool Полезные операции с регистрами накопления


Усовершенствованная http://infostart.ru/public/60413/ Расширен функционал. Добавлен поиск и замена значений. Добавлено заполнение РБ по данным РН по шаблону проводки. Добавлено использование транзакций и выполнение произвольного кода.

Писал для себя. По мере возникновения необходимости, буду расширять список возможных операций. Данное описание так же доступно по кнопке «Справка» на форме обработки.

Функционал:

— Закладка «Замена значений». Доступны 3 функции: «Поиск и замена» значения в записях выбранного регистра, «установка значения» (если нужно заменить абсолютно все значения поля на указанное), «Выполнить код». Сперва необходимо выбрать регистр, после чего появятся доступные поля: измерения, ресурсы, реквизиты. Для того, чтобы заменить пустое (незаполненное значение) на указанное, достаточно выбрать просто тип. Также возможен отбор движений по регистраторам, список которых открывается по кнопке «Регистраторы…» Если список пуст, поиск и замена (либо установка значения) произведется по всей таблице регистра. Кнопка «Выполнить код» вставляет в цикл обработки записей набора записей произвольный программный код (текстовое поле в нижней части закладки) и выполняет его. Удобно, когда нужно заполнить значение поля записи не фиксированным значением, а вычисленным по другим полям, либо произвольным алгоритмом. Удобно для обработки документов «Корректировка записей регистров».

— Закладка «Заполнить РН». Возможность создания документа корректировки записей регистра с записями остатков первого регистра на дату. Удобно, например, в случаях, когда в базе начинают вести учет БУ, НУ или УУ и необходимо заполнить регистры данными какого-либо из видов учета. (Например, в УПП, ввести начальные остатки партионного учета БУ, НУ по УУ). При выборе второго регистра заполняется список полей этого регистра, отсутствующих в первом, для того, чтобы иметь возможность при заполнении регистра заполнить пустые поля каким-либо значением.  

— Закладка «Заполнить РХ». Возможность создания документа «ОперацияБУХ» с проводками по данным остатков выбранного в шапке регистра накопления. Для указания соответствия полей есть «Шаблон проводок», где можно задать для любого поля проводки — поле регистра, откуда будет браться значение. Например, если необходимо ввести начальные остатки по ТМЦ по данным регистра «ПартииТоваровНаСкладахБухгалтерскийУчет», указываем в шаблоне для поля СчетДт — поле «СчетУчета» из регистра накопления. Для поля «СубконтоДт1» — поле «Номенклатура» регистра итп… Для указания счетов и организации в явном виде, на форме есть соответствующие реквизиты, так как для формирования корректной проводки по БУ необходимо наличие 2х счетов (если счет учета балансовый) и Организации. Поэтому в указанном примере, если речь идет о внесении начальных остатков, необходимо заполнить СчетКт («000»). После заполнения шаблона проводок и указания организации и счетов, необходимо нажать кнопку «Создать операцию». Так же, есть возможность отбора по сумме остатка (Например, в Бух 8.1, есть регистры взаиморасчетов с контрагентами. И знак суммы определяет принадлежность остатка к дебиторской, либо кредиторской задолженности (с учетом авансов), а это разные счета.) То есть, в явном виде сперва указываем один счет, указываем знак суммы остатка, и создаем операцию, потом, меняем счет и знак суммы, и создаем вторую операцию.

— Закладка «Сведение в ноль» имеет одну кнопку, создающую документ корректировки записей регистра с записями, сводящими в ноль остатки на дату.

— Закладка «Удалить все записи» очищает всю таблицу регистра накопления. Принцип работы: Выполняется запрос с группировкой по регистраторам по виртуальной таблице оборотов регистра. Перебирая регистраторы создаются и очищаются наборы записей. Пользователям SQL баз рекомендуется делать средствами SQL (TRUNCATE TABLE очищает таблицу за секунду максимум)

Так же можно использовать транзакции. Настройка в верхней правой части обработки.

79 Comments

  1. ghostishe

    Скриншоты есть, при редактировании присутствуют в списке картинок, а в самой публикации не вижу их. Может, это временно. 🙁

    Reply ↓
  2. Душелов

    Я бы посоветовал использовать документ, аля «КорректировкаЗаписей регистровНакопления» в типовых.

    Всегда можно откатиться и никакие перепроведения не «испортят»все назад…

    Reply ↓
  3. ghostishe

    (2) Я эту обработку писал, в основном, для этого документа. Когда надо, например, в имеющемся документе корректировки что либо сделать. Или заполнить по данным корректировки данные БУ

    Reply ↓
  4. ghostishe

    (2) К тому же, если прочесть описание до конца, 😉 то видно, что основная доля функций создает документы корректировок. Только закладка «Поиск и замена значений» меняет записи регистра по различным регистраторам

    Reply ↓
  5. Philatoff

    {ВнешняяОбработка.СведениеРегистраВНоль(154)}: Поле объекта не обнаружено (КорректировкаЗаписейРегистров)

    Reply ↓
  6. ghostishe

    (5) Круто, а где инфа о конфигурации?

    Reply ↓
  7. ghostishe

    Попытка

    НовыйДокументКорректировки = Документы.КорректировкаЗаписейРегистровНакопления.СоздатьДокумент();

    Исключение

    НовыйДокументКорректировки = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент();

    КонецПопытки;

    Попытка (1й вариант для старых УПП (если кто-то релиз для 8.0 перевел на 8.1) или для ЗУПа)

    Исключение (для более новых релизов УПП, БУХ, КА).

    Если есть какая-то типовая, в которой этот документ называется по-другому, скажите. После вашего ответа буду править. Проверить на АБСОЛЮТНО всех типовых 8.1 не могу =)

    Reply ↓
  8. Philatoff

    Конфа самописная.

    Reply ↓
  9. ghostishe

    (8). 😀 Ну а как обработка создаст документ корректировки, если он либо отсутствует, либо имеет придуманное самописцами название? Я достаточно подробно написал инструкцию. Там написано, что создается док. корректировки. если у вас есть документ, который может являться регистратором для выбранного вами регистра, скажите, как называется, я добавлю. Если вы тестили не ради интереса, а для использования, я без проблем добавлю.

    Reply ↓
  10. ghostishe

    (8) при создании публикации я честно и исправно выбирал в списке типовых решений все конфы 1С, в которых обработка будет работать. Причем в окне редактирования они есть, а в заголовке публикации я их не вижу. не знаю, почему. наверное, сайт подглючивает.

    Reply ↓
  11. e.kogan

    1. Почему только регистры-остатки? Неужели оборотные так сложно обработать?

    2. Попытаюсь сейчас дописать к ней выполнение произвольного кода. Если получится — поставлю плюс за портируемость 😉

    Reply ↓
  12. ghostishe

    (11)

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

    По поводу добавления функций, сам планирую:

    — добавить выполнение произвольного кода 😉

    — решить обратную задачу (БУ —> РН) (будет удобно для фанатов ручных операций, например)

    Reply ↓
  13. e.kogan

    Всегда пожалуйста. Тогда я чуть подожду кода (добавили измерение, сейчас его заполнить надо — а оно неочевидно). Надеюсь, что код будет не под «Вычислить», поскольку в моём случае там как минимум запрос нужен, одной строкой не обойтись.

    Тогда уж и хелп стоит доработать, и добавить флаг «В транзакции» и размер транзакции…

    Reply ↓
  14. ghostishe

    (13) Ну с изменениями и хелп изменится…

    С транзакциями хорошо… На НаборЗаписей.Записать(); поставлю.

    Запросом хотите выбирать что-то из текущей записи, значения нового измерения будут зависеть от значений других полей? (передавать в код обрабатываемую запись?)

    Reply ↓
  15. e.kogan

    (14) Безусловно передавать. У меня есть некий периодический реквизит (в регистре сведений). Мне нужно на дату движения + 1 его найти для значения одного из измерений и его записать в реквизит (!) регистра.

    Reply ↓
  16. ghostishe

    (15) Понял, будет минутка в ближ. время, доделаю.

    Reply ↓
  17. ghostishe

    (15) Выложена новая версия. Теперь можно использовать транзакции и выполнять произвольный код. Спасибо e.kogan за замечания и предложения по расширению функционала

    Reply ↓
  18. e.kogan

    {ВнешняяОбработка.RegTool(527)}: Деление на 0

    Откройте код, а?

    Reply ↓
  19. artbear

    Возможно, обработка и полезна.

    Но при закрытом коде лично я столь опасную вещь юзать не буду 🙁

    Reply ↓
  20. ghostishe

    (18) Исправил.

    (18), (19) Про код уже говорил. Не хочу «пальцегнутых» комментариев, поэтому не открываю. В частном режиме в личку пишите, пришлю с открытым, если хотите код. Только, пожалуйста, не для того, чтоб лишний раз подстебаться над чем-нибудь, а по делу.

    P.S. 344 скачки, и если каждый будет писать тут в комментах и обсуждать модификацию кода, где, что и как бы они сделали, что так, как я написал — тупо, убого и неправильно, смеясь над автором (мной), мне этого тут не нужно. Советы, комменты об ошибках, предложения по функционалу лишь приветствую. Просто есть люди, которые адекватно могут указывать на ошибки в коде и давать советы, а есть другие… (18), (19) Если вам двоим нужно, пришлю без пароля.

    Reply ↓
  21. artbear

    (20) Присылай, мыло в личку указал.

    PS лично я никогда не издевался/стебался над чужим кодом, свой всегда стараюсь также не скрывать.

    ЗЗЫ Поизучать чужой код страсть как люблю 🙂

    Reply ↓
  22. e.kogan

    Кстати, что-то мне не кажется, что регистраторы обрабатываются в хронологическом порядке. А это большое зря.

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

    Reply ↓
  23. ghostishe

    (21) В личке пусто.

    (22) Для самопального конечно лучше попытки на каждом шагу ставить. Ща сделаем. В чем «зря» хронологии?

    Reply ↓
  24. e.kogan

    Зря — это как раз о НЕ-хронологическом. Принципиально. Так обрабатывать проще. А то у меня тут обработался документ 2009 года — а за ним 2008-го.

    Reply ↓
  25. artbear

    (23) Два сообщения тебе написал 🙁

    присылай на artbear не кошка inbox точка ru

    Reply ↓
  26. ghostishe

    (24) Хм.. У меня почему-то по дате. Сейчас явно в запросике упорядочим…

    Reply ↓
  27. e.kogan

    А у нас период не всегда равен дате документа. А для обработки по регистраторам лучше всё-таки по ним упорядочить.

    Reply ↓
  28. ghostishe

    (27) Сделал. Выложил сюда и выслал вам 2м на почту. Упорядочивание по Дате регистратора

    Reply ↓
  29. ghostishe

    Добавлено «ОграничениеТипа» для списка регистраторов отбора. Теперь при выборе типа регистратора «лишнее» в списке отсутсвует.

    Reply ↓
  30. skyp

    Большой респект автору! Обработка реально помогла.

    Reply ↓
  31. ghostishe

    (30) Спасибо. Приятно

    Reply ↓
  32. provnick

    если не затруднит, прошу тоже выслать provnick sobaka rambler.ru, учусь вот на старости лет, интересно логику посмотреть из рабочих кодов

    Reply ↓
  33. ChinChin

    А есть что нибудь похожее для регистров сведений?

    Reply ↓
  34. ghostishe

    (33) Пока нет. Пока это в проекте. делаю в своб. время.

    Reply ↓
  35. platinum

    Интерфейс «сведения в ноль» и «удалить записи» просто убийственный)) поменьше кнопочку может стоит все-таки сделать)

    И было бы очень полезно сведение в ноль делать,не всего регистра, а по указанному реквизиту из регистра.

    Reply ↓
  36. platinum

    И где бы найти такую обработку,которая помогла бы сформировать документ «корректировка движений по регистру» с выбором по контрагенту.

    Reply ↓
  37. ghostishe

    (35) с кнопкой согласен, перебор, зато не промахнетесь =)

    Можно, в принципе, отбор сделать, идея хорошая, принято на реализацию.

    Reply ↓
  38. kondrata

    если возможно, пришлите код разблокировки, не хочется пользоваться вслепую ) kondratievab@mail.ru

    Reply ↓
  39. ghostishe

    (38) попробуйте на копии, если боитесь, это гораздо быстрее, чем копаться в 700 строках кода.

    Reply ↓
  40. kondrata

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

    Reply ↓
  41. kondrata

    ну и м быть фильтр прикрутить , удалять по опредленным видам документов

    Reply ↓
  42. ghostishe

    (41) Отправил в открытом виде на мыло.

    Reply ↓
  43. DaNN

    Здравствуйте, а можно вас попросить мне тоже выслать код разблокировки. Очень не хочется самому с нуля писать, к тому же у вас все очень красиво и аккуратно. Мне просто надо подменить значения еще и у регистров расчета, к тому же чтобы не дежурить у компа хочу еще сделать подмену у списка регистров, а не только у одного. nekrasovdima@list.ru

    Reply ↓
  44. ghostishe

    (43) ловите

    Reply ↓
  45. DaNN

    (44) Спасибо огромное, очень полезная обработка

    Reply ↓
  46. Яшко

    Добрый день! У Вас есть такое замечание:

    Пользователям SQL баз рекомендуется делать средствами SQL (TRUNCATE TABLE очищает таблицу за секунду максимум)

    , а подскажите, пожалуйста, как это можно реализовать? Просто получилась такая ситуация: документ «перенос данных» в ЗУП из-за криво написанной обработки сделал несколько миллионов записей в регистре накопления, вариант с созданием и записью наборов по регистратору не подходит, системе не хватает памяти и вылетает, а через truncate table как сделать, информацию найти не могу(

    Reply ↓
  47. ghostishe

    (46) Для начала надо найти соответствие таблице 1С вашего регистра таблицам SQL .

    Затем запустить SQL management studio и ввести команды

    TRUNCATE TABLE ИМЯТАБЛИЦЫ, где ИМЯТАБЛИЦЫ — имя SQL таблицы, соотв. вашему регистру. описание этого есть в любом справочнике по SQL в интернете. УДАЛЯЕТ ТАБЛИЦУ ЦЕЛИКОМ!!!

    Reply ↓
  48. cleaner_it

    Один момент: при выборе даты сделай, чтобы она устанавливалась на конец дня, оно так правильнее будет:)

    Reply ↓
  49. ghostishe

    (48) в каком месте выбор даты? Все остатки регистров берутся на конец даты, более того, включая ГРАНИЦУ.

    Reply ↓
  50. script

    А можно и мне на мыло без пароля, нужно доделать закрытие регистров бухгалтерии в 0

    в корреспонденции с нулевым счетом

    Script@obuhov.net

    Reply ↓
  51. Demik_a

    37.

    ghostishe 18.01.2010 09:13 Пожаловаться

    (35) с кнопкой согласен, перебор, зато не промахнетесь =)

    Можно, в принципе, отбор сделать, идея хорошая, принято на реализацию.

    До сих пор не реализовано, можете выслать пароль или незапаралированную обработку на joker13@list.ru

    Нужно очень срочно! надо вставить отбор по организации. Вышлите кто-нибудь у кого она есть.

    Reply ↓
  52. pasha_d

    Добрый день, отличная обработка! =)

    Такой вопрос: можно изменить «Поставщика» в регистре накопления «НДСПредъявленный» на тот который соответствует «Контрагенту» в «СчетеФактуреПолученный»?

    Reply ↓
  53. ghostishe

    (53) С помощью обработки — нет.

    Reply ↓
  54. Demik_a

    ghostishe

    Можете выслать пароль или незапаралированную обработку на joker13@list.ru

    Нужно очень! надо вставить отбор по организации.

    Reply ↓
  55. ghostishe

    (55) не пойму, в чем проблема. Есть же поле для выполнения произвольного кода. Пропишите туда отбор.

    Если Запись.Организация = … Тогда

    // То, что хотите сделать

    КонецЕсли;

    Reply ↓
  56. Demik_a

    ghostishe

    (55) не пойму, в чем проблема. Есть же поле для выполнения произвольного кода. Пропишите туда отбор.

    Отбор нужен в режиме «Сведение в нуль», а там нет такого поля.

    Reply ↓
  57. eli1984

    Обработка хорошая. А можно ли сформировать по оборотам одного регистра для заполнения другого регистра, а не только остатками как у вас. Если нет вышлите пароль, сама доделаю, очень надо.

    Reply ↓
  58. ghostishe

    (57) Сделал произвольный код для сведения в 0. В место, где обрабатывается полученная ТЗ по остаткам регистра, содержащая все записи. Можешь делать с ней, что хочешь. Если что — обработка без пароля на https://sites.google.com/site/ghostishe1c

    И, если не лень, желательно кликнуть на гугловской рекламке.

    Reply ↓
  59. ghostishe

    (58) заполнение оборотов по оборотам не предусмотрено. В предыдущем сообщении — ссылка на обработку без пароля.

    Reply ↓
  60. eli1984

    Спасибо большое. Попробуем.

    Reply ↓
  61. Demik_a

    Спасибо.

    Reply ↓
  62. as7bs
    Если что — обработка без пароля на https://sites.google.com/site/ghostishe1c

    Там тоже — «Введите пароль для просмотра текста модуля».

    Можно мне без пароля.

    Reply ↓
  63. irishka77

    Спасибо за обработку. Помогла «с кодом» подправить регистры перенесенные из Зик

    Reply ↓
  64. Altez

    {ВнешняяОбработка.RegTool(179)}: Ошибка при вызове метода контекста (Записать): Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Накопления по дисконтным картам)

    по причине:

    Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Накопления по дисконтным картам)

    к чему бы это?

    буду рад несказанно коду обработки, мыло в личке

    Reply ↓
  65. Altez

    (63) автор старался, респект,

    отловить блох помогло http://help1c.com/files/view/60.html

    регтул_без_пароля

    Reply ↓
  66. avavadim

    Спасибо автору за обработку.

    Reply ↓
  67. avavadim

    обработка реально помогла — только пришлось добавить период для замены значений — это если не все менять а только в определенном периоде… тогда быстее работает и функционал расширился…

    Reply ↓
  68. Valdis_KH

    супер обработка. Мне очень помогла при переходе с ЗиК 77 на ЗБУ 8, при исправлении косяков в остатках

    Reply ↓
  69. Helgaadr

    Эта обработка оказалась спасением при переводе наших филиалов (которые работали каждый в своей программе) в доп. офисы.

    Reply ↓
  70. MYRZILKA123

    стоял вопрос очень долгое время ваша обработка очень сильно мне помогла большой ВАМ респект и человеческое спасибки))))

    Reply ↓
  71. MYRZILKA123

    у меня вопрос к создателю, а почему модуль обработки закодирован? )))

    Reply ↓
  72. gull22

    Здравствуйте Андрей.

    Вопрос как к разработчику обработки.

    1. Работаем в Комплексной автоматизации 8.2. Пока разобрались что к чему, успели провести документы «Реализация товаров и услуг» либо без указания подразделения (прописывается в РН «Продажи»), либо указали вспомогательное подразделение. Те периоды уже закрыты и перепроводить документы нецелесообразно. Каким образом можно отфильтровать нужные документы в Вашей обработке для изменения записей в РН «Продажи»?

    В качестве фильтра хотелось бы использовать Контрагента и Номенклатуры (списком или в группе).

    2. Зачем нужна дата в шапке обработке? На что влияет?

    3. Правильно ли я понимаю, что если выберу нужный регистр в шапке обработки (например, РН «Продажи», оставлю столбец «Значение до» по реквизиту «Подразделение» пустым, а в столбце «Значение после» заполню конкретным подразделением, и нажму кнопку «Поиск и замена», то все пустые значения «Подразделения» в РН заполнятся конкретным подразделением?

    4. Правильно ли я понимаю, что если оставить все столбцы в «Значеие» пустыми и нажать кнопку «Установка значения» то все поля выбранного регистра очистятся?

    Пожелания. При выборе регистра выводить его поля в табличную часть с возможностью фильтрации (как в типовой конфе), чтобы можно было выполнять операции над выбранными полями регистра. То есть заменить Ваш выбор регистратора на привычный интерфейс типовой конфигурации.

    Reply ↓
  73. MYRZILKA123

    Разработчик??!!! Ты где?????

    Reply ↓
  74. ghostishe

    Господа, обработке более 2х лет, я вообще сюда редко захожу. Если нужна обработка без кода (74) — пишите в личку — вышлю. Что касается (73): насколько я помню, там есть поле для произвольного кода. В него вы можете вставить любой отбор, какой захотите. Если нужны какие-то серьезные доделки под Ваши нужды — пишите в личку: обсудим. Обработка делалась под нужды моего предприятия, я сделал ее более-менее универсальной и выложил сюда, чтобы те, кому подходит ее функционал, бесплатно могли ей воспользоваться. Еще: (73). Если сомневаетесь в правильности работы обработки, или вы просто не программист, чтобы рыться в коде, можете проверить ее работоспособность на копии рабочей базы, чтобы посмотреть, что и как она делает.

    Reply ↓
  75. Lenchik

    Спасибо большое! Обработка помогла исправить косяки переноса и сохранила драгоценные часы сна))))

    Reply ↓
  76. post279

    А для бюджетки будет работать?

    Reply ↓
  77. buval

    Обработку использовал только в режиме «Закладка «Сведение в ноль» имеет одну кнопку, создающую документ корректировки записей регистра с записями, сводящими в ноль остатки на дату.»

    Предложения:

    — при нажатии кнопки «Свести регистр в ноль» надо где-то сообщить , что сформирован документ «Корректировка регистров». (Три раза «наступил на грабли» прежде чем посмотрел результат в отчете )

    — при сведении в регистра в ноль желательно и минусовые остатки убирать. Убирал вручную.

    Reply ↓
  78. ghostishe

    (79) buval, надо где-то сообщить , что сформирован документ «Корректировка регистров» Это написано в инструкции и в описании к обработке. Хотя, обработке уже 5 лет, и она не подвергалась изменениям. Если бы было актуально сейчас, разумеется, я бы учел все недостатки.

    Reply ↓
  79. buval

    (80)

    Закрыл еще раз регистры в «0». Все отрицательные движения были закрыты. Прошу извинить.

    Вопрос «- при сведении в регистра в ноль желательно и минусовые остатки убирать. Убирал вручную.» не верен!

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *