Показаны сообщения с ярлыком запрос. Показать все сообщения
Показаны сообщения с ярлыком запрос. Показать все сообщения

14 авг. 2018 г.

Нужно больше практики

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

Предполагается следующий формат:
- до четырех часов безвозмездной работы по вашей проблеме;
- основные работы будут проводиться по вечерам или в выходные;
- отчет будет опубликован в блоге.

Пока в планах отработать первые пять-семь заявок, дальше будет проведен анализ эффективности и востребованности подобного формата. Вопросы в комментариях приветствуются.

5 февр. 2014 г.

Получение уникального идентификатора ссылки в СКД

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


Далее проведем эксперимент по быстродействию получения результата через запрос с последующей обработкой выборки и вариантов с использованием СКД.


20 июн. 2013 г.

Работа с менеджером временных таблиц


В 1С есть такая замечательная вещь, как МенеджерВременныхТаблиц.  Этот объект позволяет передавать временные таблицы из одного запроса в другой. То есть, мы можем создать временную таблицу в запросе, прерваться, выполнить какой-нибудь код, и продолжить работу с этой временной таблицей дальше. Например, в отчете в зависимости от выбранных настроек первичные данные обрабатываются тем или иным способом. Тогда имеет смысл в одной процедуре сформировать эти данные и поместить их во временную таблицу, которую уже передаем через менеджер временных таблиц в другую процедуру, отвечающую за выбранный способ обработки. Это позволит сократить код, сделать запросы более читаемыми. А так же в случае, если возникнут изменения в методике подготовки первичных данных для обработки, то потребуется внести изменения только в один запрос, а не в каждый.
В качестве примера работы с менеджером временных таблиц приведу следующую обработку.

2 апр. 2013 г.

Особенности получения последних документов

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

Разберем на примере демо-базы УТ11, найдем последние документы прихода номенклатуры по регистру "ТоварыНаСкладе". Под последним документом в контексте данной задачи может пониматься как документ с наибольшей датой документа, так и последний документ, введенный пользователем.

21 авг. 2012 г.

РазностьДат в запросе, продолжение

Ранее для определения точного количества лет мне приходилось использовать следующую конструкцию в запросе.
 ГОД(&Дата2) - ГОД(&Дата1) - ВЫБОР
  КОГДА МЕСЯЦ(&Дата2) < МЕСЯЦ(&Дата1)
   ТОГДА 1
  ИНАЧЕ ВЫБОР
   КОГДА МЕСЯЦ(&Дата2) = МЕСЯЦ(&Дата1)
    ТОГДА ВЫБОР
     КОГДА ДЕНЬ(&Дата2) < ДЕНЬ(&Дата1)
      ТОГДА 1
     ИНАЧЕ 0
    КОНЕЦ
   ИНАЧЕ 0
  КОНЕЦ
 КОНЕЦ
Выглядит довольно таки громоздко, легко запутаться в больших запросах. Но если взять  
РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(&Дата1, ДЕНЬ, -1), &Дата2, ДЕНЬ) / 365.25 
то мы как раз получим точное количество лет. День отнимаем, чтобы скорректировать погрешность на малых периодах. Если просто делить на 365, то на больших периодах возникает погрешность, вызываемая високосными годами. Деление на 365.25 учитывает эту погрешность на любых периодах.

22 июн. 2012 г.

Количество лет в запросе

Недавно возникла необходимость получить точное количество лет в запросе, результат функции РазностьДат выдавал некорректный результат в ряде случаев. Например, РазностьДат(31.12.2011, 01.01.2012, ГОД) равно 1, хотя на самом деле количество целых лет должно быть равно 0.