Имя: Пароль:
1C
1С v8
Несоответствие типов, параметр 1
0 solbadguy
 
05.07.18
08:23
Здравствуйте уважаемые знатоки, проблема следующая -
Создаю конфигурацию, из которой будет цеплять данные мобильный клиент на мобильном устройстве соответственно.  Добился того, что при нажатии на волшебную кнопку данные из мобильного устройства грузит в основную базу. Из центральной базы в мобильное устройство - нет.  
В ступор встал конкретно, изейший вопрос по-любому. Видимо не хватает
Готовый код не прошу, прошу тыкнуть носом. Спасибо.
1 solbadguy
 
05.07.18
08:25
Имеется общая команда.


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    Если ВыполнитьСинхронизациюНаСервере() Тогда
        Сообщить("Синхронизация прошла успешно!");
    Иначе
        Сообщить("При синхронизации произошла ошибка!");
    КонецЕсли          
КонецПроцедуры  


&НаСервере
Функция ВыполнитьСинхронизациюНаСервере()
    Попытка
        ВСОпределение = новый WSОпределения("http://192.168.111.108/Web/ws/WebОбмен.1cws?wsdl";);
        ВСервис = ВСОпределение.Сервисы.Получить("Data", "WebОбмен");
        ВТочкаВхода = ВСервис.ТочкиПодключения.Получить("WebОбменSoap");
        ВОперация = ВТочкаВхода.Интерфейс.Операции.Получить("Синхронизация");
        Данные = новый ХранилищеЗначения(ЗарегистрироватьВыгрузку(), новый СжатиеДанных(9));
        
        ДанныеXDTO = ВСОпределение.ФабрикаXDTO.Создать(ВОперация.Параметры.Получить("Данные").Тип, Данные);
        ВСПрокси = новый WSПрокси(ВСОпределение, "Data", "WebОбмен", "WebОбменSoap");
        Ответ = ВСПрокси.Синхронизация(ДанныеXDTO);
        ПринятьИзмененияПоПлану(Ответ.Получить());
        Возврат Истина
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат Ложь;
    КонецПопытки;
КонецФункции


&НаСервере
Процедура ПринятьИзмененияПоПлану(СтрокаСообщения)
    ЧтениеХМЛ = Новый ЧтениеXML;
    ЧтениеХМЛ.УстановитьСтроку(СтрокаСообщения);
    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
    ЧтениеСообщения.НачатьЧтение(ЧтениеХМЛ);
    
    Пока ВозможностьЧтенияXML(ЧтениеХМЛ) Цикл
        Данные = ПрочитатьXML(ЧтениеСообщения.ЧтениеXML);
        Если НЕ Данные = Неопределено Тогда
            Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель;
            Данные.ОбменДанными.Загрузка = Истина;
            Данные.Записать();
        КонецЕсли;
    КонецЦикла;
    ЧтениеСообщения.ЗакончитьЧтение();
КонецПроцедуры


&НаСервере
Функция ЗарегистрироватьВыгрузку()
    
ЗаписьХМЛ = новый ЗаписьXML;
//ЗаписьХМЛ.ОткрытьФайл(ЗаписьХМЛ);
ЗаписьХМЛ.УстановитьСтроку();
ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();

Узел = ПланыОбмена.МобильныйОбмен.НайтиПоКоду("ЦБ");
ЗаписьСообщения.НачатьЗапись(ЗаписьХМЛ, Узел);

ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(Узел, ЗаписьСообщения.НомерСообщения);
Пока ВыборкаИзменений.Следующий() Цикл
    ОбъектОбмена = ВыборкаИзменений.Получить();
    ЗаписатьXML(ЗаписьХМЛ, ОбъектОбмена);
КонецЦикла;
ЗаписьСообщения.ЗакончитьЗапись();

Возврат ЗаписьХМЛ.Закрыть();

КонецФункции
2 butterbean
 
05.07.18
08:25
Пожалуйста, а в чем конкретно проблема-то?
3 Не кассир
 
05.07.18
08:26
(1) И?
4 solbadguy
 
05.07.18
08:26
{ОбщаяКоманда.ВыполнитьСинхронизациюСБД.МодульКоманды(61)}: Ошибка при вызове метода контекста (НачатьЗапись): Недопустимое значение параметра (параметр номер '2')
5 Не кассир
 
05.07.18
08:27
(4) Какие буквы не понятны?
6 solbadguy
 
05.07.18
08:27
Узел = ПланыОбмена.МобильныйОбмен.НайтиПоКоду("ЦБ");
ЗаписьСообщения.НачатьЗапись(ЗаписьХМЛ, Узел);


вот этот кусок неправильный. Ещё заметил что в обратную сторону обмен тож идёт, однако работает только со справочниками у которых стандартные реквизиты.  Алсо создаёт автоматом код ЦБ0001, ЦБ0002, ...
7 Не кассир
 
05.07.18
08:29
(6) И?
8 solbadguy
 
05.07.18
08:29
Пробовал добавил ещё 1 переменную, найти покоду МУ (мобильноеустройство) и в плане обмена 2 кода прописать. Не работает вообщем.   Признаюсь делал не сам - стоит задача, цепляю из сети. Однако с десяток примеров уже разобрал, каждый раз доходит до этой ошибки - дальше не могу сдвинуться.

Вот нервы сдали - зарегистрировался.
9 Не кассир
 
05.07.18
08:30
(8) Поздравить с регистрацией?
10 butterbean
 
05.07.18
08:31
(8) отладчиком пользоваться умеешь? посмотри что у тебя во втором параметре (Узел). Скорее всего там ничего, т.к. по коду ничего не найдено
11 Не кассир
 
05.07.18
08:31
(10) зачем интригу ломаешь?
12 solbadguy
 
05.07.18
08:37
(10) Точно - пусто. А как бы так назначить параметр если код автоматически ставится ЦБ0000001, ЦБ0000002 (точный регистр сейчас указал, не повторение)
И заметил ещё что повторяются значения, т.е он не добавляет новое при выгрузке ИЗ мобильного устройства, а просто создаёт позицию с этим же кодом и неважно что он уже существует
13 solbadguy
 
05.07.18
08:38
т.е как я понимаю он берёт моё "ЦБ" и добавляет н-ное кол-ви нулей, но понимания это не особо даёт
14 Не кассир
 
05.07.18
08:38
(12) Ты перечитай, что написал. И учись четко формулировать.
15 solbadguy
 
05.07.18
08:48
не догоняю, ну никак. Посоветуйте где почитать хотя бы если вам всё ясно
16 Не кассир
 
05.07.18
08:49
(15) Читай где угодно, разницы нет. А вот , что ты хочешь почитать?
17 1Сергей
 
05.07.18
08:59
Смотри планы обмена
18 solbadguy
 
06.07.18
04:24
разобрался, кнопка на платформе-сервере с этим кодом и не должна работать. Другой вопрос, существует ли похожая процедура - "При открытии мобильного клиента" ?
Хочу реализовать обновление не с нажатия кнопки в клиенте, а при открытии, в этихвашихинтернетах не нашёл полезной информации.
Была идея создать константу, не включать ее в план обмена, и построить условие в модуле конфигурации, обратиться к общей команде. Однако пишут что программно к общей команде не получится обратиться
19 Не кассир
 
06.07.18
05:47
(18) Можно попробовать еще поучиться прежде чем писать.
20 solbadguy
 
06.07.18
06:23
(19) Спасибо Кэп!  

А если серьёзно, неужели никто не сталкивался?
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.