Особенность встроенной функции Представление() в СКД [поход на грабли]

Публикация № 977912

Разработка - Практика программирования

СКД Представление Карточка счета

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

В "1С:Бухгалтерии 8" одного из клиентов обнаружил невозможность сформировать стандартный отчет "Карточка счета" по некоторым счетам (чуть позже похожее поведение нашел еще в "Карточке субконто" и в "Отчете по проводкам"). Из-за данной периодически возникающей ошибки бухгалтера для работы стали использовать другую версию этого отчета из более ранних редакций конфигурации (когда еще до появления СКД применяли объект "Построитель отчета"). А вообще, если не считать эту тянувшуюся несколько лет ошибку, то в целом в работе системы их больше ничего не беспокоило. 

В конфигурации была включена возможность внесения изменений и моими предшественниками были выполнены некоторые доработки под процессы компании. Но, к моему удивлению, конкретно бухгалтерская отчетность не модифицировалась. Что это - "особенные" настройки? Или результат "кривого" ручного обновления? Неужели ошибка типового функционала, которую за много лет никто не обнаружил?

 

Поиск причины ошибки

Первое допущение: мои предшественники намудрили с RLS из-за чего возникла ошибка в типовом функционале. Но под полными правами проблема то же воспроизвелась - при попытке сформировать отчет получаю странную картинку с частично сформированной таблицей результата в "поломанном" оформлением и сообщение:

Отчет не сформирован!
Неверные параметры "+"


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

ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);

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

Третье подозрение: возможно в схеме есть вызовы общих модулей либо для получения значения параметров отчета, либо для расчета вычисляемых полей, либо для формирования представления. И снова нет - ни единого вызова внешних функций, в которых могла возникнуть ошибка. Следовательно дальнейшие поиски ограничены исключительно схемой.

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

Четвертой догадкой стала: проблема с формулами вычисляемых полей. В данном разделе были описано одиннадцать расчетных полей, в трех из которых содержались операции по конкатенации строк с помощью оператора "+". Это были формирование представления документа, а так же описания аналитик по Дебету и Кредиту. Выглядят они во всех типовых (и отраслевых) конфигурациях следующим образом:

 
 Представление документа
Представление(Регистратор) + &ПС + Содержание
 
Текст для аналитики Дебита
Выбор Когда ((НалоговоеНазначениеДт Есть NULL) ИЛИ ( НалоговоеНазначениеДт=Значение(Справочник.НалоговыеНазначенияАктивовИЗатрат.ПустаяСсылка))) Тогда ""
Иначе Выбор Когда Не ЗначениеЗаполнено(Представление(НалоговоеНазначениеДт)) Тогда "<...>"+ &ПС Иначе Представление(НалоговоеНазначениеДт)+ &ПС Конец
Конец
+
Выбор Когда СубконтоДт1 Есть NULL Тогда ""
Иначе Выбор Когда Не ЗначениеЗаполнено(Представление(СубконтоДт1)) Тогда "<...>"+ &ПС Иначе Представление(СубконтоДт1)+ &ПС Конец
Конец
+
Выбор Когда СубконтоДт2 Есть NULL Тогда ""
Иначе Выбор Когда Не ЗначениеЗаполнено(Представление(СубконтоДт2)) Тогда "<...>" Иначе Представление(СубконтоДт2)+ &ПС Конец
Конец
+
Выбор Когда СубконтоДт3 Есть NULL Тогда ""
Иначе Выбор Когда Не ЗначениеЗаполнено(Представление(СубконтоДт3)) Тогда "<...>" Иначе Представление(СубконтоДт3) Конец
Конец
 
 Текст для аналитики Кредита

С представлением документа все нормально - все три операнда в данном уравнении всегда являются строками (согласно текста запроса и явно инициированного переносом строки параметра &ПС) и потому не могут быть причиной ошибки. Проверил суждение практикой и заменил формулу на пустую строку - отчет ожидаемо не сформировался до конца.

Строки с описанием аналитик тоже внешне выглядят "правильными". Конечно, смущает что при наличии проверок на заполненность и обладая знанием, что первое или второе субконто могут являются Null-ами (признак отсутствия аналитики на счете), все равно тратится время на анализ последующих субконто.  Еще бросается в глаза, что для второго субконто (как для Дебета, так и для Кредита) перенос строки добавляют лишь после имеющих значение представлений, а после строки "<...>" про перенос забыли. (Кстати, из любопытства проверил последнюю ERP - там точно так же забыт этот несчастный перенос строки. Видимо типовые бухгалтерские отчеты как написали лет 10 назад, так больше ни разу и не трогали.) Но после заполнения полей аналитик пустыми строками, отчет наконец-то успешно сформировался. Следовательно не все параметры имеют тип строки. Единственным подозреваемым остается результат функции Представление().

 

Исправление ошибки

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

Заодно не удержался от прочих исправлений - вернул потерянные переносы строк, а выводы второго и третьего субконто перенес в ветки ИНАЧЕ их предшественников.

 

Что бы я изменил в стандартных бухгалтерских отчетах?

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

Мне сразу не понравилась бездумная конкатенация в описании вычисляемых полей. Если учитывать каждое генерируемое представление, то получаем от 9 до 14 операций конкатенации на КАЖДУЮ выводимую строку отчета. Как я уже упоминал в другой своей статье, операции по сложению строк не являются дешевыми. По факту каждый раз в памяти создается новая строка, в которую копируются две предшественницы. Чем больше участников в операции "сложения", тем больше будет создано и затем уничтожено промежуточных строк. (Теперь вы понимаете почему квартальные и годовые отчеты нужно так долго ждать?)

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

 

Так что же привело к ошибке?

Остался вопрос: что же было такого необычного в той строке отчета, которая "ломала" СКД?

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

Этот же факт объясняет почему экземпляр данного отчета, который успешно работает в сотнях тысяч инсталяций типовых и отраслевых решений по всему СНГ, у моих клиентов внезапно сломался. Дело в том, что разработчики типовых в плане видов характеристик ВидыСубконтоХозрасчетные стандартно разрешили только ссылочные типы и ни одного из примитивных! Если кому-то нужны даты, (видимо думали они) то пусть заводят их строковые представления в справочнике Субконто. Хотя несколько лет применения такого субконто показало, что вообще никаких негативных последствий для системы это не несет.

 

Особенности функции Представление()

Почему же функция Представление() не вернула строку? Без чтения документации тут некуда.

Согласно данным справочной информации эта функция существует самостоятельно в контексте (а не как метод объекта) лишь в двух местах - в языке запросов и как встроенная функция системы компоновки данных. 

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

Функция ПРЕДСТАВЛЕНИЕ 
Данная функция предназначена для получения строкового представления значения произвольного типа.
Параметр функции – выражение любого типа.
Возвращаемое значение – представление значения, тип СТРОКА.
Результат работы функции не может быть использован внутри других функций, за исключением функции ПРЕДСТАВЛЕНИЕ.

Далее обратимся на ИТС, где поиском я нашел лишь одну релевантную статью на эту тему: Особенности работы с полем Представление и функцией Представление() языка запросов из раздела "1С:Предприятия 8. Разработка и администрирование":

Функция Представление()
Функция представление предназначена для получения текстового представления любого значения, которое может быть получено при помощи языка запросов. Функция Представление() работает как для ссылочных, так и для примитивных типов. Для ссылочных типов результат функции полностью аналогичен получению поля "Представление" от ссылки, переданной в качестве параметра функции. Для примитивных типов, результатом работы функции является строка, в которую было преобразовано значение, переданное в качестве параметра. Особенностью данной функции является то, что ее результат не может быть использован в выражении.

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

Теперь обратимся к реализации в функциях СКД и посмотрим статью "Функции языка выражений системы компоновки данных" из встроенной справки платформы (на ИТС аналогично):

Представление  (Resentation)
Данная функция возвращает строковое представление переданного значения не примитивного типа. Для значений примитивного типа возвращает само значение.

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

 

А нет ли ошибок еще и в платформе?

Но перепроверяя данные из документации я обнаружил, что функция Представление() имеет наглость возвращать значения разных типов даже при идентичном входном параметре. Причем такое неоднозначное поведение было зафиксировано как в версиях 8.2, так и в современных 8.3 - т.е. оно сопровождало СКД с самого начала.

Предлагаю немного попрактиковаться и создать внешний отчет, в котором будет 2 источника описанных запросами. В обоих запросах выберем предопределенные дату и число. Единственное различие будет в том, что во втором варианте мы кроме значений дополнительно запросим еще представления этих полей:

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

Теперь создадим вариант настройки с табличками отдельно по первому источнику (в котором только данные) и по второму источнику (где мы дополнительно запрашивали представления):

А теперь посмотрим результат:

Получившийся отчет для платформы 8.3 я поместил во вложение. Если (внезапно) захотите проверить на платформе 8.2, то вам необходимо переделать вычисляемые поля, так как в те времена в СКД еще не было встроенной функции ТипЗначения(). Можно или вызвать свою собственную функцию из общего модуля или не заморачиваться и вывести в отчет сам результат Представление() - результаты для двух запросов будут снова разных типов.

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

Так почему же результаты различаются? Точно не понятно, или вызов представления в запросе заполняет кеш системы компоновки некоторыми значениями, которые подхватываются одноименной функцией схемы (все таки у них одинаковая сигнатура), или это особенности анализа текста запроса (типа как с периодичностью регистров накопления, где если выбрать Авто и группировку скажем по дням, то начальное и конечное сальдо в группировках будет корректным, но если нигде ничего не меняя исправить в тексте запроса периодичность на День, то отчет сразу поломается и роли полей-остатков станут игнорироваться, они превратятся в обычные поля с обычным суммированием). В документации про такую особенность использования (и тем более про ее логику) нет ни слова. Абсолютно не понятно хотят ли разработчики оставить эту "фичу" навсегда или передумают и уберут в одном из свежих релизов. Но нам, "простым пацанам", помнить о таких особенностях точно нужно, что бы не забывать покрывать код дополнительными проверками типов - на всякий случай.

9

Скачать файлы

Наименование Файл Версия Размер
Отчет для демонстраций ошибки Представления()
.erf 5,79Kb
15.01.19
0
.erf 5,79Kb Скачать

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. Vladimir Litvinenko 15.01.19 13:33 Сейчас в теме
Тут оптимальным решением я вижу для обслуживания отчетов создание общего модуля со включенной опцией повторно использования возвращаемых значений. В таком общем модуле требуется реализовать все требуемые функции с быстрой конкатенации требуемых представлений (на мою устаревшую статью не смотрите - сейчас для быстрого сложения строк существует функция СтрСоединить()). А в схеме компоновки можно просто вызывать эти новые функции. Думаю, что получился бы довольно приличный прирост скорости на больших объемах информации.


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


Этот же факт объясняет почему экземпляр данного отчета, который успешно работает в сотнях тысяч инсталяций типовых и отраслевых решений по всему СНГ, у моих клиентов внезапно сломался. Дело в том, что разработчики типовых в плане видов характеристик ВидыСубконтоХозрасчетные стандартно разрешили только ссылочные типы и ни одного из примитивных! Если кому-то нужны даты, (видимо думали они) то пусть заводят их строковые представления в справочнике Субконто. Хотя несколько лет применения такого субконто показало, что вообще никаких негативных последствий для системы это не несет.


Ох. Просто загляните в структуру индексов таблиц, относящихся к регистру бухгалтерии. Этим включением примитивного типа ваши предшественники индексы раздули. В частных случаях (небольшие базы, низкая интенсивность ввода данных, база только на SQL) это терпимо. В общем случае - неприемлемо.

В индекс по таблице итогов с Субконто3 минимум 3 новых поля добавилось. А в той же типовой ERP там и без этого уже 14 полей. После добавления хотя бы одного примитивного типа будет 17. Как думаете, к чему это приводит? )) А еще есть более терпимые к этому индексы по итогам по Субконто2 и Субконто1.

https://its.1c.ru/db/v8std#content:2149184377:hdoc

Хотелось бы промолчать, зная какая "благодарная" реакция бывает на отсылки к документации, которую увы опытные программисты игнорируют. Или читают только когда приспичит и без этого уже никак. Но всё же надо уменьшать количество вредных советов. Потом приходится делать круглые глаза когда видишь такое в базах и исправлять уже поздно. Ведь учёт давно ведётся и "наш прошлый программист нам так удобно сделал, так удобно" ))


Само исследование хорошее. Только синонимы полей бы поправить. Очень сложно глазами сопоставлять вывод отчетов, приведенных в конце, и исходные данные.
kwazi; Dementor; +2 Ответить
5. Dementor 601 15.01.19 18:22 Сейчас в теме
(1) спасибо за комментарий. В текущей версии статьи редактировать скриншоты отчета уже не буду. Но на будущее учту.
Про особенность индексов по "не ссылочному" я читал, но этот клиент с его бухгалтерией не из категории "биг дата".

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


Обычно в бухгалтерских "простынях" сотни и даже тысячи повторов одинаковой аналитики в проводках. Интуиция подсказывает, что если не тратить время на их конкатенацию, а потратить немного оперативки, то быстродействие будет очевидным. Но утверждать без эксперимента не могу. Нужно будет в свободное время попробовать.
Vladimir Litvinenko; +1 Ответить
2. lvictor58 129 15.01.19 14:17 Сейчас в теме
Я всегда при слиянии строк в самом начале добавляю ""+ что далее система воспринимает как контртекцию а не арифметическое сложение.

Кстати конструкция Сообщить(""+ОписаниеОшибки()) работает корректнее той, что указана в типовом функционале Сообщить(ОписаниеОшибки())
3. lunjio 62 15.01.19 14:30 Сейчас в теме
Тут больше претензий к функции ТипЗначения, во втором варианте она должна вернуть для обоих типов строку, т.к Представление() возвращает строку, но видать СКД умничает и берет уже рассчитанные типы для данных полей, попробуйте в запросе местами поменять и скажите результат, тоесть со стороками представление наверх, а вниз без, спасибо.
4. acanta 74 15.01.19 14:32 Сейчас в теме
Спасибо за статью и комментарии. Представление в запросах и в целом функции СКД тема очень интересная.
На мой взгляд мы имеем вместо алгоритмического кода, трансформируемого платформой на файловый, SQL, Postgre, IBM и Oracle принципиально разные варианты и подходы приспособления низкоуровневого программирования 1с8 к особенностям хранения и обработки данных в каждой из используемых СУБД.
Встречала настоятельные рекомендации переходить к изучению программы 1с 8 после глубокого практического изучения каждого из языков (SQL, Postgre, IBM и Oracle), что без участия в реальных коммерческих проектах (без 1С) на базе именно этих продуктов невозможно. Но даже поверхностное изучение этих СУБД в вузах и техникумах создает достаточную базу для понимания допустимых типов переменных в каждой из СУБД.
Dementor; +1 Ответить
Оставьте свое сообщение

См. также

Некоторые редко используемые возможности СКД 45

Статья Программист Архив с данными v8 v8::СКД 1cv8.cf Абонемент ($m) Практика программирования

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

2 стартмани

11.11.2019    2299    kser87    19       

Расчет сложных итогов СКД 89

Отчеты и формы Программист Внешний отчет (ert,erf) v8 v8::СКД 1cv8.cf ОС Абонемент ($m) Практика программирования Разработка

Малоизвестный прием для расчета итогов в отчетах на СКД.

1 стартмани

05.08.2019    5305    3    masterkio    7       

Вам нравятся запросы в 1С? 14

Инструменты и обработки Программист Конфигурация (md, cf) v8 v8::Запросы 1cv8.cf Абонемент ($m) Практика программирования Разработка

Речь не только о том, что простейший запрос с "легальным" оформлением растянется на пол-экрана, речь еще обо всем, что нужно написать "в нагрузку" к тексту запроса. Все эти "Новый Запрос", "УстановитьПараметр" и последующие пляски с обработкой результата... Пора с этим заканчивать!

1 стартмани

03.07.2019    10197    1    m-rv    79       

Многоуровневая нумерация в отчете СКД (программный вывод) 38

Статья Программист Внешний отчет (ert,erf) v8::СКД 1cv8.cf Абонемент ($m) Практика программирования

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

1 стартмани

01.07.2019    2986    6    lmnlmn    7       

Иерархическая нумерация в отчете СКД с помощью макета поля 23

Отчеты и формы Программист Внешний отчет (ert,erf) v8 v8::СКД 1cv8.cf Абонемент ($m) Практика программирования Разработка

Представляю Вашему вниманию вариант решения задачи нумерации строк иерархического отчета на СКД.

1 стартмани

28.06.2019    3046    3    Isonic    14       

Проверка несуществующих полей в настройках СКД 7

Инструменты и обработки Программист Стажер Внешняя обработка (ert,epf) v8 v8::СКД ERP2 УТ11 КА2 Абонемент ($m) Практика программирования Разработка Работа с интерфейсом

Обработка находит все поля настроек СКД, которые утратили свою актуальность Подходит для УТ 11, ERP, КА 2.

1 стартмани

20.06.2019    1579    1    MuI_I_Ika    0       

Простые примеры сложных отчетов на СКД 258

Статья Программист Архив с данными v8 v8::СКД 1cv8.cf Абонемент ($m) Практика программирования

Подписи в отчете. Особенности соединения наборов: как соединить несоединяемое. Остатки на дату и обороты по месяцам в одном отчете. Курс валюты на каждую дату без группировок и соединений в запросе. Отчет с произвольными колонками и с произвольной последовательностью. "Неадекватный отчет".

1 стартмани

12.06.2019    13587    11    Hatson    22       

Поле "Отбор" в управляемой форме используя СКД 8

Отчеты и формы Программист Внешняя обработка (ert,epf) v8::УФ v8::СКД 1cv8.cf Абонемент ($m) Практика программирования Разработка Работа с интерфейсом

Пример, который осуществляет отбор ссылок при помощи СКД, макет компоновки создается программно.

1 стартмани

17.05.2019    2692    2    artms    0       

Вывод вариантов СКД в таблицы на управляемой форме 25

Статья Программист Внешняя обработка (ert,epf) v8 v8::УФ v8::СКД 1cv8.cf Абонемент ($m) Практика программирования Работа с интерфейсом

Задача стояла такая: есть 2 различных запроса, результаты которых выгружаются на форму обработки в таблицы значений (далее ТЗ) и программно "соприкасаются" между собой определенным образом (как именно- в рамках данной статьи неважно). Нюанс в том, что запросы должны иметь свой компоновщик настроек и могут интерактивно на форме изменяться пользователем. На оригинальность публикации не претендую - изначально в рамках поставленной задачи пытался найти что-то подобное (уже готовый шаблон) на инфостарте, возможно "плохо искал" ;)

05.04.2019    4378    artkor    1       

Как в СКД по щелчку на какой-либо ячейке в отчете получить значение другой ячейки 102

Статья Программист Стажер Архив с данными v8 v8::СКД 1cv8.cf Абонемент ($m) Практика программирования Разработка

Задача: по щелчку на ячейке в определенной колонке в таблице отчета нужно получить значение ячейки из другой колонки в этой же строке и передать его в другой отчет (т.е. сделать расшифровку значения другим отчетом).

1 стартмани

27.03.2019    7103    10    ellavs    11       

Безопасная работа с транзакциями во встроенном языке 186

Статья Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования Разработка

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

1 стартмани

25.03.2019    14896    7    tormozit    35       

Пример внешней обработки с вызовом типового отчета на СКД и передачей ему настроек и вывода результата в таблицу значений (в частности, для новичков) 6

Инструменты и обработки Программист Архив с данными v8 v8::СКД 1cv8.cf Россия Абонемент ($m) Инструментарий разработчика Практика программирования Разработка

Разрабатывалась на 1С:Зарплата и управление персоналом в кредитных организациях, редакция 3.1 (3.1.5.407), поэтому использует типовой отчет Состояние штатного расписания, но технология работает для любой конфигурации. Пример внешней обработки с вызовом типового отчета на СКД "Состояние штатного расписания" и передачей ему настроек, изменения имен колонок после выполнения на имена указанные в "Пользовательских полях" или "заголовках" и вывода результата в таблицу значений.

1 стартмани

21.03.2019    2249    5    pavel_pss    0       

Пример использования СКД и данных расшифровки на мобильной платформе 7

Статья Программист Внешняя обработка (ert,epf) v8 v8::Mobile v8::СКД 1cv8.cf Россия Android Абонемент ($m) Практика программирования Разработка

СКД в мобильном приложении и меню действий на основе данных расшифровки (отчет, совместимый с мобильной платформой 8.3.13.45).

1 стартмани

12.03.2019    2375    2    majoram    0       

Вывод характеристик и их значений в динамический список 0

Инструменты и обработки Программист Архив с данными v8::УФ v8::СКД 1cv8.cf Абонемент ($m) Практика программирования Разработка

Если в запросе динамического списка используется конструкция {ХАРАКТЕРИСТИКИ ...}, то как вывести на форму колонки с характеристиками?

1 стартмани

22.02.2019    2236    kasper076    3       

Сквозной рейтинг по иерархии в отчете на СКД 6

Статья Программист Архив с данными v8 v8::СКД 1cv8.cf Абонемент ($m) Практика программирования Разработка

Сквозная нумерация (рейтинг) по группам и элементам справочника в отчете СКД согласно убыванию количества/суммы и т.д.

1 стартмани

07.02.2019    2892    MaxxiMiliSan    2       

Коннектор: удобный HTTP-клиент для 1С:Предприятие 8 529

Инструменты и обработки Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования Внешние источники данных WEB Универсальные функции Инструментарий разработчика Универсальные обработки

Коннектор - библиотека для работы с HTTP запросами. Библиотека берет на себя всю рутину работы с HTTP запросами. Буквально в одну строку можно получать данные, отправлять, не заботясь о необходимости конструирования URL, кодирования данных и т.п.

1 стартмани

31.01.2019    27672    261    bonv    109       

Модуль, реализующий хранение настроек отчетов СКД в типовом регистре "Сохраненные настройки" 5

Инструменты и обработки Программист Архив с данными v8 v8::СКД КА1 БП2.0 ЗУП2.5 УТ10 БП1.6 Абонемент ($m) Практика программирования

Модуль, обеспечивающий хранение настроек отчетов на СКД в типовом регистре "Сохраненные настройки", присутствующем в конфигурациях УПП 1.2, 1.3, УТ 10.3, БП 2.0 и т.д.

1 стартмани

12.01.2019    3181    lunjio    0       

Отладка сложных отчетов на СКД 139

Отчеты и формы Программист Расширение (cfe) v8 v8::СКД 1cv8.cf Россия Абонемент ($m) Практика программирования

Расширение для отладки сложных отчетов на СКД (в т.ч. для собираемых программно "на лету") и быстрого перехода к отладке таких отчетов в консоли запросов и отчетов на СКД.

1 стартмани

28.12.2018    14348    58    maxx    56       

Шаблон кросс-таблицы с иерархией на СКД 12

Отчеты и формы Программист Внешний отчет (ert,erf) v8::БУ v8::СКД БП3.0 Россия Абонемент ($m) Инструментарий разработчика Практика программирования

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

1 стартмани

22.12.2018    4400    5    wizard.ilmir02    2       

СКД. Сортировка 31

Статья Программист Внешний отчет (ert,erf) v8::СКД 1cv8.cf Россия Абонемент ($m) Практика программирования

Показана реализация сортировки по двойному щелчку на заголовке колонки отчета и отображение направления сортировки в заголовках колонок.

1 стартмани

03.12.2018    5553    5    slimper    20       

Объединение нескольких печатных форм в один табличный документ 28

Отчеты и формы Программист Внешний отчет (ert,erf) v8 v8::СКД 1cv8.cf Абонемент ($m) Практика программирования

Простое решение, как объединить табличные документы с различной шириной колонок в один и чтобы ничего не разъехалось.

1 стартмани

17.11.2018    6788    5    echo77    3       

Передача набора данных типа Объект в отчет СКД 5

Инструменты и обработки Программист Внешний отчет (ert,erf) v8 v8::УФ v8::СКД 1cv8.cf Россия Абонемент ($m) Практика программирования

Пример показывает, каким образом можно передать таблицу значений в отчет СКД (в набор данных объект). Пример работает как на обычных, так и на управляемых формах.

1 стартмани

12.11.2018    14870    4    evgen7938    3       

Отчет для демонстрации работы с программной расшифровкой СКД 8

Отчеты и формы Программист Внешний отчет (ert,erf) v8::СКД 1cv8.cf Россия Абонемент ($m) Практика программирования

Программное добавление дополнительных пунктов меню в расшифровке и программное формирование отчета-детализации для отчета СКД.

1 стартмани

08.11.2018    4085    6    budidich    0       

Группировка измерений в заголовках СКД 62

Статья Программист Внешний отчет (ert,erf) v8 v8::СКД 1cv8.cf Абонемент ($m) Практика программирования

Методика создания общей шапки над измерениями в таблице созданной при помощи СКД. Без всякого кода. Только штатными средствами.

1 стартмани

07.11.2018    10676    39    dusha0020    11       

И снова группировка столбцов в СКД 6

Отчеты и формы Программист Внешний отчет (ert,erf) v8 v8::СКД УТ11 Россия Абонемент ($m) Практика программирования

В публикации описано создание отчета "Остатки по складам" с группировкой по строкам и столбцам.

1 стартмани

23.10.2018    5797    vasilievil    9       

Параметризованные заголовки полей СКД 24

Отчеты и формы Программист Внешний отчет (ert,erf) v8 v8::СКД 1cv8.cf Абонемент ($m) Практика программирования

Доработанный шаблон типового отчета, который это позволяет менять заголовки полей в зависимости от значений параметров.

2 стартмани

21.09.2018    5378    3    echo77    3       

Работа с публикациями "Инфостарт" 14

Инструменты и обработки Программист Архив с данными v8 УУ Абонемент ($m) Практика программирования О сообществе WEB

Работа с рублевыми публикациями на сайте "Инфостарт": ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.

1 стартмани

13.09.2018    9289    10    RocKeR_13    16       

Вывод результата отчета СКД в разные табличные документы 11

Отчеты и формы Программист Внешний отчет (ert,erf) v8::СКД 1cv8.cf Россия Абонемент ($m) Практика программирования Работа с интерфейсом

В ходе выполнения своей повседневной работы столкнулся с интересной клиентской задачей - требовалось результат отчета СКД вывести на форму отчета в разные вкладки формы в разные табличные документы. Как оказалось, информации по такому выводу отчета в интернете маловато, поэтому решил скомпоновать свой опыт решения этой задачи в одной статье.

1 стартмани

21.08.2018    7353    5    Dipod    4       

Примеры программной работы с СКД, а также программного создания управляемой формы 14

Отчеты и формы Программист Архив с данными v8 v8::УФ v8::СКД Windows Абонемент ($m) Практика программирования

Примеры работы с СКД (четыре отчета с использованием сложных выражений), программного создания управляемой формы, а также программное формирование СКД в обработке и другие интересные механизмы на конфигурации "с нуля".

1 стартмани

12.08.2018    4192    25    MaxCreator    0       

Позиционирование в помещении с помощью нейросети по сигналу Wi-Fi. Интерактивная карта склада в 1С с показом позиции 65

Инструменты и обработки Программист Бизнес-аналитик Приложение (apk) v8 Windows Абонемент ($m) Инструментарий разработчика Практика программирования

Данная публикация содержит в себе редактор и интерактивную карту склада или иного помещения, на которой в реальном времени отображается позиция устройства, координаты которого вычисляются по уровням сигнала нескольких роутеров Wi-Fi. В статье и приложенным к ней разработкам предлагаются инструменты и методика для реализации вычисления точной геопозиции внутри помещений с помощью нейронной сети. Конфигурация написана на релизе 1С:Предприятие 8.3.12.1412, клиентское приложение имеет минимальный уровень совместимости SDK -16.

5 стартмани

09.08.2018    15767    23    informa1555    26       

Работа с данными выбора 40

Инструменты и обработки Программист Архив с данными v8 Россия Абонемент ($m) Практика программирования Работа с интерфейсом

В управляемом интерфейсе заложена мощная возможность описывать связи реквизитов формы через параметры. Установка параметров связей позволяет ограничить выбор данных так, чтобы целостность данных была обеспечена на этапе ввода. Однако без дополнительного программирования задать можно только самые простые связи. Такие условия связи, как зависимость от реквизита через точку или зависимость через дополнительное отношение, заданное в регистре сведений - уже задать без программирования не получится.

1 стартмани

17.07.2018    21800    13    kalyaka    15       

ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование) ЗНАЧЕНИЯ ("001", "Новый товар") 105

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::Запросы 1cv8.cf Абонемент ($m) Практика программирования

Вас не обманывают ваши глаза, это запрос на изменение данных! И это работает без прямого доступа к БД, регистрации и смс.

1 стартмани

01.06.2018    19835    86    m-rv    57       

Вывод товаров в СКД как на весах в Ашане 59

Статья Программист Внешняя обработка (ert,epf) v8::СКД 1cv8.cf Розничная торговля Абонемент ($m) Практика программирования

Небольшая хитрость, которая позволяет выводить информацию на СКД плиткой.

2 стартмани

23.05.2018    10882    7    Kutuzov    14       

БСП: Дополнительная обработка (Регламенты), примеры от простого к сложному 239

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Практика программирования БСП (Библиотека стандартных подсистем)

Очень много попадается странных решений, которые можно решить через БСП:Дополнительные отчеты и обработки. Я бы вообще БСП из-за этой подсистемы переименовал в «Большое Спасибо Программистам». Поработаем с подсистемой в части написания регламентных заданий.

1 стартмани

10.05.2018    27683    28    dsdred    34       

Как выполнить отчет на СКД через COM и получить данные отчета? 86

Статья Программист Архив с данными v8 УПП1 Россия Windows Абонемент ($m) Практика программирования

Для чего это нужно. Например, нужно в одной базе получить какой-либо показатель из другой базы. Этот показатель вычисляется в каком-либо сложном отчете, который написан на СКД. Можно, конечно, "скопипастить" текст запроса из другой базы, немного подправить его и выполнять в том же COM подключении. Но с этим теряется гибкость: если отчет изменился, то нужно помнить о том, что где-то есть его "немного модифицированная" копия. В статье будет рассмотрен пример получения данных из базы ЗУП.

2 стартмани

08.05.2018    18010    10    wowik    3       

Условное оформление дерева значений на управляемой форме 0

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8::УФ v8::СКД 1cv8.cf Абонемент ($m) Практика программирования Работа с интерфейсом

Пример использования условного оформления дерева значений для создания красивого фильтра на форме.

1 стартмани

28.04.2018    10193    13    Kutuzov    0       

Работа со схемой запроса 176

Статья Программист Конфигурация (md, cf) v8 v8::Запросы Абонемент ($m) Инструментарий разработчика Практика программирования

Стандартом взаимодействия с реляционной базой данных стал язык SQL. Приемником SQL в 1С является язык запросов. Язык запросов, также как и SQL, является структурированным. Составляющие структуры запроса отвечают на разные вопросы о том, какие данные требуется получить и какие манипуляции с множествами данных необходимо произвести при получении. В простых случаях текст запроса можно написать вручную, однако в сложных случаях, а также при программном формировании, - лучше воспользоваться объектной моделью запроса и использовать объект "Схема запроса". В статье дается описание объектной модели и особенностей работы с ней, а также приводится решение, упрощающее взаимодействие с объектом "Схема запроса".

1 стартмани

24.04.2018    28514    74    kalyaka    34       

Условное оформление горизонтальных итогов без использования макетов 117

Статья Программист Внешний отчет (ert,erf) v8::СКД 1cv8.cf Абонемент ($m) Практика программирования

Способ условного оформления горизонтальных итогов без использования макетов и программной постобработки результата компоновки.

1 стартмани

14.03.2018    14003    4    nreisende    10       

Пользовательские макеты для внешних печатных форм (обработок) 13

Инструменты и обработки Программист Расширение (cfe) v8 v8::СКД 1cv8.cf Россия Абонемент ($m) Практика программирования Универсальные печатные формы

Расширение БСП по реализации механизма пользовательских макетов для обработок внешних печатных форм.

2 стартмани

05.03.2018    11268    10    simy4    13       

Про запросы в СКД 7

Отчеты и формы Программист Внешний отчет (ert,erf) v8 v8::УФ v8::Запросы v8::СКД ЗУП3.x БУ Windows Учет рабочего времени Абонемент ($m) Практика программирования

Данная публикация является некоей иллюстрацией перехвата запроса в СКД в 1С 8.3, управляемые формы.

1 стартмани

28.02.2018    8793    3    alex_bitti    9       

Работа с расшифровкой отчета на СКД 46

Статья Программист Внешний отчет (ert,erf) v8::УФ v8::СКД 1cv8.cf Абонемент ($m) Практика программирования

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

1 стартмани

27.02.2018    16614    14    Isonic    14       

Заполняем по шаблону (по умолчанию) 68

Инструменты и обработки Программист Архив с данными v8 v8::УФ 1cv8.cf Абонемент ($m) Практика программирования

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

1 стартмани

08.02.2018    17954    20    mvxyz    17       

Альтернатива ОтборуСтрок() с возможностями условий отборов СКД 8

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::СКД 1cv8.cf Абонемент ($m) Практика программирования

Типовой ОтборСтрок() использует только условия на равенство. Для таблицы формы, источником которой является "ДеревоЗначений" возможность отбора вообще отсутствует. Но есть возможность использовать всю широту возможностей отборов СКД.

1 стартмани

04.02.2018    5324    1    mszsuz    4       

Бесплатная проверка контрагентов в ФНС (общий модуль с алгоритмом). На примере выводим статус в список справочника контрагентов 123

Статья Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования

Если вам интересно проверить контрагенте в ФНС, вам поможет данная публикация. Весь алгоритм работы строится на основе данных, полученных с сервиса http://npchk.nalog.ru совершенно бесплатно.

1 стартмани

01.02.2018    25267    62    rpgshnik    46       

Таблица значений в параметрах СКД 4

Отчеты и формы Программист Внешний отчет (ert,erf) v8 v8::СКД 1cv8.cf Абонемент ($m) Инструментарий разработчика Практика программирования

Шаблон отчета на СКД, где в качестве параметра передаётся таблица значений.

1 стартмани

31.01.2018    6762    18    skydivespb    3       

Программное создание динамического списка на управляемой форме. (Динамическое создание динамического списка). Готовая процедура + обработка - демонстрационный пример 272

Статья Программист Внешняя обработка (ert,epf) v8::УФ 1cv8.cf Абонемент ($m) Практика программирования Универсальные функции

Если у вас возникает необходимость на форму влиять динамически и создавать элементы управляемой формы программно, а особенно хотите вывести программно (динамически) динамический список, вам будет интересна эта процедура. Процедура включает также возможность формирования своей командной панели (а-ля снятие галочки "Автозаполнение" у стандартной командной панели списка).

1 стартмани

19.01.2018    39571    58    rpgshnik    26       

1с8.2-8.3.Вывод на экран данных запроса с переданными Параметрами из Документа! 8 различных вариантов:от Сообщений, Таблицы и Отчетов до СКД без объекта-отчета 8

Статья Программист Конфигурация (md, cf) v8 v8::УФ v8::СКД 1cv8.cf Абонемент ($m) Практика программирования

Самый важный аспект 1С - это быстро получить данные из базы. Например, по результату набранного в КонсолиЗапросов запроса вывести этот результат на экран. А еще лучше, когда мы вызываем выборку данных из конкретного документа и, конечно, желаем, чтобы параметры по этому документу тоже были переданы в выборку. Здесь мы будем выводить данные на экран по нажатию кнопки в документе, обязательно с получением в параметрах значений из документа. Рассмотрим 8 вариантов вывода подобной информации на экран: 1.Вывод результатов запроса командой Сообщить() из ТаблицыЗначений; 2.Вывод результатов запроса - просто в табличный документ; 3.Вывод результатов запроса с помощью ДвумерногоМассива; 4.Вывод результатов запроса с помощью МассиваСтруктур (с двумя вариантами); 5.Вывод обычным объект-Отчетом без СКД; 6.Вывод объект-Отчетом-СКД+УстановкаПараметров; 7.Вывод объект-Отчетом-СКД+ВнешняяВременнаяТаблица; 8.Вывод программно СКД без объекта-Отчета с Параметром=ВнешняяВременнаяТаблица.

1 стартмани

14.01.2018    17705    4    jan-pechka    5       

Расширение возможностей печати: Вывод произвольного нижнего и верхнего колонтитула 8

Отчеты и формы Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Печатные формы документов Практика программирования Универсальные функции

Расширяем функционал вывода нижнего / верхнего колонтитула. Стандартно 1С имеет достаточно ограничений по выводу и наполнению колонтитулов содержимым, взять хотя бы такие, как вывод только текста и отсутствие ограничения на номер конечной страницы. А при разработке кода сталкиваешься с тем, что свой блок с нижним колонтитулом нужно прижимать к низу страницы. Казалось бы быстро решаемый вопрос, но и в нем есть нюансы. Сейчас я расскажу о том, как решалась эта задача. UPD 15.02.2018. Добавлен вывод верхнего колонтитула; Вывод колонтитулов на первой и последней странице управляется параметрами; Научился считать страницы: Добавлено заполнение переменных аналогичных стандартным из колонтитулов; Задаются форматы даты и времени. Ограничения прежние: 1. Повторно сформировать табличный документ после смены параметров страницы интерактивно.; 2. Передавать данные для более плотной печати как можно более мелко нарезанными кусками.

1 стартмани

29.12.2017    22755    21    agent00mouse    0       

Печатная форма, сделанная как расширение конфигурации для БП 3.0. Новые возможности БСП 26

Инструменты и обработки Программист Расширение (cfe) v8 БП3.0 Абонемент ($m) Практика программирования Универсальные печатные формы

Печатные формы на внешних обработках скоро канут в лету. На смену им приходят ПФ, реализованные в виде расширений конфигурации. Не нашел на сайте примеров таких расширений. Привожу пример подобного расширения для БП 3.0.

1 стартмани

06.12.2017    18531    52    kwazi    6