Как вывести в 1с
В массе своей, в прикладных задачах нужно вывести на печать какие-либо данные оформленные нужным образом (например, счет, торговую накладную, акт сверки и т.п.). Для вывода на печать в 1С 8.3. можно использовать табличные документы. В предыдущей статье я показал, как создать макет табличного документа и как правильно его оформить. Нам осталось научиться заполнять его данными и выводить на просмотр для последующей печати. Материал по выводу табличного документа на печать, я решил разбить на две части. В первой части мы разберем простой пример (я бы назвал его учебным), а во втором случае реализуем пример приближенный к реальному. Эта статья — первая часть, в ней мы реализуем простой пример: будем выводить табличный документ на печать, используя команду управляемой формы. Этот вариант имеет следующий недостаток: нельзя вывести печатную форму из списка документов, можно это сделать, только открыв форму документа. Для того, чтобы можно было вывести печатную форму из списка документов, необходимо создать команду документа. Этот вариант мы рассмотрим в следующей статье.
И так, сам макет документа мы уже создали, как это сделано, вы можете узнать в соответствующей статье.
Сейчас мы получим ранее созданный макет, заполним табличный документ 1С по этому макету, и нам останется вывести табличный документе 1С на просмотр для последующей печати.
Мы сделаем упрощенный (учебный) вариант: формирование всего нашего табличного документа будет осуществляться на модуле управляемой формы. Для этого мы на форме документа создадим команду «ПечатьДокумента», которую разместим в командной панели формы.
Для команды ПечатьДокумента создадим два обработчика в клиентском и серверном контексте.
Серверный обработчик переименуем в функцию, в нем мы создадим программно табличный документ 1С, который она и будет возвращать.
Теперь нужно получить макет, созданный в предыдущей статье, для этого мы будем использовать метод менеджера документа ПолучитьМакет.
Имейте в виду, что метод ПолучитьМакет напрямую доступен только или в модуле документа, или в модуле менеджера документа. Еще этот метод можно применить, используя менеджер конкретного объекта, как я сделал выше. Непосредственно на форме его использовать нельзя!
Алгоритм заполнения табличного документа будет следующим: мы будем получать нужную область макета, если необходимо заполнять эту область какими-нибудь данными, а потом выводить полученную область в табличный документ.
Напомню, что макет у нас имеет четыре области: Шапка, ШапкаТаблицы, СтрокаТаблицы, Подвал. Области Шапка, ШапкаТаблицы и Подвал будут выведены в табличный документ всего один раз, а область СтрокаТаблицы будет выведена столько раз, сколько строк в табличной части обрабатываемого документа.
Весь код ниже я выполняю между кодом получения макета и возвратом табличного документа.
Получим самую первую область макета, при помощи метода ПолучитьОбласть, где в качестве параметра следует указать название получаемой области.
В этой области мы используем шаблон, в котором имеются два параметра: НомерДок и ДатаДок передадим номер документа и дату документа в соответствующие параметры области, используя свойство Параметры нужной нам области. Данное свойство содержит коллекцию параметров табличного документа, и мы можем обращаться к нужному параметру через оператор «.».
Мы закончили с областью Шапка, и нам нужно вывести её в табличный документ, делается это при помощи метода Вывести табличного документа, где в качестве параметра указывается выводимая область.
Точно также получим область, которая соответствует шапке таблицы, заполнять его не нужно, а мы просто выведем его сразу же в табличный документ.
Следующим шагом выведем область СтрокаТаблицы, причем эта область должна быть выведена столько раз, сколько строк в табличной части документа. Поэтому мы сначала получим эту область, а потом циклом будем обходить табличную часть, заполнять параметры области и выводить область в табличный документ.
В коде выше, мы обошли табличную часть документа, обратившись к ней через основной реквизит Объект управляемой формы (основной формы документа).
Обратите внимание, я использовал метод Заполнить, потому что названия параметров макета совпадают с названиями реквизитов табличной части документа.
Нам осталось получить область Подвал и вывести её в табличный документ.
На этом мы закончим работать с функцией на сервере, весь ее код будет выглядеть следующим образом.
Нам осталось доделать клиентскую процедуру ПечатьДокумента: мы будем выводить на просмотр полученный табличный документ при помощи метода табличного документа Показать().
В качестве первого параметра метода Показать, я указал название, которое выйдет на форме табличного документа.
Проверим, как работает наш код.
Напомню, что я рассмотрел самый простой (учебный) пример вывода печатной формы, следующие примеры будут более приближенные к реальным.
Более подробно и основательно разработка в 1С дается в моей книге: «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
Помните, как раньше в 1С делали окна с вопросом пользователю? Это были модальные диалоги, для их создания требовался минимум кода.
Это было просто, но не лишено недостатков – такое окно могло “залочить” выполняемые процедуры, а в веб-клиенте модульные окна блокировали вообще весь интерфейс браузера.
В итоге на смену модальным диалогам пришли немодальные диалоги Описания оповещений, мы про них рассказывали еще в 2014 году. Былая простота ушла, кода стало требоваться заметно больше.
Теперь хорошая новость: в платформе, начиная с редакции 8.3.18, появились новые асинхронные методы (Асинх-методы), которые упрощают написание немодальных диалогов и почти также удобны и компактны, как модальные диалоги.
Но не всегда :) Бывают случаи, когда и при использовании асинхронных методов придется написать простыню кода. Но обо всем по порядку.
В следующих четырех видео Сергей Калинкин на примере диалога Вопрос разберет:
- логику работы методов Вопрос, ПоказатьВопрос и ВопросАсинх;
- стандартные сценарии применения диалога Вопрос;
- объем программного кода, который требуется для решения одной и той же задачи.
Общая длительность: 33 минуты. Приятного просмотра!
Видео № 1. Обязательный вопрос. Модальная, немодальная и асинхронная модель реализации
Тайминг ключевых моментов видео:
00:01 — основные сценарии применения диалога
02:45 — реализация модального вопроса
03:55 — проверка кода
04:50 — немодальная реализация вопроса на основе описания оповещения
05:53 — использование механизма рефакторинга
08:30 — проверка кода
09:00 — асинхронная реализация вопроса
Видео № 2. Необязательный вопрос. Демонстрация различных подходов
Тайминг ключевых моментов видео:
00:00 — общая постановка задачи
00:30 — демонстрация модального вопроса
01:05 — реализация альтернативного способа при помощи немодального вопроса
04:20 — пример необязательного вопроса в асинхронной технике
Видео № 3. Самый сложный кейс: необязательный вопрос в отдельной процедуре
Тайминг ключевых моментов видео:
00:20 — модальный вариант программного кода
01:30 — немодальная реализация, демонстрирующая сложность использования оповещений
04:35 — вариант с асинхронной процедурой
05:20 — демонстрация того, что дает процедуре ключевое слово Асинх
07:25 — итоги
Видео № 4. Вопрос в событии формы (ПередЗакрытием)
Тайминг ключевых моментов видео:
00:20 — реализация модального вопроса
01:30 — немодальная реализация вопроса
03:20 — реализация асинхронного варианта
05:55 — общие итоги
Хотите еще?
Кроме этих видео мы опубликовали весьма обширную и детальную статью Василия Ханевича «Асинхронные методы в 1С».
Весьма рекомендуем к прочтению :)
Не пропустите новый курс (по специальной цене для первого потока)!
Коллеги, запускаем новый курс по EDT и Git, первый курс в серии курсов по DevOps.
Если Вы тимлид / руководитель отдела разработки / работаете в команде из 5+ человек над одним проектом / планируете перейти в ведущие франчайзи не простым разработчиком – рекомендуем внимательно его посмотреть:
Статья продолжает цикл статей «Первые шаги в разработке на 1С».
В ней мы рассмотрим способы информирования пользователя, которые присутствуют в платформе «1С:Предприятие» 8, а также акцентируем ваше внимание на некоторых особенностях работы этих механизмов, эти особенности связаны с режимом использования модальности.
Применимость
В статье рассматривается функциональность:
- Интерфейса в варианте «Версии 8.2» для конфигурации, разработанной на платформе «1С:Предприятие» 8.2.19.130
- Интерфейса «Такси» для конфигурации, разработанной на платформе «1С:Предприятие» 8.3.4.496 до 8.3.9+
- Интерфейса «Такси» для конфигурации, разработанной на платформе «1С:Предприятие» 8.3.10-8.3.11
- отражение хода выполнения текущего процесса (показ стадии выполнения процесса; показ расчетных значений, полученных в ходе работы алгоритма);
- выдача ошибок пользователю для возможного их исправления;
- выдача рекомендаций;
Т.е. первым параметром является сам текст.
В концепции управляемого интерфейса значок всегда в виде восклицательного знака, переопределить его нельзя.
Но форма моментально закрывается, и пользователь не увидит, что для него выводилась какая-то информация.
Тем не менее, функция Сообщить может использоваться для вывода информации о некоторых ошибках, например в момент проведения документа.
В этом случае системе можно сообщить, что форму закрывать не нужно, и показать пользователю, какие ошибки возникают при проведении документа.
Функция Сообщить полностью поддерживается в Платформе 8.3. Ее можно использовать, и она будет работать (и в файловом варианте, и в клиент-серверном).
Так, программный код в Платформе 8.3 может быть исполнен как на стороне Клиента, так и на стороне Сервера.
При этом клиентский программный код отвечает за взаимодействие с пользователем, т.е. на стороне клиента открываются формы, выводятся отчеты.
Различные диалоговые документы также отображаются только на клиенте. На сервере они не могут быть исполнены, поскольку сервер не имеет возможности взаимодействия с пользователями.
В этот момент система запросит данные из буфера и выведет их на экран.
Механизм оповещений
Механизм оповещений нужен, чтобы информировать пользователя о том, что в системе “что-то” произошло и это “что-то” требует внимания пользователя. Оповещения создаются двумя сценариями:
- Самой платформой при интерактивной записи или изменении объекта
- Разработчиком при вызове в коде метода ПоказатьОповещениеПользователя().
Само оповещение представляет собой небольшое окошко, которое появляется, как правило, в нижнем правом углу и сообщает о совершенном действии. В течение нескольких секунд оно постепенно гаснет и пропадает. При этом, если навести на оповещение курсор мышки, оно не гаснет и можно внимательно его прочитать.
Кроме того, к оповещениям можно обратиться в соответствующей области информационной панели (кнопка “История” слева внизу формы приложения в варианте интерфейса «Версии 8.2»).
Чтобы создавать свои собственные оповещения, необходимо использовать метод глобального контекста ПоказатьОповещениеПользователя(). Его синтаксис до редакции 8.3.10 представлен ниже:
В первом параметре передается текст, который будет выводиться в оповещении.
Также можно присвоить картинку, отображающую статус оповещения.
Следует отметить, что все эти параметры являются необязательными для заполнения. Ниже приведен пример использования данного метода (в конфигураторе и в пользовательском режиме в варианте интерфейса «Версии 8.2»).
В редакции платформы 8.3.10.216 для интерфейса в варианте «Такси» механизм оповещений был существенным образом доработан с целью повышения удобства работы как в тонком, так и в веб-клиенте. По этой причине изменились и передаваемые параметры в метод ПоказатьОповещениеПользователя(). Теперь синтаксис выглядят так:
Видно, что второй параметр, ранее называемый НавигационнаяСсылка, получил новое имя ДействиеПриНажатии. Это связано с тем, что теперь в него стало возможным передавать не только строку с навигационной ссылкой, но и описание оповещения. Это проиллюстрировано скриншотом ниже:
Как видно из примера, у нас появилась возможность программным образом обрабатывать нажатие на окно с оповещением, согласно той логике, которая необходима.
Следующий параметр СтатусОповещенияПользователя появился впервые. В нем указывается статус оповещения (Информация или Важное).
После выполнения команды получим приблизительно такой вид окна приложения:
В панели инструментов появилась кнопка с пиктограммой звонка, по которой вызывается упомянутый выше Центр оповещений. В нем накапливаются новые важные оповещения, на которые пользователь пока никак не отреагировал.
Если в Центре есть какие-то оповещения, то рядом с ним появляется маленькая оранжевая точка, чтобы привлечь внимание пользователя. Пользователь может открыть Центр оповещений, прочитать текст и, если необходимо, выполнить какие-то действия.
И наконец, последним добавленным параметром стал КлючУникальности. С его помощью можно найти отображенное на экране оповещение и изменить его. Если же оповещения с таким параметром нет, то будет показано новое оповещение.
Как видим, возможностей, предоставляемых соответствующим методом, стало еще больше! Но это не все изменения в механизме оповещений.
Как вы уже, наверное, успели заметить, изменился их внешний вид. Теперь оповещения выглядят более современно и эргономично, но их нельзя перемещать по экрану и изменять их размер. Обратите внимание, в нашем примере, текст оповещения попросту не поместился целиком в самом окне, и прочитать его полностью пользователь сможет, только открыв Центр Оповещений. Поэтому не стоит в текст оповещения писать большое количество текста.
Также к новым возможностям относится и одновременное отображение на экране до трех оповещений.
На этом завершим наше знакомство с программным формированием оповещений. Однако вспомним, что оповещения формируются не только разработчиком программно, но и самой платформой в момент интерактивной записи или изменения объекта. И часто этот факт вызывает непонимание в первую очередь у начинающих пользователей: зачем нужны эти служебные оповещения, которые, кстати, нельзя отключить?
Давайте представим такую простую ситуацию: пользователь установил фильтр в каком-то списке для удобства. Допустим, он сделал это в форме списка справочника Номенклатуры. Потом, через какое-то время, решил ввести новый элемент с наименованием “Стул”, который не соответствует установленному ранее фильтру. Вводит его, записывает и…? И не видит его в списке. Что будет делать среднестатистический пользователь? Конечно, введет его второй раз, но опять не увидит. Дальше может последовать третий, четвертый, пятый раз. Когда ему надоест вводить одно и тоже, он, наконец, спросит у вас: а куда все пропадает?
Вот именно поэтому платформа и отображает эти служебные оповещения, информируя пользователя о том, что его действие выполнено. В нашем примере в момент интерактивной записи пользователь увидит следующее оповещение:
Выведем какое-нибудь предупреждение с помощью строки (например, в модуле управляемого приложения):
Предупреждение(“Сейчас будет открыта база”);
Чтобы открыть модуль управляемого приложения, следует в дереве конфигурации выбрать объект Конфигурация, вызвать контекстное меню и выбрать пункт Открыть модуль управляемого приложения.
В данном случае, при запуске приложения, будет выводиться окно, которое является модальным. Модальное окно перекрывает собой все окна, которые существуют в приложении. Пока мы не обработаем это окно, дальнейшие действия невозможны.
Аналогичным образом работает и функция Вопрос.
Обязательными являются только первые два параметра. Для второго параметра тип данных составной (РежимДиалогаВопрос или СписокЗначений). Третий параметр ( ) характеризует интервал времени в секундах, в течение которого система будет ожидать ответа пользователя.
По истечении интервала окно вопроса будет закрыто. Аналогичный параметр( ) есть и у функции Предупреждение.
В качестве примера использования функции Вопрос можно использовать следующий код, записанный в модуле управляемого приложения:
Обращаю Ваше внимание, что данные методы (Предупреждение и Вопрос) не доступны на Сервере. И это логично, потому что интерфейсные методы не могут быть выполнены на Сервере, где нет пользователя.
Особенности использования модальных окон в Платформе 8.3
В платформе 8.3 существуют режимы работы с использованием и без использования модальности. По умолчанию стоит настройка Не использовать режим модальности.
Модальное окно выводится на самый верх и блокирует работу с другими окнами до завершения действий с модальным окном. Кроме того, останавливается выполнение программного кода на том месте, где происходит вызов этого окна. Выполнение кода продолжится только после закрытия модального окна.
Во-первых, проблемы по использованию модальных окон возникают для мобильного приложения. Во-вторых, в браузере модальность окон реализуется с помощью отдельных всплывающих окон.
В настройках браузера по умолчанию всплывающие окна зачастую запрещены. Пользователя приходится заставлять устанавливать разрешение на эти окна.
Браузеры для планшетных компьютеров и для телефонов в большинстве случаев вообще не поддерживают всплывающие окна.
Для замены функций Вопрос и Предупреждение разработаны новые методы: ПоказатьВопрос, ПоказатьПредупреждение.
Эти методы позволяют вызывать окно, но не останавливать выполнение программного кода. Технически это реализуется формированием псевдоокна внутри родительского окна. Псевдоокно не перекрывает родительское окно. После открытия такого окна код продолжает выполняться.
Получение и обработка введенных пользователем значений осуществляется в отдельной процедуре, которая вызывается при закрытии диалогового окна.
Синтаксис функции ПоказатьПредупреждение:
Тип данных: ОписаниеОповещения.
Содержит описание процедуры, которая будет вызвана после закрытия окна предупреждения.
Синтаксис функции ПоказатьВопрос:
Обязательными являются первые три параметра.
Ниже приведен пример использования функции.
Таким образом мы создаем экземпляр данного объекта.
Внимание! Для привязки к нужному полю формы обратите внимание на инициализацию свойств ПутьКДанным и КлючДанных. Применительно для документа при размещении кода в модуле объекта можно писать:
Чтобы открыть модуль документа, следует в окне редактирования объекта (документа) на закладке Прочее нажать на кнопку Модуль объекта.
Для эксперимента в модуле объекта какого-либо документа разместим код.
Ниже представлен полученный в пользовательском режиме результат для Платформы 8.3.
Соответственно, в момент обнаружения ошибок отменяется транзакция, т.е. запрещается запись элемента справочника, либо запрещается проведение документа.
Уведомление о состоянии процесса
Существует специальная функция, с помощью которой можно отображать примерный ход выполнения какого-либо процесса.
Синтаксис: Состояние(, , , )
Параметры: и – не обязательные, тип – Строка.
Текст выводится на специальную панель состояния.
параметр тоже необязательный, но наглядный.
Тип: Число. Значение индикатора прогресса (от 1 до 100).
тоже необязательный параметр.
При обработке какого-либо события могут использоваться периодические вызовы функции типа:
При этом могут меняться надписи, а могут изменяться значения параметра Прогресс.
Функция может вызываться как из одной процедуры (функции), так и из нескольких. Таким образом можно отслеживать состояние выполнения процесса.
Если вы хотите ознакомиться с механизмом уведомления более подробно, то прямо сейчас прервитесь и прочтите нашу новую статью Отображение прогресса длительных операций в 8.3.10. В ней уже не на уровне новичка объясняются все тонкости и подводные камни работы этого механизма.
Мы же завершаем знакомство со способами информирования пользователя. Надеемся, что у вас сложилось понимание, в каких ситуациях следует применять тот или иной способ.
Хочется еще раз акцентировать ваше внимание на том факте, что если ваша конфигурация (версии 8.3.3+) предполагает работу с помощью веб-клиента, то:
- на уровне конфигурации должна быть установлена настройка режима модальности «Не использовать»
- в коде должны использоваться методы асинхронной модели взаимодействия с пользователем. Такие методы начинаются со слов Показать или Начать.
Более подробно об отказе от использования модальных окон в платформе 1С:Предприятие 8.3 можно почитать в финальной статье цикла. А мы идем дальше и, наконец, приступаем к изучению долгожданного интерфейса «Такси», который уже не раз упоминался в наших материалах.
PDF-версия статьи для участников группы ВКонтакте
Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.
Статья в PDF-формате
Если Вы уже участник группы – нужно просто повторно авторизоваться в ВКонтакте, чтобы скрипт Вас узнал. В случае проблем решение стандартное: очистить кеш браузера или подписаться через другой браузер.
Комментарии / обсуждение (16):
Пример демонстрирует двустороннюю интеграцию 1С и Slack с передачей пользовательских данных между двумя системами Есть разные варианты реализации, учитывая, что Slack отправляет запросы на стороне сервере, это решение предполагает, что путь к 1C API будет доступен публично. Один из вариантов реализации с минимальными рисками, это использование AWS Lambda в качестве прокси запросов. Это предполагает, что база 1С доступа из AWS, или находится там. Данный пример ни в коем роде не является работающим решением и не содержит никаких настроек/конфигураций для обеспечения адекватной безопасности.
Конфигурация
AWS Lambda конфигурация:
- создайте новую Lambda функцию в том же регионе, где находится 1C веб-сервер
- используйте Python 3.x
- создайте новый Function URL (страница Configuration) - этот URL будет использован Slack в качестве цели API запросов
- добавите Python код для проксирования запросов (замените целевой адрес 1С веб-сервера)
Создайте новое Slack приложение
Наиболее простой вариант это использовать Slack App Manifest - измените URL на адрес AWS Lambda публичный URL.
Опубликуйте приложение в своем workplace и добавите к тому каналу, куда нужно будет отправлять результаты.
Создайте и опубликуйте 1С приложение
Используйте slack в качестве имени веб-приложения.
Заполните две константы:
- AccessToken - Bot User OAuth Token токен со страницы OAuth & Permissions
- ChannelId - ИД целевого канала куда отправлять результаты
Все должно быть готово для использования. Журнал логов в 1C содержит некоторую информацию для помощи в разборе ошибок.
Вызвать только что созданную slash-комманду
Появится форма для создания нового клиента - структура полностью формируется в 1С
Заполнить все поля
Нажать Save to 1C
Созданные элементы справочника в 1С
Специальные предложения
Просмотры 290
Загрузки 0
Рейтинг 3
Создание 10.05.22 16:00
Обновление 10.05.22 16:00
№ Публикации 1656540
Конфигурация Конфигурации 1cv8
Операционная система Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Да
См. также
Конвертация любых адресов, написанных в свободной форме, к ФИАС Промо
Допустим у нас есть база с адресами клиентов, и написаны они могут быть как душе угодно. С опечатками, без индексов, без разделителей, в совершенно любом формате. Вот было бы здорово иметь функцию, которая одним нажатием кнопки преобразует любую белиберду к строгому представлению адреса по ФИАС? Восстановит индекс, исправит опечатки и вернёт на 100% валидный адрес. Для всех, кто мечтательно сказал "ДА!", выкладываю данную обработку.
2 стартмани
30.06.2020 11195 100 XilDen 15
Сервис push-уведомлений для 1С (Push Notification Service For 1C - PNS4OneS)
1 стартмани
02.02.2022 4578 18 ltfriend 5
Создание интерактивных обучающих курсов с помощью Vanessa Interactive
Приветствую Вас, коллеги. Сегодня Вам предлагается рассмотреть технологию создания интерактивных обучающих курсов, системы Onboarding, интерактивной справки для любых конфигураций разработанных на базе платформы 1С при работе в web клиенте. Прошу посмотреть ролик, кому неинтересно, как это работает, можно дальше не читать. Тестировалось на 1С:Предприятие 8.3 (8.3.20.1646).
1 стартмани
02.02.2022 3258 0 Viktor_Ermakov 2
Универсальный метод, html шаблоны, страницы с авторизацией и без, многоязычность, страница авторизации, etc.
1 стартмани
22.01.2022 4431 7 vl-sher1 29
Модуль обмена с QIWI Промо
Компании, которые используют систему моментальных платежей QIWI, ценят ее за удобство по скорости выплат и для платежей по запросу. Но такие переводы сложны для учета, а при большом объеме проводимых операций отнимают много времени и превращаются в дополнительную головную боль. Мы сотрудничали с компаниями, которые отправляют большое количество платеже на QIWI, и часто слышали боль бухгалтеров о том, как им сложно работать с такими переводами. Поэтому мы автоматизировали выплаты через QIWI в 1С и создали модуль интеграции 1С c API QIWI Wallet и QIWI TopUp.
5 стартмани
25.05.2020 10658 1 Neti 10
Расширение конфигурации для Web-доступа к 1С (1С в роли back-end)
Для реализации того, чтобы 1С формировала и отдавала страницу, которую можно было бы открыть через браузер было написано расширение, которое позволяет публиковать из 1С произвольные ресурсы, будь то API, сайт или изображения / прочие файлы.
1 стартмани
01.04.2021 11864 13 SaschaG 4
Работа с картами в 1С на примере бесплатной библиотеки Leaflet
Разработка функционала отображения и выбора пунктов доставки на карте прямо в 1С с помощью бесплатной библиотеки Leaflet. Тестирование производилось на платформе 8.3.15.1534 на тонком клиенте.
1 стартмани
31.03.2021 14969 49 Parsec1C 18
1 стартмани
24.03.2021 10671 17 ltfriend 12
BIM: взаимодействие с платформой Autodesk Forge Промо
Предлагаемый пример демонстрирует широкие возможности для взаимодействия «1С:Предприятие» с платформой Autodesk Forge и позволяет вам получить базовые представления о применения технологий информационного моделирования в строительстве. Поддерживаются все версии платформы от 8.3.12 и выше до 8.3.18.
1 стартмани
25.11.2020 58155 13 kandr 3
Загрузка данных о продажах ОЗОН из API Ozon и Отчетов в формате *.xlsx в документ "Отчет комиссионера"
Обработки предназначены для следующих конфигураций: Бухгалтерия предприятия, редакция 3.0; Управление нашей фирмой, редакция 1.6; Управление торговлей, редакция 10.3; Управление торговлей, редакция 11; Комплексная автоматизация 2; ERP Управление предприятием 2
Самый важный аспект 1С - это быстро получить данные из базы. Например, по результату набранного в КонсолиЗапросов запроса вывести этот результат на экран. А еще лучше, когда мы вызываем выборку данных из конкретного документа и, конечно, желаем, чтобы параметры по этому документу тоже были переданы в выборку. Здесь мы будем выводить данные на экран по нажатию кнопки в документе, обязательно с получением в параметрах значений из документа. Рассмотрим 8 вариантов вывода подобной информации на экран: 1.Вывод результатов запроса командой Сообщить() из ТаблицыЗначений; 2.Вывод результатов запроса - просто в табличный документ; 3.Вывод результатов запроса с помощью ДвумерногоМассива; 4.Вывод результатов запроса с помощью МассиваСтруктур (с двумя вариантами); 5.Вывод обычным объект-Отчетом без СКД; 6.Вывод объект-Отчетом-СКД+УстановкаПараметров; 7.Вывод объект-Отчетом-СКД+ВнешняяВременнаяТаблица; 8.Вывод программно СКД без объекта-Отчета с Параметром=ВнешняяВременнаяТаблица.
В ссылке лежит база-черновик, созданная на платформе 1С8.3 управляемые формы. У меня настроен безМодальный режим, его всегда можно изменить на модальный:правой клавишей мыши на саму конфигурацию Черновик-Свойства-вкладка Совместимость-режимы модальности(2 поля) см.рис1
В базе-Черновике создан пример Документа и необходимых для него справочников,все данные выдуманные. Эта база создавалась больше как напоминалка - как быстенько сделать тот или иной отчет (или др.способом вывести данные на экран). В реальной жизни - параметры,передающиеся из документа могут быть в разы сложнее,но разобравшись с азами вывода данных,-потом любой сложности отчет не составит труда сделать.
1.Вывод результатов запроса командой Сообщить() из ТаблицыЗначений
Допустим, у нас есть задача: выбрать данные из пары справочников (справочники организованы с табличной частью),но не все данные этих справочников нам нужны,а только те,которые соответствуют открытому на данный момент документу.
Для этого - мы на форму документа вывели кнопку "КонтактыКлиентов", в модуле формы данного документа - у нас есть исполняющая клиентская процедура КонтактыКлиента(Команда), вот здесь и начнем писать первый код.
Код уже в базе написан,просто ставьте/снимайте ремарки с нужного варианта нашего вывода данных на экран:
В данном варианте мы создаем Структуру,записываем в нее данные по Контрагентам и Партнерам из текущего открытого документа.А далее передаем управление в серверную процедуру КонтактыКлиентаНаСервере(Структура,ТабДок). Эта серверная процедура вызывает расчетную экспортную функцию сервера из ОбщегоМодуля.
Прежде чем идти дальше - поясню алгоритм что мы делаем: у нас есть два справочника из которых нам нужны данные,но только те, которые у нас присутствуют в текущем открытом документе. Самым простым и быстрым способом мы можем получить такую выборку,если в пользовательском режиме 1С откроем КонсольЗапросов, а в ней и составим сложный запрос,параметром которого будет временная таблица - именно в нее мы и передаем значения из документа,и именно она и будет являться фильтром-отбором в нашем запросе:
вот код подобного запроса, в параметрах которого внешняя временная таблица:
Логика понятна - как мы с помощью запроса с параметром "ВнешниеДанные" получаем необходимую нам выбоку, теперь вновь возвращаемся в наш документ.
Итак,расчетная серверная функция просто решает тот запрос,который мы только что составили в КонсолиЗапросов.
2.Вывод результатов запроса - просто в табличный документ
Востановите ремарки в расчетной серверной процедуре из ОбщегоМодуля, снимите ремарку в модуле формы документа ТабДок.Показать();
Запускайте вновь пользовательский режим 1С, после нажатия на кнопку "КонтактыКлиентов" - мы получаем вывод нашей выборки в обычный ТабличныйДокумент:
3.Вывод результатов запроса с помощью ДвумерногоМассива
Заремарьте в модуле формы в проц.КонтактыКлиента(Команда) код с 1-2 вариантов вывода данных на экран.
Разремарьте тут же 3-й вариант
Здесь и в 4-м варианте реализована прежде всего суть всех страданий 1.8.3: их работой в клиент-серверном режиме)).
Так как нельзя между клиентом и сервером перегонять таблицу значений, а нам,допустим, ну очень нужно итоговые данные из расчетной процедуры видеть на клиенте, то варианта два - передавать между клиентом и сервером Структуру или Массив!
4.Вывод результатов запроса с помощью МассиваСтруктур (с двумя вариантами)
5.Вывод обычным объект-Отчетом без СКД
Это все тот же запрос, просто в данном варианте - он находится в модуле формы объекта-Отчета.Все так же считает. Результат выводится через табличный документ в МакетОтчета, который сама как придумала,так и нарисовала:
п.с.Это самый стандартный способ вывода данных - через обычный объект-Отчет с обычным Макетом, без всяких СКД. и запрос для него очень быстро набрать в КонсолиЗапросов можно. Не знаю, мне больше всего нравится именно этот вариант, но как говорят -каждому на свой вкус и цвет.
6.Вывод объект-Отчетом-СКД+УстановкаПараметров
Начинается СКД - Схема Компановки Данных.
Сам отчет получился очень простой - в нем нет практически кода, всю работу выполняет СКД!
Но вот с составлением запросов в данном СКД - пришлось повозиться. Здесь нет никакой внешней временной таблицы - связь идет через Параметр документа &Ссылка. А вот как передать ее в СКД - я голову поломала немножко)) Потом просто пришлось использовать дополнительный реквизит на форме - в него загружать Параметр ссылки при процедуре ПриСозданииНаСервере,а потом из процедуры ПриКомпоновкеРезультата - выхватывать этот параметр с реквизита формы и устанавливать его стандартными настройками установки параметров для объекта-Отчета.
На идею - попробывать создать сложные запросы без внешней временной таблицы натолкнул Sergey Andreev (starik-2005).Спасибо.
Вот такая красота в итоге:
7.Вывод объект-Отчетом-СКД+ВнешняяВременнаяТаблица
В этом варианте у нас как и раньше (кроме п.6) фильтр по отбираемым данным справочникам идет с помощью внешней временной таблицы, в которую мы загружаем данные из документа.
вот такой вид имеет этот вариант:
8.Вывод программно СКД без объекта-Отчета с Параметром=ВнешняяВременнаяТаблица
А теперь представим, что нам срочно нужно вывести какие-нибудь расчеты, но по непонятным причинам - мы не можем воспользоваться объектом-Отчет))
Здесь просто создаем Обработку, на форму ей скидываем все наши параметры, которые нужны для построения запроса в СКД, потом подтягиваем эти параметры из другой процедуры - и результат выводим в программно созданный табличный документ.
Оставила в этом варианте прикрепленный еще один МакетСКД - возможно кто-то сможет с помощью него пойти по пути передачи параметра,н-р, &Ссылки (у меня в этом вареанте решено через внешнюю врем.таб) - я сколько не пыталась подгрузить в Параметры СКД при режиме отсутствия объекта-Отчета - у меня не пошло.
Но так как рабочим механизмом здесь является программно вызываемый СКД, то в нашей табличке мы можем установить шаблонМакетов - все же красивее смотрится!))
Вот и все. Теперь не только начинающие программисты смогут быстренько что-то вывести на экран, а и опытные пользователи смогут разобраться в приведенных примерах и вуа-ля! самой большой сложности отчет готов.
Читайте также: