Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Можно ли через oData сделать проводку

Добрый день!
Подскажите, пожалуйста, можно ли через oData вызвать метод для проведения проводки над документом?
Ответ: () "некогда думать, трясти надо!" (c)
Вопрос: Платформа 8.3.8 поддержка протокола OData

Добрый день!

В связи с расширением поддержки протокола OData (новость тут и тут ) решил разобраться, как оно всё работает.
(Конфигурация тестовая, самописная, версия платформы: 8.3.8.1964)

Задача заключается в следующем: нужно получить товары и/или их количество через OData в json-формате с применением фильтра поиска.

На справочник товары наложены ограничения на чтение в конфигураторе через "ограничение доступа к данным", поэтому в get-запросе необходимо установить параметр: allowedOnly=true
тут всё работает, запрос получился таким:


далее, добавляю фильтр (поиска товара по наименованию или артикулу): &$filter=substringof('стол',concat(Description,Артикул))

итоговый запрос получился таким:


он (запрос) тоже работает, 1С "отвечает" вполне вменяемым json'ом со вхождениями в наименование или артикул поисковой строки 'стол'.


А вот дальше, начинаются "непонятки": необходимо узнать количество полученных товаров.

В документации сказано, что для получения количества можно использовать 2 параметра:
$count - при успешном запросе на выходе получаем количество
$inlinecount=allpages - возвращает искомые товары и их количество, также на ИТС сказано: "Допускается совместное использование параметров $filter и $inlinecount. "

пробую добавить этот параметр:

$inlinecount=allpages

получаю такую ошибку:
{
"odata.error": {
"code": "-1",
"message": {
"lang": "ru",
"value": "{(1, 30)}: Ключевое слово РАЗРЕШЕННЫЕ доступно только у первого запроса\nSELECT COUNT(*) FROM (SELECT <<?>>ALLOWED * FROM Catalog.Товары"
}
}
}

судя по ошибке, в 1С "коряво" строится запрос, пробую убрать "allowedOnly=true", получаю другую ошибку:

{
"odata.error": {
"code": "20",
"message": {
"lang": "ru",
"value": "Доступ запрещен"
}
}
}

Так как же можно получить количество разрешенных для чтения товаров с использованием фильтра через протокол OData?
Ответ:
ИМХО писать в тех сапопрт 1С о том, что метод работает криво, т.к. формируются вложенные запросы.
Вопрос: OData пытаюсь обновить регистр бухгалтерии

Добрый день!

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

до обновления через OData проводка реализации выглядит так
после обновления через OData проводка реализации выглядит так

сама реализация выглядит так

получить проводку я могу так

но в ней нет нужных полей, погуглив я нашел что можно получить нужные поля вот так

но как туда что-то записать я без понятия так как это просто список, подскажите, как можно обновить данные поля?
Ответ: брось это, ты занимаешься не своим делом
Вопрос: oData и изменения плана обмена

Всем привет.
Хочу через ODATA получить изменения зарегистрированные в узле.
Делаю как написано в ИТС
>В результате, полный URL для формирования сообщения обмена, будет >выглядеть следующим образом: >.

Но в ответ получаю ошибку с кодом 19
<m:error xmlns:m=";
<m:code>19</m:code>
<m:message>Произошла ошибка сервиса</m:message>
</m:error>
Ответ: Никто так не извращался?
Вопрос: Доступ в прямом запросе через 2 точки - пишет ошибка, хочет только через 1 точку

Нужно из 1С 8 достучаться до скульной 7.7, работающей на прямых запросах.

Пишу такой запрос пока что в SQL-студии:

|select top 100
|    рн.ДатаВремя,
|    рн.Склад,
|    case when рн.Склад.ИдЭлемента = '    2U   ' then 'Склад шин' |else 'прочий склад' end,
|    *
|from
|    ДокументШ_РасходнаяНакладная рн (nolock)
|
|order by рн.ДатаВремя --desc

выдаёт ошибку:

|Сообщение 258, уровень 15, состояние 1, строка 4
|Cannot call methods on char.

В восьмёрке это без проблем делается, а как правильно сравнить элемент справочника по его ID, прибитому гвоздями?
Ответ: () Ага, возьму на заметку. Но мне пока не нужно получать склдад из параметра, тут всё "прибито гвоздями" к кодам элементов.
Вопрос: v7: Что не так с запросом через ОЛЮ?

ДатаНачалаОтпускаОЛЕ = Дата1;
    СпрСотрудникиОЛЕ = ОЛЕ.CreateObject("Справочник.Сотрудники");                     
    Если СпрСотрудникиОЛЕ.НайтиПоКоду(ТекСотрудник.Код, 0) = 1 Тогда
        ТекСотрудникОЛЕ = СпрСотрудникиОЛЕ.ТекущийЭлемент();
    КонецЕсли;       

    ЗапросОЛЕ = ОЛЕ.CreateObject("Запрос");    
    ТекстЗапросаОЛЕ = "Период с '" + ДатаНачалаОтпускаОЛЕ + "' по '" + ДатаОкончанияОтпускаОЛЕ + "';
    |ТекущийДокумент = ЖурналРасчетов.Зарплата.ТекущийДокумент;
    |ДатаНачала = ЖурналРасчетов.Зарплата.ДатаНачала;
    |ДатаОкончания = ЖурналРасчетов.Зарплата.ДатаОкончания;
    |Объект = ЖурналРасчетов.Зарплата.Объект;
    |ВидРасч = ЖурналРасчетов.Зарплата.ВидРасч.Код;
    |Дни = ЖурналРасчетов.Зарплата.Дни;
    |Результат = ЖурналРасчетов.Зарплата.Результат;
    |Функция ДниСумма = Сумма(Дни);
    |Функция РезультатВсего = Сумма(Результат);
    |Группировка Объект;
    |Группировка ВидРасч;
    |Группировка ТекущийДокумент;
    |Группировка ДатаНачала;
    |Группировка ДатаОкончания;
    |Условие(Объект = ТекСотрудникОЛЕ);
    |Условие((ВидРасч = ""ОтпускОчередной"") ИЛИ (ВидРасч = ""ОтпускДополнительный"") ИЛИ (ВидРасч = ""КомпенсацияОтпускаСверх28дней"") ИЛИ (ВидРасч = ""КомпенсацияОтпуска""));
    |"//}}ЗАПРОС




Если ЗапросОЛЕ.Выполнить(ТекстЗапросаОЛЕ) = 1 Тогда
{C:\EXTFORMS\ОСТАТКИОТПУСКОВ.ERT()}: 1С:Предприятие: Условие(Объект = ТекСотрудникОЛЕ <<?>> );
Запрос[16] : Ошибка в выражении 'ТекСотрудникОЛЕ'

Условие по видам расчетов неверно описал?
Ответ: () и я о том же
ладно, поковыряю, а то с этим в последний раз лет 5 назад сталкивался.
Вопрос: v7: Проблема с прямым запросом через доп. соединение

Нужно сделать запрос не через текущее соединение 1с, а через доп. соединение, но почему то при этом получается бесконечный цикл и не видно количество полей в выборке и сами поля. В чем может быть проблема?
    МД = СоздатьОбъект("MetaDataWork");
    бд = СоздатьОбъект("ODBCDatabase");
    рс = СоздатьОбъект("ODBCRecordset");
    
    сервер = "server";
    
    БазаДанных = "ggg";

    Пользователь = "d";
    Пароль = "d"; 
    
    СтрокаПодключения = "Provider=SQLOLEDB.1;User ID=" + Пользователь + ";Pwd=" + Пароль + ";Initial Catalog=" + БазаДанных + ";Data Source=" + сервер + ";";
    бд.Соединение(СтрокаПодключения);
    рс.Отладка(1);
    рс.УстБД(бд);
    
        
        ТекстЗапроса = "-- qryMaker:Отчет1.2017.11.22.15.03.43
        |SELECT TOP 2 
        |    ТКОстатки.Комитент Комитент
        |    , ТКОстатки.ЮридическоеЛицо ЮридическоеЛицо
        |    , ТКОстатки.МестоХранения МестоХранения
        |    , ТКОстатки.МПЗМ МПЗ
        |    , ТКОстатки.КоличествоОстаток
        |    , МестаХранения.ID МХМПЗ
        |    , Контрагенты.ID ЮЛМПЗ
        |FROM $РегистрОстатки.ТК(,,
        |        (ВидОстатка = $Перечисление.ВидыОстатков.ОтклоненияБухУчета)
        |        AND (Комитент = :Комитент),(Комитент,ЮридическоеЛицо,МестоХранения,МПЗ),(Количество)) AS ТКОстатки
        |    JOIN $Справочник.МПЗ AS МПЗ With (NOLOCK) ON ТКОстатки.МПЗ = МПЗ.ID
        |    JOIN $Справочник.МестаХранения AS МестаХранения With (NOLOCK) ON $МПЗ.МестоХранения = МестаХранения.ID
        |    JOIN $Справочник.Контрагенты AS Контрагенты With (NOLOCK) ON $ПоследнееЗначение.МестаХранения.ЮридическоеЛицо(МестаХранения.ID, :ВыбДата) = Контрагенты.ID
        |Where ТКОстатки.МестоХранения <> МестаХранения.ID OR ТКОстатки.ЮридическоеЛицо <>  Контрагенты.ID 
        |";

    МД.УстановитьТекстовыйПараметр("ВыбДата", ДатаОСт);
    МД.УстановитьТекстовыйПараметр("Комитент", Комитент);
    
    ТекстЗапроса = МД.ОбрМетаСКЛ(ТекстЗапроса);
    
    рс.Открыть(ТекстЗапроса);
    
    рс.ВНачало();
    Пока рс.конец()=0 Цикл
        //Сообщить("" +рс.ПолучитьЗначение("Комитент"));

        //Сообщить("" +рс.ПолучитьЗначение("ЮридическоеЛицо"));

        //Сообщить("" +рс.ПолучитьЗначение("МестоХранения"));

        //Сообщить("" +рс.ПолучитьЗначение("МПЗ"));

        //Сообщить("" +рс.ПолучитьЗначение("КоличествоОстаток"));

        //Сообщить("" +рс.ПолучитьЗначение("МХМПЗ"));

        //Сообщить("" +рс.ПолучитьЗначение("ЮЛМПЗ"));

        
        Сообщить("=======");
    
        
        рс.След();
    КонецЦикла;
Ответ: ясно, спсб.
Вопрос: Прямой запрос из 1С в Microsoft SQL

Всем здравствуйте.

Казалось бы пустяковый вопрос, но второй день не могу победить. Надо выбрать из SQL (с помощью 1С) строки которые содержат определенный текст (параметр). Если параметр латинские буквы или цифры, то все ок... но если это русские буквы, то ничего не выбирает.

вот пример кода
Command = Новый COMОбъект("ADODB.Command");
RecordSet = Новый COMОбъект("ADODB.RecordSet");
Command.CommandText = "SELECT TOP 10 * FROM [MyBaza].[dbo].[Clents] where [ClientName] like '%иванов%'";
RecordSet = Command.Execute();

Подключал SQL как внешний источник и тоже самое (правда там делал 1С-кие запрос через ПОДОБНО) - выбирает только если латинские буквы или цифры искать.

помогите победить
Ответ: У меня через подобно все русские буквы находит...

Явно проблема в кодировке в скуле.
Вопрос: РегистрНакопления.ТоварыОрганизаций.Остатки разные остатки через СКД и через просмотр

Натолкните на мысль.
1С 10,3
При просмотре рагистра накопления через 1С (Операции --> Регистр накопления --> ТоварыОрганизаций) вижу, что конкретный товар конкретной серии пришел на склад 15.01.2018. Ранее движений по нему не было.
При запросе через СКД
ВЫБРАТЬ
	"Остаток на начало" КАК Поле1,
	ТоварыОрганизацийОстатки.Номенклатура.Наименование,
	ТоварыОрганизацийОстатки.СерияНоменклатуры,
	&Начало,
	ТоварыОрганизацийОстатки.КоличествоОстаток,
	0 КАК Поле2  ,
	0 как НомерСтроки
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Остатки(&Начало, Организация = &Организация) КАК ТоварыОрганизацийОстатки

Параметр &Начало = 01.01.2016
Получаю остаток серии -3

Первая мысль - давно не восстанавливала последовательности. Есть шансы что в них дело?
Ответ: СКД оперирует итогами. Если данные в программе верны, то их нужно пересчитать (через Конфигуратрр ТИИ или Предприятие Управление итогами). Восстановление последовательности то же приведет к их пересчету, но с дополнительными издержками.
Вопрос: Вопрос по запросу ОБЪЕДИНИТЬ

Добрый день

Платформа 8.3.7
Конфигурация УТ 10.3 SQL  сильно дописана
Справочник.Номенклатура содержит 4 реквизита  значений Артикула:
-реквзит Артикул
-реквизит АртикулДоп
-ТЧ Артикулы.Артикул
-ТЧ АртикулыДоп.Артикул


Сталкнулся с одной ситуацией, связанной с использованием запроса в поиске товара по артикулу.
Пытаясь как-то "ускорить" работу Запроса1  немного переделал  его в Запрос2.
Есть 2 схожих запроса (через ОБЪЕДИНИТЬ из 4-х источников), 
в которых выбирается Номенклатура по условию  Артикул ПОДОБНО &Отбор    
где условие отбора    Отбор = "%"+стрПоиска+"%";


Запрос1.Текст = 
    "  ВЫБРАТЬ Н1.Ссылка КАК Ссылка
    |    ИЗ Справочник.Номенклатура КАК Н1
    |    ГДЕ  Н1.Артикул + ""|"" + Н1.АртикулДоп ПОДОБНО &Отбор
    |    
    |    ОБЪЕДИНИТЬ
    |    
    |    ВЫБРАТЬ Н2.Ссылка
    |    ИЗ  Справочник.Номенклатура.Артикулы КАК Н2
    |    ГДЕ  Н2.Артикул ПОДОБНО &Отбор
    |    
    |    ОБЪЕДИНИТЬ
    |    
    |    ВЫБРАТЬ Н3.Ссылка
    |    ИЗ Справочник.Номенклатура.АртикулыДоп КАК Н3
    |    ГДЕ  Н3.Артикул ПОДОБНО &Отбор";


Запрос2.Текст = 
    "ВЫБРАТЬ ПЕРВЫЕ 100
    |    ВЗ.Ссылка
    |ИЗ
    |    (ВЫБРАТЬ Н1.Ссылка КАК Ссылка
    |    ИЗ Справочник.Номенклатура КАК Н1
    |    ГДЕ  Н1.Артикул + ""|"" + Н1.АртикулДоп ПОДОБНО &Отбор
    |    
    |    ОБЪЕДИНИТЬ
    |    
    |    ВЫБРАТЬ Н2.Ссылка
    |    ИЗ Справочник.Номенклатура.Артикулы КАК Н2
    |    ГДЕ  Н2.Артикул ПОДОБНО &Отбор
    |    
    |    ОБЪЕДИНИТЬ
    |    
    |    ВЫБРАТЬ Н3.Ссылка
    |    ИЗ Справочник.Номенклатура.АртикулыДоп КАК Н3
    |    ГДЕ  Н3.Артикул ПОДОБНО &Отбор)  КАК ВЗ";



Мне не совсем понятны результаты замеров скорости этих запросов.

Ниже приведены результаты замера выполнения запросов на базе 1,3млн. записей
при различных (по длине) строках поиска артикула:

стрПоиска = 51248220072   <--- ПОЛНОЕ СОВПАДЕНИЕ С АРТИКУЛОМ
Запрос1: выбрано записей 3  за 1,344 сек
Запрос2: выбрано записей 3  за 6,375 сек

5124822007 =====================
Запрос1: выбрано записей 3  за 1906
Запрос2: выбрано записей 3  за 4625

512482200 =====================
Запрос1: выбрано записей 3  за 1796
Запрос2: выбрано записей 3  за 5000

51248220 =====================
Запрос1: выбрано записей 3  за 1141
Запрос2: выбрано записей 3  за 6063

5124822 =====================
Запрос1: выбрано записей 22  за 1140
Запрос2: выбрано записей 22  за 4626

512482 =====================
Запрос1: выбрано записей 74  за 1406
Запрос2: выбрано записей 74  за 5016

51248 =====================
Запрос1: выбрано записей 200  за 1297
Запрос2: выбрано записей 100  за 3969

5124 =====================
Запрос1: выбрано записей 1 410  за 1297
Запрос2: выбрано записей 100   за 0,500

512 =====================
Запрос1: выбрано записей 17 304  за 1688
Запрос2: выбрано записей 100  за 0,125

51 =====================
Запрос1: выбрано записей 188 826  за 2344
Запрос2: выбрано записей 100  за 0,016

5 =====================
Запрос1: выбрано записей 958 206  за 9048
Запрос2: выбрано записей 100  за  0,031

1 =====================
Запрос1: выбрано записей 1 333 697  за 11016
Запрос2: выбрано записей 100  за  0,016


Вопрос ко всем - объясните почему такое поведение Запрос2  для  "длинной" строки поиска?  
(это результаты из верхней части списка - когда Запрос1 отрабатывает быстрее Запрос2)

Заранее благодарен
Ответ: хотя бы все воткнул в объединить, ну и в выбрать первые воткнул упорядочивание