Имя: Пароль:
1C
 
Как через оле задать отбор?
0 Мисти
 
21.12.15
23:38
Подключаюсь из 7 и 8, получила таблицу.
Как мне теперь найти строку по номеру?


Запрос = БазаОле.NewObject("Запрос");
    Запрос.УстановитьПараметр("ВыбДата", Дата1);
    
    Запрос.Текст =
    "ВЫБРАТЬ
    |    СчетФактураВыданныйДокументыОснования.Ссылка Как СФ,
    |    СчетФактураВыданныйДокументыОснования.Ссылка.Номер Как Номер,
    |    СчетФактураВыданныйДокументыОснования.Ссылка.Дата,
    |    СчетФактураВыданныйДокументыОснования.ДокументОснование Как ПП,
    |    СчетФактураВыданныйДокументыОснования.Ссылка.Контрагент Как Контрагент
    |ИЗ
    |    Документ.СчетФактураВыданный.ДокументыОснования КАК СчетФактураВыданныйДокументыОснования
    |ГДЕ
    |    СчетФактураВыданныйДокументыОснования.Ссылка.Дата < &ВыбДата";
    
    ТаблицаДокCOM = Запрос.Выполнить().Выгрузить();   // надо бы еще по наименованию поискать!!  ПОДОБНО
1 Мисти
 
21.12.15
23:39
|    СчетФактураВыданныйДокументыОснования.Ссылка.Номер Как Номер, - вот этот номер у меня есть.
2 Мисти
 
22.12.15
00:06
Отбор = БазаОле.NewObject("Структура()");
            Отбор.Вставить("Номер",НомерСФ);
            СтрокиОтбор =    ТаблицаДокCOM.НайтиСтроки(Отбор);
Такой фокус не прошел.
3 hhhh
 
22.12.15
00:09
|ГДЕ
    |    СчетФактураВыданныйДокументыОснования.Ссылка.Дата < &ВыбДата
И СчетФактураВыданныйДокументыОснования.Ссылка.Номер = &Номер
4 Мисти
 
22.12.15
00:11
Мне нужно потом из таблицы по порядку (или без порядка) получить все строки по номерам, запрос при каждом обращении - наверное, неправильно.
К тому же потом всё, что в этом списке окажется невостребованным - мне нужно будет удалить (это для повторной перегрузки)
5 Мисти
 
22.12.15
00:19
Есть же правила!! Но я их не знаю.
6 Чайник Рассела
 
22.12.15
00:23
Создай новую ТЗ, заполни ее из запроса и с ней уже работай.
7 Мисти
 
22.12.15
00:28
Ну, так-то я умею, а прямого пути нет что ли?
8 Serginio1
 
22.12.15
00:39
Используй внешний отчет. Преймущества отладка в реальной базе.
Используй экспортные функции для получения данных.
9 Serginio1
 
22.12.15
00:52
10 Serginio1
 
22.12.15
00:53
11 Serginio1
 
22.12.15
00:55
12 Мисти
 
22.12.15
23:07
Спасибо!
13 Мисти
 
22.12.15
23:31
Теперь другая совсем тема! Но ее почему-то закрыли.

Проблемы 2 - во-первых номер должен содержать префикс "ВС+", помню, что "подобно", а как именно написать, чтобы только 3 знака проверялось?
Вторая проблема - дата должна совпадать, но в я из 7 к 8 подцепляюсь, у меня в 7 дата без времени, как правильно задать ограничение?
14 Мисти
 
22.12.15
23:37
Подобно "ВС+%"?
15 Serginio1
 
22.12.15
23:37
(11) Еще раз смотри 11. Передавай в параметрах строку, а в функции уже распарсивай.
Подобно "ВС+%"
16 Serginio1
 
22.12.15
23:39
17 Мисти
 
22.12.15
23:41
Запрос = БазаОле.NewObject("Запрос");
        Запрос.УстановитьПараметр("ВыбНомер", "ВС+%");
        
        Запрос.Текст =
        "ВЫБРАТЬ
        |    ПоступлениеТоваровУслуг.Дата,
        |    ПоступлениеТоваровУслуг.Контрагент.ИНН,
        |    ПоступлениеТоваровУслуг.Контрагент.Ссылка,
        |    ПоступлениеТоваровУслуг.СуммаДокумента,
        |    ПоступлениеТоваровУслуг.Номер
        |ИЗ
        |    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
        |ГДЕ
        |    ПоступлениеТоваровУслуг.Номер ПОДОБНО &ВыбНомер
        |    И ПоступлениеТоваровУслуг.Дата МЕЖДУ &ДатаНач И &ДатаКон
        |    И ПоступлениеТоваровУслуг.Контрагент.ИНН ПОДОБНО &ВыбИНН";
