Приветствую Вас ГостьПонедельник, 23.09.2019, 12:19

Каталог статей

Всего материалов в каталоге: 39
Показано материалов: 1-10
Страницы: 1 2 3 4 »

Как с этим бороться можно почитать здесь: https://its.1c.ru/db/metod8dev#content:5815:hdoc:%D0%BF%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA

Администрирование | Просмотров: 14 | Добавил: leshic | Дата: 21.08.2019 | Комментарии (1)

Рассмотри случай когда у нас уже есть опубликованный веб-сервис и надо добавить новую операцию.

Открываем ветку Web-сервисы, существующий веб-сервис, нажимаем "Добавить / Операция".

Указываем

  • Имя 
  • Тип возвращаемого значения. Если тип имеет нестандартный тип, то его предварительно необходимо определить в XDTO-пакете
  • Имя процедуры (нажимаем на лупу и переходим в модуль сервиса)

Если результат должен формироваться по входным параметрам, то создаем параметры для операции. Направление передачи = "Входной".

Для созданного свойства надо обязательно указать права доступа. Правая кнопка мыши, Дополнительно и выдаем для нужной роли права  на "Использование".

Тип значения может быть элементарным или определенным отдельно (но все равно должен состоять из элементарных типов). Про типы можно посмотреть здесь: https://its.1c.ru/db/metod8dev#content:1793:hdoc

Допустим нам надо вернуть таблицу значений. Самый простой вариант определить 2 типа: Тип1 - строка таблицы (определяем столбцы таблицы), Тип2 - массив строк таблицы.

Находим нужный XDTO-пакет (пакет XDTO указан в свойстве "Пакеты XDTO"  сервиса, точнее там указано URI пространства имен. просматриваем все XDTO-пакеты, и ищем нужны по значению этого реквизита).

Добавляем тип объекта для строки таблицы.

Далее создаем тип объекта для таблицы, добавляем свойство СтрикиТаблицы и указываем для него тип созданные ранее для строки таблицы

Так как нам нужна таблица, то в свойствах строки ставим реквизит "Максимальное количество" = -1. Это говорит о том, что максимальное количество значений не ограничено. По умолчанию этот реквизит равен 1, что означает, что он может быть только 1. Поставим реквизит "Возможно пустое" = Истина, так как есть возможность, что наша функция вернет пустой набор строк.

Теперь открываем функцию модуля сервиса.

Текст функции примерно такой:

Функция РаботыИМатериалы(ДатаНачала, ДатаОкончания) // 2 параметра соответствуют входным параметрам нашей операции
    
    ВыходныеДанныеТипТаблица = ФабрикаXDTO.Тип("http://localhost/rng_vdgo", "ТаблицаРеализация");    //создаем тип для таблицы
    ВыходныеДанные = ФабрикаXDTO.Создать(ВыходныеДанныеТипТаблица); // создаем саму таблицу
    
    ВыходныеДанныеТипСтрокаТаблицы = ФабрикаXDTO.Тип("http://localhost/rng_vdgo", "СтрокаРеализация"); //Создаем тип для строки
    
    ТЗРаботыИМатериалы = ВОГ_ВебСервисы.СформироватьТаблицуРаботИМатериалов(ДатаНачала, ДатаОкончания); // получаем таблицу значений для выгрузки
    
    Для каждого СтрокаТЗ из ТЗРаботыИМатериалы Цикл
        
        ВыходныеДанныеСтрокаТаблицы = ФабрикаXDTO.Создать(ВыходныеДанныеТипСтрокаТаблицы); //создаем строку таблицы

        //заполняем строку

        ВыходныеДанныеСтрокаТаблицы.ДатаРеализации = СтрокаТЗ.Период;
        ВыходныеДанныеСтрокаТаблицы.ГУИДПодразделение = Строка(СтрокаТЗ.ПодразделениеСсылка.УникальныйИдентификатор());        
        ВыходныеДанныеСтрокаТаблицы.КодПодразделения = СтрокаТЗ.ПодразделениеКод;
        ВыходныеДанныеСтрокаТаблицы.Подразделение = СтрокаТЗ.ПодразделениеПолноеНаименование;                
        ВыходныеДанныеСтрокаТаблицы.ГУИДНоменклатура = Строка(СтрокаТЗ.НоменклатураСсылка.УникальныйИдентификатор());
        ВыходныеДанныеСтрокаТаблицы.Номенклатура = СтрокаТЗ.НоменклатураНаименование;
        ВыходныеДанныеСтрокаТаблицы.Количество = СтрокаТЗ.Количество;
        ВыходныеДанныеСтрокаТаблицы.Сумма = СтрокаТЗ.Сумма;
        ВыходныеДанныеСтрокаТаблицы.ЭтоМатериал = СтрокаТЗ.ЭтоМатериал;

        ВыходныеДанные.СтрокиТаблицы.Добавить(ВыходныеДанныеСтрокаТаблицы); //добавлеям строку в таблицу (как строка массива)
        
    КонецЦикла;
    
    Возврат ВыходныеДанные; //Обязательно возвращаем значение

