29 мар. 2017 г.

Задержка при смене раскладки клавиатуры

Windows 10 Version 10.0.15063.
При переключении языка ввода клавишами Ctrl+Пробел раскладка с задержкой переключается.

Нашел ветку
HKEY_CURRENT_USER\Control Panel\Accessibility\Keyboard Response
 Открыл параметр
DelayBeforeAcceptance
Изменил значение
с 1000 на 200 
Перезагрузил систему.


18 мар. 2017 г.

Не сохраняется цвет Форматированного документа 1С

Есть на форме поле с типом ФорматированныйДокумент.
На форму добавил Командную панель форматированного документа.
При форматировании в этом поле текста и дальнейшем  сохранении, все форматирования сохраняются кроме ЦветФона и ЦветТекста.


Не знаю точно, но скорее всего это баг платформы. Версия у меня 1С:Підприємство 8.3 (8.3.9.2033).

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

Сравнить значения выбора с типом Характеристики

Есть таблица на форме с колонками:


В пользовательском виде:


Настройка - имеет тип ПланВидовХарактеристикСсылка
Значение - имеет составной тип (СправочникСсылка, Булево, Строка, Дата, Число)

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

  • Если выбрана Настройка "Порт SMTP" то значение должно быть только типа Число

Вышло вот что:
&НаКлиенте
Процедура НалаштуванняПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
 ПроверкаПравильностиВыбранногоЗначенияПоТипу(Элемент.ТекущиеДанные.Значення, Элемент.ТекущиеДанные.Налаштування);
КонецПроцедуры

&НаСервере
Процедура ПроверкаПравильностиВыбранногоЗначенияПоТипу(Значение,Настройка)
 Если Настройка = ПланыВидовХарактеристик.НаименованиеПВХ.ПортSMTP Тогда 
  Если Тип("Число") <> ТипЗнч(Значение) Тогда 
   Сообщить("В этом параметре нужно указать тип Число!")
  КонецЕсли;
 КонецЕсли;  
КонецПроцедуры
Сначала проверяем, выбранная ли настройка связанная с ПортSMTP, а далее проверяем,
введенное ли значение в этом поле типа Число.

Серверные вызовы при завершении работы запрещены

Нужно выполнять авто обмен с РИБ перед завершение работы системы, как это можно было делать и ранее.
Сейчас, как видно из ошибки выполнить действия, которые требуют серверную часть модуля нельзя. А как же выполнить обмен с РИБ перед закрытием платформы если без серверных методов не обойтись?!

Ничего лучшего кроме как

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

Процедура ВыполнитьОбмен()Экспорт       
        Обмен.ВыполнитьОбменСоВсемаРИБ();
        ОтключитьОбработчикОжидания("ВыполнитьОбмен");   
КонецПроцедуры


не придумал. 
Тут все просто, перед завершением работы платформы, пользователю как бы намекаем, что "нажми продолжить". Если нажата кнопка "продолжить" то программа не завершиться, а передаст свое выполнение общему модулю с серверным контекстом где уже и осуществляется обмен со всеми РИБ.

16 мар. 2017 г.

DefaultAppPool stopped / остановлен

Установил IIS для дальнейшей публикации 1С Предприятия.

При переходе на главную страницу веб сервера http://localhost показывается ошибка, типа "Service Unavailabel Error code 503".

Смотрю в менеджер IIS в Application Pools, пул DefaultAppPool остановлен. При последующем запуске вручную DefaultAppPool он автоматически останавливается.

При поиске решений в интернете по IIS ошибках в Журнале событий Windows, результативного ничего не нашел.

Решение:
Зашел в Advanced Settings нашего Defaultapppool пула и установил параметр Identity на LocalService.
На всякий случай, перезапустил IIS + запустил вручную DefaultAppPool, который уже автоматически не останавливался.


Для успешной публикации базы 1С Предприятия, в моем случаи, параметр Identity был установлен в NetworkService

13 янв. 2017 г.

Скрыть общедоступную папку по сети

Открыли доступ в сеть к нескольким папкам и одну из папок хотим скрыть, что бы пользователь через Проводник не смог видеть?!

Для скрытия в конце имени папки нужно поставить знак $


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

13 дек. 2016 г.

Нарушена целостность структуры конфигурации при создании РИБ

При создании начального образа периферийной базы через время получаю
Нарушена целостность структуры конфигурации
В моем случаи проблема в том, что не типовые объекты (пару справочников и константа) не были добавлены в регистрацию плана обмена


После установки галки, образ успешно создался.