18 Мисти
 
22.12.15
23:42
(16) Спасибо!
Осталось туда дату всобачить - мне нужны документы за один день и у меня, соответственно есть одна дата.
19 Serginio1
 
22.12.15
23:44
(17) Почему не хочешь воспользоваться внешним отчетом?
Еще раз премущества это отладка в родной базе, отсутствие ограничений
20 Мисти
 
22.12.15
23:46
У меня там уже 6000 строк понаписно, остался крошечный кусочек, не хочу ничего нового сейчас пробовать.
21 GreyK
 
22.12.15
23:53
(17) Прочитай как дата строкой задаётся в 8ке, там вроде без подвохов, надо только добавить время.
22 Serginio1
 
22.12.15
23:54
(20) Так то же самое, только данные получаешь из внешнего отчета. Ничего не меняется
23 Serginio1
 
22.12.15
23:55
Дополнительные данные
24 Мисти
 
22.12.15
23:55
(22)Вникать не хочу. Всё должно было перегрузиться еще вчера.
(21) Ну что мне сделать с Док7.ДатаДок?
25 Serginio1
 
22.12.15
23:56
(24) Если бы вникла в 2 строчки, было бы сделано еще позавчера
26 Мисти
 
23.12.15
00:00
Проблема только сегодня возникла
27 Мисти
 
23.12.15
00:04
Люди добрые! Ну ночь уже!
Напишите мне эту строчку-то одну!
28 Serginio1
 
23.12.15
00:07
ПолучитьВремя
29 Мисти
 
23.12.15
00:09
Я уже надумала - Док7.ДатаДок-1 и Док7.ДатаДок+1
30 Serginio1
 
23.12.15
00:17
Только учти, что в МЕЖДУ  попадают и границы. Если у тебя есть документы с минутами 00 они попадут в выборку
31 Serginio1
 
23.12.15
00:19
Если бы выбрала внешний отчет то просто КонецДня
32 Мисти
 
23.12.15
00:25
Это понятно!
В след. раз попробую.
33 Serginio1
 
23.12.15
00:26
Или сделай
И (ПоступлениеТоваровУслуг.Дата >=&ДатаНач И  ПоступлениеТоваровУслуг.Дата < &ДатаКон
)
34 Мисти
 
23.12.15
00:26
А можно мне пример такой внешней обработки? Обожаю красть чужое!
mdv92@mail.ru
35 Serginio1
 
23.12.15
00:32
(34) Я в отпуске. Создаешь внешнюю обработку. В модуле создаешь экспортные функции. В форме этой обрабтоки отлаживаешь эти функции, а затем вызываешь её как в 11 и в других приведенных ссылках.
36 Мисти
 
23.12.15
00:35
Ага, понятно, спасибо.
37 Serginio1
 
23.12.15
00:35
Например я не могу вызвать из 7 ки вычислить и свойства через []

Я в модуле обработки прописываю 2 функции

Функция ВычислитьВыражение(Выражение) Экспорт
  возврат вычислить(Выражение);    
КонецФункции

Функция ВычислитьСвойствоОбъекта(Объект,Свойство) Экспорт
  возврат Объект[Свойство];    
КонецФункции



И их вызываю

ПутьКОбработке=ТвойПутьКepf;
    ДляВнешнегоСоединения= Сервер.ВнешниеОбработки.Создать(ПутьКОбработке);


Если Мета="Справочник" Тогда
        Объект=ДляВнешнегоСоединения.ВычислитьВыражение("Справочники."+ВидПриемник+".СоздатьЭлемент()");    ИначеЕсли Мета="Документ" Тогда
            Объект=ДляВнешнегоСоединения.ВычислитьВыражение("Документы."+ВидПриемник+".СоздатьДокумент()");
            ДляВнешнегоСоединения.ВычислитьСвойствоОбъекта(Объект,ТЧПриемника).Добавить();
                Иначе
                Объект=ДляВнешнегоСоединения.ВычислитьВыражение("РегистрыНакопления."+ВидПриемник+".СоздатьНаборЗаписей()");
КонецЕсли;
38 Мисти
 
12.01.16
21:05
Ну всё, создаю!
Кто такой - "сервер"?
8 у меня вызывается через БазаОле.
Предположим, я к ней подключилась
39 Serginio1
 
12.01.16
21:25
(38) Ты Внешнюю обработку создала? Сделала экспортные функции? Отладила их в базе источнике?
Путь должен быть виден из базы ОЛе
40 Мисти
 
12.01.16
21:31
ПутьКОбработке=ТвойПутьКepf;

    ДляВнешнегоСоединения= Сервер.ВнешниеОбработки.Создать(ПутьКОбработке);
41 Мисти
 
12.01.16
21:33
Serginio1, кто такой "сервер"?
Я пока пустую обработку сделала, в модуле написала ровно вот это
Функция ВычислитьВыражение(Выражение) Экспорт
  возврат вычислить(Выражение);    
КонецФункции

Функция ВычислитьСвойствоОбъекта(Объект,Свойство) Экспорт
  возврат Объект[Свойство];    
КонецФункции
Хоть мне нужно и не это, а присвоение даты.
Пока не пойму, как мне к ней подключиться.
42 Serginio1
 
12.01.16
21:33
ДляВнешнегоСоединения= БазаОле.ВнешниеОбработки.Создать(ПутьКОбработке);
43 Serginio1
 
12.01.16
21:34
Если тебе нужен доступ к файлам
ДляВнешнегоСоединения= БазаОле.ВнешниеОбработки.Создать(ПутьКОбработке,0);
44 Мисти
 
12.01.16
21:43
Ага, спасибо, сейчас попробую.
            ДокОбъект.Дата =            ДляВнешнегоСоединения.УстановитьДатуВремяЮ(ДокОбъект,ч,м,с);
а в ней -

Функция УстановитьДатуВремяЮ(Объект,чч,мм,сс) Экспорт
  Объект.Дата = Объект.Дата+ Чч*3600 + Мм*60 + Сс;
  Возврат(Объект);
45 Мисти
 
12.01.16
21:51
ДляВнешнегоСоединения= БазаОле.ВнешниеОбработки.Создать(ПутьКОбработке,0);
{C:\DOCUMENTS AND SETTINGS\DESKTOP\ПЕРЕГРУЗКА.ERT(7253)}: 1C:Enterprise 8.3.7.1831: Несоответствие типов (параметр номер '2')
46 Serginio1
 
12.01.16
21:51
Да можно и просто
Процедура УстановитьДатуВремяЮ(Объект,чч,мм,сс) Экспорт
  Объект.Дата = Объект.Дата+ Чч*3600 + Мм*60 + Сс;
КонецПроцедуры
47 Serginio1
 
12.01.16
21:53
Сделай без второго параметра или попробуй

ДляВнешнегоСоединения= БазаОле.ВнешниеОбработки.Создать(ПутьКОбработке,"ложь");
48 Мисти
 
12.01.16
21:57
ДляВнешнегоСоединения= БазаОле.ВнешниеОбработки.Создать(ПутьКОбработке);
{C:\DOCUMENTS AND SETTINGS\DESKTOP\ПЕРЕГРУЗКА.ERT(7253)}: 1C:Enterprise 8.3.7.1831: Ошибка подключения внешних метаданных
Файл не обнаружен 'C:\Вю..
Ложь она так, небось, не съест.
Сделала без параметра.
49 Мисти
 
12.01.16
22:01
.epf забыла.
50 Мисти
 
12.01.16
22:03
Значение поля "Дата" не может быть пустой датой
Залезла я в свою обработку!
Говорит, что дата пустая получается.
Изначально дата была, я проверила в отладчике.
51 Serginio1
 
12.01.16
22:06
Ты объекту установила дату?
Сделай так
Процедура УстановитьДатуВремяЮ(Объект,Дата,чч,мм,сс) Экспорт
  Объект.Дата = Дата+ Чч*3600 + Мм*60 + Сс;
КонецПроцедуры
52 Мисти
 
12.01.16
22:12
ДатаЮ = Строка(Объект.Дата+ Чч*3600 + Мм*60 + Сс);
  Возврат(ДатаЮ);
- Возвращает в 7 какую-то абстрактную дату.
53 Serginio1
 
12.01.16
22:16
(52) В семерке при сложении дат добавляется не секунда, а сутки.
А 51 не работает?
54 Мисти
 
12.01.16
22:23
Объект.Дата = Объект.Дата+ Чч*3600 + Мм*60 + Сс;  - а так чем плохо?
55 Мисти
 
