6 дек. 2016 г.

Отбор в списке Справочника 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

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


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

28 окт. 2016 г.

Добавить в контекстное меню Обычные формы

Что бы добавить в контекстное меню ("ПКМ" по Табличной части) свою команду нужно:

  • На форму добавляем "Командная панель"
  • "ПКМ" по добавленной на форме командной панели - добавляем команду
  • Добавленной панели устанавливаем свойство "Видимость" = Ложь
  • В свойстве "КонтекстноеМеню" Табличной части указываем нашу добавленную ранее панель 

Результат



Итоги в табличном документ Обычное формы

Для отображения Итого (в Подвале) табличной части не управляемых форм нужно:

  • в свойствах Табличной части на форме установить галку "Подвал"
  • в свойствах Колонки табличной части (с типом Число) найти и установить галку "ОтображатьИтогВПодвале"

Вывести полное наименование в типовый отчет

Возьмем, например типовый отчет "Ведомость по товарам в розницу" конфигурации "Управление торговлей для Украины", редакция 2.3. Если зайти в выбор Поле (Группировка строк) то увидим, что Полное наименование, из справочника номенклатура никак не вытянуть, этого поля нет.

Что бы выводить Полное наименование номенклатуры нужно зайти в расширенные настройки Настроек, перейти на вкладку Дополнительные поля и уже там будет возможность из справочника Номенклатура вытянуть поле Полное наименование.


в результате получаем то что нужно




26 окт. 2016 г.

Запись xml из строки 7.7

Для сохранения хмл строки в хмл документ выполним
 Попытка
  ТекстовыйДокумент = СоздатьОбъект("Текст"); 
  ТекстовыйДокумент.Записать("D:\1.xml"); 
  
  ТекстовыйДокумент.Открыть("D:\1.xml");
  ТекстовыйДокумент.ДобавитьСтроку(ИмяВыбрФайла);  
  ТекстовыйДокумент.КодоваяСтраница(0);  
  ТекстовыйДокумент.Записать("D:\1.xml");         
  Предупреждение("ОК");    
 Исключение    
  Сообщить(ОписаниеОшибки());
 КонецПопытки;
!ИмяВыбрФайла - это строка в виде хмл

An invalid character was found in text content 1С 7.7

При чтении хмл файла получаю
"................ An invalid character was found in text content."

дело здесь в кодировке.
Открыл файл, изменил кодировку на WINDOWS-1251


ошибка исчезла.

Прочитать xml 7.7

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

Для разбора хмл будем использовать v7plus.dll.
Два файла из архива нужно закинуть в C:\Program Files (x86)\1Cv77\BIN\
И после этого запустить cmd.exe от имени администратора и выполнить
regsvr32 /u "C:\Program Files (x86)\1Cv77\BIN\v7chart.dll"

Запись в хмл документ из строки
 Попытка
  ТекстовыйДокумент = СоздатьОбъект("Текст"); 
  ТекстовыйДокумент.Записать("D:\1.xml"); 
  
  ТекстовыйДокумент.Открыть("D:\1.xml");
  ТекстовыйДокумент.ДобавитьСтроку(ИмяВыбрФайла);  
  ТекстовыйДокумент.КодоваяСтраница(0);  
  ТекстовыйДокумент.Записать("D:\1.xml");         
  Предупреждение("ОК");    
 Исключение    
  Сообщить(ОписаниеОшибки());
 КонецПопытки;
!ИмяВыбрФайла - это строка в виде хмл от "новой почты"

Чтение файла хмл
 Если ЗагрузитьВнешнююКомпоненту("v7plus.dll") = 0 Тогда 
  Предупреждение("v7plus!"); 
  Возврат; 
 КонецЕсли; 
 
 XMLАнализатор = СоздатьОбъект("AddIn.XMLParser");
 XMLДокумент = XMLАнализатор.СоздатьДокумент();
 XMLДокумент.Загрузить("D:\1.xml");
 XMLКорневойРаздел = XMLДокумент.ВыбратьУзлы("*");
 XMLКорневойРаздел = XMLКорневойРаздел.ПолучитьУзел(0);
 ДанныеXML = XMLКорневойРаздел.ВыбратьУзлы("*");
 Для Сч1 = 0 По ДанныеXML.КоличествоУзлов() - 1 Цикл
  ТС = ДанныеXML.ПолучитьУзел(Сч1);   
  
  ДанныеXML2 = ТС.ВыбратьУзлы("*");     
  Для Сч2 = 0 По ДанныеXML2.КоличествоУзлов() - 1 Цикл  
   ТС2 = ДанныеXML2.ПолучитьУзел(Сч2);  
   
   ДанныеXML3 = ТС2.ВыбратьУзлы("*");  
   Для Сч3 = 0 По ДанныеXML3.КоличествоУзлов() - 1 Цикл   
    ТС3 = ДанныеXML3.ПолучитьУзел(Сч3);  
    Сообщить(ТС3.Текст);  
   КонецЦикла;

  КонецЦикла;  
 КонецЦикла;  
на выходе получаю

25 окт. 2016 г.

Подключиться к сайту с 7.7

Для подключение к  API "Новой почты" с 7-ки выполняем
 HTTPxml = СоздатьОбъект("MSXML2.xmlHttp.4.0");     
 HTTPxml.Open("POST", "https://api.novaposhta.ua/v2.0/xml/", 0 );
 HTTPxml.setRequestHeader("Content-Type", "text/xml");    
  
 HTTPxml.Send(запрос);      
 Результат = HTTPxml.responseText;
в переменную Результат будет возвращено ответ в виде .xml

22 окт. 2016 г.

Отчет Неликвиды для 1С 7.7

  • Есть возможность устанавливать условия на неликвиды как на уровне ТМЦ\группы, а также Складам 
  • Есть галка сортировки по колонке «Конечная сумма» 
  • Можно устанавливать порог не ликвидности, который отсечет в отчете неликвиды 
  • больше нужного «числа» 
! Разрабатывалось для Бухгалтерия+Торговля+Производство+Зарплата+Кадры для Украины 


Логика «неликвидов»:
С начала стоит условие на начальное количество ТМЦ за период должно быть больше 0, тогда в отчет ТМЦ попадает, а далее если первое условие пройдено рассчитываем ликвидность формулой
Расход/(НачальныйОстаток+Приход)*100 и уже рассчитанный результат должен быть  >= ликвидности (числа), который указываем на форме отчета.
Отчет скачать

 

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