Иногда возникает необходимость обработать фотографии в 1С автоматически, уменьшить вес картинок в килобайтах, за счет удаления из файла не нужной технической информации и сглаживания цветов, или изменить размер, уменьшить картинку пропорционально задав максимальный размер по ширине или высоте.В этом случае можно:1) установить специальные библиотеки в операционной системе для работы с графикой, н-р GFLAx и подключать их как com-объекты2) использовать api сервисов, таких как optipic.io.
Рассмотрим оба варианта:1) Использование GFLAxСкачиваем и устанавливаем библиотеку GFLAx, скачать можно здесь https://www.xnview.com/en/#downloads
Далее её надо зарегистрировать в Windows. Для этого запускаем CMD.exe с правами администратора и набираем: regsrv32 "путь_к_DLL\GFLAx.dll"Далее уже в программе, для пропорционального изменения размера файла до максимального размера в 500 пикселей можно вставить такой код:
Данный способ требует специальных настроек операционной системы, навыков системного администрирования и данный способ не проводит полноценную оптимизацию картинки.Кроме того, на компьютере или сервере, где производиться оптимизация эта библиотека должна быть установлена.2) Использование сервиса optipic.ioПодобные сервисы обычно платные, но стоимость использования не высокая, а качество и гибкость существенно выше.
Преимущества использования сервиса optipic.io в проектах 1С:
Легко подключить
Не нужно устанавливать дополнительные библиотеки в операционной системе
Можно использовать как для оптимизации изображений, так и для изменения размера изображения в пикселях (ресайз)
Не зависит от операционной системы и типа используемого клиента
Конфигурация будет работать после переезда на другой компьютер или сервер
Качество и эффективность сжатия производятся в самом оптимальном виде
Использование сервиса можно легко встроить в любой свой проект на 1С. Для этого можно добавить себе функцию, в которую передавать имя файла с исходной картинкой и параметры оптимизации. А в качестве ответа получить имя файла уже оптимизированного сервисом.
Пример такой функции для 1C8:
И далее в коде обращаться к данной функции, н-р так
Допустим вы сделает отчет за 2 квартал 2014г. и за первый квартал Вам необходимо откорректировать взносы, например на -10 000 руб (отрицательная корректировка)
По рекомендации из ПФР:
Заполнил раздел 4 с отрицательной суммой взносов по ОПС и ФФОМС.
В разделе 2.1 указал всё без учёта корректировки. В том числе в графе 3 (с начала расч. периода).
В 1С8, после автомат. заполнения РСВ, вручную исправил графы 3 и 4 раздела 2.1 по строкам 200, 205, 210 и 215 - увеличил на корректирующие суммы начисления и взносов. База в строках 204 и 214 исправилась автоматически.
Также вручную исправил раздел 6 исходный - увеличил на корректир. суммы, в п.6.6 отрицат. доначисление. И добавил разд. 6 корректирующий за 1 квартал.
В итоге. в стр.130 разд.1 с учётом стр.120 получилась как раз нужная сумма взносов к уплате.
Т.о. корректировка отражается только в разделе 4, в стр.120 разд.1, в разд.2.5.2, в исх. разд.6 п.6.6 и в корр. разд.6.
Из журнала:
При пересчете отпускных можно уменьшить взносы
- Сотрудник в марте ушел в отпуск. А во время отдыха заболел. Листок он принес в мае вместе с заявлением о переносе отпуска на сентябрь. За март вместо отпускных начислили пособие. Из-за пересчета у сотрудника уменьшились суммы выплат и страховых взносов с них. Как в связи с этим уточнить РСВ-1 за первый квартал?
- Уточнять отчетность за первый квартал не надо. Сумму взносов к уменьшению надо отразить в графе 3 строки 120 раздела 1 расчета за полугодие со знаком минус. При этом надо расшифровать сумму уменьшенных взносов в графах 1–6 и 14 раздела 4. Например, в графе 5 нужно написать март, в графе 2 - поставить код основания для пересчета взносов 3.
- Как тогда заполнить раздел 6?
- За этого сотрудника в составе РСВ-1 за полугодие надо сдать два раздела 6. Один с типом корректировки «Корректирующая» за первый квартал 2014 года, а второй - с типом корректировки «Исходная» за полугодие 2014 года. В исходной форме необходимо заполнить подраздел 6.6, в котором отразить информацию об уменьшенных взносах. А перечень корректировочных пачек и сумму к уменьшению также следует записать в подразделе 2.5.2."
Создаем хранилище
Выбираем в меню "Конфигурация"->"Хранилище конфигурации"->"Создать хранилище..."
Указываем путь к каталогу хранилища. (Каталог должен быть доступен для всех разработчиков!)
После того как хранилище создано, заходим в пункт меню "Конфигурация"->"Хранилище конфигурации"->"Администрирование" для того чтобы создать пользователей для разработчиков
В открывшемся окне создаем пользователей.
Подключаем конфигурации разработчиков к хранилищу конфигурации
выбираем пункт меню "Конфигурация"->"Хранилище конфигурации"->"Подключиться к хранилищу..."
Далее конфигуратор нас спросит: "При подключении к хранилищу конфигурации, данная конфигурация будет заменена конфигурацией из хранилища. Продолжить подключение?"
Нажимаем кнопку "Да" и указываем:
- путь к хранилищу
- имя пользователя
- пароль
Ждём, пока произойдет сравнение конфигурации с хранилищем.
Если всё прошло успешно, то справа от объектов конфигурации в дереве объектов должна появиться пиктограмма замка.
Работа с хранилищем конфигурации
По умолчанию все объекты конфигурации имеют пиктограмму "замок". Для того чтобы изменить объект конфигурации нужно его захватить, то есть выбрать в контекстном меню объекта пункт "Захватить в хранилище"
указать настройки захвата
Выполнять рекурсивно - указывает, что помимо тех объектов, которые перечислены в списке, следует также захватить и все их подчиненные объекты, которые могут быть загружены независимо (подчиненные объекты, которые не могут быть загружены независимо от родительского объекта, всегда будут получены вместе с родительским объектом). Например, если при захвате справочника не выполнять загрузку рекурсивно, то из подчиненных объектов будут захвачены только реквизиты и табличные части справочника.
Если же выполнить захват рекурсивно, то также будут захвачены и те объекты, подчиненные справочнику, которые могут быть захвачены отдельно от него: формы и макеты.
Флажок Разрешать получать захваченные позволяет при загрузке получить и те объекты, которые захвачены данным пользователем. Такая возможность может потребоваться, например, когда нужно вернуться к состоянию хранилища, не отменяя захват объекта, а продолжая его редактирование.
После того, как нужные изменения внесены, следует объект поместить снова в хранилище со сделанными изменениями. Выбираем в контекстном меню объекта конфигурации пункт "Поместить в хранилище..."
Если требуется отменить сделанные изменения и освободить объект от захвата, то выбираем в контекстном меню объекта пункт "Отменить захват"
Если требуется восстановить объект из хранилища, то то выбираем в контекстном меню объекта пункт "Получить из хранилища...". При этом внесенные изменения в то время, как объект был захвачен, теряются.
Так же можно просмотреть историю версий и сравнить захваченный и измененный объект с объектом в хранилище.
После того, как работа в копиях завершена(или завершен какой-то промежуточный этап), можно обновить конфигурацию основной базы для этого нужно выбрать пункт в меню "Конфигурация"->"Хранилище конфигурации"->"Обновить конфигурацию из хранилища" или "Конфигурация"->"Хранилище конфигурации"->"Сравнить/объединить конфигурацию с хранилищем".
Во втором случае произойдет более "мягкое" обновление конфигурации, то есть, можно будет посмотреть отчет по различиям объектов исходной конфигурации и хранилища.
Иногда при разработке большых отчётов и различных шахмоток приходится соединять таблицы из разных выборок по определенному полю, например выборка по продаже и выборка по производству объединяем по номенклатуре, в запросе бывает это делать неудобно т.к. в Таблицу можно присваивать различные структуры для расшифровок.
Сделал функцию которая объеденяет 2 таблицы в одну, на подобии полного соединения в запросе.
Задача состояла в том, что нужно было из реквизита документа Сответствие выделить две строки и сделать сортировку по ним. Соответствие счета, такого вида: 779000/004599. Как разбить это значение на два?
У функции ПОДСТРОКА три параметра. В качестве первого указывается исходная строка, из которой требуется выделить часть символов — подстроку. Понятно, что тип значения этого параметра — это Строка. Внимание, это очень важное замечание, если использовать тип первого параметра не строку, функция не будет работать, запрос будет выдавать ошибку! Второй параметр определяет позицию символа в исходной строке, с которого начинается выделение части строки, а третий — это длина выделяемой подстроки. Тип значения для второго и третьего параметров — число.
Перейдём к практике:
Результат этого запроса следующий:
Название СчетЗатрат Отдел Март
Платежное поручение исходящее 00000000319 от 01.03.2010 14:42:54 779000 004599 9 000
Платежное поручение исходящее 00000000320 от 02.03.2010 12:07:34 779000 004599 4 721,6
Платежное поручение исходящее 00000000203 от 01.03.2010 12:28:52 786500 004599 987 614,51
Платежное поручение исходящее 00000000227 от 03.03.2010 14:16:00 786500 004599 400 000
Платежное поручение исходящее 00000000238 от 05.03.2010 12:37:57 732000 004600 5 400
Платежное поручение исходящее 00000000197 от 01.03.2010 11:53:11 732500 004600 12 100
Платежное поручение исходящее 00000000198 от 01.03.2010 11:55:39 732500 004600 12 100
Платежное поручение исходящее 00000000279 от 26.03.2010 0:00:00 734100 004600 19 609
Платежное поручение исходящее 00000000287 от 29.03.2010 14:15:36 734100 004600 55 300
Платежное поручение исходящее 00000000291 от 30.03.2010 11:01:10 734100 004600 18 090
Платежное поручение исходящее 00000000268 от 18.03.2010 10:34:25 738000 004600 10 050
Платежное поручение исходящее 00000000276 от 18.03.2010 12:20:20 750400 004600 13 060,98
Платежное поручение исходящее 00000000281 от 29.03.2010 12:33:46 750400 004600 555 645,41
Платежное поручение исходящее 00000000234 от 04.03.2010 12:21:55 754450 004600 24 120
Платежное поручение исходящее 00000000290 от 30.03.2010 10:44:39 754450 004600 100 000
Платежное поручение исходящее 00000000240 от 09.03.2010 10:53:24 786300 004600 20 800
Платежное поручение исходящее 00000000269 от 18.03.2010 10:58:04 786300 004600 61 012
Платежное поручение исходящее 00000000289 от 30.03.2010 9:27:14 786300 004600 6 000
Платежное поручение исходящее 00000000223 от 03.03.2010 12:13:38 786500 004600 36 000
Платежное поручение исходящее 00000000228 от 04.03.2010 9:52:35 786500 004600 378 138,85
Платежное поручение исходящее 00000000229 от 04.03.2010 9:57:50 786503 004600 126 117,75
Платежное поручение исходящее 00000000200 от 01.03.2010 11:58:06 754422 004762 63 000
Платежное поручение исходящее 00000000286 от 29.03.2010 14:10:18 764422 004762 10 000
Платежное поручение исходящее 00000000267 от 17.03.2010 0:00:00 764423 004762 464 370
Платежное поручение исходящее 00000000261 от 15.03.2010 11:16:28 764522 004762 81 357
Итак, если мы берём строку 779000/004599, то ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 1, 6) будет выделять строку "779000". А ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 8, 11) будет выводить "004599".
В этом же запросе, используется выражение:
В этой же задаче необходимо было добавить новые колонки с названиями месяцев и с суммами по ним. Как раз это выражение решает эту задачу. Если Вам нужно использовать другие месяца, например январь, то заменим выражение:
Приведу пример текста запроса, в котором с помощью цикла формируются поля месяцев (выделено жирным), начиная с марта по февраль.
В языке запросов 1С:Предприятия функция ПОДСТРОКА() в формате ПОДСТРОКА(<Исходная строка>, <Начало>, <Длина>) может применяться к данным строкового типа и позволяет выделить фрагмент <Исходной строки>, начинающийся с символа номер <Начало> (символы в строке нумеруются с 1) и длиной <Длина> символов. Результат вычисления функции ПОДСТРОКА() имеет строковый тип переменной длины, причем длина будет считаться неограниченной, если <Исходная строка> имеет неограниченную длину и параметр <Длина> не является константой или превышает 1024.
Вычисление функции ПОДСТРОКА() на SQL сервере:
В клиент-серверном варианте работы функция ПОДСТРОКА() реализуется при помощи функции SUBSTRING() соответствующего оператора SQL, передаваемого серверу баз данных SQL Server, который вычисляет тип результата функции SUBSTRING() по сложным правилам в зависимости от типа и значений ее параметров, а так же в зависимости от контекста, в котором она используется.
В большинстве случаев эти правила не оказывают влияния на выполнение запроса 1С:Предприятия, однако есть случаи, когда для исполнения запроса существенна максимальная длина строки результата, вычисленная SQL Server. Важно иметь в виду, что в некоторых контекстах использования функции ПОДСТРОКА() максимальная длина ее результата может оказаться равной максимальной длине строки ограниченной длины, которая в SQL Server равна 4000 символам. Это может привести к неожиданному аварийному завершению выполнения запроса.
Например, запрос:
завершается аварийно с сообщением Ошибка СУБД: Microsoft OLE DB Provider for SQL Server: Warning: The query processor could not produce a query plan from the optimizer because the total length of all the columns in the GROUP BY or ORDER BY clause exceeds 8000 bytes.
HRESULT=80040E14, SQLSTATE=42000, native=8618
Это происходит потому, что вычисленная Microsoft SQL Server максимальная длина строки, которая является результатом выражения:
равна 4000 символов. Поэтому длина записи, состоящей из двух таких полей превышает 8000 байт, разрешенные для выполнения операции сортировки.
В связи с описанной особенностью исполнения функции SUBSTRING() на SQL Server использование функции ПОДСТРОКА() с целью приведения строк неограниченной длины к строкам ограниченной длины не рекомендуется. Вместо нее лучше использовать операцию приведения типа ВЫРАЗИТЬ(). В частности, приведенный пример можно переписать в виде:
Как скопировать или выгрузить данные из одной таблицы значений в другую таблицу значений?
1. Добавление, копирование строк из одной таблицы значений в другую таблицу значений:
2. Можно использовать метод Скопировать() объекта ТаблицаЗначений:
Первым параметром в этот метод передается массив строк для копирования, если он не указан - копируются все строки таблицы значений. Этот параметр также может содержать отбор по значению колонок.
Вторым параметром передается список колонок для копирования в формате "Колонка1, Колонка2...". Если параметр не указан, копируются все колонки таблицы.
Допустим, есть таблица значений ТЗ с колонками Код, Номенклатура и Цена.
С помощью следующего кода мы выгрузим из этой таблицы в новую таблицу значений ТЗ1 все значения, содержащиеся в колонках Номенклатура и Цена:
В следующем примере мы выгрузим все строки исходной таблицы, в которых значение поля Цена = 15000.