16 ноября 2016

Ошибка при продаже подарочного сертификата УТ 11.2

После обновления на новую версию УТ 11.2 перестали продаваться подарочные сертификаты. При попытке выскакивает сообщение: "не заполнены данные вида сертификата, заполните статью доходов в виде виде сертификата". 


Следуя совету открываем объект справочника ВидыПодарочныхСертификатов и видим, что там нет пункта Статья доходов.


Что бы она появилась нужно зайти в НСИ и Администрирование > Настройка Разделов > Финансовый результат и контроллинг и поставить галочку учитывать прочие доходы и расходы


После этого пункт появится!


Но этот реквизит доступен для изменения только при создании новых или уже заполненных объектов. Иначе нужно задавать программно!

&НаСервере
Процедура Команда1НаСервере()
 Выборка = Справочники.ВидыПодарочныхСертификатов.Выбрать();
  Пока Выборка.Следующий() цикл
   ПодСертификат = Выборка.ПолучитьОбъект();
   ПодСертификат.СтатьяДоходов =     ПланыВидовХарактеристик.СтатьиДоходов.НайтиПоНаименованию("Выручка от продаж");
   ПодСертификат.Записать();
  КонецЦикла
КонецПроцедуры


01 ноября 2016

Программная синхронизация узлов РИБ УТ11

На крупных базах процесс синхронизации узлов РИБ занимает достаточно длительное время. База в этот момент подвисает и заставляет себя ждать. Поэтому делаем фоновое выполнение обмена с использованием планировщика заданий Windows.

Реализуется посредством параметра запуска \C
Нужен cmd-файл следующего содержания:
@ECHO OFF
chcp 866
"C:\Program Files (x86)\1cv8\8.3.6.2299\bin\1cv8.exe" enterprise /F e:\1cWorks\ДомСумок /N Администратор /P Boss21 /C"АвтоОбменУзлаРИБ"
  
Далее в МодулеУправлямогоПриложения, в процедуре ПриНачалеРаботыСистемы() нужно проверять параметр запуска и  в зависимости от него выполнять функцию обмена.
 Если СокрЛП(ПараметрЗапуска)="" Тогда   //параметра нет ничего не делаем      
    ИначеЕсли ПараметрЗапуска = "АвтоОбменУзлаРИБ" тогда
        Попытка
            ОбщийМодуль1.ВыболнитьОбменУзлаРИБ();
         Исключение
            Стр="Не удалось выполнить автообмен РИБ ";
            Сообщить(Стр+ОписаниеОшибки());
        КонецПопытки;
        ЗавершитьРаботуСистемы();
    КонецЕсли;
Следует иметь в виду, что этот модуль выполняется на клиенте. Поэтому что бы запустить серверную процедуру, ее следует разместить в отельном общем модуле. Поставить галочку Сервер и Вызов Сервера, после чего можно вызывать эту процедуру обычным способом  ОбщийМодуль1.Процедура()



&НаСервере
Процедура ВыболнитьОбменУзлаРИБ()
    //нужно обновить РИБ по подразделению, который не главный
    // Считаем, что узлов два: главный и не главный
    Выборка = ПланыОбмена.СОтборами.Выбрать();
    Пока выборка.Следующий() цикл
        Если не выборка.ЭтотУзел тогда

            ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(,выборка.Ссылка,Истина,Истина);
            Прервать;
        КонецЕсли;
    КонецЦикла;
   
КонецПроцедуры

К слову сказать программный обмен данными для узла осуществляется в общем модуле ОбменДаннымиСервер в функции ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы().

Далее в планировщике заданий создаем новую задачу. Запуск осуществляется с правами системы, тем самым запускается фоновый процесс без интерфейса!

 На вкладке Триггеры задайте расписание, а на вкладке Действия укажите запуск cmd-файла


Теперь в фоне по расписанию будет открываться 1С Предприятие, запускаться внешняя обработка, в которой выполняться обмен данными одного узла РИБ с главным.

Если не нужно срывать процесс, то запускайте cmd-файл с правами обычного пользователя.
В таком случае можно обойтись параметром /Execute и указать файл внешней обработки.
@ECHO OFF
chcp 866
"C:\Program Files (x86)\1cv8\8.3.6.2299\bin\1cv8.exe" enterprise /F e:\ПутьКБазе /N Администратор /P Пароль /Execute e:\Путь\ФайлОбработки.epf
Внешняя обработка, у которой в момент создания будет осуществляться процедура обмена.
&НаСервере
Процедура ПриОткрытии(Отказ)
    ВыболнитьОбменУзлаРИБ(); 
КонецПроцедуры