Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 06:05

Поиск документов в БД № 1, сравнение их с БД № 2

Автор Черника, 22 июл 2022, 17:22

0 Пользователей и 1 гость просматривают эту тему.

Черника

Помогите пожалуйста:
Как реализовать: Запускаем обработку в БД № 2, программно подключаемся к БД № 1 Находим запросом нужные документы (код ниже).

Не получается разобраться:
Ищем документ из БД 1 в БД 2 по номеру и дате и при отсутствии такогого выдаем ошибку, а при совпадении меняем один из реквизитов в документе БД №2 на "Истину".

Подключение к БД № 1
&НаСервере
Функция ЗагрузитьНедостающиеСФНаСервере()
   
    База_1 = ПодключитьсяКБазе();
    ПроверкаНаИдентичностьИНН();
    Элементы.Страницы.ТекущаяСтраница = Элементы.БД_3;     // Открытие нужной таблицы

   
    ФормаОбъект = РеквизитФормыВЗначение("Объект");
    ДокументыБаза_1 = ФормаОбъект.ТаблицаДокументов3;
    ДокументыБаза_1.Очистить();
   
    Запрос = База_1.NewObject("Запрос");
    Запрос.Текст =
        "ВЫБРАТЬ
        |    СчетФактураПолученный.Представление КАК Представление,
        |    СчетФактураПолученный.ФлагОбъединеннойСФ КАК ФлагОбъединеннойСФ,
        |    СчетФактураПолученный.Номер КАК Номер,
        |    СчетФактураПолученный.Дата КАК Дата,
        |    СчетФактураПолученный.ДатаВходящегоДокумента КАК ДатаВходящегоДокумента,
        |    СчетФактураПолученный.НомерВходящегоДокумента КАК НомерВходящегоДокумента
        |ИЗ
        |    Документ.СчетФактураПолученный КАК СчетФактураПолученный
        |ГДЕ
        |    СчетФактураПолученный.Дата >= &ДатаНачала
        |    И СчетФактураПолученный.Дата <= &ДатаКонца
        |    И СчетФактураПолученный.ФлагОбъединеннойСФ = &ФлагОбъединенныйСФ
        |
        |УПОРЯДОЧИТЬ ПО
        |    Дата,
        |    Номер";
   
    Запрос.УстановитьПараметр("ДатаНачала", НачалоПериода);
    Запрос.УстановитьПараметр("ДатаКонца", КонецПериода);
    Запрос.УстановитьПараметр("ФлагОбъединенныйСФ", Истина);

alexandr_ll


Черника

alexandr_ll, Спасибо, но хотелось бы все таки помощи, что бы разобраться самой  :ehtwj:

antoneus

&НаСервере
Функция ЗагрузитьНедостающиеСФНаСервере()
   
    База_1 = ПодключитьсяКБазе();
    ПроверкаНаИдентичностьИНН();
    Элементы.Страницы.ТекущаяСтраница = Элементы.БД_3;     // Открытие нужной таблицы

   
    ФормаОбъект = РеквизитФормыВЗначение("Объект");
    ДокументыБаза_1 = ФормаОбъект.ТаблицаДокументов3;
    ДокументыБаза_1.Очистить();
   
    Запрос = База_1.NewObject("Запрос");
    Запрос.Текст =
        "ВЫБРАТЬ
        |    СчетФактураПолученный.Представление КАК Представление,
        |    СчетФактураПолученный.ФлагОбъединеннойСФ КАК ФлагОбъединеннойСФ,
        |    СчетФактураПолученный.Номер КАК Номер,
        |    СчетФактураПолученный.Дата КАК Дата,
        |    СчетФактураПолученный.ДатаВходящегоДокумента КАК ДатаВходящегоДокумента,
        |    СчетФактураПолученный.НомерВходящегоДокумента КАК НомерВходящегоДокумента
        |ИЗ
        |    Документ.СчетФактураПолученный КАК СчетФактураПолученный
        |ГДЕ
        |    СчетФактураПолученный.Дата МЕЖДУ &ДатаНачала И &ДатаКонца
        |    И СчетФактураПолученный.ФлагОбъединеннойСФ
        |
        |УПОРЯДОЧИТЬ ПО
        |    Дата,
        |    Номер";
   
    Запрос.УстановитьПараметр("ДатаНачала", НачалоПериода);
    Запрос.УстановитьПараметр("ДатаКонца", КонецПериода);

    Выборка = Запрос.Выполнить().Выбрать();

    Пока Выборка.Следующий() Цикл
        ЗаполнитьЗначенияСвойств(ДокументыБаза_1.Добавить(), Выборка)
    КонецЦикла;

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТЗ_Документы.Дата КАК Дата,
| ТЗ_Документы.Номер КАК Номер
|ПОМЕСТИТЬ ВТ_Документы
|ИЗ
| &ТЗ_Документы КАК ТЗ_Документы
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
    |   ВТ_Документы.Дата КАК Дата,
    |   ВТ_Документы.Номер КАК Номер,
| ЕСТЬNULL(СчетФактураПолученный.Ссылка, ЗНАЧЕНИЕ(Документ.СчетФактураПолученный.ПустаяСсылка) КАК Ссылка
|ИЗ
| ВТ_Документы КАК ВТ_Документы
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактураПолученный КАК СчетФактураПолученный
| ПО ВТ_Документы.Дата = СчетФактураПолученный.Дата
| И ВТ_Документы.Номер = СчетФактураПолученный.Номер
|ГДЕ
| НЕ СчетФактураПолученныйАванс.Ссылка ЕСТЬ NULL";

    Запрос.УстановитьПараметр("ТЗ_Документы", ДокументыБаза_1.Выгрузить());
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Если Выборка.Ссылка.Пустая() Тогда
            Сообщить(СтрШаблон("Документ %1 от %2 отсутствует в базе", Выборка.Номер. Выборка.Дата))
        Иначе
            ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
            ДокОбъект.Реквизит = Истина;
            ДокОбъект.ОбменДанными.Загрузка = Истина;
            ДокОбъект.Записать()
        КонецЕсли;
    КонецЦикла;
       


Черника

antoneus, Выдало ошибку: К сожалению, возникла непредвиденная ситуация

antoneus

Там должно быть "Показать подробности".
А вообще, отладчик рулит.

Черника

antoneus, {ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(348)}: Ошибка при вызове метода контекста (Выполнить)
    Выборка = Запрос.Выполнить().Выбрать();
по причине:
{(18, 34)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
 неограниченной длины и поля несовместимых типов.
И ВТ_Документы.Номер <<?>>= СчетФактураПолученный.Номер

по причине:
{(18, 34)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
 неограниченной длины и поля несовместимых типов.
И ВТ_Документы.Номер <<?>>= СчетФактураПолученный.Номер

antoneus

А, так и думал) Надо было сразу написать.

У Колонки Номер таблицы ТаблицаДокументов3 тип сделать не строку неограниченной длины, а строку длиной как у номера счета-фактуры.

Черника

antoneus, После последнего запроса перепрыгивает цикл не заходя в него

antoneus

Пожалуй, условие надо убрать. Вот это

|ГДЕ
|    НЕ СчетФактураПолученныйАванс.Ссылка ЕСТЬ NULL

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск