Перед переносом данных появилась необходимость проанализировать все документы 1с. То есть ответить на следующие вопросы:
- Какие виды документов ведутся в текущей базе 1с?
- Сколько проведенных и помеченных к удалению документов каждого вида?
- Сколько введеных документов 1с относится к определенной организации?
- Какие документы 1с имеют реквизит “ОтражатьВБухгалтерскомУчете” и каково их количество?
В итоге сделал внешнюю обработку “Анализ документов 1с “ на обычных формах, которая обходит все Метаданные.Документы. Запросами получаю данные о количестве каждого вида документа, количество проведенных, удаленных, относящихся к организации и отражаемых в бухгалтерском учете документов 1с. Данные выводятся в табличное поле и могут быть отсортированы и отфильтрованы.
Перед выполнением обработки заполняете период, если нужно указываете организацию и нажимаете кнопку “Запрос документов”. Прогресс выполнения отображается через текстовые надписи и графическим индикатором
После получения массива документов можно перейти к форме списка документов двойным щелчком по нужной строке.
Код основной процедуры получения данных о всех документах в базе 1с:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | рДокументы.Очистить(); КолвоВидДок=Метаданные.Документы.Количество(); ЭлементыФормы.Надпись3.Заголовок=КолвоВидДок; ЭлементыФормы.Индикатор1.МаксимальноеЗначение=КолвоВидДок; ВидДок=0; Для Каждого МД Из Метаданные.Документы Цикл НовыйТипДокумента=рДокументы.Добавить(); НовыйТипДокумента.ВидДокумента=Мд.Имя; НовыйТипДокумента.Синоним=МД.Синоним; ВсегоДок=0; УдДок=0; ПровДок=0; БуДок=0; ОргДок=0; Ошибок=0; ВидДок=ВидДок+1; ЭлементыФормы.Надпись1.Заголовок=ВидДок; ЭлементыФормы.Индикатор1.Значение=ВидДок; ЭлементыФормы.Надпись6.Заголовок=Мд.Имя; // Остановить обработку по CTRL+Break ОбработкаПрерыванияПользователя(); // Всего документов Запрос = Новый Запрос("ВЫБРАТЬ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Док.Ссылка) КАК КолВо |ИЗ | Документ."+МД.Имя+" КАК Док |ГДЕ | Док.Дата МЕЖДУ &НачалоПериода И &КонецПериода"); Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода); Запрос.УстановитьПараметр("КонецПериода", КонецПериода); рез=Запрос.Выполнить().Выгрузить(); Если рез.Количество()>0 тогда ВсегоДок=рез[0].КолВо; КонецЕсли; //учет удаленных Попытка Запрос = Новый Запрос("ВЫБРАТЬ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Док.Ссылка) КАК КолВо |ИЗ | Документ."+МД.Имя+" КАК Док |ГДЕ | Док.Дата МЕЖДУ &НачалоПериода И &КонецПериода | И Док.ПометкаУдаления = Истина"); Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода); Запрос.УстановитьПараметр("КонецПериода", КонецПериода); рез=Запрос.Выполнить().Выгрузить(); Если рез.Количество()>0 тогда УдДок=рез[0].КолВо; КонецЕсли; Исключение Сообщить(Мд.Имя); Сообщить(ОписаниеОшибки()); Ошибок=Ошибок+1; КонецПопытки; //учет проведенных попытка Запрос = Новый Запрос("ВЫБРАТЬ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Док.Ссылка) КАК КолВо |ИЗ | Документ."+МД.Имя+" КАК Док |ГДЕ | Док.Дата МЕЖДУ &НачалоПериода И &КонецПериода | И Док.проведен = Истина"); Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода); Запрос.УстановитьПараметр("КонецПериода", КонецПериода); рез=Запрос.Выполнить().Выгрузить(); Если рез.Количество()>0 тогда ПровДок=рез[0].КолВо; КонецЕсли; Исключение Сообщить(Мд.Имя); Сообщить(ОписаниеОшибки()); Ошибок=Ошибок+1; КонецПопытки; //УчетБУ попытка Запрос = Новый Запрос("ВЫБРАТЬ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Док.Ссылка) КАК КолВо |ИЗ | Документ."+МД.Имя+" КАК Док |ГДЕ | Док.Дата МЕЖДУ &НачалоПериода И &КонецПериода | И Док.ОтражатьВБухгалтерскомУчете = Истина И Док.проведен = Истина"); Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода); Запрос.УстановитьПараметр("КонецПериода", КонецПериода); рез=Запрос.Выполнить().Выгрузить(); Если рез.Количество()>0 тогда БуДок=рез[0].КолВо; КонецЕсли; Исключение Сообщить(Мд.Имя); Сообщить(ОписаниеОшибки()); Ошибок=Ошибок+1; КонецПопытки; //УчетОрг попытка Если ЗначениеЗаполнено(Организация)тогда Запрос = Новый Запрос("ВЫБРАТЬ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Док.Ссылка) КАК КолВо |ИЗ | Документ."+МД.Имя+" КАК Док |ГДЕ | Док.Дата МЕЖДУ &НачалоПериода И &КонецПериода | И Док.Организация = &Организация И Док.проведен = Истина"); Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода); Запрос.УстановитьПараметр("КонецПериода", КонецПериода); Запрос.УстановитьПараметр("Организация", Организация); рез=Запрос.Выполнить().Выгрузить(); Если рез.Количество()>0 тогда ОргДок=рез[0].КолВо; КонецЕсли; КонецЕсли; Исключение Сообщить(Мд.Имя); Сообщить(ОписаниеОшибки()); Ошибок=Ошибок+1; КонецПопытки; НовыйТипДокумента.ВсегоДокументов=ВсегоДок; НовыйТипДокумента.Удаленных=УдДок; НовыйТипДокумента.Проведенных=ПровДок; НовыйТипДокумента.ДокументовБу=БуДок; НовыйТипДокумента.ДокументовОрг=ОргДок; НовыйТипДокумента.ошибок=Ошибок; КонецЦикла; ЭлементыФормы.Надпись6.Заголовок=""; |
Скачать обработку Анализ документов 1с можно по ссылке.(архив zip)