10 дек. 2016 г.

Медленно работает blogger

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


Несколько месяцев я замечал как виснет страница браузера при доволе мощном компьютере моем, когда открыта страница перечня написанных публикаций. Все лучи поноса были в сторону "гугла". И тут до меня дошло, что когда то я выбрал показ публикаций на странице в размере 100шт.


Поставил на 10-чку показ и страничка без проблем грузиться быстро.

Установить фокус на поле ввода 7.7

На форме есть элемент Поле ввода, туда вводиться штрих код товара кассиром. Задача при каждом вводе штрих кода фокус (курсор) не переносился на другой элемент формы, а оставался в Поле ввода штрих кода.

Казалось бы, все просто, ввел в процедуру или функцию вызываемую в Поле ввода на вкладке Дополнительно
Активизировать(ПолеВвода);
и все, но при тестировании у нас появилась ошибка
Активизировать(ПолеВвода,); {D:\1CTEST\1C\EXTFORMS\РАБОЧЕЕМЕСТОКАССИРА1.ERT(737)}: В данной формуле не может быть вызвана эта процедура(функция)
поэтому один умный человек порекомендовал использовать "фиктивное" закрытие формы и вот как это работает.

В модуле формы пишем
Перем ПередатьФокус;

Процедура ИзмШКТов()
 ПоискНоменклатуры(СокрЛП(ШКтов),1);
 ПередатьФокус = "ШКтов"; 
 Форма.Закрыть(0); 
КонецПроцедуры    

Процедура ПриЗакрытии()        
 Если ПустоеЗначение(ПередатьФокус) = 0 тогда 
  Активизировать(ПередатьФокус); 
  СтатусВозврата(0); 
  ПередатьФокус = ""; 
  Возврат; 
 КонецЕсли; 
КонецПроцедуры
Поясню...
Объявили глобальную переменную, по которой будет проверять в последующем, закрывается ли, так сказать, по настоящему форма или это мы "фиктивно" используем закрытие, что бы фокус передать на наше Поле ввода.
В Поле ввода на вкладке Дополнительно мы вызываем процедуру ИзмШКТов(в ней моя лабуда обработки штрих кода, а далее мы присваиваем нашей глобальной переменной имя Поле ввода (в моем случаи называется поле ввода ШКтов) и через Форма.Закрыть(0)закрываем нашу форму для того, что бы в обработчике события ПриЗакрытии(проверить, закрывается ли форма стандартным способом или фиктивно и если фиктивно тогда методом Активизировать(ПередатьФокусуже удачно, без ошибок установиться фокус (курсор) на Поле ввода. Далее делаем глобальную переменную пустой, что бы в следующий раз сделать тоже, что и выше описано, а в конце Возвратнам не дает закрыть наше фиктивное закрытие формы.

6 дек. 2016 г.

Информация о жестком диске

Для получения информации о жестком диске в командной строке нужно выполнить
wmic diskdrive get Name, Manufacturer, Model, InterfaceType, MediaType, SerialNumber

Включенные групповые политики

А точнее подробные отчет о включенных \ отключенных групповых политиках можно получить в командной строке выполнив
GPResult /h C:\GPResult.html

Сбросить локальные политики безопасности

Для сброка выполним в командной строке
secedit /configure /cfg %windir%\inf\defltbase.inf /db defltbase.sdb /verbose
а далее
shutdown /r 

Сбросить локальные политики

Что бы сбросить локальные политики на компьютере выполним в командной строке
rd /s /q "%windir%\System32\GroupPolicyUsers"
а далее
gpupdate /force 
ну а далее
shutdown /r

Узнать информацию о материнской плате

Скудную, но все же информацию о материнской плате можно получить выполнив
wmic baseboard get Manufacturer, Model, Name, PartNumber, serialnumber
в командной строке

Сохранить Восстановить записки Sticky

Для сохранения записок Windows 10 нужно скопировать все содержимое папки
%HOMEPATH%\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe

Соответственно, для восстановление, все скопированное замещаем возвращаем назад в папку
%HOMEPATH%\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe
согласившись на замену

Обновить форму автоматически 7.7

Вообще то, речь будет идти о Обработчике ожидания формы.
В задаче было поставлено обновление формы списка справочника каждые 1сек., для того, что бы "онлайн" видеть установленные фильтры на форме списка
фильтр1, фильтр2

Сначала напишем процедуру в модуле формы списка справочника, которая будет вызываться каждую 1сек. и обновлять форму списка
Процедура ПроцедураОбработчикаОжидания()
        Форма.Обновить();
КонецПроцедуры
А теперь после всех процедур и функций, выше модуля, запустим обработчик ожидания формы, который будет вызывать процедуру ПроцедураОбработчикаОжидания каждые 1сек
Форма.ОбработкаОжидания("ПроцедураОбработчикаОжидания",1);  


Отбор в списке Справочника 7.7

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

+ это будет как бы еще один вариант "множественного" фильтра в списке справочника.

Данная методика будет проста до безобразия.
Мы будем при каждом снятии или установке флажка обходить все флажки и для каждого установленного флажка будем искать в списке справочника соответствующий элемент справочника. Найденный элемент справочника мы помещаем в СписокЗначений, а далее этот перечень нужных нам элементов справочника в списке значений мы отправим в метод ИспользоватьСписокЭлементов()
Функция ПолучитьСписокДокументовФильтров()       
 
 АрхивТТН = СоздатьОбъект("Справочник.АрхивТТН");     
 СписокСТатусов = СоздатьОбъект("СписокЗначений");        
 СписокДокументов = СоздатьОбъект("СписокЗначений");
 
 Если Новый = 1 Тогда       
  СписокСТатусов.ДобавитьЗначение(Перечисление.СтатусДокумента.Новый);       
 КонецЕсли;
 
 Если Отправлен = 1 Тогда        
  СписокСТатусов.ДобавитьЗначение(Перечисление.СтатусДокумента.Отправлен);                  
 КонецЕсли;
 
 Если Закрыт = 1 Тогда   
  СписокСТатусов.ДобавитьЗначение(Перечисление.СтатусДокумента.Закрыт);   
 КонецЕсли;
 
 Если Отмена = 1 Тогда        
  СписокСТатусов.ДобавитьЗначение(Перечисление.СтатусДокумента.Отмена);   
 КонецЕсли;
 
 Если ПрибылоНаСкладПокупателя = 1 Тогда    
  СписокСТатусов.ДобавитьЗначение(Перечисление.СтатусДокумента.ПрибылоНаСкладПокупателя);   
 КонецЕсли;
 
 Если ЦПОтправлено = 1 Тогда   
  СписокСТатусов.ДобавитьЗначение(Перечисление.СтатусДокумента.ЦПОтправлено);      
 КонецЕсли;
 
 Если ФПОтправлено = 1 Тогда  
  СписокСТатусов.ДобавитьЗначение(Перечисление.СтатусДокумента.ФПОтправлено);     
 КонецЕсли;
 
 Если ВозвратТовара = 1 Тогда  
  СписокСТатусов.ДобавитьЗначение(Перечисление.СтатусДокумента.ВозвратТовара);   
 КонецЕсли;
 
 Если М1 = 1 Тогда    
  СписокСТатусов.ДобавитьЗначение(Перечисление.СтатусДокумента.М1);   
 КонецЕсли;
 
 Если М2 = 1 Тогда                        
  СписокСТатусов.ДобавитьЗначение(Перечисление.СтатусДокумента.М2);      
 КонецЕсли;    
 
 СписокСТатусов.Сортировать(0,);
  
 Для Индекс = 1 По СписокСТатусов.РазмерСписка() Цикл       
  АрхивТТН.ВыбратьЭлементыПоРеквизиту("Статус",СписокСТатусов.ПолучитьЗначение(Индекс),,0);      
  Пока АрхивТТН.ПолучитьЭлемент() = 1 Цикл     
   СписокДокументов.ДобавитьЗначение(АрхивТТН.ТекущийЭлемент());
  КонецЦикла;    
 КонецЦикла;
                         
 СписокДокументов.Сортировать(0,);
 Возврат СписокДокументов;     
 
КонецФункции    
Функция УстановитьФильтры()                                 
        СписокДокументов = ПолучитьСписокДокументовФильтров();     
        ИспользоватьСписокЭлементов(СписокДокументов);                   
        Форма.Обновить(1);
КонецФункции    
На вкладке Дополнительно наших флажков нужно поместить вызов функции УстановитьФильтры().
Сортировать список значений имеет смысл, так как если будем отключать\включать
фильтры не с лева на право, а наоборот или как то хаосно то увидите не приятный
результат.

1 дек. 2016 г.

Множественный отобор в списке Справочника 7.7

Для реализации возможности одновременно выбора фильтров по нескольким значениям в форме списка справочника я сначала добавил флажки на форму где каждому флажку присвоил Заголовок и Идентификатор, а во вкладке Дополнительно написал такую формулу
?(Новый = 1,УстановитьФильтры(Перечисление.СтатусДокумента.Новый,1),УстановитьФильтры(Перечисление.СтатусДокумента.Новый,0))
ну типа, если флажок установлен, тогда мы в функцию передаем по какому фильтру мы 
будем искать элементы в списке.

А вот и самое главное
Перем АрхивТТН;        
Перем СписокСтатусов;  
             
Функция ПодготовитьФильтр(СтатусПоиска,ДобавитьУдалить)             
                                                            
 Если ДобавитьУдалить = 1 Тогда
  //добавляем 
  АрхивТТН.ВыбратьЭлементыПоРеквизиту("Статус",СтатусПоиска,,0);
  Пока АрхивТТН.ПолучитьЭлемент() = 1 Цикл      
   НайденныйЭлемент = СписокСтатусов.НайтиЗначение(АрхивТТН.ТекущийЭлемент());
   Если НайденныйЭлемент= 0 Тогда    
    //документ добавляем в список фильтров
    СписокСтатусов.ДобавитьЗначение(АрхивТТН.ТекущийЭлемент());
   Иначе      
    //документ уже есть в списке фильтров
    Продолжить;
   КонецЕсли;
  КонецЦикла;    
 Иначе
  //удаляем        
  АрхивТТН.ВыбратьЭлементыПоРеквизиту("Статус",СтатусПоиска,,0);  
  Пока АрхивТТН.ПолучитьЭлемент() = 1 Цикл      
   НайденныйЭлемент = СписокСтатусов.НайтиЗначение(АрхивТТН.ТекущийЭлемент());   
   Если НайденныйЭлемент <> 0 Тогда    
    //элемент найден в списке фильтров
    СписокСтатусов.УдалитьЗначение(НайденныйЭлемент);  
   КонецЕсли;
  КонецЦикла;
 КонецЕсли;            
 
 Возврат СписокСтатусов;
    
КонецФункции     

Функция УстановитьФильтры(СтатусПоиска,ДобавитьУдалить)          
 СписокСтатусов = ПодготовитьФильтр(СтатусПоиска,ДобавитьУдалить);   
 Если СписокСтатусов.РазмерСписка() = 0 Тогда      
  ИспользоватьСписокЭлементов();
 Иначе
  ИспользоватьСписокЭлементов(СписокСтатусов);
 КонецЕсли;
КонецФункции                                           

АрхивТТН = СоздатьОбъект("Справочник.АрхивТТН");
СписокСтатусов = СоздатьОбъект("СписокЗначений");         
где мы сначала объявляем переменные и присваиваем им значения Справочника где будем
искать значения и СписокЗначений куда будем ложить найденные по множественному фильтру
значения.
Далее логика такая, если флажок установлен мы по передаваемом значении флажка ищем в нашем
справочнике нужное значение и если находим то записываем найденное значение в СписокЗначений.
Плюс если мы сняли флажок тогда мы должны опять найти в Справочнике нужное нам значение
и потом по найденном значении проверить, есть ли оно в СпискеЗначений, если есть тогда удалить,
ведь мы уже не хотим иметь по данном значении (флажке) фильтр.
Только после того как заполнился СписокЗначений мы можем воспользоваться методом платформы
для отбора в списке Формы ИспользоватьСписокЭлементов()куда нам нужно поместить список значений
с теми значениями, по которым нужно отфильтровать список, ну а если СписокЗначений наш пуст, тогда
ничего не передавая в ИспользоватьСписокЭлементов()мы отключим все фильтры

Вот результат


На всякий случай конфигурация, в ней это реализовано в АрхивТТН объекте, форма Списка.

Продолжение


Добавить новую константу в общую форму настроек констант

Обычные формы. Типовые конфигурации.
Для добавление своей константы в общую форму настроек констант через Операции-Константы

открываем свойства формы ОбщиеФормы-НастройкаПараметровУчета и в свойстве Состав добавляем нашу константу


а теперь уже в списке Форма-Размещение данных... появиться выбор добавления константы на общую типовую форму


26 нояб. 2016 г.

Строки неограниченной длинны сгруппировать в запросе

Если нужно сгруппировать в СКД поле не ограниченной длинны, тогда нужно применить функцию ВЫРАЗИТЬ() для этого поля
ВЫРАЗИТЬ(ПолеНеОграниченнойДлинны КАК Строка(200))
 

CopyPaste Copyright © 2017 - |- Шаблон создан O Pregador - |- Отредактирован myr4ik07