Сычёв Анатолий

3
Рейтинг

stolya
Анатолий Сычёв



  •   Регистрация: 01.07.2010 (13 лет назад)

  •   Был(а) на сайте: 25.04.2024

Подписчики 2

Рейтинг 3


Комментарии

DevХватит создавать формы выбора!#28 21.12.16 19:41
Не так давно тоже начал применять данный подход и столкнулся с двумя особенностями из-за которых перестал использовать данный способ:
1. Сохраняются все настройки формы (добавленные поля, пользовательский отбор, размещение элементов на форме). Добавил я как то в форму списка подчиненного владельцу пользовательский отбор по владельцу, так как на форме списка его не было по бизнес логике, и соответственно он сохранился и применялся в режиме выбора с установленным отбором по владельцу через Связи параметров выбора.
2. Если используется метод глобального контекста ПоказатьВводЗначения или ВвестиЗначение, то в открываемой форме режим выбора не устанавливается, в результате приходится дописывать параметр РежимВыбора в модуль менеджера в событие ОбработкаПолученияФормы при открытии формы выбора что не очень удобно. Не тестировал еще работу в режиме подбора в список значений, открываемый в отборе компоновки с видом сравнения "В списке" и т.п.
DevОбновление нумерации объекта#2 10.07.16 12:06
(1) capitan, неявное указание отмены транзакции (то как ты рекомендуешь) не считается правильным программированием, так как система будет ожидать либо команду зафиксирования транзации или команду отмены и если дойдя до конца обработчика не будет одной из двух команд, то система автоматически отменит транзакцию и освободит используемые ресурсы - в итоге не оптимальное использование ресурсов системы.
Другой аналогичный пример: в начале обработчика выполняется получение большой таблицы значений с сохранением ее в переменной для разового использования. Если после использования таблицы не очистить переменную, то данные таблицы будут храниться в памяти на протяжении всей обработки, что в свою очередь может повлечь превышения объема доступной оперативной памяти.
Исключение по уникальности номера можно отключить используя признак "Отключить контроль записи".
DevОбновление нумерации объекта#0 05.07.16 21:59
Обработка для обновления нумераций/кодов объектов информационной базы
DevИзменение связей предопределенных элементов#2 04.08.15 17:15
(1) dj_serega,
На это были следующие причины:
1. В этой обработке реализован альтернативный интерфейс по управлению связей предопределенных элементов (на мой взгляд минимальный и достаточный).
2. Я хотел сделать эту обработку бесплатной (что у меня и не получилось, настройка не сохранилась). Сейчас задал вопрос в техническую поддержку для выяснения причины. Как выясню, сразу поменяю на бесплатное скачивание.
3. У меня нету средств для скачивания разработок, поэтому выложил свой вариант обработки.

Основными причинами были пункт 2 и 3.
DevИзменение связей предопределенных элементов#0 03.08.15 13:59
Обработка для настройки связей предопределенных элементов и объектов информационной базы
DevПарсер веб-сайтов для 1С:Предприятие 8.3#24 08.04.15 6:55
Парсить веб-сайты проще всего с помощью объекта ПостроительDOM. Работает на любой версии платформы.
Ниже приведен пример скачивания веб-страницы и чтение ее построителем DOM (если есть поле HTML документа, на котором загружена страница, что раздел загрузки веб страницы можно пропустить).
Обработка читает данные в таблице со страниц с сайта http://enstru.skc.kz/ru/last/?PAGEN_1=1
Код
// Объявление переменных
ОбрабатываемыеКолонки = Новый Соответствие;
ОбрабатываемыеКолонки.Вставить("Код"              , "Код");
ОбрабатываемыеКолонки.Вставить("Единица измерения", "ЕдиницаИзмерения");
ОбрабатываемыеКолонки.Вставить("МКЕИ"             , "ЕдиницаИзмеренияКод");
ОбрабатываемыеКолонки.Вставить("Название"         , "ПолноеНаименование");
ОбрабатываемыеКолонки.Вставить("Описание"         , "Характеристика");
ОбрабатываемыеКолонки.Вставить("Вид"              , "ВидНоменклатуры");

СоответствияИменИИндексовКолонок = Новый Соответствие;
НомерСтраницы                    = 1;
КоличествоСтраниц                = 1;
Массив                           = Новый Массив;

Пока НомерСтраницы <= КоличествоСтраниц Цикл
   
   #Если Клиент Тогда
      Состояние("Обработка страницы " + НомерСтраницы + " из " + ?(СоответствияИменИИндексовКолонок.Количество() = 0, "?", КоличествоСтраниц), , "Пожалуйста, подождите...");
   #КонецЕсли
   
   // Загрузка веб-страницы
   Заголовки = Новый Соответствие;
   Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36");
   
   // Получим текст страницы данные страницы
   ВременныйФайл  = ПолучитьИмяВременногоФайла("html");
   HTTPСоединение = Новый HTTPСоединение("enstru.skc.kz");
   
   HTTPОтвет = HTTPСоединение.Получить(Новый HTTPЗапрос("/ru/last/?PAGEN_1=" + НомерСтраницы, Заголовки), ВременныйФайл);
   Если HTTPОтвет.КодСостояния <> 200 Тогда
      ВызватьИсключение HTTPОтвет.КодСостояния;
   КонецЕсли;
   
   ЧтениеТекста  = Новый ЧтениеТекста(ВременныйФайл);
   ТекстСтраницы = ЧтениеТекста.Прочитать();
   ЧтениеТекста.Закрыть();
   
   УдалитьФайлы(ВременныйФайл);
   
   // Чтение HTML страницы
   ЧтениеHTML = Новый ЧтениеHTML;
   ЧтениеHTML.УстановитьСтроку(ТекстСтраницы);
   
   ПостроительDOM = Новый ПостроительDOM;
   ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
   Для Каждого ТаблицаHTML Из ДокументHTML.ПолучитьЭлементыПоИмени("table") Цикл
      Если ТаблицаHTML.ИмяКласса = "detail-table" Тогда
         Перейти ~ПриступитьКЧтениюТаблицы;
      КонецЕсли;
   КонецЦикла;
   
   ЧтениеHTML.Закрыть();
   Возврат Массив;
   
   ~ПриступитьКЧтениюТаблицы:
   
   Если СоответствияИменИИндексовКолонок.Количество() = 0 Тогда
      
      КоличествоСтраниц = СтрЧислоВхождений(ТаблицаHTML.ПредыдущийСоседний.ТекстовоеСодержимое, "|");
      #Если Клиент Тогда
         Состояние("Обработка страницы " + НомерСтраницы + " из " + ?(СоответствияИменИИндексовКолонок.Количество() = 0, "?", КоличествоСтраниц), , "Пожалуйста, подождите...");
      #КонецЕсли
      
      ИндексКолонки   = -1;
      СтрокаЗаголовка = ТаблицаHTML.ПолучитьЭлементыПоИмени("thead")[0];
      Для Каждого ТекКолонка Из СтрокаЗаголовка.ДочерниеУзлы[0].ДочерниеУзлы Цикл
         ИндексКолонки = ИндексКолонки + 1;
         Если ОбрабатываемыеКолонки[ТекКолонка.ТекстовоеСодержимое] <> Неопределено Тогда
            СоответствияИменИИндексовКолонок.Вставить(ОбрабатываемыеКолонки[ТекКолонка.ТекстовоеСодержимое], ИндексКолонки);
         КонецЕсли;
      КонецЦикла;
      
   КонецЕсли;
   
   ТаблицаДанных = ТаблицаHTML.ПолучитьЭлементыПоИмени("tbody")[0];
   Для Каждого ТекСтрока Из ТаблицаДанных.ДочерниеУзлы Цикл
      Массив.Добавить(СокрЛП(ТекСтрока.ДочерниеУзлы.Элемент(СоответствияИменИИндексовКолонок["Код"]).ТекстовоеСодержимое));
   КонецЦикла;
   
   ЧтениеHTML.Закрыть();
   НомерСтраницы = НомерСтраницы + 1;
   
КонецЦикла;