OneSCast | 1С Предприятие – Telegram
OneSCast | 1С Предприятие
4.62K subscribers
79 photos
4 videos
1 file
146 links
Работа в 1С и EDT. Авторский канал нетипичного 1С-ника: живу в Сербии, пишу код на английском.

О канале:
Лайфхаки, советы, рецепты, полезности. Для разработчика, пользователя и всех причастных к 1С.

По всем вопросам: @stas_ganiev
Download Telegram
Интернациональная интеграция

Сегодня немного о подводных камнях обмена между конфами на разных языках.

(Автор: @PetrTsap)
#интеграция #разработка

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

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

Как всем известно, одним из основных свойств конфигурации является "Вариант встроенного языка". По умолчанию он привычный русский, но некоторые конфигурации могут быть написаны и исполняться на английском. Метаданным строго говоря вообще неважно, на каком они языке, а вот для ключевых лексем языка применяется два равноправных варианта. При этом, они применяются равноправно, поэтому вы легко можете написать:
If Чтото Then
КонецЕсли;
И эта конструкция будет работать в любой конфигурации при любом режиме встроенного языка. За что же отвечает это свойство? А вот например, ЧтениеXML будет ожидать значения системных перечислений, соответствующих языку выполнения конфигурации. То есть, в применении к КД, оно ожидает увидеть для конкретного объекта ВидИерархии.ИерархияЭлементов или ВидИерархии.ИерархияГруппИЭлементов. Обработка описания же, запущенная в режиме английского языка, выгружает HierarchyType.HierarchyOfItems / HierarchyType.HierarchyFoldersAndItems

Таким образом, легко написать принудительное приведение типов данных и системных перечислений, создаваемых в "английских" конфигурациях и получить свободное использование Конвертации Данных для международных задач.
Присоединяйтесь к нам в проекте улучшения Конвертации Данных! https://github.com/ha1s/ConversionPlus
Количественно-суммовой учёт в типовых решениях

#БСП #СКД

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

Нюанс, который показывает важность не пренебрегать форматированием текста программного кода.
Если в тексте обработчика на одной строке с "Иначе" прописать вызов алгоритма, то при формировании модуля отладки получим вот такую красоту ))
Порядок элементов в КД

#Интеграция #Конвертация #Разработка

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

Программная сборка текста запроса

#разработка #запросы

Какую бы методику не выбрал разработчик, его главная цель – сохранить возможность открыть (хотя бы открыть!) текст запроса в конструкторе запроса.

Запрос на первом рисунке в конструкторе открыть нельзя, будет ошибка.

Какие варианты решения существуют?

1. Подмена комментария-шаблона. В месте подмены оставляем комментарий с уникальной «меткой», а в дальнейшем коде модуля, при выполнении необходимых условий, производит подмену этой метки на нужных кусок текста.

Плюсы:
Запрос работает всегда, даже если подмена не производилась (не было необходимости);
Минусы:
Если забыться и отредактировать запрос в конструкторе, то все комментарии слетят.

2. Подмена фиктивного параметра. То же самое, только в качестве мести подставляем параметр с уникальным именем.

Плюсы:
Такой запрос можно редактировать в конструкторе, ничего не слетит;
Минусы:
Необходимо обслуживать дополнительные параметры: при отсутствии необходимости подмены, чем-то его инициализировать или подменять на пустую строку.

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

Плюсы:
Можно редактировать запрос в конструкторе без потери данных;
Можно «конструировать» достаточно сложные запросы;
Минусы:
При работе с многострочными блоками текста появляется сложность в соблюдении точного соответствия теста шаблону;
В сложных запросах может быть трудно сориентироваться с тем, какой результат получится на выходе.

А какими методами пользуетесь вы? Есть ли у вас свои «фишки» по работе со сложными запросами? ))
БСП расширять - это вам не...

#разработка #расширения #БСП

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

Есть одна досадная мелочь: БСП, при появлении нового объекта в расширении, пытается подключить его к модели сервиса, и требует указать для него значение разделителя области данных. Либо просто отказывается обновлять из-за них релиз. Да, при этом предлагает пути решения. Но!
1. В расширении нельзя поменять состав объектов в подписках на события;
2. В расширении нельзя изменить состав объектов для общих реквизитов.

Пока баг не пофиксили, выход такой:

1. В процедуру СвойстаКоллекцийОбъектовМетаданных() модуля менеджера справочника ИдентификаторыОбъектовМетаданных добавляем по строке для коллекций объектов, которые могут добавляться в расширении;
2. В процедуру КонтрольНеразделенныхДанныхПриОбновлении() общего модуля РаботаВМоделиСервиса добавляем наш объект в исключения.