Обработка выборки документов и выборочное перепроведение по видам движений для 1С-Предприятие-7.7











Обработка позволяет выполнить  над подобранным списком документов следующие действия:
  1) "Провести"; 2) "Отменить проведение"; 3) "Пометить на удаление"; 4) "Снять пометку на удаление"; 5) "Удалить непосредственно"; 6) "Сменить фирму" (если есть общий реквизит ‘Фирма’). Имеются удобные инструменты для подбора выборки документов (Подбор в обработках ‘ПодборUChoice’ и ‘Консоль1CQA’). Реализованы различные опции обработки документов (в том числе ‘выборочное проведение по видам движений’). Описана технология выборочного проведения документов по видам движений.

Другой юноша нес свое:
«Я нашел, как применить здесь нестирающие шины из полиструктурного волокна
с вырожденными аминными связями и неполными кислородными группами.
Но я не знаю пока, как здесь использовать регенерирующий реактор
на субтепловых нейтронах. Миша, Мишок! Как быть с реактором?»
Присмотревшись к устройству, я без труда узнал ВЕЛОСИПЕД.
А.Стругацкий, Б.Стругацкий,
«Понедельник начинается в субботу»

 

Описание проблемы:  

Задача групповой обработки документов разного рода (в том числе перепроведения) также стара, как сама 1С. 

И следовательно, не нуждается в особом описании.

Из-за популярности проблемы имеется масса работ посвященной этой тематике. 

По видимому каждый программист 1С старается внести свой вклад в это дело. 

Поэтому, я решил не отбиваться от коллектива и представляю на суд общественности свою скромную разработку.

 

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

 

Описание файлов поставки:  

1) ОбработкаВыборкиДокументов.rar  —  сама обработка выборки документов; 

2) PlugIns.rar — архив содержит сервисные обработки , без которых работа обработки либо невозможна, либо более удобные, чем соответствующие штатные средства платформы:  

      — ПодборUChoice.ert,  Консоль1CQA.ert  — используются для подбора выборки документов (одна из них обязательно должна быть доступна!);

      — ВыборИзСпискаЗначений_sys.ert — используется для отметки значений в списках фильтров по видам движений и видам подчиненных документов (Рис.4);

3) FormEx1CPP.rar  — содержит класс КОП ‘Общие.Форма.Привязка’ и файлы ВК  1CPP.dllFormEx.dll;

4) _isВидДвиженияЗапись().txt  — содержит пример кода функции, возвращающей значение флага записи по выбранному виду движения документа; 

5) _глПроведениеОчисткаВидовДвижений().txt  — содержит пример кода процедуры для очистки движений документа при его выборочном проведении; 

6) _ОбработкаПроведения().txt  — содержит пример кода с заготовкой процедуры проведения документа,

                                                    реализующей технологию выборочного проведения документа, описываемую в данной работе;   

 

Требования:
1) Желательно наличие внешних компонент:
    а) Внешняя компонента 1CPP.dll (http://www.1cpp.ru/index.php/Download).
        — В некоторых алгоритмах обработки по возможности используется объект ‘Индексированная таблица’.
          Если такой объект не может быть создан — используются «запасные» варианты алгоритмов через ‘ТаблицуЗначений’;
        — Для получения выборки подчиненных документов по возможности используются прямые запросы 1C++. 
          Если прямые запросы не доступны — используются средства, предоставляемые объектом ‘Документ’;
        — Для инициализации дополнительных параметров проведения документов используется объект «ВыполняемыйМодуль».
          Без этого объекта указанная возможность не доступна;

    б) Внешняя компонента FormEx.dll, или ее ядро в составе 1CPP.dll (http://www.dorex.pro/?download).
        — Версия компоненты FormEx.dll или ее ядра должны поставлять объект ‘Сервис’ (используется для выборов из меню).
          Если объект ‘Сервис’ создать не удается — используются «запасной» вариант выбора из меню через ‘СписокЗначений’.


    Если обработка используется как внешняя, специально загружать ВК не требуется. Достаточно разместить файлы библиотек
    в одном каталоге с обработкой. При необходимости обработка сама загрузит ВК при открытии формы.

2) Для красоты в интерфейсе обработки также желательно иметь в конфигурации КОП ‘Общие.Форма.Привязка’
класс определенный пользователем, управляющий привязками в диалоге формы обработки (Автор: Дмитрий Ощепков mailto:dmitro-75@mail.ru).
Если экземпляр класса не удается создать, в форме обработки не работают привязки элементов диалога.

3) Желательно наличие обработки ‘ВыборИзСпискаЗначений_sys‘ для отметки значений в списках фильтра по «Видам движений документов» и фильтра по «Видам подчиненых документов» (Рис.6). Без этой обработки отметка значений осуществляется с помощью средств объекта «СписокЗначений» (Рис.5).

4) Обязательно должна быть доступна одна из обработок подбора объектов:
    — «ПодборUChoice» (//infostart.ru/public/97811/ );
    — «Консоль1CQA» ( //infostart.ru/public/98982/ );
       Без них в обработке не будет возможности заполнить список документов для обработки.

5) Желательно наличие следующих сервисных обработок, используемых при обработке выбора в меню действий с документом при клике мыши по ячейке в таблице выборки документов или в отчете об ошибках обработки:

    — «ИзменениеВремениДокумента» — используется для изменения дата-времени документа;
    — ‘Редактор Реквизитов’ (автор Цылёв Владислав vet7777@mail.ru) — используется для альтернативного редактирования документа;

 

 Установка:

1) Добавить в конфигурацию или скопировать в удобный для работы каталог обработку из архива  ОбработкаВыборкиДокументов.rar.

2) Добавить в конфигурацию или скопировать в тот же каталог сервисные обработки из архива PlugIns.rar  (при их отсутствии).

3) Рекомендуется добавить в конфигурацию или скопировать в тот же каталог прочие сервисные обработки (при их отсутствии).

4) Рекомендуется обеспечить загрузку ВК  1CPP.dllFormEx.dll тем или иным способом. А также подключить класс  КОП ‘Общие.Форма.Привязка’.


Возможности:
1) Обработка позволяет выполнить над выборкой документов ряд действий (выбирается из списка ‘Вид обработки’):
    — «Провести»; 
    — «Отменить проведение»;
    — «Пометить на удаление»; 
    — «Снять пометку на удаление»; 
    — «Удалить непосредственно»;
    — «Сменить фирму» (доступно если в конфигурации есть справочник ‘Фирмы’ и общий реквизит документа ‘Фирма’);

       В таблице выборки документов в колонке «Рез.» выводится статус успешности обработки документа (Рис.7).      В случае ошибок обработки, например из-за блокировок объектов (отмечается красной галкой), при клике мышью по статусу выводится информация о причине ошибки.
      При ошибках обработки документов по ее завершении также выводится отчет об ошибках (Рис.8).
      В разных колонках отчета выводится ссылка на документ и информация об ошибке. 
      При клике мышью по документу, выводится контекстное меню, позволяющее выполнит над документом различные действия, смотри ниже п.5 (Рис.3 и Рис.8).


2) Выборка документов может быть подобрана в обработках со следующими именами:
   — «ПодборUChoice» (Рис.1);
   — «Консоль1CQA» (Рис.2);
 обработки либо должны быть включены в состав конфигурации, либо должны лежать в одном каталоге с данной обработкой (если эта обработка используется как внешняя).

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

4) При загрузке выборки документов из подбора доступны следующие возможности:
   — Принудительная сортировка выборки документов по хронологии (флаг ‘сортировать по хронологии’);
   — Отмена добавления документа в список, если он там уже имеется (флаг ‘пропускать, уже добавленные’);
   — Отмена добавления документа в список, если у него есть подчиненные (флаг ‘пропускать, имеющие подчиненные’);
   — Прямая загрузка выборки документов в таблицу значений диалога, вместо построчного добавления (флаг ‘прямая загрузка выборки’),
     данный режим может оказаться предпочтительной в случае больших выборок документов;    — Добавление отобранной выборки документов в подборе к уже имеющемуся списку документов без изменения структуры колонок (Рис.9).      При заполнении дополнительных колонок в новых строках списка документов последовательно делаются попытки
     чтения значений из выборки документов и из атрибута добавляемого объекта по имени колонки. 

5) При двойном клике мышью по ячейке таблицы выборки документов, выводится контекстное меню,позволяющее выполнить со значением в ячейке следующие действия:
    — открыть объект в списке или диалоге;
    — сформировать отчет о движениях документа; 
    — сформировать структуру подчиненности документа;
    — измененить временя-дату документа (требуется обработка «ИзменениеВремениДокумента»);
    — открыть объект для редактирования в обработке ‘Редактор Реквизитов’ (автор Цылёв Владислав vet7777@mail.ru);

6) Общие опции обработки выборки документов:
    — Обработка всей выборки документов в одной транзакции (флаг ‘в единой транзакции’);
    — Обработка только тех документов, которые ранее были обработаны с ошибкам (флаг ‘только с ошибками’);
    — Задержка между обработкой документов в миллисекундах (не нулевое значение в поле выбора ‘Задержка между обработкой’); 
    — Обработка документов вместе с подчиненными (флаг ‘вместе с подчиненными док-тами следующих видов:’)
     при этом возможна рекурсивная обработка подчиненных документов (включая подчиненные подчиненных),      а также установка фильтра по видам подчиненных документов (Рис.5);

7) Особенности обработки документов при проведении:
    — Помеченные на удаление — пропускаются всегда;
    — Не проведенные — пропускаются, если установлен флаг ‘при проведении пропускать не проведенные документы’ 
      Если флаг не установлен — документы проводятся. По умолчанию флаг устанавливается при открытии обработки;
    — Документы проводятся с передачей в модуль документа параметра проведения, зависящего от значения,
      выбранного в списке «Тип параметра« (Рис.10):

      а. «Неопределено»:
          В качестве параметра проведения используется пустое значение неопределенного типа. Фильтр по видам движений игнорируется.

      б. «Строка ‘ВидыДвижений'»:
          В качестве параметра проведения используется строка фильтра по видам движений ‘ВидыДвижений’.

      в. «СписокЗначений {‘ВидыДвижений’}» и «СписокЗначений {‘ВидыДвижений’; ‘ОсобыеПрава’}»:
          В качестве параметра проведения используется список значений следующего вида
      сзПараметрыПроведения=СоздатьОбъект(«СписокЗначений»);
      сзПараметрыПроведения.Установить(«ВидыДвижений»,ВидыДвижений);
      сзПараметрыПроведения.Установить(«$ОсобыеПраваПрограмногоПроведения$»,1);
// — для последнего варианта с особыми правами

      …
      рез=ДокуменОбъект.Провести(,сзПараметрыПроведения);

      В качестве строки фильтра по видам движений ‘ВидыДвижений’ используется значение поля ввода «Выборочно проводить по видам движений« (Рис.4),
      которая составляется строка из идентификаторов видов движений документов, отмеченных в списке фильтра, разделенных точкой с запятой.
      Строки идентификаторов видов движений соответствуют описанию встроенной процедуры ОчиститьДвижения();

      Параметр «$ОсобыеПраваПрограмногоПроведения$» может быть использован в модуле проведения, для обхода контроля некоторых ограничений,       например, даты запрета редактирования или особых прав на проведение документа.

      Параметр проведения документов можно произвольно переопределять с помощью текста модуля инициализации параметров проведения.      Например, можно установить в списке значения с другими именами или перезаписать строковым значением:      сзПараметры=«Операция»;       Использование модуля инициализации доступно при наличии ВК 1cpp.dll (используется объект «ВыполняемыйМодуль»).       С помощью кнопки «add module string« (Рис.11) можно вставить выбором из меню заготовку для строки кода модуля инициализации.         С помощью кнопки «test module« (Рис.6) можно проверить правильность модуля инициализации параметров проведения, а также       просмотреть значение переменной с параметром проведения документов.       Для просмотра списка в форме показанной на Рис.6 необходимо наличие в конфигурации подсистемы ViewValues (просмотр «табличных» объектов).

8) Для обеспечения выборочного проведения документа по видам движений в модулях документов
должна быть реализована корректная обработка параметра «ВидыДвижений», передаваемого в списке значений через аргумент процедуры ОбработкаПроведения(<Знач>).

    Примерная схема реализации выборочного проведения следующая:
       а) У интересуемых документов снимается флаг автоматического удаления движений при проведении;
       б) В глобальном модуле добавляются экспортные процедуры и функции (смотри примеры ниже):
             — isВидДвиженияЗапись(ИдВидДвиженияИд,ВидыДвижений)
               возвращает флаг записи по выбранному виду движения ИдВидДвиженияИд (Пример кода 1);
             — глПроведениеОчисткаВидовДвижений(Конт,ВидыДвижений)
               выполняет очистку видов движений с учетом значений флагов записи (Пример кода 2); 
       в) В процедуре ОбработкаПроведения(<Знач>) в самом начале из параметра вычисляется список видов движений ВидыДвижений.
           Этот список лутше хранить в переменной модуля. Затем програмно очищаются нужные виды движений вызовом 
           процедуры глПроведениеОчисткаВидовДвижений(Контекст,ВидыДвижений) (Пример кода 3);
       г) Далее во всех алгоритмах проведения запись движений должна осуществляться только тогда, когда значение флага
           записи по выбранному виду движения, возвращаемый функцией isВидДвиженияЗапись(ИдВидДвиженияИд, ВидыДвижений), больше нуля.

     При реализации выборочного проведения документов следует учесть следующее:

       а) В предлагаемой схеме, если не указан список видов движений, то выполняется запись по всем видам движений.
           Но прикладная логика конфигурации может быть иной. 
           Например, в «Комплексной конфигурации-7.7» движения по бухгалтерским проводкам зависят от настроек базы:
              — Они могут быть созданы сразу (вместе с движениями по регистрам оперативного учета);
              — А могут формироваться отдельно регламентной обработкой в конце месяца;

       б) Некоторые виды движений могут быть взаимосвязанными. Например себестоимость в регистре продаж зависит от стоимости, списанной по партиям товаров.

 

Использование:

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

 

Благодарности:

      Выражаю огромную благодарность Павлушиной Александре за полезные советы, дружескую помощь и живое человеческое общение за время совместной работы! Laughing 

25 Comments

  1. yuraos

    Всем доброе время суток!

    Это последний велосипед из из трёх обещанных в статье об обработке ObjectsCleaner.

    :))))))))))))))))))))))

    Прошу сильно не ругатся 😳 ….

    Reply
  2. Шёпот теней

    … увлекаясь спицами … не потеряйте велосипед ! …

    п.с. для чего СУществует 1С … ???

    … вотВОПРОСвот …

    Reply
  3. yuraos
    Шёпот теней пишет:

    … увлекаясь спицами … не потеряйте велосипед ! …

    п.с. для чего СУществует 1С … ???

    … вотВОПРОСвот …

    ОДНОЗНАЧНО — ОДНО:

    щёб БОРЯ НУРАЛИЕВ …

    … мог на КАНАРАХ оттягиваться

    :))))))))))))

    ВОТответВОТ

    ЗЫ

    Всех с наступившим (новым годом) и с прошедшим (концом света) !!!

    Reply
  4. Гость

    Попробуем

    Reply
  5. yuraos

    Всем доброго времени суток!

    Обновлен файл поставки ОбработкаВыборкиДокументов.rar

    Текущие изменения:

    1) исправленн довольно неприятный баг:

    при обработке команды контекстного меню при клике по ячейке таблицы значений

    независимо от выбранной команды просто открывалась форма объекта для просмотра.

    2) в контекстное меню добавлены команды (для документов):

    — открыть в общем журнале (отыскивается первый подходящий по своствам объкта Метаданные.Журнал(о));

    — открыть список подчиненных документов;

    3) исравлены другие незначительные баги.

    Reply
  6. voyger_men

    Отлично, велосипед не велосипед, но мне очень помогло, спасибо большое что выкладываете обработки!

    Reply
  7. corsar4ik
    Всем доброго времени суток!

    Обновлен файл поставки ОбработкаВыборкиДокументов.rar

    Текущие изменения:

    1) исправленн довольно неприятный баг:

    при обработке команды контекстного меню при клике по ячейке таблицы значений

    независимо от выбранной команды просто открывалась форма объекта для просмотра.

    2) в контекстное меню добавлены команды (для документов):

    — открыть в общем журнале (отыскивается первый подходящий по своствам объкта Метаданные.Журнал(о));

    — открыть список подчиненных документов;

    3) исравлены другие незначительные баги.

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

    Upd. извиняюсь, умеет…

    Reply
  8. corsar4ik

    В реале нужная весчь.. помогла после переноса, облегчила работу бухам ппц… Спасибо за велосипед!)

    Reply
  9. yuraos

    (8) corsar4ik, пожалуста! 🙂

    по поводу (7):

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

    после успешной обработки документа из базы дергается таблица подчиненных документов.

    если доступны прямые запросы 1с++ — дергается прямым запросом,

    если прямые запросы недоступны — заполняется выборкой подчиненных документов

    методом ДокОбъект.ВыбратьПодчиненные(,,).

    в обоих случаях таблица упорядочивается по хронологии и

    передается для обработки той же процедуре,

    что используется для обрабатки исходной выборки документов.

    насчет «в порядке времени правильном» — тут трудно сказать…

    …можно лишь утверждать:

    что на каждом уровне рекурсий (уровне подчиненности) выборка подчиненных документов

    (для конкретного документа владельца)

    обрабатывается хронологически по возврастанию.

    PS

    Причем последнее относится не только к проведению, но и вообще ко всем видам обработки.

    Reply
  10. corsar4ik

    да, лютая штуковина.. только он у меня не проводил ничего сначала, пришлось обнулять параметр проведения в коде :(.. может я не разобрался?

    Reply
  11. yuraos

    (10) corsar4ik, да нет …

    …»обнулять» параметр проведения вроде бы не надо

    (ну если конечно в алгоритмах проведения чего-нибудь такого не наворочено 🙂 ).

    В обработке правда много всяких «тыч»,

    например — «пропускать непроведенные документы» или «пропускать имеющие подчинненые»,

    случайная установка которых может привести к совсем не к тому результату, который ожидается.

    PS

    Использование параметра проведения — нестандартная возможность.

    Нужно чтобы алгоритмы проведения «знали» что делать, если он передается.

    Я параметр использовал проведения для двух вещей:

    1. отключение некоторых проверок при проведении («$ОсобыеПраваПрограммногоПроведения$»).

    2. выборочное проведение по регистрам.

    При этом пришлось довольно основательно подправить модули проведения документов.

    Об этом разсказано в статье, примеры реализации в файлах поставки:

    _isВидДвиженияЗапись().txt

    _глПроведениеОчисткаВидовДвижений().txt

    _ОбработкаПроведения().txt


    .

    Reply
  12. corsar4ik

    это, господин автор, сделайте пожалуйста, чтобы через UChoice можно было добавить много документов разных типов.. чтобы ТЧ не очищалась.. это вообще возможно?

    Reply
  13. yuraos

    (12) corsar4ik, как бывший физик авторитетно заверяю,

    что возможно все, что не противоречит закону сохранения энергии-импульса.

    😉

    1. Если ты имеешь ввиду, что бы сам UChoice сам подбирал документы разных видов…

    …то это довольно сильно поломает прикладную логику обработки и следовательно изменения будут довольно затратны

    (выбор видов документов + организация отборов по значениям реквизитов + не поломать что-нибудь в целом).

    2. Если достаточно просто добавлять подобранные в UChoice объекты к уже выбранным в «ТЧ» докуменам,

    то это сделать достаточно просто.

    Reply
  14. yuraos

    (13) правда последовательное добавление объектов из UChoice в список документов

    имеет недостаток:

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

    то можно ошибиться при установке фильтров в UChoice и получить не то, что хотелось

    Я даже думал не сделать ли такую возможность, но решил не замарачиваться в связи с выше сказанным.

    Лично я списки документов подбирал, как правило, с помощью консоли прямых запросов 1CQA.

    Там можно «нарисовать» выборку документов по самым произвольным условиям,

    например, относящся определенной фирме и двигавших по определенному регистру.

    PS

    Если интересно,

    могу выложить настройки запроса 1CQA

    для выборки документов указанных в тексте запроса видов в определенном интервале дат.

    Reply
  15. corsar4ik

    Да, я думал прикольно было бы если бы 🙂

    в вопросе «ОЧИСТИТЬ ТАБЛИЧНУЮ ЧАСТЬ?» был бы пункт «Нет, добавить в существующую».. я просто без 1спп работал..

    п.с. Вы лютый тип) потому что никто из авторов так активно не общался в комментах

    Reply
  16. yuraos

    (12) corsar4ik,

    СЧАСТЬЕ ЕСТЬ, ОНО не может не ЕСТЬ!

    Качай!

    Reply
  17. yuraos

    (12)(16)

    Всем доброго времени суток!

    Обновлен файл поставки ОбработкаВыборкиДокументов.rar.

    Текущие изменения:

    1. Учтено пожелание уважаемого corsar4ik

    т.е. реализован режим добавления отобранных в подборе объектов к уже имеющемуся списку документов.

    При добавлении новых объектов структура колонок списка не меняется.

    Значения для дополнительных колонок в новых строках читаются по именам колонок из таблицы подбора.

    При неудачном чтении

    (другой набор отображаемых в подборе колонок)

    значения читаются по именам колонок из атрибутов объекта.

    Если таких атрибутов нет — остаются незаполненными.

    2. Снято ограничение на тип параметра проведения при его изменении в модуле инициализации.

    До этого параметр должен быть обязательно списком значений. Теперь его можно произвольно переопределять.

    Например присвоить просто строковое значение:

    сзПараметры=»Проводки»;

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

    Reply
  18. corsar4ik

    Мега_спасибо!

    Reply
  19. yuraos

    (18) corsar4ik, Пожалуста! 😉

    Reply
  20. yuraos

    (17), по пункту два текущих изменений — пока работает по старому.

    Поправлю в бдизжайшее время.

    ЗЫ

    Факир был пъян ;))))

    Reply
  21. yuraos

    Доброе всем время суток!

    Обновлены файлы поставки:

    ОбработкаВыборкиДокументов.rar и

    _isВидДвиженияЗапись().txt

    Текущие изменения:

    1. Устранено досадное недоразумение, о котором говорится в (20).

    2. Оптимизирована работа с параметром проведения документов

    (для большей универсальности вообще и

    для совместимости с комплексной конфигурацией в частности).

    Теперь тип параметра проведения документов выбирается в списке диалога обработки.

    Поддерживаются следующие варианты:

    Неопределено (пустое значение неопределенного вида);

    Строка (строка фильтра по видам движений) — как в комплексной конфигурации;

    — и два варианта со СпискомЗначений (Без флага особых прав и с флагом) — исходный вариант типа параметра;

    3. В списке отметки фильтра видов движений добавлено значение <<Регистр>> — по любым регистрам

    (для совместимости с комплексной конфигурацией).

    В функции isВидДвиженияЗапись() в примерах кода внесены изменения,

    учитывающие фильтр движений документа «ПоВсемРегистрам».

    Reply
  22. 6630

    нужная вещь, протестирую. отпишусь

    Reply
  23. CheBurator

    Выложить для скачик дестйок файлов вместо одного архива — это издевательство.

    Reply
  24. olezhe

    Спасибо, работает.

    Reply
  25. GenTay

    Гигантская работа.

    Reply

Leave a Comment

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