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

11.03.09

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

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

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

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

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

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

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

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

 

См. также

Библиотека процедур и функций для технологической платформы "1С: Предприятие 7.7"

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

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

1 стартмани

22.12.2023    657    9    user706545_kseg1971    0    

4

1С 7.7 и новый 1С:Контрагент

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

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

25.04.2022    1820    zhenyat    7    

6

Печать таблицы значений в 1С 7.7 при отладке

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

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

30.06.2021    4399    Zoltan_Black    11    

2

Установка принтера по умолчанию для 1С 7.7

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

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

1 стартмани

13.02.2019    13286    4    alsen    3    

4

Формирование строки json в 1С: 7.7

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

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

1 стартмани

10.12.2018    10094    malovandrey    2    

18

Как создать индикатор в 1С:Предприятии 7.7

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

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

1 стартмани

27.09.2016    18672    2    HAMMER_59    6    

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

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


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

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

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