Имя: Пароль:
1C
1С v8
Как в конвертации при загрузке искать документ по номеру в периоде (7 месяцев)?
0 AlexandrV
 
21.12.20
09:01
Как в конвертации пр загрузке искать документ по номеру в периоде (7 месяцев)
Искать по дате нельзя - она разная у источника и базе приемнике
Подскажите кто знает как сделать
1 AlexandrV
 
21.12.20
09:05
(1)+ писал загрузку выбора данных в обработке перед загрузкой данных

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


Но загружать не дает
Дает сбой
2 breezee
 
21.12.20
09:08
Ищите по ГУИДу)
3 AlexandrV
 
21.12.20
09:08
Подскажите обработку может не ту сделал или не туда поставил
4 AlexandrV
 
21.12.20
09:16
(2) ГУИД у документов в разных базах отличается
5 AlexandrV
 
21.12.20
09:23
(0)+ Если работать дальше, то я бы добавил поле дату создания дока и искал бы по нему, но перезаписывать несколько лет в рабочей базе нет смысла
В текущем моменте проще выбрать по периоду
Подскажите кто знает
6 Шурик71
 
21.12.20
09:26
(0) Обработчик ПоляПоиска.

----
СсылкаНаОбъект - ссылка на результирующий объект. Если в обработчике установить данную ссылку (не пустую) то программа ее запомнит и поиск на этом будет считать успешно завершенным
----
7 AlexandrV
 
21.12.20
09:44
(6) СсылкаНаОбъект = Документы.РасходнаяНакладная.НайтиПоНомеру(СвойстваПоиска["Код"], ДатаНачала);

Будет работать. если поставлю в обработчик поля поска?
8 d4rkmesa
 
21.12.20
10:11
"Пилите [код] Шура, пилите". Не получается отладить в приемнике - делайте тестовую обработку, делающую почти то же, что и обработчик ПоляПоиска, в приемнике.
9 mikecool
 
21.12.20
10:19
запрос + кеш
10 d4rkmesa
 
21.12.20
10:27
(7) По идее, работать должно, но стандартный алгоритм так же работает, если поиск по номеру-дате, т.е. дата используется только для уточнения периода документа, если не стоит галочка "поиск по дате на равенство" в ПКС Дата->Дата.
11 AlexandrV
 
21.12.20
10:37
(10) не нашел, а даты я не знаю той которая будет в базе приемнике
12 AlexandrV
 
21.12.20
10:39
(11)+ в базе приемнике я знаю номер дока и период в котором документ будет
13 Aleksey
 
21.12.20
10:49
(12) Что значит период? А если не нашел то какой датой он должен создаться?

P.Sю Запросом в обработчике поля поиска ищи
14 AlexandrV
 
21.12.20
11:25
(13) прилетает более свежий и у него дата уже последняя, но главное документ найти, а потом и дату исправим
15 hhhh
 
21.12.20
11:32
(14) тогда просто ставь галочку поиск по номеру и дате. Тебе же написали в (10)
16 AlexandrV
 
21.12.20
11:40
(15) искать по номеру и дате не могу, потому что дата не совпадает, а не задав период, захватывает и док с номером 2-х летней давности
17 AlexandrV
 
21.12.20
11:42
(15) если галочку на равенство дат не ставлю все равно не находит док
18 Aleksey
 
21.12.20
11:53
(14) Я как бы про новые документы спрашивал, а не поиск старого
19 Aleksey
 
21.12.20
11:55
(16) Там же на  уровне платформы нечеткий поиск по дате, а зависит от периода нумерации
20 Йохохо
 
21.12.20
11:58
(16) запрос .... где номер = &номер и дата больше &ТекДата
запрос.установитьпараметр("ТекДата", ДобавитьМесяц(ТекущаяДата(), -7))
21 zippygrill
 
21.12.20
12:17
В событие ПоляПоиска для твоего ПКО впиши свой код поиска
22 AlexandrV
 
21.12.20
12:26
(21) пишу код
СсылкаНаОбъект = Документы.РасходнаяНакладная.НайтиПоНомеру(СвойстваПоиска["Номер"], ДатаНачала);
и документ не находится , хотя в описании процедуры "НайтиПоНомеру" второй параметр дата из периода
23 Aleksey
 
21.12.20
12:29
(22) Нумерация документа какая? Какая дата стоит? Что с разрядностью номера
24 zippygrill
 
21.12.20
12:35
(22) на отладку тогда садись и смотри что в СсылкаНаОбъект будет
про ПрерватьПоиск не забудь ставить есть значениезаполнено(СсылкаНаОбъект)
25 AlexandrV
 
21.12.20
13:26
(24) При режиме отладки все отлично, а при запуске загрузки выдает ошибку
Получается в режиме сервера и толстого клиента работает, а в тонком клиенте (универсальная обработка) сбой дает
Подскажите как избежать
26 zippygrill
 
21.12.20
15:33
(25) не верю
27 zippygrill
 
21.12.20
15:34
(22) дату окончания поиска тоже задай
28 AlexandrV
 
21.12.20
16:10
(27) НайтиПоНомеру имеет 2 реквизита номер и дату
29 Шурик71
 
21.12.20
17:11
(28) Тебе не надо НайтиПоНомеру.

Тебе надо запрос.
Запрос.Текст = "Выбрать первые 1 ссылка из документ.РасходнаяНакладная Где не пометкаудаления И Номер = &Номер и Дата Между &НачалоИнтервала и &КонецИнтервала";
...
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() тогда
СсылкаНаОбъект = Выборка.Ссылка;
Иначе
ПрекратитьПоиск = Истина;
КонецЕсли;
30 AlexandrV
 
21.12.20
17:35
(29) запрос ставить в функции поиска объекта?
31 Aleksey
 
21.12.20
17:46
(29) Зачем ПрекратитьПоиск вносить в условие, если он должен быть за условием
32 mikecool
 
21.12.20
18:03
в условии задачи - нечеткие условия поиска
в результате будут нечеткие результаты )))
33 Шурик71
 
21.12.20
18:33
(30) Запрос - писать в обработчике.

(31) ПрекратитьПоиск - можно вынести ниже условия. В любом случае прекращать, найден или нет..
34 AlexandrV
 
24.12.20
08:57
Спасибо
все было просто, этот документ имел запрет на запись и мне повезло с ним