КонецФункции

Для получения данных через веб-сервис по созданной нами операции текст процедуры может быть примерно таким:

Процедура ПолучитьТаблицуРаботИМатериаловНаСервере()
    Сервис = WSСсылки.НашаСсылка.СоздатьWSПрокси("http://localhost/rng_vdgo", "rng_vdgo",  "rng_vdgoSoap");
    Сервис.Пользователь = "пользователь"; //пользователь зарегистрированный в 1С к которой обращаемся и имеющий права на веб-сервисы и чтение данных, указанных в запросе
    Сервис.Пароль = "пароль";
    //в WSСсылке НашаСсылка должна быть обновлена структура WSDL (типы и свойства на удаленном сервере). Этого можно добиться заново забив строку URL источника у ссылки
    ДанныеТаблицаРеализацияТип = Сервис.ФабрикаXDTO.Тип("http://localhost/rng_vdgo","ТаблицаРеализация");  //создаем тип для таблицы
    ДанныеТаблицаРеализация = Сервис.ФабрикаXDTO.Создать(ДанныеТаблицаРеализацияТип); //создаем саму таблицу
    
    ТаблицаРеализации = Сервис.ПолучитьТаблицуФактРаботыИМатериалы(ДатаНачала, ДатаОкончания); //получаем данные

    Для каждого СтрокаРеализации из ТаблицаРеализации.СтрокиТаблицы Цикл //обходим таблицу

                     ...

    КонецЦикла;

КонецПроцедуры

URL задается строкой. Примерный вариант: http://сервер/имя публикации (обычно совпадает с именем базы)/ws/<имя сервиса>.1cws?wsdl

 


Если нет подключения к хранилищу конфигураций, то возможны 2 причины:

  1.  Отключена служба хранилища на сервере: 1C:Enterprise 8.3 Configuration Repository Server Service. Строка запуска: "C:\Program Files\1cv8\8.3.14.1630\bin\crserver.exe" -srvc -port 1537 -d C:\Repository\. В этом случае стартуем службу.
  2. Брандмауэр режет доступ к серверу. Отключаем брандмауэр или настраиваем доступ к соответствующим портам.
Администрирование | Просмотров: 12 | Добавил: leshic | Дата: 14.08.2019 | Комментарии (0)

Бывает что при переносе базы слетает нумерация документов и при попытке сохранить новый документ говорит, что номер документа не уникален.

В это случае мне помогло выполнить "Проверка логической целостности информационной базы" в Тестировании и исправлении информационно базы"

Администрирование | Просмотров: 17 | Добавил: leshic | Дата: 10.07.2019 | Комментарии (0)

Принцип такой:

Формируем файл на сервере. Имя генерируем  ПолучитьИмяВременногоФайла();. Потом передаем временный файл в хранилище и удаляем его на сервере.

На клиенте получаем файл из хранилища  с помощью ОписаниеПередаваемогоФайла и НачатьПолучениеФайлов. В последнем указываем оповещение. В процедуре оповещения на входе получаем массив принятых файлов.

 

Формы | Просмотров: 17 | Добавил: leshic | Дата: 10.07.2019 | Комментарии (0)

В БСП (1С:Библиотека стандартных подсистем 8.2) если у пользователя есть полные права, то остальные роли игнорируются. Т.е. если у пользователя полные права и роль "Роль1", а в коде стоит проверка "Если РольДоступна("Роль1")..." то у пользователя эта проверка может не сработать. В этом случае надо добавлять так же в условие проверку на РольДоступна("ПолныеПрава")

Администрирование | Просмотров: 31 | Добавил: leshic | Дата: 03.07.2019 | Комментарии (0)

Задача делится на 2 подзадачи:

