Как найти новые документы автора, в т.ч. созданные программно

11.03.09

Разработка - Универсальные функции

Как найти новые документы автора, в т.ч. созданные программно  и не прописанные в журнале регистрации (v77). Передо мной встала такая задача: пользователь создал много новых документов обработкой в разных периодах, а потом захотел сделать откат назад. Делюсь, может кому-нибудь пригодится.

Идея поиска таких документов, в общем, довольно простая: найти первый документ (по реальному времени его создания) пользователя, и, исходя из того, что у созданных позднее документов внутренний идентификатор больше, в цикле увеличиваем его и пробуем найти реальный документ. Напоследок проверяем автора.

Остались тонкости, в частности, использование методов ЗначениеВСтрокуВнутр / ЗначениеИзСтрокиВнутр выделение префикса ИБ и выяснение такого факта, что для позиционирования документа по внутреннему представлению его вид  - неважен.

Функция НайтиНовыеДокументы(ПервыйДокумент)
    
  // начало строки внутр. представления по первому попавшемуся виду документа
  НачалоСтрВнутр = ЗначениеВСтрокуВнутр(ПолучитьПустоеЗначение("Документ." + 

      Метаданные.Документ(1).Идентификатор)); 
  НачалоСтрВнутр = Лев(НачалоСтрВнутр,СтрДлина(НачалоСтрВнутр) - 15); 

  // 13 на ИД, кавычка и скобка }
     
  // выделить ИД и префикс ИБ первого документа
  НачИндекс      = Лев(Прав(ЗначениеВСтрокуВнутр(ПервыйДокумент.ТекущийДокумент()),15),13);
  ПрефиксБазы    = Прав(НачИндекс,3);
  НачИндекс      = Число(Лев(НачИндекс,10));
    
  // найти конечный ИД из нового документа                                             
  НачатьТранзакцию();
  Док            = СоздатьОбъект("Документ." + Метаданные.Документ(1).Идентификатор);
  Док.Новый();
  Док.ДатаДок    = ТекущаяДата();
  Док.АвтоВремяКонецДня();
  Док.Записать();

  КонИндекс      = Число(Лев(Прав(ЗначениеВСтрокуВнутр(Док.ТекущийДокумент()),15),10));
  ОтменитьТранзакцию();
 
  Док            = СоздатьОбъект("Документ");
  СписокДокументов = СоздатьОбъект("СписокЗначений");
  ВсегоНайдено   = 0; 
  ЕстьАвтор      = Метаданные.ОбщийРеквизитДокумента("Автор").Выбран();
 
  Состояние("Найдено : 0");
  Для М1 = НачИндекс По КонИндекс Цикл
    ТекДок = НачалоСтрВнутр + Прав("         " + М1,10) + ПрефиксБазы + """}";
    ТекДок = ЗначениеИзСтрокиВнутр(ТекДок);     
    Если ПустоеЗначение(ТекДок) = 0 Тогда
      Если Док.НайтиДокумент(ТекДок) > 0 Тогда       
        Если ЕстьАвтор = 1 Тогда
          Если Док.Автор <> ПервыйДокумент.Автор Тогда
            Продолжить;
          КонецЕсли;
        КонецЕсли;
        СписокДокументов.ДобавитьЗначение(Док.ТекущийДокумент());
        ВсегоНайдено = ВсегоНайдено + 1;
        Состояние("Найдено : " + ВсегоНайдено);
      КонецЕсли;
    КонецЕсли;
  КонецЦикла;                                             
  Возврат СписокДокументов; // СЗ найденных документов
КонецФункции

 

См. также

Универсальные функции Программист Платформа 1С v7.7 Россия Абонемент ($m)

В библиотеку собраны различные функции по работе с документами, журналами, типами данных, строками, датой и временем, таблицами значений, Excel, файлами, XML, JSON, Http-сервисами, SMTP серверами и т.п.

1 стартмани

22.12.2023    1684    16    user706545_kseg1971    0    

6

Универсальные функции Программист Платформа 1С v7.7 1C77 Россия Бесплатно (free)

Получение реквизитов контрагентов из 1С:Контрагент для старых конфигураций под 1с 7.7.

25.04.2022    2543    zhenyat    7    

8

Универсальные функции Программист Платформа 1С v7.7 Россия Бесплатно (free)

Функция выводит таблицу значений в табличный документ. (v7.7) Особенно полезно при отладке. Не нужно вносить изменения в код, вызываем функцию как вычисляемое выражение при останове. Если таблица обрабатывается в несколько этапов, можно вывести её после каждого и визуально проследить эволюцию.

30.06.2021    5550    Zoltan_Black    11    

2

Универсальные функции Системный администратор Программист Платформа 1С v7.7 1C77 Абонемент ($m)

Установка принтера по умолчанию в 1С 7.7. Обработка может быть полезна в том случае, когда нужно установить принтер по умолчанию, а доступа к рабочему столу нет (например, терминальный режим без рабочего стола или remoteApp)

1 стартмани

13.02.2019    14155    4    alsen    3    

5

Универсальные функции Программист Платформа 1С v7.7 1C77 1С:Комплексная 7.7 Абонемент ($m)

Предлагается набор функций 1с 7.7 для формирования строки json стандартными средствами.

1 стартмани

10.12.2018    11133    malovandrey    7    

19

Универсальные функции Работа с интерфейсом Программист Платформа 1С v7.7 1C77 Россия Абонемент ($m)

В статье дано описание создания индикатора на форме в среде разработки 1С:Предприятие 7.7 исключительно типовыми средствами.

1 стартмани

27.09.2016    18971    2    HAMMER_59    6    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Shaman100M 1152 11.03.09 19:33 Сейчас в теме
А как код-то раскрасить в новой редакции?
2. CheBurator 2697 11.03.09 19:39 Сейчас в теме
3. artbear 1566 11.03.09 21:50 Сейчас в теме
Да, идее зачет.

ЗЫ А все-таки те, кто юзает прямые запросы, в т.ч. на 1С++, давно о подобном знают :) и юзают :)
4. Ёпрст 1065 12.03.09 10:59 Сейчас в теме
Если создавал на работающей базе, то способ не очень... автора могут и не ставить, в выборке будут документы "левых авторов".. с большой долей вероятности.
6. Shaman100M 1152 12.03.09 14:35 Сейчас в теме
(4) Создавал на работающей базе, ТиС 9.2, реквизит Автор там есть, да и распространенная методика, если в какой-либо конфигурации для документа есть Автор, то он обычно задается автоматически, по имени пользователя его изменить в диалоге нельзя, ...чтоб он стал левым... только если учойсом... Ну это ж надо постараться пользователю (...он сам ко мне пришел @б.р. ) : "Вот я насоздавал документов тут... и вдобавок изменил в них автора на другого, нельзя ли все вернуть взад" ;)))


(5) если бы все было одной датой, то да. Документы были созданы в разных датах, разных месяцев, при неизвестном периоде перебирать придется все.
8. Ёпрст 1065 12.03.09 15:37 Сейчас в теме
(6)про разные даты согласен, про разные виды - нет..
ВыбратьДокументы можно по всем видам :)

ГЫ... а если еще один насоздавал обработкой в этот момент ? :)
10. Shaman100M 1152 12.03.09 16:43 Сейчас в теме
(8) ну, примерно прикинуть, сколько документов может создасться за время выполнения этого поиска (работает быстро).
На 10т сделать больше переборов, вполне хватит.
Или занять автора чем нить на это время, чтоб он не мог генерить новые документы, - пусть рядом стоит или сам запускает поиск. ;)
11. Shaman100M 1152 12.03.09 16:53 Сейчас в теме
+ (10) так и до монитора новых документов недалеко.
14. Alav 13 29.03.09 17:09 Сейчас в теме
(6) "... Автор,... обычно задается автоматически, по имени пользователя его изменить в диалоге нельзя,..." - так если "...пользователь насоздавал много новых документов обработкой..." что мешает в этом случае не указывать автора в документах? Это же не 8-ка.
15. Shaman100M 1152 30.03.09 08:28 Сейчас в теме
(14) Лучше бы что-нибудь мешало. :) Желаю всем, чтоб обработки, запускаемые пользователями, создающие новые объекты, работали корректно и правильно прописывали их реквизиты.

А невыбранный автор, - измени фильтр в функции (фильтр м.б. любой), или просто укажи более точно ПервыйДокумент.
5. Ёпрст 1065 12.03.09 11:01 Сейчас в теме
с таким же успехом, можно просто было открыть выборку документов через ВыбратьДокументы ...+ обратныйПорядок (а можно и без него)+ условие на начало первого.
7. Shaman100M 1152 12.03.09 14:37 Сейчас в теме
9. Арчибальд 2709 12.03.09 16:04 Сейчас в теме
Ёпрст, не придирайся. Это полезная идея, а не обработка.
12. motogon 13.03.09 18:43 Сейчас в теме
Вообще б было неплохо, чтоб у админа был такой инструмент, который бы показывал, сколько, кем, когда, как, каких новых введено/проведено из них доков, сколько из них задним числом, сколько изменено/проведено из них, сколько задним числом докво, сколько помечено на удаление доков, можно и справочников по дневно, за промежутки в часах, днях, неделях и т.д. Чтоб видеть, когда кто последовательность сбил, кто менял что-то сегодня "задним" числом, чтоб оперативно реагировать и быть в курсе событий. "Монитор админа" можно назвать.
13. Shaman100M 1152 16.03.09 08:19 Сейчас в теме
Это уже мониторить ЖР
Оставьте свое сообщение