1С8:борьба - личный опыт работы с платформой 1с8

Публикация № 123132 30.03.12

Приемы и методы разработки - Механизмы платформы 1С

Мой личный опыт работы с платформой 1С8. Заметки, которые я делал несколько лет при работе с 1с8. Полезные советы. Планирую обновлять.

Личный опыт Гения 1С борьбы с платформой 1С8

ВВЕДЕНИЕ

РАЗДЕЛ: ПРОГРАММИРОВАНИЕ

    ПЛАТФОРМА: ЯЗЫК 1С

    ПЛАТФОРМА: МАТЕМАТИКА В 1С

        Хеши, MD5

        Случайные числа

    ПЛАТФОРМА: КОЛЛЕКЦИИ

    ПЛАТФОРМА: ПРИКЛАДНЫЕ ОБЪЕКТЫ

        Работа функции «Принадлежит элементу»

    Документы

        Мягкое перепроведение документов

    РЕГЛАМЕНТНЫЕ ЗАДАНИЯ

        Запуск внешних отчетов по расписанию

РАЗДЕЛ: ФОРМЫ 1С81

    ФОРМЫ 1С81: ЭЛЕМЕНТЫ УПРАВЛЕНИЯ

        Табличное поле

        Подсветка текущей строки табличного поля

        Иерархический просмотр списков в табличном поле

РАЗДЕЛ: ОТЧЕТЫ

    ОТЧЕТЫ: РАБОТА С МАКЕТАМИ

        Печать прозрачных картинок

    ОТЧЕТЫ: ПОСТРОИТЕЛЬ ОТЧЕТА

        Обработка макета построителя отчета перед выводом

    ОТЧЕТЫ: СИСТЕМА КОМПОНОВКИ ДАННЫХ (СКД)

        Программная обработка настроек СКД

        Настройка группировок настройки СКД

        Поиск и установка параметров настройки СКД

        Отчеты, которые сложно написать на СКД

        Отчеты, где ресурсы расположены выше группировок

РАЗДЕЛ: ТОРГОВОЕ ОБОРУДОВАНИЕ

    ТО: РАБОТА СО ШТРИХ-КОДАМИ

        Последовательная генерация штрих-кодов

РАЗДЕЛ: БЕЗОПАСНОСТЬ

    БЕЗОПАСНОСТЬ: ПРАВА ДОСТУПА

        Запрет интерактивной работы

РАЗДЕЛ: ОБМЕНЫ

    ОБМЕНЫ: ПЛАНЫ ОБМЕНА

        Объекты планов обмена

    ОБМЕНЫ: ОБМЕНЫ ДАННЫМИ

        Недопустимые символы в плане обмена

    ОБМЕНЫ: РАСПРЕДЕЛЕННЫЕ ИНФОРМАЦИОННЫЕ БАЗЫ (РИБ)

        Создание начального образа

    ОБМЕНЫ: ОБМЕН ПО ПРАВИЛАМ

        Предопределенные элементы в обеих базах

РАЗДЕЛ: ИНТЕГРАЦИЯ

    ИНТЕГРАЦИЯ: РАБОТА С 1С ЧЕРЕЗ COM И OLE

        Неявно описанные методы COM и OLE

        Общие сведения о Com-соединениях

        Шаблон Com-соединения

        Выполнение произвольного кода 1С в Com-соединении

    ИНТЕГРАЦИЯ: ВНЕШНИЕ КОМПОНЕНТЫ

        Использование функции ПодключитьВнешнююКомпоненту

    ИНТЕГРАЦИЯ: ПРОЧЕЕ

РАЗДЕЛ: АДМИНИСТРИРОВАНИЕ

    АДМИНИСТРИРОВАНИЕ 1С

        Ошибки SDBL

        Работа из командной строки

        Запуск 1С из командной строки

        Названия таблиц и полей в физической базе 1С

        Надежность файловой версии

        Надежность SQL версии

        Portable установка 1C

        Взаимодействие платформы с системой безопасности Windows

        Прекращение сеансов файловой версии

        Быстродействие файловой системы при работе нескольких пользователей

        Советы по обновлению конфигурации

    СЕРВЕР: 1С-ПРЕДПРИЯТИЯ

        Перезапуск сервера 1С

    СЕРВЕР: MICROSOFT SQL SERVER ДЛЯ 1С

        SQL-почта для уведомлений

        Планирование заданий средствами SQL-сервера

        Архивирование баз средствами SQL сервера

        Периодическая копия базы

        Восстановление копии базы из архива SQL

РАЗДЕЛ: МЕНЕДЖМЕНТ

    ВЕДЕНИЕ РАЗРАБОТКИ ПРОГРАММИСТОМ 1С8

        Рекомендации по хранилищу конфигурации

    ЛИЦЕНЗИРОВАНИЕ 1С

        Что необходимо делать при покупке 1С

        Восстановление утерянных регистрационных карточек

        Стоимость перехода с 1с81 на 1с82

= ОБНОВЛЕНИЯ =

 

Введение

Я – программист 1С Осипов Сергей Александрович, 1975 года рождения. В Рунете известен под никами «Гений 1С» и «Фиксин».

С 1999 года я начал заниматься 1С. Сначала 7.7, а в январе 2005 года – 8.0.

Эту книгу я начал писать в мае 2008 года, имея за плечами почти десять лет работы с 1С.

За это время накопил огромное количество опыта не только по 1С, но и по алгоритмам, используемым в учете, а теперь вот решил поделиться этими знаниями.

Книга посвящена 1С версии 8.*, т.к. 1С 7.7 меня уже не интересует.

Книга – не учебник, а сборник рецептов.

В разделе обновления будет выводиться список обновлений, чтобы вы могли ориентироваться в этом большом мануале.

В электронном виде книга распространяется свободно, а в печатном – на общих основаниях закона об авторском праве.

Просьба по возможности указывать ссылку на источник или на авторство.

В книге также использованы работы других авторов, надеюсь, их использование пойдет на пользу делу – изучению и использованию 1С.

Буду благодарен всем за помощь в написании книги.

РАЗДЕЛ: ПРОГРАММИРОВАНИЕ

Платформа: Язык 1С

Пример использования оператора безусловного перехода:

~Метка:
Перейти ~Метка;

Безусловный переход не может вести внутрь условия.

Платформа: Математика в 1С

Хеши, MD5

В 1С нет встроенной функции генерации MD5, приходится использовать сторонние алгоритмы. Есть медленные функции вычисления MD5, написанные на 1С, есть быстрые, но использующие COM-компоненты. Есть быстрые функции вычиления хэшей на 1С, но это не MD5.

Случайные числа

Для генерации случайных чисел можно использовать GUID, т.к. при его генерации используются случайные числа.

В 1с81 появилась функция генерации случайных чисел.

Платформа: Коллекции

Метод НайтиСтроки таблицы значений не всегда возвращает строки в том порядке, в котором он был в исходной таблице.

Платформа: Прикладные объекты

Работа функции «Принадлежит элементу»

Сам справочник не принадлежит себе, что не очевидно прописано в синтакс-помощнике:

   С = Справочники.Номенклатура.ИмяПредопределенного;
   Сообщить(С.ПринадлежитЭлементу(С.Родитель));

Документы

Мягкое перепроведение документов

Можно немного уменьшить нагрузку на базу при проведении документа, особенно если документ нужно перепровести только по нескольким регистрам, следующим способом:

  1. Получить объект по ссылке документа
  2. Вызвать его метод «ОбработкаПроведения», при этом метод должен быть описан в модуле документа с ключевым словом Экспорт, чтобы можно было вызвать этот метод у документа.
  3. Сравнить коллекцию движений документа Движения по требуемым регистрам с движениями документа по регистрам в базе. Записать новые движения только в том случае, если они отличаются от старых движений.

 

Разрешить проводить помеченные на удаление документы

По непонятным причинам платформа запрещает проводить помеченные на удаление объекты.

При проведении отложенных движений этот момент разработчиками типовых конфигураций не учитывается, и такие документы не проводятся.

Лечится кодом, который можно вставить в глобальную подписку ПередЗаписью документов:

//Осипов
Если РежимЗаписи = РежимЗаписиДокумента.Проведение И Источник.ПометкаУдаления Тогда
    Источник.ПометкаУдаления = ложь;
КонецЕсли;

Платформа: Системные функции

Как отключить пользователя базы данных, не удаляя

Для этого достаточно убрать у пользователя оба вида аутентификации. Пользователь перестанет быть видимым в списке выбора и под ним нельзя будет зайти в 1С:

Процедура ОтключитьПользователя(ПользовательИБ) Экспорт
    ПользовательИБ.АутентификацияОС = ложь;
    ПользовательИБ.АутентификацияСтандартная = ложь;
    ПользовательИБ.Записать(); //Осипов
КонецПроцедуры

Регламентные задания

Запуск внешних отчетов по расписанию

Платформа 1с81 не умеет запускать внешние отчеты и сохранять таблицы в Excel. Это умеет делать платформа 1с82.

Но чтобы получить эту возможность в 1с81, можно в COM-соединении создавать OLE-подключение к 1С81 и в нем уже выполнять нужный код.

Пример:

Функция ВыполнитьНаКлиенте(Метод) Экспорт
    
    СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
    ПарольРобота = Справочники.САПКонстанты.ПарольРобота.Значение;
    СтрокаСоединения = СтрокаСоединения + "Usr=""robot"";Pwd=""" + ПарольРобота + """"; //Важно чтобы не было две подряд идущих ;;
    
    ЗаписьЖурналаРегистрации("Отладка", , , , "Соединение для выполнения на клиенте, начало попытки: " + СтрокаСоединения);
    
    Соединение = Новый ComОбъект("V81.Application");
    Соединение.Connect(СтрокаСоединения);
    
    ЗаписьЖурналаРегистрации("Отладка", , , , "Соединение для выполнения на клиенте, попытка прошла: " + СтрокаСоединения);
    
    ЗаписьЖурналаРегистрации("Отладка", , , , "Выполнение метода, начало: " + Метод);
    
    Выполнить "Соединение." + Метод;
    
    ЗаписьЖурналаРегистрации("Отладка", , , , "Выполнение метода, завершено: " + Метод);
    
    Соединение.ЗавершитьРаботуСистемы();
    ЗаписьЖурналаРегистрации("Отладка", , , , "Завершена работа системы ");
    Соединение = 0;
    
КонецФункции

Процедура РассылкаОтчетаПоПродавцам() Экспорт
    ВыполнитьНаКлиенте("_РегламентныеЗадания.РассылкаОтчетаПоПродавцам_Код()");
КонецПроцедуры

 

РАЗДЕЛ: ФОРМЫ 1С81

Формы 1С81: Приёмы

Стандартная функция обработки оповещений

В 1С8 есть возможность рассылки оповещений формам.

У меня был случай, когда обработка разворачивалась из хранилища, постоянно из разного временного файла, поэтому стандартная 1С-проверка на открытость с помощью КлючУникальности не работал. Чтобы проверить, открыта форма или нет, использовал оповещения, причем завел одну стандартную глобальную процедуру на все последующие применения оповещений.

В модуле приложения добавляю процедуру:

Процедура глОбработкаОповещения(ИмяСобытия, Параметр, Источник) Экспорт
    Попытка
        Источник.ОбработкаОповещения(ИмяСобытия, Параметр, Источник);
    Исключение
    КонецПопытки;
КонецПроцедуры

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

В самой форме для проверки открытости использую код:

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)    
    Оповестить("ПроверитьОткрытаЛиМояФормаХХХ", Отказ, ЭтаФорма);    
    Если НЕ Отказ Тогда        
        Попытка //В попытке, т.к. в модуле приложения может и не быть такой функции, для универсальности            
            ПодключитьОбработчикОповещения("глОбработкаОповещения");            
        Исключение            
        КонецПопытки;        
    КонецЕсли;    
КонецПроцедуры


Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Экспорт    
    Если ИмяСобытия = " ПроверитьОткрытаЛиМояФормаХХХ " Тогда        
        Если Открыта() Тогда //Иногда форма может быть закрыта, но висеть в памяти, тогда все-же открываем новый экземпляр            
            Параметр = истина; //Если открыта тогда            
            Активизировать();            
        КонецЕсли;        
    КонецЕсли;    
КонецПроцедуры

 

Формы 1С81: Элементы управления

Табличное поле

Подсветка текущей строки табличного поля

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

Процедура СправочникСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    
    Если ДанныеСтроки = Неопределено ИЛИ ЭлементыФормы.СправочникСписок.ТекущаяСтрока = ДанныеСтроки.Ссылка Тогда
        ЦветФона = WebЦвета.СеребристоСерый;
        ОформлениеСтроки.Ячейки.Наименование.ЦветФона = ЦветФона;
        ОформлениеСтроки.Ячейки.Код.ЦветФона = ЦветФона;
        ОформлениеСтроки.Ячейки.Картинка.ЦветФона = ЦветФона;
    КонецЕсли;
    
КонецПроцедуры


Процедура СправочникСписокПриАктивизацииСтроки(Элемент)
    Обновить();
КонецПроцедуры

Иерархический просмотр списков в табличном поле

Если в списке отображается дерево справочника, то управлять иерархическим просмотром нужно с использованием свойств «Дерево» и «Иерархический просмотр».

Допустим, у нас есть кнопка «Дерево» в панели «Командная панель».

Тогда код будет выглядеть следующим образом:

Процедура КоманднаяПанельДерево(Кнопка)
    Если ЭлементыФормы.ТаблицаНоменклатуры.ИерархическийПросмотр Тогда
        ЭлементыФормы.ТаблицаНоменклатуры.Дерево = ложь;
    Иначе
        ЭлементыФормы.ТаблицаНоменклатуры.Дерево = истина;
    КонецЕсли;
    ЭлементыФормы.ТаблицаНоменклатуры.ИерархическийПросмотр = НЕ ЭлементыФормы.ТаблицаНоменклатуры.ИерархическийПросмотр;
КонецПроцедуры

Процедура ОбновлениеОтображения()
    ЭлементыФормы.КоманднаяПанель.Кнопки.Дерево.Пометка = ЭлементыФормы.ТаблицаНоменклатуры.ИерархическийПросмотр;
КонецПроцедуры

РАЗДЕЛ: УПРАВЛЯЕМЫЕ ФОРМЫ

Отладка

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

Отладка на сервере возможна только если сервер запущен с ключом -debug.

Если нет возможности изменить ключ запуска сервера, можно выгрузить базу в файловый вариант и отлаживать там, если размеры базы позволяют.

В типовых на УФ обычно отчеты выполняются через фоновые задания, чтобы отключить подобное поведение, нужно установить режим отладки, тогда отчеты будут запускаться через вызов процедуры модуля. Для этого в конфигураторе указать в Сервис - Параметры - Основные - Параметр запуска указать строку содержащую текст "РежимОтладки" (без кавычек) и запускать 1С предприятие из конфигуратора. Можно указывать этот ключ и в строке запуска.

В типовых код по проверке параметра запуска выглядит так:

ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска")

Точку останова можно ставить напрямую в конце процедуры РаботаВБезопасномРежиме. ВыполнитьМетодКонфигурации на операторе Выполнить.

Интерфейсы в типовых конфигурациях

Интерфейс  Команда - Обработка Панель

Используется в УТ 11.

В разделе "Открыть командный интерфейс" содержится верхнее меню с настройками видимости по ролям:

 

В нем содержатся общие команды с названиями вида " ДополнительныеОтчетыРегламентированныйУчет".

 

В модуле команды содержится однообразный код:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)    
    
    ДополнительныеОтчетыИОбработкиКлиент.ОткрытьФормуКомандДополнительныхОтчетовИОбработок(
        ПараметрКоманды,
        ПараметрыВыполненияКоманды,
        ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка(),
        "РегламентированныйУчет");    
    
КонецПроцедуры

Код вызывает обработку с именем вида ПанельСправочниковРегламентированныйУчет:

В форме на управляемых элементах нарисовано меню:

 

Нюансы типовых конфигураций

Добавление нового объекта метаданных в типовых

После добавления нового регистра/отчета в типовых (УТ11) нужно запускать 1С с ключом ЗапуститьОбновлениеИнформационнойБазы, иначе будет ругаться, что не выполнено обновление метаданных в режиме 1С:Предприятия.

Как запустить фоновое задание без изменения конфигурации в типовых

В типовых есть функция ДополнительныеОтчетыИОбработки.ВыполнитьКоманду. Её можно использовать для обработчика фонового задания, чтобы выполнить свою обработку, помещенную в справочник внешних обработок. Можно смотреть также ДлительныеОперации.ЗапуститьВФоне.

 

Программная обработка управляемых форм

Добавление нового реквизита в форму

Новый добавляемый реквизит - это реквизит формы, он отличается от реквизитов объекта.

Т.е. если мы добавляем реквизит в форму справочника, его путь будет "ИмяРеквизита", в отличии от реквизита Наименование, например, путь которого "Объект.Наименование".

 

Реквизит добавлять в событии ПриСозданииНаСервере. В примере создается реквизит и к нему привязывается флажок.

Обратите внимание, путь к данным без приставки "Объект.":

УстановитьДействие("ПередЗаписью", "_ПередЗаписьюНаКлиенте");
НовыеРеквизиты = Новый Массив();
НовыйРеквизит = Новый РеквизитФормы("_РазрешитьРасхождениеНаименованияИПолногоНаименования", Новый ОписаниеТипов("Булево"), , "Разр.расх.имен", ложь);
НовыеРеквизиты.Добавить(НовыйРеквизит);
ИзменитьРеквизиты(НовыеРеквизиты);

ПередЭлементом = Элементы.Родитель;
Элемент = Элементы.Вставить("_РазрешитьРасхождениеНаименованияИПолногоНаименования", Тип("ПолеФормы"), ПередЭлементом.Родитель, ПередЭлементом);
Элемент.Вид = ВидПоляФормы.ПолеФлажка;
Элемент.Заголовок = "Разр.расх.имен";
Элемент.ПутьКДанным = "_РазрешитьРасхождениеНаименованияИПолногоНаименования";
Элемент.ЦветТекстаЗаголовка = WebЦвета.БледноКрасноФиолетовый;

Далее, в форме к реквизиту можно обращаться так:

&НаКлиенте
Процедура _ПередЗаписьюНаКлиенте(Отказ, ПараметрыЗаписи)    
    Если ЭтаФорма._РазрешитьРасхождениеНаименованияИПолногоНаименования <> истина И Объект.Наименование <> Объект.НаименованиеПолное Тогда        
        Отказ = истина;        
        Сообщить("Наименование и полное наименование расходятся, чтобы можно было записать объект, установите галочку ""Разрешить расхождение имен""");        
    КонецЕсли;    
КонецПроцедуры

РАЗДЕЛ: Запросы

РАЗДЕЛ: ОТЧЕТЫ

Отчеты: Работа с макетами

Печать прозрачных картинок

Если на принтере прозрачная картинка печатается, как не прозрачная, то проблема обычно в драйвере принтера. Проверьте – попробуйте распечатать на любой виртуальный принтер.

Отчеты: Построитель отчета

Обработка макета построителя отчета перед выводом

К сожалению, у построителя отчета нет стандартного способа для настройки макета вывода отчета. Можно указать построителю свой макет, но обычно построитель отчета может генерировать отчеты с самыми разнообразными группировками, поэтому нельзя подготовить заранее макет на любой вариант отчета.

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

Однако не следует забывать, что новый макет будет использоваться всегда, поэтому перед выполнением отчета нужно сбросить макет.

При разработке удобно методом «Показать» перед выводом посмотреть на автоматически сформированный макет, чтобы увидеть, как называются параметры и заголовки.

Общая схема подхода такая:

ПостроительОтчетаОтчет.Макет = Неопределено; //Сбрасываем макет
ПостроительОтчетаОтчет.Выполнить(); //Формируем авто-макет
ТекМакет = ПостроительОтчетаОтчет.Макет; //Обрабатываем макет отчета
...
ПостроительОтчетаОтчет.Макет.Показать(); //Смотрим макет во время разработки
ПостроительОтчетаОтчет.Макет = ТекМакет; //Устанавливаем обработанный макет

Рассмотрим конкретные способы модификации макета.

В следующем примере показан цикл, который ищет в макете ячейки, содержащие целиком текст «Дата». Если этот текст содержится в заголовке (вид заполнения ячейки – текст), тогда меняет заголовок шапки. Если текст содержится в параметре (вид заполнения ячейки – параметр), тогда меняет ширину колонки и формат даты:

Область = Неопределено;
Пока (Истина) Цикл    
    Область = ТекМакет.НайтиТекст("Дата", Область, , , истина);    
    Если Область = Неопределено Тогда        
        Прервать;        
    КонецЕсли;    
    Если Область.Заполнение = ТипЗаполненияОбластиТабличногоДокумента.Параметр Тогда        
        Область.Формат = "ДФ=dd.MM.yyyy";        
        Область.ШиринаКолонки = 10;        
    КонецЕсли;    
КонецЦикла;

Параметр «истина» в методе «НайтиТекст» указывает, что нужно искать текст целиком.

Бесконечный цикл – удобный инструмент для обработки всех найденных областей по указанному условию.

Отчеты: Система компоновки данных (СКД)

Программная обработка настроек СКД

В разделе описывается, как программно обрабатывать настройки СКД.

Настройка группировок настройки СКД

Для поиска группировок можно написать рекурсивный обработчик, который перебирает структуру настроек, и ищет нужную группировку. Группировки можно промаркировать именами и искать по именам.

Если точно известно, в каком месте структуры находятся нужные поля, можно использовать непосредственное указание по индексу, например:

Поле = НайтиВКоллекцииПоРеквизиту(КомпоновщикНастроек.Настройки.Структура.Получить(0).Структура.Получить(0).ПоляГруппировки.Элементы, "Поле", Новый ПолеКомпоновкиДанных("ХарактеристикаНоменклатуры"))

Поиск и установка параметров настройки СКД

В примере ищется параметр с именем «Склад» и, если найден, устанавливаетсяв значение, указанное в переменной ВыбСклад. При этом устанавливается галочка использования параметра:

ЗначениеПараметра = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Склад"));    
Если ЗначениеПараметра <> Неопределено Тогда        
    ЗначениеПараметра.Значение = ВыбСклад;        
    ЗначениеПараметра.Использование = Истина;        
КонецЕсли;

Поля пустого элемента в СКД

Если в отборе или группировке извлекается поле из элемента, значение которого равно пустая ссылка, например, Номенклатура.ОсновнойПоставщик, то результатом будет NULL, а не пустая ссылка.

Чтобы избежать этого, я придумал только один способ: завести пустую ссылку нужного типа, в нашем примере пустой товар с заранее известным кодом, например «ПЭ-ПУЭЛЕМЕН».

Далее в запросе писать:

ВЫБОР КОГДА Номенклатура  = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) Тогда &ПустаяНоменклатура ИНАЧЕ Номенклатура КОНЕЦ

А в параметрах добавить значение:

Параметры. Найти(Новый ПараметрКомпоновки(«ПустаяНоменклатура»).Значение = Справочники.Номенклатура.НайтиПоКоду(«ПЭ-ПУЭЛЕМЕН»);

 

В таком случае пользователь сможет делать отбор по полям элементов, которые могут содержать пустые значения.

Если не позаботиться о такой защите, то в группировке будут как минимум два значения – одно пустое, другое NULL.

А в отборе сравнение с NULL никогда не даст истину, ни в случае равенства, ни в случае неравенства.

Отчеты, которые сложно написать на СКД

На СКД можно написать практически 90% всех необходимых на практике отчетов, но некоторые отчеты довольно сложно ложатся на структуру СКД.

Отчеты, где ресурсы расположены выше группировок

Такие отчеты удобны, чтобы сравнивать значение одного ресурса (количество, сумма) по разным измерениям – по складам, периодам и т.п.

РАЗДЕЛ: ТОРГОВОЕ ОБОРУДОВАНИЕ

ТО: Настройки сканеров штрих-кода

Программирование сканеров заключается в считывании специальных служебных штрих-кодов, которые изменяют настройки сканеров. Обычно сначала считывается штрих-код входа в режим, затем – команды программирования, затем – команда подтверждения или отмены.

13-разрядные EAN коды, начинающиеся с нуля

В США и Канаде вместо EAN используется штрих-код UPC, полностью совместимый с EAN. Длина штрих-кода 13 символов. Последний – контрольный.

Однако в стандарте UPC штрих-кода, начинающиеся на ноль, читаются как 12-разрядные, первый ноль отбрасывается. Чтобы такие штрих-кода считывались нормально, нужно перепрограммировать сканер, включить опцию, которая называется примерно так: «Преоразовывать UPC в EAN».

Например, для сканера Chipher Lab 1560/1562 коды программирования выглядят так:

 

Восприятие CODE-128

 

Не все сканеры умеют читать длинные коды CODE-128-B, которыми часто записываются серийные номера и IMEI. Но даже если сканер умеет считывать подобные коды, иногда их чтение по умолчанию отключено и его требуется включить программированием сканера. Искать опцию вида «Активация штрих-кода типа CODE-128»

Например, для сканера Chipher Lab 1560/1562 коды программирования выглядят так:

 

Чтение длинных 19-20 разрядных штрих-кодов

 

Не все сканеры умеют читать очень длинные 19-20 разрядные штрих-кода. Обычно, если сканер имеет тонкий луч, то такие кода сканируются. Если луч сканера достаточно широкий, то может и не считывать.

Если штрих-код не читается сканером

Можно скачать на смартфон андроид-приложение для сканирования штрих-кодов и попробовать разобраться, какой тип штрих-кода не воспринимается сканером. Однако эти приложения тоже не воспринимают все штрих-кода, например длинные 19-20 разрядные штрих-кода не опознают.

ТО: Работа со штрих-кодами

Последовательная генерация штрих-кодов

Если нужно последовательно генерировать штрих-код с заданным префиксом, можно использовать подобный код, на вход которого подается Префикс. В примере код заносится в наименование справочника характеристики номенклатуры, соответственно и запрос ведется по наименованиям:

Если НЕ ЗначениеЗаполнено(Префикс) Тогда
    Предупреждение("Не заполнен префик, обратитесь к разрабочкику!");
    Возврат;
КонецЕсли;


З = Новый Запрос(
        "ВЫБРАТЬ        
        |      МАКСИМУМ(ХарактеристикиНоменклатуры.Наименование) КАК Наименование        
        |ИЗ        
        |      Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры        
        |ГДЕ        
        |      ХарактеристикиНоменклатуры.Наименование ПОДОБНО &Маска");
З.УстановитьПараметр("Маска", бф.ДополнитьСтрокуСимволами(Префикс, 13, "_"));
МаксЧисло = 0;
Выборка = З.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
    ТекШК = Выборка.Наименование;
    Если ТекШК <> NULL Тогда
        //Обрезаем правый символ
        МаксСтрока = Лев(ТекШк, СтрДлина(ТекШк) - 1);
        //Обрезаем префикс
        МаксСтрока = Сред(МаксСтрока, СтрДлина(Префикс) + 1);
        Попытка
            МаксЧисло = Число(МаксСтрока);
        Исключение
            Предупреждение("Не получилось выразить в число максимальный штрих-код в системе: " + ТекШК);
            Возврат;
        КонецПопытки;
    КонецЕсли;
КонецЕсли;


МаксЧисло = МаксЧисло + 1;


ЧислоСтрокой = Формат(МаксЧисло, "ЧДЦ=0; ЧГ=");
Основа = Префикс + бф.ДополнитьСтрокуСимволами(ЧислоСтрокой, 12 - СтрДлина(Префикс), "0", ложь);
ШтрихКод = бф.СформироватьEAN13(Основа);


Наименование = ШтрихКод;

Используются функции из библиотеки функций:

Функция ДополнитьСтрокуСимволами(С, Длина, Символ, Справа = истина) Экспорт    
//Назначение: Дополняет строку С символами Символ до нужной длины Длина слева или справа, в зависимости от флага Справа    
Функция СформироватьEAN13(Основа) Экспорт        
//Назначение: формирует правильный EAN13 по первым 12 символам

Например, с префиксом 225 получаются штрих-кода: 2250000000014, 2250000000021, 2250000000038, …

РАЗДЕЛ: БЕЗОПАСНОСТЬ

Рассмотрены вопросы прав доступа, протоколирования и прочие.

Безопасность: Права доступа

Запрет интерактивной работы

Можно завести пользователя, для которого будет невозможно работать интерактивно. Очень удобно использовать для различных роботов. Как только задание при входе отрабатывает и пользователь выходит на интерактивную работу, сеанс 1с завершается.

Для этого достаточно подключить обработчик ожидания и в нем

Процедура ОбработчикОжиданияПроверкаРазрешенияИнтерактивнойРаботы() Экспорт    
    Если ИмяПользователя() = "Автообмен" Тогда        
        ЗавершитьРаботуСистемы(ложь, ложь);        
    КонецЕсли    
КонецПроцедуры


//При начале работы приложения
Если ИмяПользователя() = "Автообмен" Тогда    
    ПодключитьОбработчикОжидания("ОбработчикОжиданияПроверкаРазрешенияИнтерактивнойРаботы", 1);    
КонецЕсли;

РАЗДЕЛ: ОБМЕНЫ

Рассмотрены вопросы обмена данными между 1С и другими системами.

Обмены: Планы обмена

Объекты планов обмена

Объекты плана обмена – довольно странные сущности. Они имеют ссылку, но эта ссылка действительна только в пределах одной базы. Если эта ссылка переедет в другую базу, то она будет ссылаться уже на другой объект. Поэтому для ссылки на конкретный объект плана обмена можно использовать только код объекта, благо, что он уникальный.

Объекты плана обмена не регистрируются в таблицах изменений планов обмена.

Не рекомендуется в объектах плана обмена добавлять реквизиты, которые  должны хранить различные значения в различных узлах УРБД. Эти реквизиты в периферийных базах при получении первого же файла автообмена из центра будут заменены реквизитами центральной базы. Для хранения таких реквизитов рекомендуется использовать регистр сведений с измерением код (не ссылка) плана обмена.

В файле автообмена из центра содержится секция nodes, где перечислен центральный узел и узел-получатель со своими реквизитами. В файле автообмена в центр такой секции нет, т.е. изменения в объекте плана обмена на периферии игнорируются.

В связи с этим непонятно, почему реквизиты плана обмена доступны на редактирование на филиале, если они всегда затираются реквизитами из центра.

Обмены: Обмены данными

Недопустимые символы в плане обмена

Если обмен не происходит из-за ошибки вида «Текст XML содержит недопустимые символы в позиции …», то значит в базе данных содержатся данные, которые не могут быть выгружены в XML.

Найти такие данные может типовая обработка «ВыгрузкаЗагрузкаДанныхXML». Она также удаляет недопустимые символы.

Однако есть один нюанс – она не может удалить недопустимые символы из записи по удалению объекта, особенно если это удаление записи регистра сведений.

Т.е. она показывает найденную пустую запись, но очистить недопустимые символы не может.

Справиться в этой ситуации поможет или полная очистка регистрации по объекту, содержащему недопустимые символы, или более мягкий способ – обработка «ПросмотрЗарегистрированныхИзменений fixin», которая показывает ключи всех записей, зарегистрированных в плане обмена. Можно найти нужную запись и удалить:

 

Типовая обработка по просмотру зарегистрированных изменений показывает только количество записей, нужно заходить в каждую запись и искать нужную. Это долго.

 

 

Обмены: Распределенные информационные базы (РИБ)

 

РИБ – это распределенные информационные базы, типовой механизм платформы 1с8 для организации баз данных с одинаковой конфигурацией, обменивающихся между собой информацией.

Создание начального образа

При создании начального образа выгружаются все объекты, для которых включена авторегистрация. Поэтому, если объект может мигрировать или не мигрировать в зависимости от реквизитом, нужно отключать для него авторегистрацию в плане обмена.

 

Как отдельно загрузить данные из файл обмена УРБД

Иногда требуется вручную загрузить данные из файла автообмена. Это требуется, если, загрузка не удается и хочется отложить ее на потом, или загрузка происходит с ошибкой и нужно загрузить хотя бы те данные, что грузятся и понять, в чем причина ошибки.

Файл обмена можно загрузить обработкой «Выгрузка-загрузка данных XML».

Для этого нужно содержимое тега V8DE:Data (используемого в РИБ) перенести внутрь тега внутрь тега V8Exch:Data  (используемого в файле выгрузки-загрузки) в файле вида:

<?xml version="1.0" encoding="UTF-8"?>
<V8Exch:_1CV8DtUD xmlns:V8Exch="http://www.1c.ru/V8/1CV8DtUD/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:v8="http://v8.1c.ru/data">
       <V8Exch:Data>
     
       </V8Exch:Data>
</V8Exch:_1CV8DtUD>

Файл должен быть в кодировке UTF-8.

Обмены: Обмен по правилам

Предопределенные элементы в обеих базах

Если требуются предопределенные элементы справочника с одинаковым названием в обеих базах обмена, нужно сначала завести эти элементы в обеих базах, затем сделать обмен.

В результате в обеих базах появятся по два экземпляра каждого элемента. Один будет предопределенным, другой – из другой базы.

Далее для каждого предопределенного элемента делаем (можно одновременно для всех):

1.      В одной из баз переименовываем не предопределенный элемент в элемент с припиской «(не использовать)» и помечаем его на удаление.

2.      Выполняем замену ссылок на помеченный на удаление объект на непомеченный объект:

3.      Делаем обмен между базами. В другой базе после обмена элементы выглядят так:

4.      Если в другой базе есть пары, заменяем их аналогично, заменой ссылок.

При замене заменятся ссылки в регистре соответствий объектов обмена и все будет работать корректно. 

РАЗДЕЛ: КОНФИГУРАЦИЯ КОНВЕРТАЦИЯ ДАННЫХ

Если нужно добавить реквизит в обмен между двумя базами

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

Но иногда хотелось бы это сделать вручную. Не получится, потому что в КД нельзя переименовывать свойство объекта в дереве метаданных. Т.е. не получится ручками задать имя нового реквизита.

РАЗДЕЛ: ИНТЕГРАЦИЯ

Рассмотрены вопросы интеграции 1С с другими приложениями и системами.

Интеграция: Работа с 1С через COM и OLE

Работа с 1С по COM и OLE происходит одинаковым образом.

Неявно описанные методы COM и OLE

В документации явно не прописаны некоторые методы COM и OLE.

Для работы большинства методов у пользователя, под которым подключается COM-соединение, должны быть полные права.

Например, чтобы создать в подключении новый объект, аналогично оператору Новый ИмяТипа(А1, А2), мы должны писать:

Подключение.NewObject("ИмяТипа", А1, А2);

Вычислить произвольное выражение можно с помощью функции Eval:

Подключение.Eval("1+2");

 

Общие сведения о Com-соединениях

Com-соединение устанавливается быстрее, чем OLE-соединение.

Для того, чтобы Com-соединение было установлено, нужно чтобы 1С была штатно проинсталлирована на компьютере. Если вы установили portable-версию 1С, то соответствующий объект не будет установлен.

Шаблон Com-соединения

В примере изображен рабочий образец кода Com-соединения, написанный на java-script. Он подключается к базе, проверяет состояние изменения конфигурации. Если конфигурация изменена, то в дальнейшем может следовать код по отключению сеансов и завершения работы пользователей.

//Try to connect to v81 base
var V8 = new ActiveXObject("V81.COMConnector"); //для 1с80 использовать V80.COMConnector
try {
  
       ConnectionString = 'File="C:\\1c\\Catalog";Usr="Admin";Pwd="123456"'; //Для серверной: Srvr="server";Ref="1cBase"
       var Base = V8.Connect(ConnectionString);
       var isConfigUpdate = Base.КонфигурацияИзменена();
       WScript.Echo('Состояние флага изменения конфигурации: ' + isConfigUpdate);   

} catch(e){
       WScript.Echo('Не удалось создать com-соединение!' + e.description);
}

Для доступа к объектам базы можно использовать примерно следующий код:

var NewGood = Base.Справочники.Номенклатура.СоздатьЭлемент();

Выполнение произвольного кода 1С в Com-соединении

Чтобы выполнить произвольный код на языке 1С в Com-соединении, достаточно добавить в модуль внешнего соединения видимую извне (экспортируемую функцию), например, так:

Функция Run(Код) Экспорт    
    Перем Р;    
    Выполнить(Код);    
    Возврат Р;    
КонецФункции

При этом код может устанавливать значение локальной переменной Р, значение которой и будет возвращено, как значение функции.

Интеграция: Внешние компоненты

Использование функции ПодключитьВнешнююКомпоненту

Функция «ПодключитьВнешнююКомпоненту» не работает с русскими именами каталогов. А ведь обычно файлы бросаются во временный каталог, поэтому можно использовать преобразование имени файла к схеме 8.3:

FileSystemObject=Новый COMObject("Scripting.FileSystemObject");
FileName= FileSystemObject.getFile(LongPath).ShortPath; //Файл должен уже существовать к этому моменту

 

Интеграция: Прочее

Веб-сервисы рассмотрены в отдельной моей статье «Веб-сервисы в 1С».

РАЗДЕЛ: АДМИНИСТРИРОВАНИЕ

Администрирование 1С

Как узнать по файлу 1CD версию платформы

10-й байт содержит номер подверсии – 1 или 2.

Ошибки SDBL

Код ошибки

 

Примечание

Для полей, начиная с FileName, не хватило значений (pos=19)

 

Лечится путем запуска в консоли SQL сервера команд:

TRUNCATE TABLE _ConfigChangeRec
TRUNCATE TABLE _ConfigChangeRec_ExtProps

 

Возникает при обновлении конфигурации ИБ

Работа из командной строки

Параметры запуска из командной строки можно посмотреть в справке по 1С, по ключу «Командная строка».

Запуск 1С из командной строки

Для серверного варианта:

"C:\Program Files\1cv81\bin\1cv8.exe" enterprise /S "Sever" /N "username" /P "password"

Для файлового варианта:

"C:\Program Files\1cv81\bin\1cv8.exe" enterprise /F "Catalog" /N "username" /P "password"

Где:

  • Server – имя сервера 1С
  • Base – имя базы на сервере 1С
  • Catalog – каталог файловой базы
  • Enterprise – режим запуска в 1С-предприятии.

 

Названия таблиц и полей в физической базе 1С

Названия таблиц и их полей в базах РИБ могут быть различными в центральной  и периферийной базах.

Надежность файловой версии

В некоторых случаях при выключении питания или зависании компьютера теряются последние введенные данные в 1С. Иногда причиной такого поведения может быть кэширование файлов на уровне Windows или локальной сети.

Чтобы избежать проблем из-за кэширования, нужно:

1.       Для диска с базой – зайти в Свойства - Оборудование, выбрать дисковое устройство – винчестер, на котором размещен диск, зайти в его Свойства – Изменить параметры – Политика и сбросить галочку «Разрешить кэширование для этого устройства»:

2.       Отключить доступные автономно папки. Если папка каким-либо образом расшарена, т.е. доступна по локальной сети, у нее нужно выключить автономное использование. В нашем случае расшарен был целиком диск C под скрытым именем C$.


 

Надежность SQL версии

SQL-версия тоже может преподносить сюрпризы. В практике встречаются случаи, когда базу нельзя полностью восстановить из выгруженного DT файла, т.к. при загрузке в SQL версию выдается сообщение о нарушении индекса. При этом дальнейшее восстановление базы останавливается. Можно попытаться загрузить базу в файловую версию, но если одна из таблиц больше 4 Гб, ничего не получится. Поэтому главным способом профилактики подобных ситуаций является параллельное архивирование базы средствами SQL сервера и периодическое выполнение тестирования и исправления баз данных.

Portable установка 1C

1С можно установить на компьютер без инсталляции. Для этого достаточно просто скопировать папку BIN уже установленной 1С.

Необходимо только инсталлировать драйвер ключа защиты. Поэтому это не чистая portable программа, но очень похожа.

В portable режиме не доступны COM и OLE-соединения, т.к. они не прописаны в реестре.

Для того, чтобы они заработали, нужно выполнить регистрацию 1cv8.exe:

"C:\Program Files\1cv81\bin\1cv8.exe" /regserver

Предыдущий способ не всегда срабатывает, возможен вариант регистрации COM-компоненты:

regsvr32 "C:\Program Files\1cv81\bin\comcntr.dll"

В Vista/Win7 нужно выполнять эти команды под правами администратора. Но тоже не всегда срабатывает.

Взаимодействие платформы с системой безопасности Windows

Для нормальной работы XBASE (DBF-файлов) требуется доступ на создание и изменение файлов в каталоге временных файлов Windows. Узнать расположение этого каталога можно в переменных среды или через команду set temp.

Прекращение сеансов файловой версии

На одном компьютере может быть запущено несколько баз, поэтому требуется сначала определить, какой из процессов 1С относится к какой базе. Для этого можно с помощью консольной утилиты handle.exe определить список процессов, которые блокируют файл 1c8.1cd (автор идеи – Петрик Николай) и затем убить эти процессы:

Пример:

handle.exe 1cv8.1cd > C:\test.txt

Получим  test.txt:

Handle v3.42
Copyright (C) 1997-2008 Mark Russinovich
Sysinternals - www.sysinternals.com
1cv8.exe           pid: 5080    3A8: D:\Work\Клиент1\81\только конфа\1Cv8.1CD
1cv8.exe           pid: 2148    3A8: D:\Work\Клиент1\81\БП 1.6.17\1Cv8.1CD

Далее, можно распарсить этот текст и получить pid процессов, которые нужно убить.

Убить процессы можно, например, с помощью следующего кода (java-script):

//Убиваем все процессы 1С  
var Processing = new ActiveXObject("WbemScripting.SWbemLocator");
var Service = Processing.ConnectServer(".");
var Items  = new Enumerator(Service.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '1cv8.exe'"));
  
for (Items.moveFirst(); !Items.atEnd(); Items.moveNext()) {
       var Item = Items.item();
       Item.Terminate(0);
       WScript.Echo('Kill process 1s8'); //удаляем процесс 1с8
}

В примере уничтожаются все процессы 1s8. Код нужно доработать, чтобы убивать только процессы заданной базы данных.

Быстродействие файловой системы при работе нескольких пользователей

Иногда ускорить работу 1С могут следующие действия:

  • Отключить полнотекстовый поиск. Очень важно! Часто именно этот пункт оказывает решающее значение.
  • Уменьшить количество файлов в каталоге
  • Сжать базу, чтобы уменьшить ее размер.

Советы по обновлению конфигурации

Если устанавливать блокировку на сервере с датой начала и датой конца, то программа 1С сама будет предупреждать о приближающейся блокировке, а по наступлении даты начала отключит сеанс (точные периоды предупреждений не знаю).

Иногда конфигуратор при обновлении перестает отвечать на команды и как-бы зависает. Можно в диспетчере задач найти конфигуратор и выполнить для него команду «На передний план» или «Переключиться». Обычно это происходит, когда зависает диалоговое модальное окно принятия изменений в конфигурации.

Работа с программными лицензиями и аппаратными ключами защиты

Перезагрузка для восстановления лицензии

Иногда лицензия не восстанавливается, пока не перезагрузишь компьютер.

Пин-коды для базовой и проф версий

Нужно заходить в конфигурацию проф или базовой версии при запуске 1с.

Основное отличие PIN кодов платформ – 16 символьный код применяется для активации платформы базовой версии. 15 символьный активирует ПРО версию. Базовая версия платформы 1С Предприятие отличается про ПРОФ версии 1С Предприятие тем, что в базовой версии нельзя править конфигурацию. Поддерживаются только шаблонные конфигурации, скачанные с сайта 1С. Обычно такая конфигурация поставляется на установочном диске вместе с дистрибутивом. Именно по версии и типу конфигурации платформа 1С определяет режим работы, базовый или ПРО, и соотв. запрашивает пин-код определённого вида.

Сервер: 1С-предприятия

Перезапуск сервера 1С

Для перезапуска сервера 1С можно остановить службу сервера и запустить ее снова. Имеет смысл это делать по ночам, для оптимизации памяти, используемой сервером и избежания ее фрагментации.

Вот проверенный вариант:

Set WshShell = WScript.CreateObject("WScript.Shell")

'Перезапуск Агента сервера 1С:Предприятия 8.1
WshShell.Exec("sc.exe stop ""1C:Enterprise 8.1 Server Agent")
WScript.Sleep 60000  '60 seconds
WshShell.Exec("sc.exe start ""1C:Enterprise 8.1 Server Agent")
WScript.Sleep 60000 '60 seconds

'Перезапуск Агента сервера 1С:Предприятия 8.2
WshShell.Exec("sc.exe stop ""1C:Enterprise 8.2 Server Agent")
WScript.Sleep 60000  '60 seconds
WshShell.Exec("sc.exe start ""1C:Enterprise 8.2 Server Agent")
WScript.Sleep 60000 '60 seconds

Есть еще другой вариант, но он вызывает сомнения (в примере нужно заменить имя сервера aladdin на нужное):

Dim oCatalog 'As COMAdmin.COMAdminCatalog'
Dim sName 'As String'

Set oCatalog = CreateObject("COMAdmin.COMAdminCatalog","aladdin")
sName = "1CV8"
oCatalog.ShutdownApplication sName
oCatalog.StartApplication sName
Set oCatalog = Nothing

 

Вот еще один проверенный вариант на языке CMD:

rem Перезапуск 82 сервера
sc.exe stop "1C:Enterprise 8.2 Server Agent (x86-64)"
ping 127.0.0.1 -n 30 > nul
sc.exe start "1C:Enterprise 8.2 Server Agent (x86-64)"

rem Перезапуск 81 сервера
sc.exe stop "1C:Enterprise 8.1 Server Agent (x64)"
ping 127.0.0.1 -n 30 > nul
sc.exe start "1C:Enterprise 8.1 Server Agent (x64)"

rem Перезапуск SQL сервера / надо еще прописать перезапуск агента
rem sc.exe stop "MSSQLSERVER"
ping 127.0.0.1 -n 30 > nul
rem sc.exe start "MSSQLSERVER"

rem Финальная пауза, для демонстрации результата
ping 127.0.0.1 -n 30 > nul

Здесь между остановкой и запуском пауза в 30 секунд, чтобы служба успела остановиться.

Запуск сервера 1С

Полезно создать задание, которое раз в полчаса запускает сервер 1С. Это полезно, если сервер вылетит, а служба сервера сама не восстановится.

Сервер: Microsoft SQL Server для 1С

SQL-почта для уведомлений

Устаревшая компонента называется SQL-mail. Новая компонента называется Database Mail, находится по пути Управление – Компонент «Database Mail».

Отправка тестового сообщения осуществляется по ПКМ на компоненте «Database Mail» - «Отправка тестового сообщения»:

Списки рассылок для уведомлений (операторы) задаются по пути «Агент SQL Server – Операторы». Если требуется задать несколько почтовых адресов, они разделяются точкой с запятой.

В заданиях «Агент SQL сервер» - Задания получатель сообщения оператор-получатель задается в поле Электронная почта на закладке «Уведомления»:

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

Планирование заданий средствами SQL-сервера

В SQL есть встроенный планировщик заданий. Чтобы им воспользоваться, нужно:

1.      Зайти в Microsoft SQL Server Management Studio.

2.      Создать новое задание в Агент SQL Server:

 

3.      Дать заданию имя:

4.      Перейти на закладку «Шаги», добавить новый шаг:


В поле команда указываем текст команды на SQL (команда должна завершаться словом GO):

BACKUP DATABASE [UTOffice] TO  DISK = N'E:\1CBackUp\SQL_BASES\Backups\UTOffice' WITH NOFORMAT, NOINIT,  NAME = N'UTOffice', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

5.      Можно добавить дополнительные шаги.

6.      Сохраняем шаги. На закладке «Расписания» указываем расписание запуска задания:

7.      Нажать ОК. Задания можно увидеть в разделе «Агент SQL Сервер»:

8.      Все, задание настроено. Остается только проверить результаты его работы.

Архивирование баз средствами SQL сервера

Для создания архива с заданным именем, включающим дату и время архивирования вида UTOffice-2012-01-01-03-01-02, можно воспользоваться скриптом (в примере для базы UTOffice):

declare @d varchar(500);
select @d = convert(varchar(20),getdate(),20);
select @d = replace(@d, ':', '-');
select @d = replace(@d, ' ', '-');

-- Путь, куда архивировать
select @d = 'E:\1CBackUp\SQL_BASES\Backups\UTOffice-' + @d ;
BACKUP DATABASE [UTOffice] TO  DISK = @d  WITH FORMAT, INIT, COMPRESSION,  NAME = N'UTOffice', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

Если в имени файла должна присутствовать только дата, тогда можно использовать другой вариант:

select @d = 'E:\1CBackUp\SQL_BASES\Backups\BUH2-' + convert(varchar(10),getdate(),120);

Если требуется в расписании вставить несколько команд архивации, можно записать их так:

select @d = 'E:\1CBackUp\SQL_BASES\Backups\BUH_MAG-' + convert(varchar(10),getdate(),120);   
BACKUP DATABASE [BUH_MAG] TO  DISK = @d  WITH FORMAT, INIT, COMPRESSION,  NAME = N'BUH_MAG', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

declare @d varchar(500);
select @d = 'E:\1CBackUp\SQL_BASES\Backups\buh_newtm-' + convert(varchar(10),getdate(),120);
BACKUP DATABASE [buh_newtm] TO  DISK = @d  WITH FORMAT, INIT, COMPRESSION,  NAME = N'buh_newtm', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

GO

Периодическая копия базы

Самый удобный и полезный вариант архивирования баз – создание ее зеркальной копии. В отличии от простого архива способ хорош тем, что всегда есть предыдущая рабочая копия базы. Можно создавать каждой ночью копию базы на утро, раз в неделю – копию базы на начало недели, раз в месяц – копию базы на начало месяца и т.п.

 Восстановление можно совместить с архивацией, добавив в скрипт архивации команды (в примере восстановление в базу UtOfficeDAY):

-- Отключение сеансов пользователей в базе-получателе
alter database  [UTOfficeDay]  set RESTRICTED_USER with rollback immediate;

RESTORE DATABASE [UTOfficeDay] FROM  DISK = @d WITH  FILE = 1,  MOVE N'UTOffice' TO 
N'e:\1CBackUp\SQL_BASES\Day\UTOfficeDAY.mdf',  MOVE N'UTOffice_log' TO 
N'e:\1CBackUp\SQL_BASES\Day\UTOfficeDAY_log.ldf',  NOUNLOAD,  REPLACE,  STATS = 10

Восстановление копии базы из архива SQL

Восстановить базу из архива в SQL можно интерактивно, несколькими щелчками мыши.

Но часто возникает задача восстановить базу в ее копию, чтобы посмотреть, что изменилось в базе.

Для этой задачи нужно выполнить подобный запрос, входные данные:

  • arc_filename – полное имя файла архива, из которого будет осуществляться восстановление данных
  • src_base_name – имя исходной SQL-базы
  • dst_base_name – имя конечной SQL-базы
  • dst_base_path – путь, по которому расположены файлы конечной SQL-базы

 Запрос подразумевает, что файлы базы данных именуются стандартно, т.е. «*.mdf» и «*_log.ldf».

-- Declare all variables
declare @arc_filename varchar(1024);
declare @src_base_name varchar(1024);
declare @dst_base_name varchar(1024);
declare @dst_base_path varchar(1024);
declare @src_log_name varchar(1024);
declare @dst_log_name varchar(1024);
declare @dst_base_filename varchar(1024);
declare @dst_log_filename varchar(1024);


-- Parameters for procedure of restoring data
select @arc_filename = 'e:\1CBackUp\SQL_BASES\Backups\UTOffice-2011-04-13-03-00-00';
select @src_base_name = 'UTOffice';
select @dst_base_name = 'Restore1s1';
select @dst_base_path = 'e:\1CBackUp\SQL_BASES\1';


-- Calculate any depending variables
select @src_log_name = @src_base_name + '_log';
select @dst_log_name = @dst_base_name + '_log';
select @dst_base_filename = @dst_base_path + '\' + @dst_base_name + '.mdf';
select @dst_log_filename = @dst_base_path + '\' + @dst_log_name + '.ldf';


-- Viewing some variables for debuging
-- select @src_base_name;
-- select @dst_base_name, @dst_base_filename, @dst_log_filename;


-- Disconnect all users from destination
alter database  @dst_base_name set RESTRICTED_USER with rollback immediate;


-- Restore destination from src
RESTORE DATABASE @dst_base_name FROM  DISK = @arc_filename WITH FILE = 1,  MOVE 
@src_base_name TO @dst_base_filename,  MOVE @src_log_name TO @dst_log_filename,  
NOUNLOAD,  REPLACE,  STATS = 10

Копирование базы в SQL

Иногда требуется создать копию базы средствами SQL. Вот образец скрипта:

BACKUP DATABASE [dbt_buh] TO DISK = 'D:\BACKUP\tmp.bak' WITH INIT, NOUNLOAD, NAME = 'TMP', NOSKIP, NOFORMAT, STATS = 25
GO
RESTORE DATABASE [dbt_buh_osa] FROM DISK = 'D:\BACKUP\tmp.bak'
       WITH
       MOVE 'db_buh' TO 'D:\BACKUP\db_buh_osa.mdf',
       MOVE 'db_buh_log' TO 'D:\BACKUP\dbt_buh_osa_log.ldf',
       REPLACE
GO

Главное - указать перенос логических файлов в физические файлы в секции MOVE.

Запуск SQL Agent

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

Помочь справиться с ситуацией может запись в планировщик сервера Windows запуска раз в час службы SQL-агент:

net start "SQLSERVERAGENT"

Настройки отладчика

Выбор портов для отладки

Причиной ошибки «Для выполнения отладки необходимо включить поддержку сетевого протокола TCP/IP» обычно является нехватка портов TCP/IP для отладки.

В конфигураторе пункт Отладка – Подключение показывает, какие сеансы 1С работают в режиме отладки:

Если стоит галочка «Устанавливать режим разрешения отладки при запуске», то каждая сессия будет запускаться в режиме отладки и расходовать порт из диапазона портов для отладки:

 

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

 

Поэтому в каталоге выполнимого файла 1С, например C:\Program Files (x86)\1cv81\bin\conf, нужно создать файл debugcfg.xml, в нем прописать порты для отладки. Рекомендую использовать большой диапазон, чтобы всем хватило:

<config xmlns="http://v8.1c.ru/v8/debugcfg">
    <debugports range="2940:3350"/>
</config>

 

РАЗДЕЛ: МЕНЕДЖМЕНТ

Стандарты разработки

Для форм использую разрешение 1000*600 (под монитор 1024*768). Более мелкие мониторы уже устарели, использовать форму большего размера неудобно при разработке.

Ведение разработки программистом 1С8

Рекомендации по хранилищу конфигурации

Рекомендуется создавать следующие логины:

  • Два логина на каждого пользователя хранилища, например Осипов и Осипов2.
  • Логин База под которым будет подключаться рабочая база
  • Логин Администратор, под которым нельзя подключать базу к хранилищу, служит только для администрирования списка пользователей.

Можно использовать удаленное хранилище, размещенное просто по какому-то адресу в vpn. При первом подключении к хранилищу загружается вся конфигурация. Это может происходить долго в удаленном хранилище, поэтому лучше высылать разработчикам уже подключенную к хранилищу базу.

Лицензирование 1С

Нужно внимательно относиться к соблюдению лицензионной политики 1С.

Что необходимо делать при покупке 1С

В обязательном порядке сделайте сканы или ксерокопии регистрационных карточек. Т.к. в случае их утери и отсутствия копий использование программ нелегально.

Восстановление утерянных регистрационных карточек

Для восстановления утерянных регистрационных карточек нужно знать их номера. Без этого не восстановят. Номера можно узнать у франчайзи, которые продавали программные продукты.

Для восстановления пишется заявление во франчайзи-продавец на фирменном бланке, с печатью. Скан этого заявления отсылается во франчайзи, которое пересылает его в 1с.

Стоимость перехода с 1с81 на 1с82

Только кажется, что переход с 1с81 на 1с82 сопоставим с ценой ИТС на 3 месяца, чтобы обновиться на последний релиз. Если у вас распределенная компьютерная сеть, стоимость может влететь в копеечку.

Пример расчета в ценах марта 2012 года:

Для перехода сети из 40 магазинов на 1С8 понадобится разово купить ИТС ПРОФ на 12 месяцев и по одной подписке ИТС ДУО на каждую из розничных точек. На меньший срок и Техно с ДУО не продают. Т.е. легальный переход на 1С82 будет стоить порядка: 25 000 (ИТС ПРОФ) +  40 * 2170 (ИТС ДУО) = 111 800 (по 2 795 рублей на каждую точку). Эта подписка дает право обновляться на текущие релизы 1с в течение 12 месяцев.

РАЗДЕЛ: ТЕРМИНОЛОГИЯ

Слова «До и По» для периодов

Если мы говорим до даты Д, то подразумеваем, что дата Д не включается. Если мы говорим по дату Д, то подразумеваем, что дата Д включается.

РАЗДЕЛ: ПРОЕКТИРОВАНИЕ

Проектирование: Регистры правил

Период действия записей регистров правил.

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

Например, у нас есть регистр прав доступа к документу.

С 1 января Иванов может проводить поступления по фирме Х

С 1 февраля Петров может проводить все поступления

Необходимо указать, что Иванов с 1 марта может проводить поступления по фирме У и не может проводить поступления по фирме Х.

Для этого можно сделать сторнирующую запись на 1 марта:

С 1 марта Иванов может проводить поступления по фирме Х.

Но такой способ увеличивает количество правил и приводит к ошибкам.

Проще изменить исходную запись следующим образом:

С 1 января Иванов может проводить поступления по фирме Х

 

 

 

= ОБНОВЛЕНИЯ =

Дата

Изменение

Место

Примечание

     

 

     

 

     

 

26.09.12

Веха

Статья подготовлена для Инфостарт.

 

22.09.10

Правка

Реорганизована структура статей

 

22.01.10

Вставка

Прекращение сеансов файловой версии

 

17.12.09

Вставка

Мягкое перепроведение документов

 

05.09.08

Вставка

Хранение в базе GUID

 

03.08.08

Вставка

Обработка макета построителя отчета перед выводом

 

04.06.08

Вставка

Объекты планов обмена

 

21.05.08

Веха

Начато ведение заметок. 

 

Скачать файлы

Наименование Файл Версия Размер
article.doc

.doc 1,04Mb
319
.doc 1,04Mb 319 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. fishca 1240 30.03.12 16:13 Сейчас в теме
что находится в файлах к публикации?
2. fixin 4123 30.03.12 16:43 Сейчас в теме
3. fishca 1240 30.03.12 16:56 Сейчас в теме
(2) что имею, то и введу ;)

Какая информация находится в файлах к публикации? Если все тоже самое что и в публикации зачем они, для накручивания маней? Почему тогда их две, а не одна?
4. fixin 4123 30.03.12 17:20 Сейчас в теме
(3) в файлах то же самое. Просто мне не удалось добитьс (пока что) красивого форматирования Word в движок инфостарта, поэтому прилагаю аналогичную статью. Она такая же, но более красиво офорленная и более удобная для чтения. Собственно...
5. sinjevla 181 31.03.12 14:31 Сейчас в теме
Спасибо за публикация, слежу за вашим творчеством.
Респект, уважаю
6. Andreeei 02.04.12 12:38 Сейчас в теме
Картинка анонса просто супер )) Да и статья тоже.
7. fixin 4123 02.04.12 12:56 Сейчас в теме
(6) картинко зачотное, да... Именно такую и хотель...
8. BalVlad 02.04.12 14:37 Сейчас в теме
Спасибо за статью. Плюсую и жду развития - продолжения.
11. fixin 4123 02.04.12 16:10 Сейчас в теме
(8) планирую дописать про СКД
9. Kutuzov 708 02.04.12 14:38 Сейчас в теме
Целиком пока не прочитал, но пролистал; то, что видел - весьма ценная информация :)
P.S. Птичку жалко! (см. картинку к статье)
10. marat_n 112 02.04.12 15:50 Сейчас в теме
У самого опыт работы с 1С примерно такой же, но некоторые вещи любопытны.
Воистину, век живи - век учись.
Спасибо, бесценный опыт хорошего специалиста.
12. y22-k 246 02.04.12 17:37 Сейчас в теме
Спасибо, уважение за труд
13. Kamikadze 46 02.04.12 18:56 Сейчас в теме
Платформа 1с81 не умеет запускать внешние отчеты и сохранять таблицы в Excel. Это умеет делать платформа 1с82.

не понял - тоесть не возможности сохранить файл в формате ексель?
14. Kamikadze 46 02.04.12 19:02 Сейчас в теме
Запрет интерактивной работы

как мне кажется - проще создать роль и ее юзать
15. fixin 4123 02.04.12 19:16 Сейчас в теме
(14) детали, какую именно роль?
(13) на сервере невозможно (а именно под сервером работают регл.задания) в 1с81.
16. Ish_2 1082 02.04.12 20:13 Сейчас в теме
Убери это. Несолидно :
Подсветка текущей строки табличного поля
Подсвечивать текущую строку можно в событии вывода текущей строки. Когда текущая строка меняется, событие вывода строки не вызывается. Единственный метод сменить оформление строки – вызывать событие обновление формы. Немного накладно по скорости, но работает. В примере подсвечиваются три колонки текущей строки серым цветом.

Процедура СправочникСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Если ДанныеСтроки = Неопределено ИЛИ ЭлементыФормы.СправочникСписок.ТекущаяСтрока = ДанныеСтроки.Ссылка Тогда
ЦветФона = WebЦвета.СеребристоСерый;
ОформлениеСтроки.Ячейки.Наименование.ЦветФона = ЦветФона;
ОформлениеСтроки.Ячейки.Код.ЦветФона = ЦветФона;
ОформлениеСтроки.Ячейки.Картинка.ЦветФона = ЦветФона;
КонецЕсли;
КонецПроцедуры

Процедура СправочникСписокПриАктивизацииСтроки(Элемент)
Обновить();
КонецПроцедуры
Показать
17. fixin 4123 03.04.12 00:13 Сейчас в теме
18. Ish_2 1082 03.04.12 09:00 Сейчас в теме
(17) Режим выделения строки "Строка" или "Ячейка" для Табличного поля устанавливается в Конфигураторе.
Для того , чтобы выделить строку в табличном поле НЕНУЖНО писать код.
Достаточно - см. Рисунок.
Прикрепленные файлы:
19. fixin 4123 03.04.12 10:42 Сейчас в теме
(18) заметка как бе не об этом, дядя Ишь... Перечитайте еще раз.
В конфигураторе можно сделать подсветку именно трех колонок, как в примере? Без кода? Бугога... Ну что вы меня лечите.

Для исключения инсиннуаций, уточняю, что речь идет не о стандартной подсветке текущей строки, а о произвольной подстветке текущей строки, цитирую: "В примере подсвечиваются три колонки текущей строки серым цветом".
20. Ish_2 1082 03.04.12 12:12 Сейчас в теме
(19) Э..нет. Не пойдет. Давай читать вместе и по слогам.
1.
Подсветка текущей строки табличного поля. Подсвечивать текущую строку можно в событии вывода текущей строки.
Хм...жутковато , но содержание не комментирую.
Здесь говорится о выделении строки - "подсветка". Где здесь о выделении конкретных колонок ?
2. Идём далее
Когда текущая строка меняется, событие вывода строки не вызывается. Единственный метод сменить оформление строки – вызывать событие обновление формы. Немного накладно по скорости, но работает.
Опять же свои комментарии опускаю.
Но о выделении конкретных колонок - ни слова.
3. И лишь как пример иллюстрирующий общий подход , описанный выше говорится :
В примере подсвечиваются три колонки текущей строки серым цветом.

На основании этого я сделал скромное предположение :
ты чего-то упустил в знаниях свойств табличного поля.
Предположение это тем более обосновано , что экзотический пример с выделением отдельных колонок в текущей строке выглядит совсем диковато.
Я даже не могу привести ни одного примера в известных мне решениях 1с , чтобы в табличном поле выделялись лишь некоторые колонки в текущей строке. Пример твой явно притянут за уши.
Таков мой скромный взгляд.
21. fixin 4123 03.04.12 13:00 Сейчас в теме
(20) не буквоедствуй, если ты не разобрался в примере. Выделять цветом нужно было именно левые три колонки, чтобы цветовое выделение не мешало цветовому оформлению значений в колонках. Открой Эксель. Там когда ты шагаешь по ячейкам, столбик слева подсвечивается. Так захотел пользователь. А он всегда прав.
Если твой практический опыт не включает этого, то это просто твой опыт мал.
Резюмируя - речь идет об специфическом оформлении текущей строки. Так что пример адекватен и ваше замечание отклоняется. Предположение твое оказалось неверным, я разжевал почему. Никакой это не позор, а нормальный код. ОК?
27. Ish_2 1082 05.04.12 16:21 Сейчас в теме
(21) Ладно.. Забираю твой "ОК".
Пусть у меня постоит под столом. Верну при случае.
29. fixin 4123 05.04.12 18:11 Сейчас в теме
(27) ну вот и чудесно... за взаимопонимание!
22. bestuzhev 677 03.04.12 13:03 Сейчас в теме
Моя Борьба - Адольф Гитлер :) Всяко +
23. МимохожийОднако 140 03.04.12 21:26 Сейчас в теме
Стоимость перехода с 1с81 на 1с82.
ИМХО, лажа. Этот расчет нужен только для развода клиентов. Для одной конторы (если это сеть магазинов) достаточно одного ИТС. Приведи хотя бы один пример, когда обошлись одним ИТС, а 1С реально предъявила претензию о легальности перехода на 8.2.
25. fixin 4123 04.04.12 10:57 Сейчас в теме
(23) интересный у тебя совет - воруй мол, еще никого не посадили. Обновлять одним ИТСом нелегально, вне зависимости от того, ловит отдел К за это или закрывает на это глаза.
24. NPMar 04.04.12 10:07 Сейчас в теме
Спасибо большое! Я работаю в семерке, но нужно срочно переходить на восьмерку. Очень интересно Вы все описываете. Уверена, что обязательно воспользуюсь Вашей публикацией!
26. vikiking 04.04.12 22:47 Сейчас в теме
Большое спасибо за книгу, интересно почитать :)
28. пользователь 05.04.12 17:19
Сообщение было скрыто модератором.
...
30. nataon 29.05.12 10:12 Сейчас в теме
Спасибо, интересная статья
31. scorp_23 27.07.12 09:49 Сейчас в теме
На самом деле очень много полезной информации, однозначно +!
32. AlexanderKai 02.10.12 17:33 Сейчас в теме
Прикольно. Некоторые моменты могут пригодится.
33. YalanchidiO 20 18.10.12 15:52 Сейчас в теме
А почему 2 файла? Что во втором?
И да, кстати, вернула Вам 1 мань ;)
34. fixin 4123 18.10.12 18:07 Сейчас в теме
(33) о да, я дико обогатился, у меня 1984 СМ. ;-)
35. YalanchidiO 20 18.10.12 21:23 Сейчас в теме
Очень за Вас рада! Я не целью обогатить Вас скачала статью, а с целью чему-нибудь научиться.
36. borrman 23.02.13 00:39 Сейчас в теме
+ за лицензирование и администрирование )
37. asved.ru 36 07.05.13 15:58 Сейчас в теме
Совет отключить кэширование на устройстве просто шикарен. Я при фейспалме лицо ушиб.

Хотя, конечно, для единичного локального пользователя это будет малозаметно.
38. fixin 4123 07.05.13 16:06 Сейчас в теме
39. DoctorRoza 07.05.13 16:37 Сейчас в теме
Ну-с .. с наступающим 9 мая! :)
40. shoy 19 03.06.13 16:19 Сейчас в теме
41. shoy 19 03.06.13 16:20 Сейчас в теме
А про СКД маловато будет! ;)
Обещание надо выполнять.
42. EarlyBird 6 12.07.13 22:10 Сейчас в теме
43. rosinfo1 17.08.13 01:16 Сейчас в теме
Спасибо про ошибку РОS 19, в свое время только восстановление из архива помогло. Еще не хватает про смещение дат 2000 при создании новой базы 1С на СКЛ. А то у меня пользователи дату рождения сотрудника 20.08.0012 года завели, потом весь обмен РИБ накрылся. Пол дня причину искал...
44. so-quest 138 28.08.14 11:33 Сейчас в теме
Безусловный переход не может вести внутрь условия. - не верно. В выполнить() он может вести куда угодно и откуда угодно.
45. a1ex4ndr 5 10.09.14 02:46 Сейчас в теме
почти война и мир, получилась ;)
плюсанул.
46. fixin 4123 10.09.14 12:01 Сейчас в теме
Оставьте свое сообщение

См. также

ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование) ЗНАЧЕНИЯ ("001", "Новый товар") Промо

Механизмы платформы 1С v8 v8::Запросы 1cv8.cf Абонемент ($m)

Вас не обманывают ваши глаза, это запрос на изменение данных! И это работает без прямого доступа к БД, регистрации и смс.

1 стартмани

01.06.2018    40408    101    m-rv    58    

Быстрое обновление базы 1С из XML-файлов конфигурации (EDT-GIT)

DevOps и автоматизация разработки EDT Обновление 1С Механизмы платформы 1С v8 1cv8.cf Россия Абонемент ($m)

Быстрое обновление конфигурации и базы данных 1С, вместо долгого обновления из EDT (1C:Enterprise Development Tools) при использовании хранилища GIT. Непосредственное обновлении базы на сервере баз данных (минуя сервер 1С) из XML-файлов конфигурации при помощи утилиты автономного сервера 1С - ibcmd.

1 стартмани

13.07.2022    2792    1    Bitnikov    16    

Автоподстановка, автоподбор города из адресного классификатора

Универсальные обработки Механизмы платформы 1С v8 БП3.0 УТ11 Абонемент ($m)

Обработка показывает как работает событие автоподбор у элемента формы Поле Ввода. Когда начинаем вводить первые буквы города. выпадает подсказка с городами из Кладр, загруженного в регистр сведений АдресныеОбъекты.

1 стартмани

20.06.2022    620    0    aleksandrstep    0    

Флажок в динамическом списке в 1С 8.3 (управляемые формы)

Механизмы платформы 1С v8 v8::УФ 1cv8.cf Абонемент ($m)

Продемонстрирована реализация флажков в динамическом списке на управляемых формах - еще один способ.

1 стартмани

19.01.2022    5185    50    RustIG    13    

Расширения конфигураций 1С: учимся перехватывать методы Промо

Механизмы платформы 1С v8 v8::УФ 1cv8.cf Абонемент ($m)

В этой статье я на примерах разберу некоторые механизмы расширений конфигураций 1С. А именно «перехваты» методов модуля объекта и «перехваты» событий формы и элементов формы. Данная статья написана с учебными целями, чтобы показать, как при помощи расширений конфигурации можно делать такие доработки, ради которых раньше приходилось снимать конфигурацию с поддержки.

1 стартмани

30.05.2017    188355    13    signum2009    51    

Использование флажков в динамических списках 2.0

Механизмы платформы 1С v8 1cv8.cf Абонемент ($m)

Пример реализации динамического списка с пометками в режиме множественного и единичного выбора.

1 стартмани

13.01.2022    6077    12    mr_sav    29    

Скорость сложения строк большой длины в 1С разными методами (конкатенация строк)

Механизмы платформы 1С v8 1cv8.cf Абонемент ($m)

Как известно, в 1С со строковыми переменными часто приходится работать в режиме добавления строк в одну переменную. Когда строка небольшой длины, все происходит достаточно быстро и можно работать вот так: Строка1 = "Привет"; Строка2 = "мир!"; Результат = Строка1 + Строка2; И все замечательно ровно до того момента, когда эти строки не становятся большими... Тогда скорость работы значительно падает. Я провел небольшие замеры производительности и выношу их на суд общественности.

1 стартмани

02.01.2022    5268    1    Diversus    74    

Динамическая модификация форм в расширении

Механизмы платформы 1С v8 ERP2 Абонемент ($m)

Пример динамического изменения форм расширением конфигурации без заимствования формы.

1 стартмани

05.04.2021    4928    1    a.zernin    1    

Асинхронные вызовы Промо

Механизмы платформы 1С v8 1cv8.cf Абонемент ($m)

В этой статье я покажу свою реализацию асинхронных вызовов серверных функций и процедур

1 стартмани

02.02.2015    54382    180    rtnm    33    

Режим агента конфигуратора на практике

Инструментарий разработчика Групповая разработка (Git, хранилище) Механизмы платформы 1С v8 1cv8.cf Абонемент ($m)

Полезные практические заметки о работе с конфигуратором с режиме агента.

1 стартмани

03.03.2021    3429    1    redtram    2    

Навигационная ссылка в платформе 8.2

Механизмы платформы 1С v8 1cv8.cf Россия Абонемент ($m)

Получение ссылки на объект / Переход по ссылке в платформе 8.2 (обычное приложение).

1 стартмани

27.10.2020    4428    5    PerlAmutor    4    

Заполнение выделенных строк таблицы

Механизмы платформы 1С v8 1cv8.cf Абонемент ($m)

Универсальный способ заполнения колонки таблицы на управляемой форме, только по выделенным строкам.

1 стартмани

28.01.2020    10519    7    sulfur17    15    

Три урока 1С81 для переходящих с 1с77 Промо

Механизмы платформы 1С v8 1cv8.cf Россия Абонемент ($m)

Три урока, которые я решил сам при изучении восьмерки, когда переходил с семерки. Уроки касаются работы с коллекциями, регистрами и формами восьмерки.

1 стартмани

09.02.2012    21361    44    fixin    12    

Вывод характеристик и их значений в динамический список

Механизмы платформы 1С v8::УФ v8::СКД 1cv8.cf Абонемент ($m)

Если в запросе динамического списка используется конструкция {ХАРАКТЕРИСТИКИ ...}, то как вывести на форму колонки с характеристиками?

1 стартмани

22.02.2019    10873    3    kasper076    4    

Работа с деревом значений для новичков (Управляемые формы 8.3)

Механизмы платформы 1С v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Пример работы с деревом значений (для новичков) на управляемых формах (8.3)

1 стартмани

29.01.2019    80670    97    gubar    0    

Связанные табличные части (управляемые формы)

Механизмы платформы 1С v8 v8::УФ Абонемент ($m)

У нас есть 2 связанные табличные части, и нам надо, чтобы по текущей строке в одной из них мы видели только определенные строки во второй. Были бы у нас динамические списки, мы бы взяли событие "При активизации строки" и стандартный механизм отборов СКД, которая лежит в основе списка. Но вот с табличными частями так не получится. Тут нам надо будет написать несколько строк кода и использовать "ОтборСтрок", доступный для таблицы формы. Тестировалось на платформе 8.3.13.1644, будет работать и на более ранних версиях платформы.

1 стартмани

25.01.2019    24466    23    Kim1C    11    

Пример работы с Планировщиком 1С (УФ)

Механизмы платформы 1С v8 v8::УФ 1cv8.cf Абонемент ($m)

В 1С 8.3.х появился такой объект, как "Планировщик". О нем и пойдет речь.

1 стартмани

26.06.2018    24241    115    MKFreeUser    27    

История хранения данных. Теперь в составе платформы

Механизмы платформы 1С v8 1cv8.cf Россия Абонемент ($m)

Описание нового механизма хранения данных в составе платформы на примере каркасной конфигурации. Прилагается выгрузка базы данных обработками и примерами кода.

2 стартмани

14.11.2017    41680    68    vasilev2015    76    

Выбор файла и загрузка его на сервер в асинхронном режиме по фен-шую

Механизмы платформы 1С v8 1cv8.cf Россия Абонемент ($m)

Жизнь без модальности и велосипедов.

1 стартмани

14.11.2017    7704    4    huxuxuya    3    

Асинхронное воспроизведение звука в 1С

Механизмы платформы 1С v8 1cv8.cf Абонемент ($m)

Достаточно простой пример как в 1С:Предприятие запустить воспроизведение звука и не ждать его окончания

2 стартмани

28.07.2017    14798    3    SITR-utyos    7    

Изучение событий 1С для программирования

Механизмы платформы 1С v8 Россия Абонемент ($m)

Какие события и в какой последовательности вызываются платформой 1С? Куда лучше поместить свой программный код, чтобы добиться нужного поведения программы? Предлагаю разработку «Изучение событий» которая облегчит поиск ответов на такие вопросы.

2 стартмани

12.03.2017    30326    46    rusmil    21    

Поиск по наименованию в динамическом списке

Оптовая торговля Механизмы платформы 1С v8::ОУ v8::УФ УТ11 Абонемент ($m)

Пример позиционирования в динамическом списке по набранной строке

1 стартмани

08.02.2017    18172    6    waol    0    

Как построить цепочку асинхронных вызовов

Механизмы платформы 1С v8 v8::УФ 1cv8.cf Абонемент ($m)

Опишу способ организации последовательных асинхронных методов, которому я недавно научился.

1 стартмани

11.01.2017    27359    6    json    70    

Работа с двоичными данными на примере чтения файлов изображений. Новые возможности 8.3.9

Универсальные функции Механизмы платформы 1С v8 1cv8.cf Россия Абонемент ($m)

В статье приводятся новые функции по работе с двоичными данными, появившимися в версии платформы 8.3.9 , на примере анализа формата и размера изображений. А также пример отправки изображения через API ВКонтакте с помощью новых объектов (без использования ОбъединитьФайлы())

1 стартмани

14.11.2016    41784    19    Anton64    25    

ComSafeArray Hexadecimal. О преобразовании массива байт в строку шестнадцатеричных чисел

Механизмы платформы 1С v8 1cv8.cf Абонемент ($m)

На самом деле, одним из первых заданий на любых курсах обучения программистов встречается задание преобразовать десятичное число в шестнадцатеричное. Ну, или любые другие системы исчисления. Задача эта несложна даже для начинающих программистов, поэтому многие ее с удовольствием реализуют. А в статье я расскажу о небольшой хитрости, которую придумали еще на заре программирования, когда памяти стало уже сильно больше 4 килобайт, а вычислительных мощностей всё не хватало.

1 стартмани

16.09.2016    10884    2    igel9780    1    

Объектные блокировки

Механизмы платформы 1С v8 Россия Абонемент ($m)

При работе с объектными данными (справочники, документы, планы счетов и т.д.) система «1С:Предприятие» обеспечивает два вида объектных блокировок: пессимистическую и оптимистическую. Они позволяют выполнять целостные изменения объектов при одновременной работе нескольких пользователей.

1 стартмани

17.08.2016    43357    12    Ranis1286    7    

[Расширения] Отборы в динамических списках

Механизмы платформы 1С v8 1cv8.cf Абонемент ($m)

Часто на практике возникают ситуации, когда в 1С 8.3 нужно настроить доступ к колонкам динамического списка по определенным критериям (нужно так настроить доступ, чтобы пользователь видел только то, что ему разрешено и не имел возможности изменить эти настройки). Но конфигурация стоит на поддержке и менять ничего нельзя. Предлагаемый пример показывает, как можно с помощью механизма расширений управлять отборами в динамических списках*. * В дополнение к механизму http://infostart.ru/public/437760/ "Динамическое управление видимостью и доступностью элементов форм"

1 стартмани

21.05.2016    12273    12    OlegK    6    

Когда контекстный вызов быстрее неконтекстного?*

Механизмы платформы 1С v8 1cv8.cf Абонемент ($m)

Во всех рекомендациях учат, что выполнение без контекста лучше, чем с контекстом. Однако есть несколько случаев, когда это не так.

1 стартмани

22.03.2016    13888    6    Fragster    6    

Программное создание колонок в табличном поле с полем ввода Флажок (чекбокс) (1С 8.2)

Механизмы платформы 1С v8 Абонемент ($m)

С возможностью быстрого выбора всех значений по строкам и столбцам. Где важно слово «все», галки проставляются по горизонтали или по вертикали соответственно.

1 стартмани

13.01.2016    23345    2    Wilka    1    

Расширения конфигурации и Контроль несогласованных изменений

Механизмы платформы 1С v8 УТ10 УПП1 Абонемент ($m)

Как обойти "контроль несогласованных изменений" при добавлении своих обработчиков в "расширения конфигурации".

1 стартмани

21.12.2015    29444    16    a_v_u    10    

Возможности перетаскивания, примеры использования, помощь в понимании и отладке механизма работы (8.3, управляемые формы)

Работа с интерфейсом Механизмы платформы 1С v8 1cv8.cf Абонемент ($m)

Механизм перетаскивания используется редко, а ведь его использование может помочь в реализации интуитивно понятных функций, которые могут весьма ускорить работу пользователя, и получить в итоге более дружественный интерфейс. Данная обработка не содержит копированного из Синтакс-Помощника текста (его вы сможете прочитать и сами). Она показывает примеры использования перетаскивания; позволяет прямо в режиме Предприятия протестировать, проверить и отладить основные приёмы работы; понять принцип вызова событий и увидеть состав их параметров.

1 стартмани

17.11.2015    48976    121    Alias    17    

Механизм контроля заполнения реквизитов

Механизмы платформы 1С v8 1cv8.cf Абонемент ($m)

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

1 стартмани

25.10.2015    18187    33    yur4ik9408    10    

Восстановление развернутых строк ДереваЗначений после его обновления (управляемая форма)

Механизмы платформы 1С v8 1cv8.cf Абонемент ($m)

ДеревоЗначений - достаточно простой для работы объект в 1С:Предприятии. И проблем при работе с ним обычно не возникает. Но те приемы, которые используются в обычном приложении, часто перестают работать после перехода на управляемое. В частности, возникла проблема восстановления состояния развернутых ветвей после обновления дерева. Оно целиком сворачивалось, и пользователь терялся. Эта статья будет посвящена вопросу восстановления состояния строк дерева. В качестве "подопытного" использую справочник Номенклатура лишь потому, что он присутствует почти во всех конфигурациях, и почти всегда имеет иерархический вид. Добро пожаловать под кат.

1 стартмани

16.10.2015    18227    10    azhilichev    6    

Доработка регистра сведений «Сохраненные настройки».

Механизмы платформы 1С v8 КА1 УТ10 УПП1 Абонемент ($m)

Сортировка и отбор настроек пользователей в отчете.

1 стартмани

09.09.2015    12356    2    Re:аниматор    2    

Быстрое редактирование строк динамического списка

Механизмы платформы 1С v8 1cv8.cf Абонемент ($m)

Быстрая интерактивная работа с данными справочников.

1 стартмани

04.09.2015    18995    24    hobi    1    

Управляемая форма 1С 8.2(8.3) – работа с деревом значений и таблицей значений. Часть III (Реализация трехпозиционного флажка)

Механизмы платформы 1С v8 1cv8.cf Абонемент ($m)

Продолжаем работать с деревом значений в управляемом приложении 1С 8.2. Данная статья будет посвящена реализации трехпозиционного флажка для ДереваЗначений на управляемой форме 1С предприятия 8.2

2 стартмани

15.05.2015    59506    27    ll13    10    

Управляемая форма 1С 8.2(8.3) – работа с деревом значений и таблицей значений. Часть II (Реализация DRAG and DROP)

Работа с интерфейсом Механизмы платформы 1С v8 1cv8.cf Абонемент ($m)

Реализация механизма Drag and Drop (или, проще говоря, “Перетаскивания”) для ДереваЗначений, расположенного на управляемой форме управляемого приложения 1С 8.2

2 стартмани

15.05.2015    34119    20    ll13    2    

Управляемая форма 1С 8.2 (8.3) – работа с деревом значений и таблицей значений. Часть I (Основы)

Работа с интерфейсом Механизмы платформы 1С v8 1cv8.cf Абонемент ($m)

Как известно, в платформе 1С 8.1 не составляло никакого труда связать дерево значений с табличным полем на форме, единственное, что при этом нужно было не забыть, так это СоздатьКолонки(). В управляемом приложении 1С 8.2 (8.3) сделать это не так просто, как кажется на первый взгляд. В данной статье речь пойдет о программном создании дерева значений (таблицы значений) на управляемой форме в управляемом приложении 1С

2 стартмани

14.05.2015    97280    28    ll13    13    

Особенность использования метода ИзменитьРеквизиты()

Механизмы платформы 1С v8 1cv8.cf Абонемент ($m)

Обнаружил странное поведение платформы, которым и хочу поделиться

1 стартмани

23.04.2015    9839    2    veretennikoff    2    

Расчет контрольной суммы строки по алгоритму CRC32 методами встроенного языка платформы "1С:Предприятие" (версии ранее 8.3)

Механизмы платформы 1С v8 1cv8.cf Россия Абонемент ($m)

Расширение типового функционала прикладного решения путем добавления возможности выполнения двоичных операций с числами.

1 стартмани

03.04.2015    19854    21    premierex    20    

Разработка конфигурации на основе учебника М.Г.Радченко "1C: Предприятие 8.2. Практическое пособие разработчика"

Механизмы платформы 1С v8 Россия Абонемент ($m)

Все студенты сталкиваются с подобными заданиями по 1С: "сделать всю книгу!", просиживание за механическими повторениями действий автора, вместо плодотворного самообучения с использованием передовых статей и видеоуроков. В моем случае пришлось выполнять 19 глав учебника М.Г.Радченко "1C Предприятие 8.2. Практическое пособие разработчика", а это - 591 страница мутного текста.

1 стартмани

22.12.2014    13310    15    fisa2693    9