Иногда возникает необходимость обработать фотографии в 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:
И далее в коде обращаться к данной функции, н-р так
Мне частенько приходится взаимодействовать с 1С-разработчиками, и во время совместной работы над проектами замечаю, что далеко не все из них хорошо знают свой главный инструмент – «Конфигуратор». Причем это не относится к степени крутости девелопера. Как оказалось, даже синьоры пользуются далеко не всеми возможностями «Конфигуратора», а ведь они могут сэкономить кучу времени, а тем самым повысить продуктивность разработчика.
Под катом я решил собрать несколько полезных фишек стандартного конфигуратора, которыми пользуюсь регулярно. Многие из них появились в платформе «1С:Предприятие 8.3.х», поэтому перед тестированием обязательно проверьте номер версии установленной у вас платформы.
Закладки
Функция установки в коде закладок появилось еще с первых релизов 8-й версии платформы «1С:Предприятие». Штука чрезвычайно полезная и помогает разработчику быстрей передвигаться по коду. Например, у нас есть большой модуль, в который мы решили добавить ряд функций. Естественно, потом нам предстоит их отлаживать, а соответственно постоянно между ними переключаться.
Хорошо, если новые функции добавлены в самый конец модуля, а если потребовалось расположить в разных частях? Вот тут начинается самое интересное. Одни программисты начинают скролить текст (как правило, этим страдают новички). Более продвинутые применяют поиск по тексту (Ctrl + F).
Оба способа рабочие, но пользоваться ими долго. Куда правильней использовать функцию «закладки». Например, переходим к какой-нибудь строке. Нажимаем ALT + F2 и получаем закладку (слева от строки отобразиться квадратик).
Убирается закладка тем же сочетанием клавиш. Так вот, закладок может быть в модуле расставлено много. По ним легко передвигаться нажатием клавиши F2. Фича крутая, но она была изначально не доделана и не позволяла, например, передвигаться по закладкам в разных модулях. Это досадное ограничение создавало лишние тормоза для программистов, привыкших к хорошим IDE (например, Visual Studio, PHP Storm).
В версии 8.3 недочет исправили и сделали классную вещь – «Список закладок». Нажимаем клавиши «Ctrl + Shift + F2», и перед нами откроется окно с полным списком установленных закладок:
В нем перечислены все закладки в разрезе модулей. Для каждой закладки указан номер строк и доступен перечень действий: перейти к коду, удалить закладку, удалить все закладки.
Таким образом, работать с закладками стало на порядок проще. Еще бы добавили возможность установки горячих клавиш на закладки, и стало бы совсем хорошо. Помню еще со времен «Delphi 6» привык к установке закладок по горячим клавишам Alt + <Цифра>. Наставил закладок и быстро перемещайся по ним.
Группировка строк
В «1С:Предприятие» с самого начала была одна большая проблема – отсутствие возможности создавать дополнительные модули для определенных объектов. Например, есть у меня справочник «Контрагенты» и мне хочется разделить его функционал на модули. Допустим, функционала очеееень много. Так вот, в моем распоряжении все равно стандартный набор: Модуль объекта, Модуль менеджера и модуль формы. Понятное дело, что у каждого модуля своя роль, но что делать мне с моими 100500 функциями, которые относятся непосредственно к справочнику «Контрагенты»?
По мнению 1С я должен оформить их в виде общего модуля. С одной стороны, идея классная. Делаем модуль, его сразу видно и т.д., и т.п. Правда всегда есть один нюанс. Если следователь этой методике, то при наличии кучу объектов в конфигурации число общих модулей будет зашкаливать.
Вот взять хотя бы библиотеку БСП. Стоит ее внедрить и в количестве модулей начинает теряться. Я уже молчу про конфигурации, которые построены на базе БСП. Там и сто пятьсот модулей от БСП, и еще столько же специально для конфигурации.
В общем, неудобство налицо (особенно после опыта разработки в языках, где нет подобных ограничений). Увы, спастись от этой проблемы в настоящее время не получится. Зато, мы можем использовать возможности группировки функций/процедур в модулях.+
Например, есть у нас общий модуль «РаботаСКонтрагентами». В нем часть функций отвечают за поиск контрагента, другая часть за загрузку контрагентов из внешних источников и т.д. Чтобы не потеряться во всем этом многообразии возможностей, можно логически сгруппировать все функции/процедуру. Для этого в платформе 8.3 появилась функция под названием «Области». Рассмотрим пример:
После добавление областей (язык препроцессора) наш код будет сгруппирован. Если их свернуть (области), то в итоге мы увидим симпатичный комментарий (см. рисунок ниже):
Клик мышкой по плюсику развернет область, и мы увидим свернутые функции. Если хочется сразу развернуть все имеющиеся функции (в пределах области), то кликаем по плюсику удерживая Ctrl.
Вот такая мега удобная вещь и в модулях с большим количеством функций спасает очень даже. В предыдущих версиях платформы было модно использовать для подобных целей блоки комментариев, но управлять/добавлять областями явно удобней.
Форматирование кода
Собственно говоря, тут и рассказывать особо нечего – выделяем код, нажимаем «Alt + Shift + F» и редактор попытается привести его в божеский вид в соответствии с вшитым code-style. Функция работает вполне сносно и ей обязательно надо пользоваться. Пишу это потому, что неоднократно видел, как разработчики пытаются отбивать отступы самостоятельно. Это конечно круто, но зачем тратить время, если большую часть работы можно выполнить одной горячей клавишей?
Комментирование
Опять же, никаких секретных действий – выделили код, нажали “Ctrl + num /” (слеш на дополнительной области клавиатуры) и получили закомментированный участок. Захотели вернуть обратно? Не беда! Выделяем закомментированный участок кода, нажимаем «Ctrl + Shift + num /» и мгновенно приводим его в боевой режим. Фишка попсовая, но опять же, новички про нее не знают, и тратят кучу времени на расстановку слешей. Да еще и матерят компанию «1С», за отсутствие возможности многострочного комментирования, как в продвинутых язык программирования.
Быстрая вставка специальных символов
Иногда возникает необходимость быстро вставить в редактор специальный символ (которого нет на клавиатуре). В большинстве случаев разработчики используют для этого функции встроенного языка (например, символ). А ведь есть способ проще. Если удерживать клавишу Alt и набрать на доп. клавиатуре код нужного символа (из таблицы ASKII), то он тут же будет вставлен. Например, держим ALT и набираем 65. На выходе получаем букву «А». Или вводим 4 и получаем бубновую масть.
Вставка специальных символов
Хорошо, с этим понятно, но какой от этого еще можно получить профит? Лично я, таким образом вставляю символ амперсанда (&). Все знают, что этот символ используется для определения параметров в языке запросов. Неудобство состоит в том, что текст запроса мы пишем на русском языке, а для добавления этого символа перед параметром приходится переключить на английский, затем нажать Shift + 7, а потом вернуться обратно на русский.
Чтобы избавить себя от этой рутиной последовательности действий, я использую выше озвученную функцию. С ее помощью для установки амперсанда требуется лишь набрать с удержанной клавишей «alt» последовательность цифр 38. При этом надобность в двойном переключении языка отпадает.
Многие могут подумать, что я искусственно раздул проблему из ничего, но тут просто дело привычки. Кода приходится писать много и вот такие мелочи немного повышают производительность и избавляют от лишних нажатий клавиши backspace (для удаления случайно набранных символов). Не убедил? Тогда просто выделите время и попробуйте себя переучить
Порядок расчета фиксированных страховых взносов за 2014 и 2015, 2016 год
Сумма взноса в ПФР = МРОТ * 12 * 26 %
Сумма взноса в ФОМС = МРОТ * 12 * 5.1 %
где МРОТ (Минимальный Размер Оплаты Труда):
5554 рублей в 2014 году
5965 рублей в 2015 году
6204 рублей в 2016 году
Таким образом, суммы страховых взносов равны:
За 2016 год - 23 153,33 руб.
За 2015 год - 22 261,38 руб.
За 2014 год - 20 727,53 руб.
Также, начиная с 2014 года при получении более 300 000 рублей дохода за год, ИП обязан оплатить 1% в ПФР от суммы, превышающей 300000р. Например, при получении дохода 400 000 рублей, 1% нужно заплатить с суммы 400 000 - 300 000 = 100 000 руб., получаем 1 000 руб.
НО Законодательно предусмотрено ограничение суммы страховых взносов в ПФР. Страховые взносы не могут превышать произведение восьмикратного МРОТ на начало года и тарифа ПФР, увеличенное в 12 раз. То есть, на 2014 год максимальный размер взносов в ПФР составляет 138 627,84 руб. (5554 х 8 х 26% х 12).
Расчет страховых взносов за неполный год
При уплате страхового взноса за неполный год (при начале предпринимательской деятельности не с начала года либо при прекращении деятельности) размер взноса соответственно уменьшается пропорционально календарным дням. Формула для расчета:
МРОТ × М × Тариф + МРОТ × Д/П × Тариф
М & количество полных месяцев деятельности ИП в отчетном году;
Д & количество дней в неполном месяце (день регистрации / прекращения деятельности включать НУЖНО);
П & количество календарных дней в этом месяце;
В программе 1С для отражения уплаты и начисления за себя фиксированных взносов и доп. взносов никаких специальных настроек делать не нужно.
В плане счетов ИП для расчетов с бюджетом предусмотрены:
ПФР - специальный субсчет 69.06.5 «Обязательное пенсионное страхование предпринимателя»
ФОМС - субсчет 69.06.3 «Взносы в ФОМС».
Главное необходимо правильно заполнять документ "Списание с расчетного счета":
Фиксированные страховые взносы
его проводка:
И с доходов свыше 300 000 тыс. руб. Вид страховых взносов установите как: Страховые взносы, исчисленные с суммы дохода
Проводка будет такой:
Для ФОМС:
Проводка
При квартальной процедуре Закрытия месяца будет выполнена регламентная операция «Начисление страховых взносов ИП»
Закрытие месяца - Операция "Начисление страховых взносов ИП" отражает уплаченные в течение года страховые взносы в бухгалтерском и налоговом учете. Операция выполняется раз в год или раз в квартал в зависимости от применяемой системы налогообложения и наличия наемных работников. В случае применения общей системы налогообложения или упрощенной системы с объектом налогообложения «доходы, уменьшенные на величину расходов», сумма уплаченных страховых взносов отражается в налоговом учете в составе расходов.
Она создаст следующие проводки начисления страховых взносов ИП:
И главное помните: Фиксированные взносы нужно оплатить до 31 декабря, дополнительные(свыше 300т.р.) до 01 Апреля следующего года за отчетным!
Программист 1C – это человек, преданный своему делу, имеющий обширную теоретическую базу и обладающий практическими знаниями по использованию программ 1С.
Описание профессии:
1С-программист занимается разработкой программы 1С: Предприятие, предназначенной для ведения бухгалтерии и делопроизводства на предприятиях малого и среднего бизнеса.
Виды деятельности:
* настройка и поддержка программного обеспечения 1С разных версий;
* произведение администрирования типовых конфигураций на базе 1С;
* произведение разработки и администрирования нетиповых конфигураций 1С;
* тестирование на предмет ошибок, ликвидация недочетов
Места работы:
* фирмы, специализирующиеся на разработке и установке программного обеспечения 1С;
* организации, предусматиривающие штатную единицу 1С-программиста
Профессиональные навыки:
* наличие технического образования;
* понимание системы бухгалтерского учета, основ и принципов ведения бухгалтерии;
* умение настраивать и перерабатывать 1С под требования ведения учета в конкретной организации
Дополнительные особенности:
Обучиться 1С-программированию можно на специальных курсах, имея при этом базовое техническое образование. Желающим работать 1С-программистом необходимо иметь в виду, что заниматься данным программным обеспечением они смогут только на территории Российской Федерации, т.к. за рубежом действует иная система бухгалтерского учета. Программисты 1С могут сделать карьеру, заняв должности специалист 1С или администратора 1С.
Для более быстрого поиска в базах данных было придумано свойство индекс. При использовании таблиц значений мы также можем создавать индексы для произвольных колонок.
Например, у нас есть таблица с колонками «Номенклатура, Цена, ЕдиницаИзмерения». И если мы часто ищем в таблице строки с какой-то номенклатурой, то лучше эту колонку проиндексировать и тогда программа не будет каждый раз перебирать все строки, а будет использовать индекс.
Чтобы создать индекс применяется метод «Индекс», в параметрах которого передается строка в которой перечисляются индексируемые колонки.
Т.к. индексируемых колонок может быть несколько, то возможна и такая запись:
Когда индекс создан, то при использовании методов таблицы значений «Найти» или «НайтиСтроки» будет использоваться созданный нами индекс.
А для поиска в таблице значений существует два специальных метода: первый Найти
Данный метод возвращает первую найденную строку с искомым значением или Неопределено, если не находит. Поэтому его удобно использовать для поиска уникальных значений, т.к. иначе придется при нахождении значения удалять его из таблицы, чтобы найти следующее.
Чтобы так не мучиться существует следующий метод, который позволяет находить массив подходящих строк НайтиСтроки
Этот метод всегда возвращает массив, но он может быть и пустой, если ничего не найдено. И ещё этот метод также как и предыдущий возвращает сами строки таблицы значений, а не сами значения в отдельном массиве. Поэтому изменив значения в строке массива или как в предыдущем методе у найденной строки, Вы поменяете значение в обрабатываемой таблице значений.
Чем ещё хорош этот метод, так это то, что он может искать сразу по нескольким колонкам таблицы значений одновременно:
Единственный минус, как видно, нельзя применять другие виды сравнения кроме как "равно"
Параметр запроса
В языке запросов имеется возможность указать значение параметра виртуальной функции . При этом для большинства параметров в качестве значения параметра может использоваться выражение . В качестве выражения может выступать и параметр .
Пример : РегистрНакопления.Продажи.Обороты(& Начало )
В данном примере в качестве значения первого параметра виртуальной таблицы будет использовано значение параметра &Начало .
Параметр компоновки данных
При помощи специальных инструкций в тексте запроса можно указать, какой параметр компоновки данных будет использоваться в качестве значения параметра виртуальной таблицы .
Пример : РегистрНакопления.Продажи.Обороты({& НачалоПериода })
В данном примере в качестве значения первого параметра виртуальной таблицы будет использовано значение параметра &НачалоПериода , если его значение установлено в настройках компоновки данных .
Совместное использование параметра запроса и параметра компоновки данных
Если в запросе указано и выражение параметра и параметр компоновки данных, то значение параметра компоновки данных используется в случае, если значение данного параметра установлено в настройках компоновки . В противном случае в качестве значения параметра используется результат выражения , указанного в параметре виртуальной функции .
Пример : РегистрНакопления.Продажи.Обороты(& Начало {& НачалоПериода })
В этом примере, если в настройках установлено значение параметра НачалоПериода , то будет использоваться его значение . В противном случае в сгенерированном тексте запроса останется исходное выражение, т. е . &Начало, и в качестве значения параметра виртуальной таблицы будет использоваться значение этого параметра .
Параметры при автоматическом заполнении полей набора данных
При автоматическом заполнении доступных полей набора данных схемы компоновки данных, система автоматически добавляет в схему параметры виртуальных таблиц с именами , соответствующих именам параметров виртуальной таблицы , в случае если у параметра виртуальной таблицы отсутствует описание параметра компоновки данных .
Таким образом , запись: РегистрНакопления.Продажи.Обороты(& Начало )
соответствует следующей : РегистрНакопления.Продажи.Обороты(& Начало {& НачалоПериода }, {& КонецПериода})
И значение параметра &Начало используется только в случае если в настройках не установлено значение параметра &НачалоПериода .
Для 1с поле ввода с типом строка можно применить маску ввода. В 1с маска задает формат представления данных и ограничивает вводимой информации. Это очень удобно бывает во многих жизненных задачках, например ввод телефона, ввод специального кода или представления номера. В 1с маску можно задать как интерактивно «в режиме конфигуратора», так и программно.
Для 1с поле ввода маска доступны следующие форматы ограничители. Ввод только числовых данных:
* 9 – вводятся только цифры
* # – вводятся цифры и знаки «+» «-» и пробел
* h ввод шестеричных цифр
Ввод цифр и букв:
* @ – ввод символов алфавита, и при этом они будут преобразованы в верхний регистр
* N – разрешен ввод алфавитных символов но уже можно контролировать регистр.
* U – вводи символов алфавита с преобразованием в верхней регистр. Отличие между U и @ не смог найти.
* ! – любой введенный символ автоматический преобразуется к верхнему регистру
* X – разрешен ввод только латиницы
Для запрет ввода символа «^» в 1с поле ввода, необходимо прописать этот символ в маску
В маске могут присутствовать специальные символы «.» , «(», «)», «-» и «,» и некоторые другие, они позволяют форматировать строку.
Например, нам нужно указать, что номер вводится с указанием кода города. То нужно прописать 1с маску ввода «9 (999) 999 99 99» или «9 (999) 999-99-99». Все зависит от требуемого формата представления строки. Или допустим нам нужно ввести формат дополнительного номера накладной типа «код подразделение.месяц.год», тогда маска будет «UUUU.99.9999» или «UUUU/99/9999»
Стоит помнить что, задавая маску – мы обязаны задать её полностью такой длины, какой длины вводится строка. Либо если существуют несколько форматов строки, короткий и длинный – то можно задать две и более масок, через запятую.
Например, вводим сотовый телефон клиента, либо городской (без указания кода города), тогда 1c маска будет 9 (999) 999-99-99;999-99-99 Из справки 1С:
ПолеВвода (TextBox) - Маска (Mask)
Использование: Чтение и запись.
Описание:
Тип: Строка. Содержит посимвольную строку маски интерактивного ввода текста в поле.
В строке маски допустимо использование следующих специальных символов:
! - любой введенный символ преобразуется в верхний регистр;
9 - допустимо ввести произвольный символ цифры;
# - допустимо ввести произвольный символ цифры или - (знак минус) или + (знак плюс) или пробел;
N - допустимо ввести любые алфавитно-цифровые символы (буквы или цифры);
U - допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) и любой введенный символ преобразуется в верхний регистр;
X (латинского алфавита) - допустимо ввести произвольный символ;
^ - не допустимо вводить этот символ интерактивно пользователем, он может устанавливаться только из языка;
h - допустим ввод символов обозначения шестнадцатеричных цифр;
@ – допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) в верхнем регистре или пробел.
При помещении значения из поля ввода с маской в текстовый реквизит, связанный с этим полем ввода, происходит следующее преобразование: на тех позициях, где в маске стоит символ "@", а в строке пробел – пробел удаляется. Если в маске из специальных символов используются только символы "@", то все символы текста, соответствующие символам маски, не являющимся специальными символами, удаляются после по-следнего непустого блока из символов "@". Например, при маске "@@.@@.@@." текст "41. 2. ." преобразуется в "41.2".
Для того, чтобы использовать в маске один из специальных символов, нужно использовать перед ним символ "\".
Допускается указание нескольких масок в одном параметре. Маски разделяются символом ";". В этом случае использоваться будет та маска, к которой подходит введенный текст.
Недоступно на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
В системе "1С:Предприятие" часто возникает ситуация, когда нужно закрыть окно сообщений, появляющееся при вызове метода Сообщить. Стандартно это окно закрывается при нажатии комбинации клавиш <Ctrl>+<Shift>+<Z>, но можно сделать это и программно.
В результате выполнения данного кода окно сообщений будет закрыто. Теперь поясним работу этого небольшого куска программы. SendKeys(String) - имитируется нажатие клавиши или последовательности клавиш, указанных в параметре String. В качестве параметра можно указывать как алфавитно-цифровые символы, так и символы специальных клавиш, например "Enter", "Tab", "F1", "Alt", "Shift", "Ctrl" и т.д. Для указания клавиш "Alt", "Shift", "Ctrl" существуют специальные коды:
· "Shift" - +;
· "Ctrl" - ^;
· "Alt" - %.
Если возникнет необходимость передать специальные символы именно как символы, а не команды, нужно заключать их в фигурные скобки, например {+}.
Механизм распределенных информационных баз предназначен для создания территориально распределенных систем на основе идентичных конфигураций 1С:Предприятия 8. Этот механизм позволяет переносить как данные 1С: Предприятия, так и изменения конфигурации информационной базы.
В тех случаях, когда предприятие представляет собой территориально распределенную структуру, зачастую сохраняется потребность в ведении единой системы учета. То есть необходимо иметь возможность работать в едином пространстве документов, получать отчеты, отражающие состояние дел как в территориально удаленных подразделениях предприятия, так и на предприятии в целом и т.п. При этом не всегда имеется возможность организовать работу всех подразделений с единой информационной базой в режиме он-лайн.
Для решения подобных задач и предназначен встроенный механизм. Распределенная система в этом случае должна иметь древовидную структуру, в которой существует корневой узел и определено отношение "главный - подчиненный" для каждой пары связанных узлов. При этом система будет стремиться поддерживать одинаковое состояние объектов данных во всех узлах распределенной ИБ.
Обмен измененных объектов данных между каждым связанным узлом выполняется в формате ХML файлов. Перенос данных непосредственно между периферийными ИБ невозможен. Поэтому изменения данных, произведенные в одном из периферийных узлов распределенной ИБ попадают в другие периферийные узлы только через центральную ИБ.
В простейшем случае (по умолчанию) областью распространения изменений для всех объектов является вся распределенная ИБ. Таким образом, в случае если в течение какого-то времени изменения данных системы не будут производиться, и, в то же время, будут произведены все необходимые действия по обмену изменениями между узлами распределенной ИБ, то все узлы будут содержать абсолютно одинаковые данные.
Внесение изменений в конфигурацию возможно только в одном (корневом) узле распределенной системы. Изменения конфигурации передаются от главного узла к подчиненным.
Механизмы распространения изменений объектов работают полностью автоматически. Разработчик конфигурации лишен возможности вмешиваться в функционирование этих механизмов. Для того, чтобы механизмы распределенной ИБ начали работать, не нужно производить никаких специальных действий по конфигурированию системы.
Для того, чтобы документы, элементы справочников и другие объекты, созданные в разных узлах распределенной ИБ можно было различать, если это необходимо, в настройках программы можно указать префикс узла распределенной базы. В этом случае в при создании нового объекта (к примеру документа) будет автоматически добавляться указанный префикс.
В основе механизма распределенных информационных баз лежат универсальные механизмы обмена данными, такие как служба регистрации изменений, инфраструктура сообщений, XML-сериализация и чтение/запись XML-документов. Однако механизм распределенных информационных баз содержит ряд специфических возможностей, недоступных через универсальные механизмы обмена данными.
К таким возможностям относится интерактивное создание начального образа информационной базы, а также интерактивное чтение и запись изменений, которые могут быть выполнены сразу же, после указания того, что данный план обмена будет использовать механизм распределенных информационных баз. Таким образом, распределенная информационная база может быть создана без какого-либо дополнительного программирования, исключительно средствами визуального конструирования. При этом обмен в распределенной информационной базе будет осуществляться на основе некоторых алгоритмов, изначально заложенных в платформе.
Все действия, выполняемые при интерактивном обмене, могут быть продублированы программно, и кроме этого разработчик имеет возможность программно управлять принятием и отправкой изменений, а также выполнять реструктуризацию распределенной информационной базы, добавляя новые и удаляя существующие узлы.
Служба регистрации изменений
Суть регистрации изменений состоит в том, чтобы иметь перечень измененных элементов данных которые должны быть переданы в очередном сообщении тому или иному узлу, с которым производится обмен данными. При каждом изменении данных регистрируется, что имеются изменения, которые предстоит передать во все узлы, с которыми поддерживается обмен этими данными. При получении подтверждения приема сообщения, в котором были отправлены изменения, записи регистрации изменений должны быть удалены.
Состав данных, которыми осуществляется обмен, описывается в Плане обмена и представляет собой перечень элементов данных.
Для каждого элемента данных, указанного в плане обмена, ведется своя таблица регистрации изменений. Таблицы имеют разную структуру, в зависимости от того, для каких элементов данных регистрируются изменения, но все-таки структуры таблиц подобны. Каждая запись указывает на некоторый элемент данных, некоторый узел и содержит номер сообщения, в котором это изменение передано в первый раз.
При описании состава данных в плане обмена, для каждого элемента данных есть возможность указать признак Авторегистрации. Авторегистрацию можно «Разрешить» или «Запретить». Если авторегистрация разрешена, то при изменении данных регистрация изменений будет выполнена автоматически. Если запрещена, то регистрацию изменения можно выполнить «вручную», средствами встроенного языка.
Инфраструктура сообщений
С точки зрения плана обмена, между узлами происходит обмен сообщениями. Каждое сообщение содержит изменения данных, изменения конфигурации (если это распределенная информационная база) и ряд служебной информации. Каждое сообщение точно ассоциировано с планом обмена, имеет уникальный номер и имеет одного отправителя и одного получателя.
Сообщение оформляется как документ XML, имеющий определенную структуру. Инфраструктура сообщений позволяет формировать нужную структуру сообщения, и контролировать ее корректность. В частности, инфраструктура сообщений поддерживает нумерацию сообщений, и позволяет получать подтверждения от узла-получателя о приеме сообщений. Такое подтверждение содержится в каждом сообщении, приходящем от узла-получателя в виде номера последнего принятого сообщения.
Коллизии
При работе в реальных распределенных ИБ один и тот же объект может изменяться одновременно в различных узлах распределенной ИБ. И при переносе измененных объектов из одной ИБ в другую может случиться так, что в какую-либо ИБ будет загружаться объект, зарегистрированный в самой этой ИБ как измененный. Такая ситуация носит название коллизии.
Приведем описание действий системы в наиболее типовых вариантах коллизий: Один и тот же объект изменен более чем в одной ИБ.
Общий принцип здесь состоит в том, что "главным" считается изменение, произведенное в центральной ИБ. Отработка ситуации различается в зависимости от того, на какой ИБ - центральной или периферийной коллизия обнаружена. Если коллизия обнаружена на центральной ИБ, то есть при загрузке файла переноса из периферийной ИБ обнаружено, что один из измененных объектов также изменен и в центральной ИБ, то изменения объекта в центральную ИБ не загружаются. При этом гарантируется, что при очередной выгрузке в адрес периферийной ИБ будет передано состояние объекта как оно есть в центральной ИБ. Если же коллизия обнаружена на периферийной ИБ, то изменения объекта, прибывшие из центральной ИБ загружаются. Объект, измененный в одной ИБ, удален в другой.
В данном случае принцип заключается в том, что изменение всегда "главнее" удаления. В случае, если на центральную ИБ прибывает файл переноса, в котором содержится информация, что некоторый объект удален на периферийной ИБ, то в центральной ИБ объект не удаляется, а в записи таблицы регистрации изменений данный объект помечается как измененный. То есть при очередном обмене объект будет восстановлен в той ИБ, в которой он был удален, причем само содержание объекта будет соответствовать той ИБ, которая "отвергла" удаление.
Аналогичные действия производятся, если коллизия обнаружена на периферийной ИБ. Объект, удаленный в одной ИБ, не может быть удален в другой по причине наличия ссылок на него.
При загрузке изменений, если загружается информация об удалении объектов, автоматически включается механизм контроля ссылочной целостности и выполняется проверка наличия ссылок в данной ИБ на объекты, которые переданы как удаленные.
В случае обнаружения коллизии такого рода, вне зависимости от того на какой из ИБ она была обнаружена, выполняется следующее: удаление не выполняется, а в таблицу регистрации изменений заносится запись о том, что объект должен быть перенесен в адрес той ИБ, из которой была прислана информация о его удалении.
При очередном обмене объект восстанавливается в той ИБ, в которой он был удален, однако само содержание объекта будет соответствовать той ИБ, которая "отвергла" удаление.
Таким образом на сегодняшний день платформа 1С:Предприятие предоставляет очень удобный механизм, использование которого относительно просто и не требуется никаких навыков в программировании, а благодаря механизму автоматического обмена от пользователя даже не требуется думать об актуальности его распределенной информационной базы.
Документ «Корректировка записей регистров» в типовых конфигурациях 1С предназначен для ручной корректировки записей регистров накопления, зависимых регистров сведений и регистров бухгалтерии. Типичные ситуации, в которых может понадобиться документ «Корректировка записей регистров», - ввод начальных остатков, исправление ошибок в учете, отражение в учете операций, для которых в конфигурации нет специальных документов. В документе есть сервис автоматического заполнения движений с предопределенным действием «Сторно движений документа». С его помощь можно автоматически создать движения по регистрам бухгалтерии и регистрам накопления, аналогичные движениям указанного документа, но с отрицательными значениями.
Иногда количество вводимых записей по регистрам может быть велико и тогда целесообразно выполнить корректировку регистров программно. Документ «Корректировка записей регистров», как Вы уже, наверно, догадались, не совсем обычный. А иначе бы о нем не стоило и писать.
В качестве примера, когда может потребоваться программно создать документ «Корректировка записей регистров», предлагаю рассмотреть операцию переоценки основных средств. Переоценка основных средств - ситуация хоть и нечастая, но все же вполне реальная, а специального документа для переоценки в типовых конфигурациях 1С нет. Чтобы пример получился более представительным (включал в себя все виды корректируемых регистров), я сделал обработку для конфигурации «1С:Управление производственным предприятием». Но с другой стороны, чтобы не перегружать пример лишней информацией, мы рассмотрим случай, когда в результате переоценки происходит увеличение стоимости основных средств и накопленной амортизации (дооценка).
В этом случае переоценка основных средств отражается в бухгалтерском учете проводками:
В налоговом учете операция переоценки основных средств не предусмотрена, но для того чтобы соблюдалось равенство БУ = НУ + ПР + ВР, мы должны отразить в учете возникновение постоянных разниц. Также мы должны сделать движения в регистрах накопления «СтоимостьОС», «СтоимостьОСБухгалтерскийУчет» и в регистрах сведений «ПараметрыАмортизацииОС», «ПараметрыАмортизацииОСБухгалтерскийУчет», «СобытияОС» и «СобытияОСОрганизаций».
Исходные данные для переоценки ОС берутся из dbf-таблицы с набором полей:
* OS (строка) - код основного средства;
* SumU (число) - сумма дооценки по управленческому учету в единицах валюты управленческого учета;
* SumB (число) - сумма дооценки по бухгалтерскому учету;
* AmortU (число) - сумма дооценки накопленной амортизации по управленческому учету в единицах валюты управленческого учета;
* AmortB (число) - сумма дооценки накопленной амортизации по бухгалтерскому учету.
Упрощенный фрагмент кода обработки, иллюстрирующий запись проводок в регистр бухгалтерии, представлен в листинге:
Как видно из примера, документ «Корректировка записей регистров» используется в качестве регистратора, движения же записываются непосредственно в регистр. Движения по регистрам накопления и регистрам сведений делаются аналогично.
В языке запросов не предусмотрено специальных средств для получения всех родителей элемента. Для выполнения задачи можно воспользоваться иерархическими итогами, однако получение иерархических итогов оптимизировано для построения итогов большого количества записей, и не вполне эффективно для получения родителей одного элемента. Для более эффективного получения всех родительских записей элемента, рекомендуется перебирать в цикле его родителей небольшими порциями. Пример:
В данном примере в окно служебных сообщений выводятся все родители для ссылки, записанной в переменную ЭлементНоменклатура. В цикле выбирается по 5 родителей ссылки.
Если число уровней в справочнике ограничено и невелико, то возможно получение всех родителей одним запросом без цикла.
Режим предназначен для выполнения конфигуратором административных функций без участия пользователя. Данный режим применяется в специальных случаях. Например, с его помощью можно организовать специальный ярлык на рабочем столе Windows для создания резервной копии информационной базы 1С:Предприятия. При этом пользователю не нужно будет выполнять никаких действий по выбору необходимой функции в конфигураторе и указанию параметров необходимых для сохранения информационной базы. Данный режим может использоваться для организации автоматического выполнения административных функций в определенный момент времени. Для этого используется любое программное обеспечение, имеющее возможность планирования и запуска задач в определенное время. Например, может быть организовано автоматическое создание резервной копии в ночное время суток
Пакетный режим предназначен для выполнения следующих действий:
-тестирование и исправление информационной базы;
-выгрузка данных;
-сохранение данных;
-автообмен распределенной информационной базы (режим доступен, если установлена компонента «Управление распределенными информационными базами»).
Запуск Конфигуратора в пакетном режиме
Для работы Конфигуратора в пакетном режиме следует в командной строке запуска 1С:Предприятия, кроме параметра CONFIG, указывающего на то, что система 1С:Предприятие запускается в режиме «Конфигуратор», указать параметр /@ФайлПакетногоРежима. ФайлПакетногоРежима - это имя файла, содержащего параметры пакетного запуска. Все необходимые функции, которые должны быть выполнены Конфигуратором в пакетном режиме, описываются в этом файле.
Имя файла может задаваться как абсолютным путем, так и относительным.
В случае задания относительным путем файл ищется программой сначала в рабочем каталоге пользователя, затем в каталоге информационной базы, а затем в том каталоге, из которого запускается 1С:Предприятие.Для того, чтобы при пакетном режиме не выдавался диалог запуска 1С:Предприятия и диалог авторизации, в строке запуска должны быть указаны все необходимые параметры:
-параметр CONFIG;
-каталог информационной базы (параметр /D);
-имя пользователя, если для данной информационной базы ведется список пользователей (параметр /N);
-пароль пользователя, если для пользователя задан пароль (параметр /Р).
Файл пакетного режима имеет по умолчанию расширение .prm, если используется другое расширение, то оно должно явно указываться в имени файла.
Ниже приведен пример строки запуска Конфигуратора в пакетном режиме:
c:\1cv7\bin\1cv7.exe CONFIG /Dc:\1cv7\db /NПопов /PSekret /@C:\lCV7\CMD\Backup
Структура файла пакетного режима.
Файл пакетного режима является текстовым файлом и может создаваться и модифицироваться любым текстовым редактором. Структура файла включает секции и параметры, определенные для каждой секции. Секция задается отдельной строкой с именем секции в прямоугольных скобках. Параметры задаются отдельными строками после строки соответствующей секции с указанием имени параметра и значением, отделенным знаком «=». Основная секция General, описывает общие параметры пакетного режима и необходимость выполнения отдельных функций пакетного режима. Остальные секции содержат параметры, описывающие особенности выполнения конкретных функций.
Секция General [General]
Данная секция предназначена для описания общих параметров пакетного режима и необходимости выполнения отдельных функций.
Output=Имя_файла
Указывает файл, в который будет дополнительно направляться вывод записей о выполняемых действиях в пакетном режиме. Имя файла может указываться как абсолютным путем, так и относительно каталога, в котором расположен файл параметров. Формат файла дополнительного вывода совпадает с форматом вывода в журнал регистрации. Если параметр не указан, то дополнительный вывод производиться не будет. В любом случае вывод производится в журнал регистрации
Quit=Значение
Указывает, нужно ли завершать выполнение Конфигуратора после выполнения действий пакетного режима.
Если задано Y или 1, после выполнения действий пакетного режима, программа будет завершена, а если 0 или N, то нет.
Если параметр не задан, то программа будет завершена.
CheckAndRepair=Значение
Указывает, нужно ли выполнять тестирование и исправление информационной базы.
Если задано Y или 1, тестирование и исправление будет выполняться, а если 0 или N, то нет.
Если параметр не задан, то тестирование и исправление выполняться не будет.
UnloadData =3начение
Указывает, нужно ли выполнять выгрузку информационной базы.
Если задано Y или 1, выгрузка будет выполняться, а если 0 или N, то нет.
Если параметр не задан, то выгрузка выполняться не будет.
SaveData=Значение
Указывает, нужно ли выполнять сохранение информационной базы.
Если задано Y или 1, сохранение будет выполняться, а если 0 или N, то нет.
Если параметр не задан, то сохранение выполняться не будет.
AutoExchange=Значение
Указывает, нужно ли выполнять автообмен в распределенной информационной базе.
Если задано Y или 1, автообмен будет выполняться, а если 0 или N, то нет.
Если параметр не задан, то автообмен выполняться не будет.
Подробное описание работы с распределенными информационными базами приведено в книге «Управление распределенными информационными базами».
Секция CheckAndRepair [CheckAndRepair]
Данная секция предназначена для описания выполнения тестирования и исправления информационной базы.
Repair=Значение
Параметр указывает, должно ли выполняться исправление информационной базы.
Если задано значение Y или 1, то будет выполняться тестирование и исправление обнаруженных ошибок в информационной базе.
Если задано значение N или 0, то будет производиться только тестирование.
Если параметр не задан, то будет производиться тестирование и исправление.
PhysicalIntegrity=Значение
Параметр указывает, следует ли производить проверку физической целостности таблиц информационной базы.
Если задано Y или 1, проверка будет производиться, если N или 0, то нет.
Если параметр не задан, проверка будет производиться.
Reindex=Значение
Параметр указывает, следует ли производить реиндексацию таблиц информационной базы.
Если задано Y или 1, реиндексация будет производиться, если N или 0, то нет.
Если параметр не задан, реиндексация будет производиться.
Если установлен режим исправления, то рекомендуется установить и режим реиндексации.
LogicalIntegrity=Значение
Параметр указывает, следует ли производить проверку логической целостности таблиц информационной базы.
Если задано Y или 1, проверка будет производиться, если N или 0, то нет.
Если параметр не задан, проверка будет производиться.
RecalcSecondaries=Значение
Параметр указывает, следует ли производить обновление (пересчет) вторичных данных информационной базы, то есть служебных данных, которые могут быть рассчитаны на основании другой информации, хранящейся в информационной базе.
Если задано Y или 1, обновление будет производиться, если N или 0 - то нет.
Если параметр не задан, обновление будет производиться.
RecalcTotals=Значение
Параметр указывает, следует ли производить пересчет итогов бухгалтерского и оперативного учета.
Если задано Y или 1, пересчет будет производиться, если N или 0 - то нет.
Если параметр не задан, пересчет будет производиться.
Pack=3начение
Параметр указывает, следует ли производить упаковку таблиц информационной базы, то есть освобождать место занятое удаленными записями.
Если задано Y или 1, упаковка будет производиться, если N или 0, то нет.
Если параметр не задан, упаковка не будет производиться.
Данный параметр имеет смысл, только если данные хранятся в формате DBF/CDX.
SkipUnresolved=Значение
Параметр указывает, следует ли пропускать неразрешенные ссылки, или их следует исправлять.
Если задано Y или 1, неразрешенные ссылки будет только диагностироваться, если N или 0, то ссылки будут разрешаться способом, задаваемым параметром CreateForUnresolved (см. ниже).
Если параметр не задан, ссылки будут исправляться.
Параметр имеет смысл только, если проводится тестирование и исправление информационной базы.
CreateForUnresolved=Значение
Параметр указывает способ разрешения неразрешенных ссылок.
Если задано Y или 1, для неразрешенной ссылки будет создан объект соответствующего типа, если N или 0, то ссылка будет очищена.
Если параметр не задан, будет создан объект.
Параметр имеет смысл только, если проводится тестирование и исправление информационной базы.
Reconstruct=Значение
Параметр указывает способ исправления информационной базы в случае, когда данные объекта частично потеряны. Если задано Y или 1, будет создан объект, заполненный имеющимися данными, если N или 0, то данные объекта будут удалены.
Если параметр не задан, будет создан объект.
Параметр имеет смысл только, если проводится тестирование и исправление информационной базы.
Секция UnloadData [UnloadData]
Данная секция предназначена для описания выполнения выгрузки данных информационной базы.
UnloadToFile=Имя_Файла
Параметр указывает имя файла переноса данных, в который будет производиться выгрузка. Может задаваться как абсолютно, так и относительно того каталога, в котором размещается файл параметров.
Параметр должен быть задан обязательно.
IncludeUserDef=Значение
Параметр указывает должен ли в файл переноса данных включаться список пользователей.
Если задано Y или 1, то список пользователей будет включен в файл переноса, если 0 или N, то нет.
Если параметр не задан, то список будет включен в файл переноса.
Password=Пароль
Параметр задает пароль, которым будет закрыт файл переноса данных.
Если параметр не задан, то файл переноса не будет закрыт паролем.
Секция SaveData [SaveData]
Данная секция предназначена для описания выполнения сохранения данных информационной базы.
SaveToFile=Имя_Файла
Параметр указывает имя файла, в который будет производиться сохранение данных. Может задаваться как абсолютно, так и относительно того каталога, в котором размещается файл параметров.
Параметр должен быть задан обязательно.
FileList=Список сохраняемых файлов
Задается как перечисление имен файлов, разделенных пробелами или запятыми. Длинные имена файлов, содержащие пробелы должны заключаться в кавычки "". В именах файлов могут использоваться символы «*» для обозначения групп файлов.
Если параметр не задан, то список сохраняемых файлов будет взят из файла 1CV7FILE.LST, так же как и в случае выполнения сохранения из пункта меню «Администрирование».
Работа в пакетном режиме
Выполнение указанных действий в пакетном режиме производится всегда в строго определенной последовательности, вне зависимости от порядка следования секций и параметров в файле пакетного режима:
1. тестирование и исправление информационной базы;
2. выгрузка данных;
3. сохранение данных;
4. автообмен распределенной информационной базы.
При работе Конфигуратора в пакетном режиме не выполняется выдача предупреждений и запросов, требующих подтверждения пользователя. При возникновении критических ошибок выполнение пакетного режима прекращается. Результаты выполнения пакетного режима можно просмотреть в журнале регистрации и в файле дополнительного вывода, если он был определен в файле параметров пакетного режима.
Комментарий к файлу:
Во время работы будет сформирован лог-файл (Output="D:\Типовые конфигурации\1SBBDemo\log.txt"). Он будет здесь D:\Типовые конфигурации\1SBBDemo\log.tx.
Будет выполнено сохранение данных (SaveData=1) в файл arch.zip (SaveToFile="D:\Типовые конфигурации\1SBBDemo\arch.zip"). После выполения работы - конфигуратор будет закрыт (Quit=1). Информационная база хранится в D:\Типовые конфигурации\1SBBDemo\. Файл пакетного режима харанится в папке базы и называется paket.txt.
Пакетный режим является мощным инструментом. Чаще всего используется для создания архивных копий. Проблема только в том, что он архив делается всегда под одним именем. И чтобы не затирать старые архивы, требуется некоторая изворотливость с конфигурационным файлом пакетного режима. Но здесь огромное поле для фантазии, по этому предоставляю Вам возможность фантазировать.
Журнал регистрации относится к информационной базе и служит для сохранения информации о событиях, возникающих в процессе работы пользователей с данной информационной базой .
Эта информация может быть важной с организационной точки зрения , но не является необходимой для функционирования прикладного решения на базе 1 С : Предприятия . Журналы регистрации хранятся в специальных каталогах 1Cv8Log по одному на каждую информационную базу . Каждый каталог содержит файл 1Cv8.elf и несколько файлов с именами вида yyyyMMddhhmmss.log, где yyyy - номер года , MM - номер месяца , dd - номер дня в месяце, hh - номер часа , mm - номер минуты , ss - номер секунды . Например, " 20070525200000.log ". Файл 1Cv8.elf содержит общую информацию журнала регистрации . Каждый файл yyyyMMddhhmmss.log содержит фрагмент журнала регистрации за соответствующий период . Имя файла представляет момент времени начала периода . Длина периода определяется настройкой журнала регистрации " Разделять хранение журнала по периодам ". В файловом варианте информационной базы журнал регистрации располагается в каталоге информационной базы , в том же, что и файл самой информационной базы . Например , если информационная база хранится в файле C:/EnterpriseInfoBase/1Cv8.1CD, то журнал регистрации будет находиться в каталоге C:/EnterpriseInfoBase/1Cv8log. В клиент- серверном варианте информационной базы журнал регистрации располагается в подкаталоге рабочего каталога кластера . Имя подкаталога определяется идентификатором информационной базы . Например : " C:/Program
Files/1cv81/server/reg_1541/fb9d9cc4 - ccd0 -4be7 - 87e8 - c5182945291e/1Cv8Log". Подробно о рабочем каталоге центрального сервера и кластера можно прочитать в разделе "Хранение настроек кластера серверов 1С : Предприятия 8.1".