12.01.16
22:24
Док8.Дата = Дата(гг, мм, дд, чч, юю, сс) - попробую такой фокус. Там числа или строки должны быть?
56 Serginio1
 
12.01.16
22:36
(54) Еще раз 51 не работает?
57 Serginio1
 
12.01.16
22:36
(55) Семерка обрубит время.
58 Serginio1
 
12.01.16
22:37
55 числа
59 Serginio1
 
12.01.16
22:38
Можешь и записать в во внешней обработке документ
60 Serginio1
 
12.01.16
22:42
Я например делаю обмен из семерки в восьмерку через СериализаторXDTO. Но это другая песня
61 Остап Сулейманович
 
12.01.16
22:43
(52) "Возвращает в 7 какую-то абстрактную дату."

Откуда и куда нужно переносить время? Из 7 в 8 или из 8 в 7?
62 Остап Сулейманович
 
12.01.16
22:46
(57) Никто ничего не обрубит.
Дата(гг, мм, дд, чч, юю, сс) - это не семерочная функция.
63 Serginio1
 
12.01.16
22:48
(61) Ей нужно из семерки в восьмерку передать дату со временем.

Просто уже путаюсь, где она что вызывает.
Пока речь идет о вызове во внешней обраьотке
64 Serginio1
 
12.01.16
22:49
Веренее ей нужно установить дату в олешном 8 ном объекте
65 Мисти
 
13.01.16
00:11
(63) да, всё правильно - из 7 подключиться к 8 и задать у перегружаемого документа дату со временем, как в 7.
66 франц
 
13.01.16
00:32
да бери представление и парси сколько хошь - за почти месяц точно парсинг сделать можно...
67 Мисти
 
13.01.16
00:35
ДатаЮ = Дата(Год(Объект.Дата), Месяц(Объект.Дата), День(Объект.Дата) , чч, мм, сс);
    Объект.Дата = ДатаЮ;
    Объект.Записать();
    Возврат(Объект);
- вот это написано в обработке в 8.
Не ругается, но ничего не происходит.
Всё равно время нулевое.
(66) Это новая задачка, а как "парси" я не понимаю совсем.
Фарси и то понятнее.
68 франц
 
13.01.16
00:38
(67) parse - разбор... берешь представление документа, где есть дата со временем, и оттуда ВНЕЗАПНО вытаскиваешь нужную дату со временем, и потом его собираешь нужным образом..
69 Мисти
 
13.01.16
00:41
СтрокаДата =               ДляВнешнегоСоединения.УстановитьДатуВремяЮ(ДокОбъект,ч,м,с);
СтрокаДата = "02.01.2015 12:05:20" - это отладчик показывает.
Вроде, то, что надо!
Или нет?
(68) Ну так я примерно этим и занимаюсь, хоть и не понимаю, что это за представление такое особенное.
Дата у меня и так есть! Проблема, чтоб в 8 через оле ее запихнуть.
70 франц
 
13.01.16
00:44
(69) ок, скажу как всегда "все не читал, но осуждаю"... для 8 вызвать "УстановитьВремя (SetTime)" не канает?
71 Мисти
 
13.01.16
00:46
А там можно (последним) и что-то еще, а конкретное время - нет.
72 франц
 
13.01.16
00:47
(71) не верю... либо у тебя в 8 при записи дата на момент записи ставится..
73 Serginio1
 
13.01.16
00:49
(67) В семерке будет нулевое. Смотри с каким временем записался документ
74 Serginio1
 
13.01.16
00:50
в 8 рочной базе
75 Мисти
 
13.01.16
00:52
Так я смотрела в 8! - это когда записывала там.
Последний раз - не изменилось время 00.00.00
76 Serginio1
 
13.01.16
00:54
Значит где то еще изменяется
Сделай возврат Строка( Объект.Дата);
77 Мисти
 
13.01.16
00:55
Завтра, сегодня сплю уже.
78 Serginio1
 
13.01.16
00:57
Для проверки сделай

Функция ПолучитьДатуДок(Объект) Экспорт
возврат Строка(Объект.Дата);
КонецФункции

Ну и проверяй
Сообщить(ДляВнешнегоСоединения.ПолучитьДатуДок(ДокОбъект);
79 Serginio1
 
13.01.16
18:11
(0) Всё получилось?
80 Мисти
 
19.01.16
16:54
Не-а, я бросила, занялась другими делами.
Сейчас еще раз попробую.
81 Serginio1
 
20.01.16
10:33
Ну как успехи, А то будет время могу сам попробовать
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс