|
Запрос 1С 7.7 в 1С 8.2 через COM | ☑ | ||
---|---|---|---|---|
0
sbvoshod
25.05.16
✎
07:49
|
Доброго времени суток всем.
Возникла такая проблема в решении следующей задачи: Переношу данные из 1С 7.7 в базу 1С 8.2 (Обычное приложение, Толстый клиент). Подключаюсь к БД 7.7 через COM-соединение БД77 = Новый COMОбъект("V1CEnterprise.Application"); СтрокаПодключения = "/D"""+СокрЛП(ПутьКБД77)+""" /N"""+СокрЛП(ПользовательБД77)+""" /P"""+СокрЛП(ПарольБД77)+""""; попытка РезультатПодключения=БД77.Initialize(БД77.RMTrade,СтрокаПодключения,?(ЗапускБезЗаставки = 1,"NO_SPLASH_SHOW","")); исключение Предупреждение(ОписаниеОшибки(),0); конецпопытки; С загрузкой справочников все прошло отлично. Далее перегружаю остатки. Создаю запрос и тут столкнулся с проблемой, не знаю как толком обойти её. В общем проблема в том, что не могу задать в тексте запроса дату!!! Т.е. текст такой: Запрос = БД77.CreateObject("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(запроспоостаткам) |Без итогов; //|Период С ДатаЗапроса по ДатаЗапроса; |Склад = Регистр.ОстаткиТоваров.Склад; |Товар = Регистр.ОстаткиТоваров.Товар; |БазоваяСтоимость = Регистр.ОстаткиТоваров.БазоваяСтоимость; |ВалютнаяСтоимость = Регистр.ОстаткиТоваров.ВалютнаяСтоимость; |ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара; |ФлагУчета = Регистр.ОстаткиТоваров.ФлагУчета; |Функция БазоваяСтоимостьКонОст = КонОст(БазоваяСтоимость); |Функция ВалютнаяСтоимостьКонОст = КонОст(ВалютнаяСтоимость); |Функция ОстатокТовараКонОст = КонОст(ОстатокТовара); |Группировка Склад без групп; |Группировка Товар без групп; |Условие(ОстатокТовара > 0); |"//}}ЗАПРОС ; Косяк в том, что как я эту дату туда не запихиваю, в итоге получается дата формата 1С 8.2!!! Запрос 1С 7.7 её не понимает и выдает естественно ошибку. Пробовал разные методы: брал текущую дату, даже делал в базу 7.7 константу, задавал в ней дату, потом уже в обработке переноса в 1С 8.2 писал ДатаЗапроса = БД77.Константа.ДатаЗапроса; Он дату то получает, но она всегда в формате 1С 8.2, даже если получить её из константы базы 1С 7.7! В общем, пока вышел из положения так: просто заремарил в запросе период, в 1С 7.7 изменил точку актуальности на нужную мне дату и получил остатки на ДатуТА() автоматом. Но мне еще периодические реквизиты из справочников переносить! :) И переносить документы за период некоторый! Че делать!? Как жить!? У кого есть решение данной проблемы? Может как то по другому подключиться к 1С 7.7 или все таки есть метод получения нормальной семерошной даты внутри 1С 8.2? |
|||
1
Mikeware
25.05.16
✎
07:53
|
1. в поиск. рассматривалось неоднократно
2. формируй текст сразу с датами 3. используй готовые функции в клюшках (добавь, если нету), или даже внешние обработки |
|||
2
VladZ
25.05.16
✎
07:53
|
(0) Я обычно переношу либо файлами (текст), либо с помощью КД.
|
|||
3
sbvoshod
25.05.16
✎
07:55
|
(1) Покопаюсь, спасибо.
(2) Поздно пить боржоми :) Уже основные справочники и остатки по товарам перетащил. Столько работы заново переделывать :) |
|||
4
Mikeware
25.05.16
✎
08:03
|
(3) КД - полезна. Хотя и дурна местами...
|
|||
5
hhhh
25.05.16
✎
09:36
|
(3) что-то как-то типа
|Период С '" + Формат(ДатаЗапроса, НужныйФормат) + "' по '" + Формат(ДатаЗапроса, НужныйФормат) + "' |
|||
6
sbvoshod
30.05.16
✎
19:41
|
(5) Пробовал - не катит.
Примерно так делаю: ДатаЗапроса = Неопределено; ДатаЗапроса = Формат(ДатаВводаОстатков,"ДФ=dd.MM.yyyy"); //ДатаВводаОстатков - реквизит на форме ТекстЗапроса = "//{{ЗАПРОС(запроспоостаткам) |Период с ДатаЗапроса по ДатаЗапроса; |Без итогов; |Склад = Регистр.ОстаткиТоваров.Склад; |Товар = Регистр.ОстаткиТоваров.Товар; |БазоваяСтоимость = Регистр.ОстаткиТоваров.БазоваяСтоимость; |ВалютнаяСтоимость = Регистр.ОстаткиТоваров.ВалютнаяСтоимость; |ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара; |ФлагУчета = Регистр.ОстаткиТоваров.ФлагУчета; |Функция БазоваяСтоимостьКонОст = КонОст(БазоваяСтоимость); |Функция ВалютнаяСтоимостьКонОст = КонОст(ВалютнаяСтоимость); |Функция ОстатокТовараКонОст = КонОст(ОстатокТовара); |Группировка Склад без групп; |Группировка Товар без групп; |Условие(ОстатокТовара > 0); |"//}}ЗАПРОС ; Результат такой: "{Форма.Форма.Форма(436)}: Ошибка при вызове метода контекста (Выполнить) Если Запрос.Выполнить(ТекстЗапроса) <> 0 Тогда по причине: Произошла исключительная ситуация (1С:Предприятие): Период с <<?>> ДатаЗапроса по ДатаЗапроса; Запрос[2] : Ошибка в выражении 'ДатаЗапроса' " |
|||
7
VitShvets
30.05.16
✎
20:20
|
|Период с " + ДатаЗапроса + " по " + ДатаЗапроса;
|
|||
8
VitShvets
30.05.16
✎
20:21
|
*Забыл вторую кавычку:
|Период с " + ДатаЗапроса + " по " + ДатаЗапроса + "; |
|||
9
sbvoshod
30.05.16
✎
20:38
|
(8) Дак из ни нифига...
Вообще ни как так не проканало. В общем я уже завел в 77 функцию, которая возвращает дату. Записал её в запросе. Проверил - в 7.7 все робит, в 8.2 выдает мне ошибку в тексте запроса на скобку!!! Но в 7.7 то ничего не выдает. В общем вышел наконец то из этой проблемы следующим образом: Код в 8.2: ДатаЗапроса = Неопределено; ДатаЗапроса = "31.12.2015"; Запрос = БД77.глВыполнитьЗапросПоОстаткамИз82(ДатаЗапроса); Если Запрос <> 0 Тогда Пока Запрос.Группировка() = 1 Цикл // выполняем нужные нам действия КонецЦикла; Иначе Предупреждение("Запрос не выполнен в 1С 7.7",5); КонецЕсли; Код в 1С 7.7 (в глобальном модуле): Функция глДатаИз82(СтрокаДаты) Экспорт Сообщить(СтрокаДаты); Возврат Дата(СтрокаДаты); КонецФункции Функция глВыполнитьЗапросПоОстаткамИз82(ДатаЗапроса) Экспорт Перем Запрос,ДатаЗапроса77; ДатаЗапроса77 = глДатаИз82(ДатаЗапроса); //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(запроспоостаткам) |Период с ДатаЗапроса77 по ДатаЗапроса77; |Без итогов; |Склад = Регистр.ОстаткиТоваров.Склад; |Товар = Регистр.ОстаткиТоваров.Товар; |БазоваяСтоимость = Регистр.ОстаткиТоваров.БазоваяСтоимость; |ВалютнаяСтоимость = Регистр.ОстаткиТоваров.ВалютнаяСтоимость; |ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара; |ФлагУчета = Регистр.ОстаткиТоваров.ФлагУчета; |Функция БазоваяСтоимостьКонОст = КонОст(БазоваяСтоимость); |Функция ВалютнаяСтоимостьКонОст = КонОст(ВалютнаяСтоимость); |Функция ОстатокТовараКонОст = КонОст(ОстатокТовара); |Группировка Склад без групп; |Группировка Товар без групп; |Условие(ОстатокТовара <> 0); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат 0; Иначе Возврат Запрос; КонецЕсли КонецФункции Вот такая трехэтажная конструкция работает! Большего и не надо, можно просто любой запрос отработать в 7.7 :) Единственное, пробовал сам текст запроса передавать из 8.2, но он почему то же некорректно передается - обрезается и все тут!!! В общем тяжко, но работоспособно. |
|||
10
sbvoshod
30.05.16
✎
20:45
|
(8) Щас испытаю, может проканает. Отпишусь! будем наполнять форум знаниями. А то я весь нэт излазал, ничего нет такого почему то. Есть из 7.7 в 8.2 передача даты. Обратно нет :)
|
|||
11
sbvoshod
30.05.16
✎
20:47
|
(8) Не, нифига:
Вот результат: {Форма.Форма.Форма(436)}: Ошибка при вызове метода контекста (Выполнить) Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда по причине: Произошла исключительная ситуация (1С:Предприятие): Период с (дата(31.12.2015) <<?>> ) по (дата(31.12.2015)); Запрос[2] : Ошибка в выражении ')' Вот код: Запрос = БД77.CreateObject("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(запроспоостаткам) |Период с (дата("+ДатаЗапроса+")) по (дата("+ДатаЗапроса+")); |Без итогов; |Склад = Регистр.ОстаткиТоваров.Склад; |Товар = Регистр.ОстаткиТоваров.Товар; |БазоваяСтоимость = Регистр.ОстаткиТоваров.БазоваяСтоимость; |ВалютнаяСтоимость = Регистр.ОстаткиТоваров.ВалютнаяСтоимость; |ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара; |ФлагУчета = Регистр.ОстаткиТоваров.ФлагУчета; |Функция БазоваяСтоимостьКонОст = КонОст(БазоваяСтоимость); |Функция ВалютнаяСтоимостьКонОст = КонОст(ВалютнаяСтоимость); |Функция ОстатокТовараКонОст = КонОст(ОстатокТовара); |Группировка Склад без групп; |Группировка Товар без групп; |Условие(ОстатокТовара <> 0); |" ; Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Причем всяко разно пробовал скобки, без скобок и так и сяк - в 1С 7.7 выполняется нормально, из 8 не хочет. |
|||
12
hhhh
30.05.16
✎
21:32
|
(11) да не в скобки надо взять дату а в апострофы? Чего вы чудите?
|
|||
13
sbvoshod
30.05.16
✎
22:28
|
(12) Ну дык у Вас написано:
|Период с " + ДатаЗапроса + " по " + ДатаЗапроса + "; Так не катит. Но почти. Методом тыка натыкал вот такой вариант: ДатаЗапроса = "'31.12.2015'"; ТекстЗапроса = "//{{ЗАПРОС(запроспоостаткам) |Период с "+ДатаЗапроса+" по "+ДатаЗапроса+"; |Без итогов; |Склад = Регистр.ОстаткиТоваров.Склад; |Товар = Регистр.ОстаткиТоваров.Товар; |БазоваяСтоимость = Регистр.ОстаткиТоваров.БазоваяСтоимость; |ВалютнаяСтоимость = Регистр.ОстаткиТоваров.ВалютнаяСтоимость; |ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара; |ФлагУчета = Регистр.ОстаткиТоваров.ФлагУчета; |Функция БазоваяСтоимостьКонОст = КонОст(БазоваяСтоимость); |Функция ВалютнаяСтоимостьКонОст = КонОст(ВалютнаяСтоимость); |Функция ОстатокТовараКонОст = КонОст(ОстатокТовара); |Группировка Склад без групп; |Группировка Товар без групп; |Условие(ОстатокТовара <> 0); |" ; ЕЕЕ!!! Победа! Полная! :) Спасибо!!! |
|||
14
sbvoshod
30.05.16
✎
22:30
|
Причем только так работает!
Именно если взять ДатаЗапроса = "'31.12.2015'"; Ни с ' ни с " по отдельности не работает, ни преобразование в строку, ничего! Но такой вариант вполне, можно любую дату в принципе разобрать в такой вид. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |