Доброе утро. Делаю обход метаданных ,приходят значения документов, по которым были движения, но в некоторых документах список документов пустой. Подскажите, пожалуйста, как проверить существование документа в базе?
ОбъектыМД = Новый Массив;
ОбъектыМД.Добавить("Документы");
Для Каждого Эл Из ОбъектыМД Цикл
Для Каждого Объект Из Метаданные[Эл] Цикл
Если Объект.Движения.Содержит(Метаданные.РегистрыБухгалтерии.Хозрасчетный) Тогда
НовСтр = ТабДок.Добавить();
НовСтр.Документы = Строка(Объект);
КонецЕсли;
КонецЦикла;
КонецЦикла;
ПоказатьПо теме из базы знаний
- Обмен документами Поступления-Реализации и Счетами-фактурами в базах 1С Бухгалтерия 8.2, 8.3 с возможностью преобразования
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- Расчет себестоимости товаров в 1С УТ 11 и КА 2 при проведении документа
- Префиксация номеров документов в 1С (структурное подразделение: склад/магазин/подразделение)
- Умная Загрузка Номенклатуры - с автопоиском реквизитов из Excel, загрузка изображений и документов
Найденные решения
(1)в зависимости как именно вы хотите проверить наличие документов:
///За циклом:
Запрос = Новый Запрос;
......
Если Объект.Движения.Содержит(Метаданные.РегистрыБухгалтерии.Хозрасчетный) Тогда
Запрос.Текст = "Выбрать Документы.Ссылка ИЗ &Таблица КАК Документы";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Таблица", Объект.ПолноеИмя());
//ИЛИ
Запрос.Текст = "Выбрать Регистратор ИЗ РегистрБухгалтерии.Хозрасчетный ГДЕ Регистратор ССЫЛКА &Документ";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Документ", Объект.ПолноеИмя());
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
//Значит документы есть
КонецЕсли;
КонецЕсли;
Показать
(12)Опять же, если вам нужны все ссылки по каждому виду документов, то будет лучше сделать запрос объединение:
и запросом сразу получить все, что нужно.
Если ссылки на все документы не нужны, то, как правильно заметили в (10), будет достаточно запроса вида:
Выбрать ссылка Из Документ.Документ1
ОБЪЕДИНИТЬ ВСЕ
Выбрать ссылка Из Документ.Документ2
и запросом сразу получить все, что нужно.
Если ссылки на все документы не нужны, то, как правильно заметили в (10), будет достаточно запроса вида:
Выбрать Первые 1 Ссылка Из Документ.Документ1
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)в зависимости как именно вы хотите проверить наличие документов:
///За циклом:
Запрос = Новый Запрос;
......
Если Объект.Движения.Содержит(Метаданные.РегистрыБухгалтерии.Хозрасчетный) Тогда
Запрос.Текст = "Выбрать Документы.Ссылка ИЗ &Таблица КАК Документы";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Таблица", Объект.ПолноеИмя());
//ИЛИ
Запрос.Текст = "Выбрать Регистратор ИЗ РегистрБухгалтерии.Хозрасчетный ГДЕ Регистратор ССЫЛКА &Документ";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Документ", Объект.ПолноеИмя());
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
//Значит документы есть
КонецЕсли;
КонецЕсли;
Показать
(3)
результатом выполнения будет
Если Документ с именем "Документы" в дереве метаданных существует, то выполнится, но ссылок вы не получите, если документа в дереве метаданных нет, то будет ошибка.
Для Каждого ДокСсылка Из Документы[Эл] Цикл
результатом выполнения будет
Для Каждого ДокСсылка Из Документы["Документы"] Цикл
Если Документ с именем "Документы" в дереве метаданных существует, то выполнится, но ссылок вы не получите, если документа в дереве метаданных нет, то будет ошибка.
(7) Да, у меня ошибка вылезла,что поле объекта не обнаружено. Сейчас пробую вот так:
Если не получится, попробую метод, что вы выше написали. Спасибо!
Если Объект.Движения.Содержит(Метаданные.РегистрыБухгалтерии.Хозрасчетный) Тогда
ТипДокумента = Объект.Имя;
ВыборДок = Документы[ТипДокумента].Выбрать();
Пока ВыборДок.Следующий() Цикл
Если ЗначениеЗаполнено(ВыборДок.Ссылка) Тогда
Сообщить(Объект);
КонецЕсли;
КонецЦикла;
КонецЕсли;
ПоказатьЕсли не получится, попробую метод, что вы выше написали. Спасибо!
(12)Опять же, если вам нужны все ссылки по каждому виду документов, то будет лучше сделать запрос объединение:
и запросом сразу получить все, что нужно.
Если ссылки на все документы не нужны, то, как правильно заметили в (10), будет достаточно запроса вида:
Выбрать ссылка Из Документ.Документ1
ОБЪЕДИНИТЬ ВСЕ
Выбрать ссылка Из Документ.Документ2
и запросом сразу получить все, что нужно.
Если ссылки на все документы не нужны, то, как правильно заметили в (10), будет достаточно запроса вида:
Выбрать Первые 1 Ссылка Из Документ.Документ1
я так понял автору необходимо понимать есть ли документ как (тип) объект в базе
если правильно понял то, я сначала 1 раз загоняю все возможные Типы, имена, объектов в массив, потом уже при передаче данных просто делаю поиск в массиве так думаю быстрее,
хотя могу и ошибаться
вот пример создания массива
если правильно понял то, я сначала 1 раз загоняю все возможные Типы, имена, объектов в массив, потом уже при передаче данных просто делаю поиск в массиве так думаю быстрее,
хотя могу и ошибаться
вот пример создания массива
Для каждого Документ Из Метаданные.Документы Цикл
МассивТиповТекст.Добавить("ДокументСсылка."+Документ.Имя);
КонецЦикла;
Далее уже поиск в массиве
****
Если МассивТиповТекст.Найти(TYPEДок) <> Неопределено Тогда
****
КонецЕсли
и если найден тип документа как объект в базе то уже происходит поиск по Гуиду
чтото вроде
ИскомыйДок = XMLЗначение(Тип("ДокументСсылка."+ИмяДокумента), Строка(Guid));
ссылкаПоГуиду = Документы[ИмяДокумента].ПолучитьСсылку(Новый УникальныйИдентификатор(Строка(Guid)));
Если СтрНайти(Строка(ИскомыйДок), "<Объект не найден>")>0 Тогда
****
Иначе
****
КонецЕсли
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот