Архив рубрики: УПП 8.1

УПП 8.1. Взаимные блокировки.

Неделю назад, закончилась память на сервере с 1с 8 и он просто стал зависать. Решено было перейти с 32 битной системы, установленной  на сервере, на  64 бита (понятно, что 32 битная система ограничена 4gb объемом памяти). Сама база расположена на отдельном сервере под СУБД PostgreSQL , и удаленные пользователи работают через Citrix.
После установки 64 битного серевера  1с 8  начались дикие блокировки при проведении документов. Пользователей, работающих в базе не более 60-70 человек. Сама база около 4 Gb.

Перешли с   PostgreSQL на MS SQL 2005, так как  на PostgreSQL при транзакциях блокируется вся таблица, а MS SQL блокирует только строку в таблице (смотрим здесь).  Но проблема не исчезла.
Документы продолжают виснуть. Нельзя ни записать ни отменить проведение документа. Выскакивают сообщения об ошибках.


Иногда выскакивают сообщения с выходом на конкретную строку программного кода.

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

Нашли пример решения аналогичной  Проблемы, но не всё устраивает.

Так же здесь очень много полезного материала
А так же диски ИТС.

Сегодня пригласили Эксперта по технологическим вопросам.

УПП 8.1. Взаимные блокировки.

Неделю назад, закончилась память на сервере с 1с 8 и он просто стал зависать. Решено было перейти с 32 битной системы, установленной  на сервере, на  64 бита (понятно, что 32 битная система ограничена 4gb объемом памяти). Сама база расположена на отдельном сервере под СУБД PostgreSQL , и удаленные пользователи работают через Citrix.
После установки 64 битного серевера  1с 8  начались дикие блокировки при проведении документов. Пользователей, работающих в базе не более 60-70 человек. Сама база около 4 Gb.

Перешли с   PostgreSQL на MS SQL 2005, так как  на PostgreSQL при транзакциях блокируется вся таблица, а MS SQL блокирует только строку в таблице (смотрим здесь).  Но проблема не исчезла.
Документы продолжают виснуть. Нельзя ни записать ни отменить проведение документа. Выскакивают сообщения об ошибках.


Иногда выскакивают сообщения с выходом на конкретную строку программного кода.

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

Нашли пример решения аналогичной  Проблемы, но не всё устраивает.

Так же здесь очень много полезного материала
А так же диски ИТС.

Сегодня пригласили Эксперта по технологическим вопросам.

Склонения объектов в 1с 8.1. конфигурации УПП

Мысли на тему: Склонения объектов в конфигурации Управление производственным предприятем 8.1. Использование запросов для получения склонений.


В базе должен быть РегистрСведений.СклонениеОбъектов

Функция ЗапросСклоненияОбъекта(Объект,Падеж) 

    // задается Объект и Падеж (Перечисления.Падежи)

        Запрос = Новый Запрос;

        Запрос.Текст = "ВЫБРАТЬ
        |    СклонениеОбъектов.Объект,
        |    СклонениеОбъектов.Падеж,
        |    СклонениеОбъектов.Значение
        |ИЗ
        |    РегистрСведений.СклонениеОбъектов КАК СклонениеОбъектов
        |ГДЕ
        |(СклонениеОбъектов.Падеж = &Падеж)
        |И (СклонениеОбъектов.Объект = &ТекОбъект)";

        Запрос.УстановитьПараметр("Падеж", Падеж);
        Запрос.УстановитьПараметр("ТекОбъект",Объект);
    Возврат Запрос.Выполнить();

КонецФункции



 Функция УстановитьПадеж(Сотрудник)
       Запрос = Новый Запрос;  //  Выбираются склонения должностей и физ. лиц

        Запрос.УстановитьПараметр("Падеж", Сотрудник.Падеж);
        Запрос.УстановитьПараметр("Должность", Сотрудник.Должность);
        Запрос.УстановитьПараметр("ФизическоеЛицо", Сотрудник.ФизЛицо);

        Запрос.Текст = "ВЫБРАТЬ
        |    СклонениеОбъектов.Объект,
        |    СклонениеОбъектов.Падеж,
        |    СклонениеОбъектов.Значение
        |ИЗ
        |    РегистрСведений.СклонениеОбъектов КАК СклонениеОбъектов
        |ГДЕ
        |СклонениеОбъектов.Падеж = &Падеж
        |И (СклонениеОбъектов.Объект = &Должность
        |ИЛИ СклонениеОбъектов.Объект = &ФизическоеЛицо)";

        Результат = Запрос.Выполнить().Выгрузить();


       Для каждого Строка Из Результат Цикл
           Если Строка.Объект = Сотрудник.Должность Тогда

                    Сотрудник.ДолжностьВПадеже   = Строка.Значение;

            КонецЕсли;

           Если Строка.Объект = Сотрудник.ФизЛицо Тогда
                   Сотрудник.ФИОВПадеже   = Строка.Значение;
            КонецЕсли;
        КонецЦикла;

     Возврат Неопределено;
 КонецФункции



В функцию УстановитьПадеж(Сотрудник) Передается Структура. Выглядить она таким образом:


Сотрудник = Новый Структура();


Для Каждого ТекСтрока Из РаботникиОрганизации Цикл

Сотрудник.Вставить("ФизЛицо",ТекСтрока.ФизЛицо);        
Сотрудник.Вставить("Падеж", Перечисления.Падежи.Дательный);
Сотрудник.Вставить("Должность", ТекСтрока.Должность);
Сотрудник.Вставить("ДолжностьВПадеже",ТекСтрока.Должность.Наименование);
Сотрудник.Вставить("ФИОВПадеже",ТекСтрока.ФизЛицо.Наименование);


КонецЦикла;

Склонения объектов в 1с 8.1. конфигурации УПП

Мысли на тему: Склонения объектов в конфигурации Управление производственным предприятем 8.1. Использование запросов для получения склонений.


В базе должен быть РегистрСведений.СклонениеОбъектов

Функция ЗапросСклоненияОбъекта(Объект,Падеж) 

    // задается Объект и Падеж (Перечисления.Падежи)

        Запрос = Новый Запрос;

        Запрос.Текст = "ВЫБРАТЬ
        |    СклонениеОбъектов.Объект,
        |    СклонениеОбъектов.Падеж,
        |    СклонениеОбъектов.Значение
        |ИЗ
        |    РегистрСведений.СклонениеОбъектов КАК СклонениеОбъектов
        |ГДЕ
        |(СклонениеОбъектов.Падеж = &Падеж)
        |И (СклонениеОбъектов.Объект = &ТекОбъект)";

        Запрос.УстановитьПараметр("Падеж", Падеж);
        Запрос.УстановитьПараметр("ТекОбъект",Объект);
    Возврат Запрос.Выполнить();

КонецФункции



 Функция УстановитьПадеж(Сотрудник)
       Запрос = Новый Запрос;  //  Выбираются склонения должностей и физ. лиц

        Запрос.УстановитьПараметр("Падеж", Сотрудник.Падеж);
        Запрос.УстановитьПараметр("Должность", Сотрудник.Должность);
        Запрос.УстановитьПараметр("ФизическоеЛицо", Сотрудник.ФизЛицо);

        Запрос.Текст = "ВЫБРАТЬ
        |    СклонениеОбъектов.Объект,
        |    СклонениеОбъектов.Падеж,
        |    СклонениеОбъектов.Значение
        |ИЗ
        |    РегистрСведений.СклонениеОбъектов КАК СклонениеОбъектов
        |ГДЕ
        |СклонениеОбъектов.Падеж = &Падеж
        |И (СклонениеОбъектов.Объект = &Должность
        |ИЛИ СклонениеОбъектов.Объект = &ФизическоеЛицо)";

        Результат = Запрос.Выполнить().Выгрузить();


       Для каждого Строка Из Результат Цикл
           Если Строка.Объект = Сотрудник.Должность Тогда

                    Сотрудник.ДолжностьВПадеже   = Строка.Значение;

            КонецЕсли;

           Если Строка.Объект = Сотрудник.ФизЛицо Тогда
                   Сотрудник.ФИОВПадеже   = Строка.Значение;
            КонецЕсли;
        КонецЦикла;

     Возврат Неопределено;
 КонецФункции



В функцию УстановитьПадеж(Сотрудник) Передается Структура. Выглядить она таким образом:


Сотрудник = Новый Структура();


Для Каждого ТекСтрока Из РаботникиОрганизации Цикл

Сотрудник.Вставить("ФизЛицо",ТекСтрока.ФизЛицо);        
Сотрудник.Вставить("Падеж", Перечисления.Падежи.Дательный);
Сотрудник.Вставить("Должность", ТекСтрока.Должность);
Сотрудник.Вставить("ДолжностьВПадеже",ТекСтрока.Должность.Наименование);
Сотрудник.Вставить("ФИОВПадеже",ТекСтрока.ФизЛицо.Наименование);


КонецЦикла;