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))

Использование в отборе Категорий в СКД

Конфигурация Управление Торговлей.

Постала задача в отбор отчета на СКД добавить возможность выбора из Справочники.Номенклатура категорий.


Для решения открываем наш запрос и в конце запроса добавляем 
{ХАРАКТЕРИСТИКИ
   ТИП(Справочник.Номенклатура)
   ВИДЫХАРАКТЕРИСТИК (ВЫБРАТЬ
         СвойстваОбъектов.Ссылка,
         СвойстваОбъектов.ТипЗначения,
         "Свойство: " + СвойстваОбъектов.Наименование КАК Наименование
      ИЗ
         ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов
      ГДЕ
         СвойстваОбъектов.НазначениеСвойства = ЗНАЧЕНИЕ(ПланВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура))
   ПОЛЕКЛЮЧА Ссылка
   ПОЛЕИМЕНИ Наименование
   ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения
   ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.ЗначенияСвойствОбъектов
   ПОЛЕОБЪЕКТА Объект
   ПОЛЕВИДА Свойство
   ПОЛЕЗНАЧЕНИЯ Значение }
{ХАРАКТЕРИСТИКИ
   ТИП(Справочник.Номенклатура)
   ВИДЫХАРАКТЕРИСТИК (ВЫБРАТЬ
         КатегорииОбъектов.Ссылка,
         "Категория: " + КатегорииОбъектов.Наименование КАК Наименование
      ИЗ
         Справочник.КатегорииОбъектов КАК КатегорииОбъектов
      ГДЕ
         КатегорииОбъектов.НазначениеКатегории = ЗНАЧЕНИЕ(ПланВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура))
   ПОЛЕКЛЮЧА Ссылка
   ПОЛЕИМЕНИ Наименование
   ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.КатегорииОбъектов
   ПОЛЕОБЪЕКТА Объект
   ПОЛЕВИДА Категория
}
Взято с ссылка

Переопределить кнопку Выбора 7.7

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


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

Обработка нажатия формы списка 7.7

Пример, есть форма списка Справочника с несколькими колонками


В свойствах этого справочника стоит настройка Редактировать: В диалоге


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

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

 Форма.ОбработкаВыбораСтроки(1);
А значит, если пользователь выбрал колонку Документ (Док) то будет открыт форма документа, а если выбрал любую другую колонку тогда мы ищем из текущей строки объект по коду в нашем справочнике и открываем его.

11 нояб. 2016 г.

Назначить тип реквизиту 7.7

Есть Документ.ПКО в которого есть реквизит с типом Неопределенній


при программном заполнении реквизита этого документа прежде чем заполнить реквизит "субконто" ему нужно назначить тип, для этого 
Док = СоздатьОбъект("Документ.ПКО");
//назначем реквизиту Субконтотип Справочник.Номенклатура
Док.НазначитьТип("Субконто","Справочник.Номенклатура"); 
 

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