1) сначала открываем диалог выбора файла немодально и присваиваем реквизиту формы ФайлДанных значение выбранного файла. Для строкового реквизита ФайлДанных устанавливаем свойство "Кнопка выбора" = Да, и пишем обработчик события "Начало выбора".

2) передаем файл на сервер после чего обрабатываем его. (можно почитать здесь: https://its.1c.ru/db/v8std#content:542:hdoc)

Для передачи используем процедуру НачатьПомещениеФайла(ОписаниеОповещения,   ,  ФайлДанных,  Ложь, УникальныйИдентификатор);. 

Здесь УникальныйИдентификатор - это УИД формы (можно было написать ЭтаФорма.УникальныйИдентификатор)

На входе процедуры в описании оповещения вторым параметром идет Адрес. Его можно задать принудительно при вызове процедуры НачатьПомещениеФайла. Если он не задан, то создается новый файл и в адрес будет занесен путь файла во временном хранилище. У этой процедуры есть параметр "Интерактивно". Если он равен Истина, то можно не писать обработку выбора файла. Система сама вызовет такой диалог и передаст файл во временное хранилище.

1С сильно рекомендует использовать ПолучитьИмяВременногоФайла() для создания временных файлов. При этом имя формируется в временный каталог пользователя. Если имя временного файла и каталог задать жестко, то есть вероятность того, то при запуске обработки другим пользователем выйдет ошибка совместного доступа к файлу.

Формы | Просмотров: 24 | Добавил: leshic | Дата: 26.06.2019 | Комментарии (0)

Столкнулся с тем, что табличный документ не хотел печататься на 2 сторонах. Проблема решилась неожиданным способом: увеличил размер полей.

СКД | Просмотров: 17 | Добавил: leshic | Дата: 20.06.2019 | Комментарии (0)

Часто бывает, что при печати таблицы многострочная ячейка разбивается на 2 листа, если целиком не влезла. Особенно коряво получается, когда в одном из соседних столбцов 2 строки, а в другом одна объединенная строка, тогда лист оканчивается посередине объединенной ячейке и буквы рвутся по горизонтали.

Чтобы этого избежать в макете табличного документа в свойствах строки устанавливаем свойство "ВместеСоСледующим" В этом случае, если эта строка и следующая не влезают на 1 лист, то они обе переносятся на другой. 

Это же можно использовать и для колонок.

 

СКД | Просмотров: 27 | Добавил: leshic | Дата: 20.06.2019 | Комментарии (0)

Независимо от того, какой запрос написан в наборе данных, СКД исключает из результирующего запроса поля, не участвующие в настройках отчета. Это может приводить к тому, что в результате суммы по оборотам могут быть либо больше, либо меньше реальных.

Например, делаем запрос по сумме проданной номенклатуры. В запросе указываем день, номенклатуру, сумму, покупателя, регистратор. Допустим у нас один и тот же покупатель купил 3 раза одну и туже номенклатуру в один и тот же день по одной и той же цене (100 руб.).

  • Регистратор1, Номенклатура, Покупатель, 100
  • Регистратор2, Номенклатура, Покупатель, 100
  • Регистратор3, Номенклатура, Покупатель, 100

Если в настройках отчета укажем все поля запроса то получим верные данные. Если укажем только номенклатуру, покупателя и сумму, то рискуем получить меньший оборот, если у нас не будет детальных записей. В этом случае СКД сгруппирует все данные и вместо 3 строк по 100 руб, у нас появится 1 строка по 100 руб. Так как все 3 покупки будут различаться только регистраторами, который мы не включили, то в результате данные сгруппируются до 1 строки: Номенклатура, Покупатель, 100

Чтобы такого не случилось (мало ли как будут настраивать отчет пользователи), надо поставить в Роли поля "Регистратор" галку "Обязательное" 

В этом случае, какая бы не была настройка отчета, поле Регистратор всегда будет участвовать в запросе СКД

СКД | Просмотров: 23 | Добавил: leshic | Дата: 17.06.2019 | Комментарии (0)


Вход на сайт
Поиск
Категории раздела
Материалы по 1С [33]
Редакторы языка QPILE [3]
Текстовые редакторы в которых удобно создавать портфели на языке QPILE
Программы для MetaTrader4 [0]
Эксперты, индикаторы и т.д.
Разное [3]
Сюда я буду складывать интересные мысли. Дома рано или поздно потеряю, а здесь все равно никто читать не будет.
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0