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

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

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

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

Черника

antoneus, Все равно перескакивает последний запрос. Спасибо, что помогаешь  :ehtwj:


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

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

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

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

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

&НаКлиенте
Процедура ЗагрузитьНедостающиеСФНаСервереИзБД(Команда)
    ЗагрузитьНедостающиеСФНаСервере();
КонецПроцедуры   

antoneus

А первый не проскакивает? Строки в ДокументыБаза_1 есть?

Черника

antoneus, вроде бы все работает, не мог бы ты еще подсказать, почему я не могу вывести в ТЧ документы которые отсутствуют и в которых поменяли реквизит

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

antoneus


Черника

antoneus, В таблицу "СверкаБД"

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

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

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

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

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


antoneus

Ну потому что РеквизитФормыВЗначение сделали, а обратно - нет.
Но вся эта возня не нужна, обращайся к ТЧ напрямую:

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

........

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

Черника

antoneus, Спасибо огромное за помощь. Скинул готовый вариант руководителю, пока не сообщили, но я думаю если и будут, то мелкие недочеты. Еще аз огромное спасибо за помощь!  :ehtwj:

Теги:

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

Рейтинг@Mail.ru

Поиск