По рабочему вопросу понадобилась печать стикера с QR 2Д и ITF-14 кодом. Сторонние решения для 1С не устраивали своей жадностью, а бесплатных решений кроме вот этого найдено не было. Очень помогла в разработке публикация http://infostart.ru/public/80106/ Скачать измененную версию можно здесь: http://infostart.ru/public/147843/ » Читать далее
Прилетела на той неделе мне задача организовать просмотр сотрудниками остатков на складах без непосредственного доступа в 1С. Первоначально хотел решить её при помощи технологии 1C «WEB сервис», однако сиё мне показалось слишком сложным решением для данной ситуации. Потому решил сделать просто «Регламентное задание» и на обработчик повесить данный код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Построител=НовыйПостроительОтчета;
Построител.ТЕКСТ=
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Склад КАК Склад,
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&Tdata, ) КАК ТоварыНаСкладахОстатки
После очередного обновления конфигурации 1С (это и странно, что не платформы!), у клиентов (зоопарк различных Linux в количестве 50 шт.) FreeRDP и Rdesktop при развертывании окон в 1С пересатили изменяться размеры содержимого. Т.е. физически элементы остаются на тех-же местах что и до «распахивания». Опробовано на различных версиях клиентов. И свежих и не «свежих».. Сломал уже голову. Перебор всяких ключей запуска не помогает.
Иногда удаётся найти подводные камни там, где совсем не ждешь от 1С. Оказывается в запросах 1С, сложение столбцов а+б даёт в сумме null, если одно из значений равно null. даже если чётко укажешь преобразовать значение в строку, например так:
Задача: загрузить в табличный документ на форме файл большого размера, с индикацией прогресса загрузки с использованием фоновой работы.
Решение: если поддержка фоновой работы в 1С была уже довольно давно, то асинхронная загрузка файлов на сервер появилась лишь начиная с версии 8.3.15.1489 ,Ну тоже уже давно, но руки добрались начать использовать только сейчас, т.к. ранее было не критично — не настолько большие файлы загружал/обрабатывал.
Итак, сначала на форме разместим индикатор загрузки. Для этого в реквизитах формы необходимо создать переменную типа «число», и перетащив её на форму выбрать тип «индикатор»:
На кнопку «Загрузить ЛС» навесим открытие диалогового окна:
А чуть ниже определим обработчики оповещения о ходе загрузки файла на сервер и окончании загрузки файла, которые укажем при вызове процедуры «НачатьПомещениеФайлаНаСервер» (есть еще и «НачатьПомещениеФайловНаСервер»). В итоге код получится такой:
В результате чего после выбора файла, по экрану побежит индикатор хода перемещения файла на сервер. Далее этот файл необходимо будет обработать на сервере фоново. И тут возникает один нюанс: мы не можем передать в фоновое задание ссылку на перемещенный файл во временном хранилище.Точнее можем, но фоновое задание это хранилище прочитать не может (это то ли глюк, то ли фича платформы — не понятно). Проблема.. Тогда делаем финт ушами: перед уходом в «фон», мы создадим временный файл во временной папке пользователя 1С, и передадим в фон уже не ссылку на него, а непосредственно имя временного файла. Для этого я просто написал функцию, которая на входе получает адрес загруженного файла, а на выходе даёт имя временного файла:
Кроме того, чтобы мы могли передать результат в обработку по завершению фоновой работы, нам необходимо при запуске фонового задания передать в него некоторые параметры, а именно:
имя созданного временного файла
колонки/строки откуда брать данные из эксель файла
адрес временного хранилища, куда поместить результат работы фонового задания
Функция которая будет работать фоново, должна размещаться в общем модуле. Это небольшой недостаток внешних обработок — фоново запускаются только процедуры-функции созданные внутри конфигурации. Но! до этого нам нужно опять же написать «обвязку» фонового задания, дабы мы имели возможность знать, работает или нет оно, а так-же на каком этапе. При запуске фонового задания, мы получаем идентификатор этого задания:
Который в дальнейшем будем использоваться для того чтобы «узнать» как поживает собственно это задание, подключив на клиенте обработчик ожидания, выполняющийся раз в секунду:
Как видим, тут отслеживается состояние фонового задания (запущен, работает, завершен, завершен с ошибкой), но не отслеживается этап выполнения работ. Есть на самом деле два способа получения хода работы фонового задания:
перехват вывода функции Сообщить() на сервере, и парсинг данных из него. Например в фоновом задании можно с какой-то периодичностью выводить что-то вроде: Сообщить(«12.3%загружаю»);, а получив на клиенте эту запись показывать индикацию 12.3% и соответствующее пояснение.
Можно во время работы фонового задания ложить данные во временно хранилище, и читать их из клиента. НО! данный способ работает только в случай файловой БД. Циатата из справки 1С: «Данные, помещенные во временное хранилище в фоновом задании, не будут доступны из родительского сеанса до момента завершения фонового задания»
Посему остаётся таки отлавливать сообщения сервера по известному идентификатору фонового задания: