Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Войти | Зарегистрироваться )



История благодарностей участнику Vofka ::: Спасибо сказали: 4519 раз
Дата поста: В теме: За сообщение: Спасибо сказали:
12.08.11, 6:57 Динамический список. Запрос.
Цитата
Не, не работает как надо.

А чё? Что именно не работает?

Цитата
Задача упрощается )) Номенклатура отображается всегда вся, но остатки надо только по выбранному складу.

ВЫБРАТЬ
    СправочникНоменклатура.*,
    ТоварыОстатки.Номенклатура,
    ТоварыОстатки.КоличествоОстаток
ИЗ
    Справочник.Номенклатура КАК СправочникНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Товары.Остатки(, Склад = &Склад) КАК ТоварыОстатки
        ПО (ТоварыОстатки.Номенклатура = СправочникНоменклатура.Ссылка)
logist,
11.08.11, 13:52 Фактическая дата создания документа
Кто-то в курсе как из guid-а определить дату и время создания? Я вам расскажу:

Функция ДатаСозданияСсылки(Ссылка)
    ГУИД = Ссылка.УникальныйИдентификатор();
    Строка16 = Сред(ГУИД, 16, 3) + Сред(ГУИД, 10, 4) + Сред(ГУИД, 1, 8);
    Разрядность = СтрДлина(Строка16);
    ЧислоСек = 0;
    Для Позиция = 1 По Разрядность Цикл
        ЧислоСек = ЧислоСек + Найти("123456789abcdef",Сред(Строка16,Позиция,1))*Pow(16,Разрядность - Позиция);
    КонецЦикла;
    ЧислоСек = ЧислоСек / 10000000;
    Возврат Дата(1582, 10, 15, 04, 00, 00) + ЧислоСек;
КонецФункции


Размещаю в разделе для 8.2, но подозреваю, что и для 8.1 и 8.0 сработает.

В интернете куча мест, где этот код определён без каки-либо ссылок. Но посмею предположить, что код всеми спизж стырен отсюда

Обновление 27.02.2014:
По просьбе ниже, выкладываю обработку, которая использует этот код: [attachment=762:Определе...ПоСсылке.zip]
chehaser,
10.08.11, 19:00 Несколько вопросов про 1С от пользователя "Финансы без проблем"
Цитата
Если не сложно, то немного про этот инструмент. Что это такое и как это может заменить операцию с определенным количеством проводок по бухгалтерским счетам?

Документ это и есть операция и он отражает "комплект" нужных проводок, которыми запрограммирован
SMak044,
10.08.11, 15:42 Прикольные картинки
Alan68, logist, MATEVI,
10.08.11, 11:35 В отчет вылез остаток (сумма) тмц без количества
Цитата
а можете посоветовать хороший сайт, как правильно восстановить последовательность

Это у нас имеются сайты по восстановлению последовательности 1С? ohmy.gif
ЗЫ. в музей icon_golod7.gif
Batchir, logist, shurik_shurik,
09.08.11, 18:02 Открыть диалог выбора файла
Код 1C v 8.х
  //На форме есть поле (Путь к файлу), для кнопки Выбор (Событие начало выбора) пропишем процедуру выбора файла
Процедура ВыборФайла(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    СтандартнаяОбработка=ложь;
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выберите файл";
    Диалог.ПолноеИмяФайла = "";
    Фильтр = "EXE (*.exe)|*.exe";
    Диалог.Фильтр = Фильтр;
    Диалог.МножественныйВыбор = Ложь;
    Диалог.Каталог = "F:\";
    Если Диалог.Выбрать() Тогда
        Элемент.значение = Диалог.ПолноеИмяФайла;
    КонецЕсли;
КонецПроцедуры

(с)
pablo, Selvi,
09.08.11, 14:18 Парсинг товаров сайта средствами 1С 8
В этой статье я постараюсь описать процесс парсинга сайтов средствами 1С с примером. Это статья не является инструкцией к применению, а лишь демонстрирует возможности 1С.

Что мы имеем?

1. Сайт в интернете, на котором располагается список товаров. В моем случае – это интернет магазин салона «Связной»
2. Понимание основ сайтостроения… хотя бы знание HTML тегов
3. Умение кодить в 1С 8

Все вышеперечисленные пункты в арсенале? Тогда читаем далее


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

Далее нам будут интересны такие поля как: Наименование, Цена, Картинка и Описание... ну и пожалую захватим операционную систему, чтобы пример получился более наглядным.

1. Создаем внешнюю обработку. Те, кто не знают как это сделать - дальше могут не читать
2. Создаем форму обработки с командной панелью снизу и сверху (они могут быть полезными)
3. Размещаем на ней Панель и обзываем первую страницу "СамСайт"
4. Кладем на страницу "СамСайт" ПолеHTMLДокумента и обзываем его к примеру "Сайт"
5. Переименовываем кнопку "Выполнить", которая находится на нижней панели в "Загрузить сайт"
6. Описываем процедуру нажатия на эту кнопку так:

   ЭлементыФормы.Сайт.Перейти("http://www.svyaznoy.ru/catalog/phone/224");//Категория с мобильными телефонами


7. Проверяем работу нашей обработки. У меня появился сайт связного. А у Вас?

Дальше сложнее. Все еще хочешь парсить сайты? Тогда читай

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

1. Создадим табличную часть "Производители" с реквизитами "Отметка" (Булево), "Наименование" (Строка 100) и "Ссылка" (Строка 300).
2. Добавляем еще одну страницу на панели и обзываем ее "Производители"
3. Размещаем на этой странице одноименную табличную часть
4. Добавляем на нижней панели кнопку "Заполнить производителей" с кодом:

        Для Каждого Стр из ЭлементыФормы.Сайт.Документ.body.all Цикл
              Если Стр.tagName = "H1" и Стр.innerText = "Производители" Тогда
                  Для Каждого опСтр из Стр.nextSibling.children Цикл
                      новСтр = Производители.Добавить();
                      новСтр.Наименование = опСтр.innerText;
                      новСтр.Ссылка = опСтр.firstChild.href;
                  КонецЦикла;
                  Возврат;
              КонецЕсли;
          КонецЦикла;


Здесь напрашиваются небольшие пояснения:
tagName - имя HTML тега в HTML документе
nextSibling - следующий элемент HTML документа от текущего
children - список дочерних элементов
firstChild - первый дочерний элемент от текущего
5. Проверям. При проверке важно, находиться на странице "СамСайт", чтобы заполнять производителей

Производители заполнены. Теперь к самим телефонам

1. Создаем табличную часть "Товары" с реквизитами "Производитель" (Строка 100), "Наименование" (Строка 100), "Цена" (Число 10,2), "Картинка" (Строка 300), "Описание" (Строка Неограниченная), "ОС" (строка 100), "Ссылка" (Строка,300)
2. Добавляем еще одну страницу на панели и обзываем ее "Товары"
3. Размещаем на этой странице одноименную табличную часть
4. Добавляем на нижней панели кнопку "Заполнить товары" с кодом:

      Для Каждого Стр из Производители Цикл
          //Если отметку сняли - то не трогаем этого производителя
          Если Не Стр.Отметка Тогда
              Продолжить;
          КонецЕсли;
          Форма = ПолучитьФорму("ФормаТоваров");
          Форма.ЭлементыФормы.Сайт.Перейти(Стр.Ссылка);
          Форма.ТекущийПроизводитель = Стр;
          Форма.ОткрытьМодально();
      КонецЦикла;


5. Создаем форму обработки "ФормаТоваров"
6. Кладем на "ФормаТоваров" ПолеHTMLДокумента и называем его "Сайт"
7. На событие ДкументСформирован у ПоляHTMLДокумента пишем код:

 Если ЭлементыФормы.Сайт.Документ.body.all.length>1 Тогда
          ГрузимТовары();
      КонецЕсли;


8. Создаем переменную в модуле формы
перем ТекущийПроизводитель Экспорт;
9. Создаем процедуру ГрузимТовары():

  Процедура ГрузимТовары()
          Для Каждого Стр из ЭлементыФормы.Сайт.Документ.body.all Цикл
              Если Стр.className = "ct_desc cleared" Тогда
                  новСтр = Товары.Добавить();
                  Для Каждого опСтр из Стр.children Цикл
                      Если опСтр.className = "pic_and_comp" Тогда
                          новСтр.Картинка = СтрЗаменить(Сред(опСтр.firstChild.style.backgroundImage,5),")","")
                      КонецЕсли;
                      Если опСтр.className = "name" Тогда
                          новСтр.Наименование = опСтр.innerText;
                          новСтр.Ссылка = опСтр.firstChild.href;
                      КонецЕсли;
                      Если опСтр.className = "price" Тогда
                          новСтр.Цена = Число(СтрЗаменить(СтрЗаменить(опСтр.innerText,"-","")," ",""));
                      КонецЕсли;
                      Если опСтр.className = "desc" Тогда
                          новСтр.Описание = опСтр.innerText;//опСтр.innerHTML - если нужно вместе с тегами

                      КонецЕсли;
                  КонецЦикла;

              КонецЕсли;

          КонецЦикла;
          Закрыть();
      КонецПроцедуры




10. Проверям. Все работает.

Дело осталось за "операционной системой" и еще надо загрузить картинки. Давайте по порядку. Чтобы получить "ОС" нам надо открыть этот товар и считать "ОС" оттуда. Для этого делаем следующее:

1. Добавляем на нижней панели кнопку "Доп Инфо" с кодом:

  Для Каждого Стр из Товары Цикл
          Форма = ПолучитьФорму("ФормаДопИнфо");
          Форма.ЭлементыФормы.Сайт.Перейти(Стр.Ссылка);
          Форма.ТекущийТовар = Стр;
          Форма.ОткрытьМодально();
      КонецЦикла;


2. Создаем форму обработки "ФормаДопИнфо"
3. Кладем на "ФормаДопИнфо" ПолеHTMLДокумента и называем его "Сайт"
4. На событие ДкументСформирован у ПоляHTMLДокумента пишем код:

   Если ЭлементыФормы.Сайт.Документ.body.all.length>1 Тогда
          ГрузимДопИнфо();
      КонецЕсли;


5. Создаем переменную в модуле формы
перем ТекущийТовар Экспорт;
6. Создаем процедуру ГрузимДопИнфо():

  Процедура ГрузимДопИнфо();
          Для Каждого Стр из ЭлементыФормы.Сайт.Документ.body.all Цикл
              Если Стр.className = "card_spec" Тогда
                  Для Каждого опСтр из Стр.children Цикл
                      Если Найти(опСтр.innerText,"Операционная система:") Тогда
                          ТекущийТовар.ОС = СокрЛП(СтрЗаменить(опСтр.innerText,"Операционная система:",""));
                      КонецЕсли;
                  КонецЦикла;
              КонецЕсли;
          КонецЦикла;
          Закрыть();
      КонецПроцедуры


7. Проверяем и переходим к последнему пункту

Заметили как похожи две последние инструкции? То-то же. Стремился к универсальности. Ну и наконец последний этап - Сохраним все изображения к примеру на диск "С" в папку "связной". Поехали

1. Добавляем на нижней панели кнопку "Сохранить Картинки" с кодом:

    Для Каждого Стр из Товары Цикл
              путьСамФайл = Лев(Стр.Картинка,Найти(Стр.Картинка,".jpg/") + 3);
              самФайл = СтрЗаменить(СтрЗаменить(ПутьСамФайл,"http://static.svyaznoy.ru/upload/iblock/",""),"/","");
              Стр.Картинка = СохранитьКартинкуСайта("C:\Svyaznoy",ПутьСамФайл,СамФайл);
          КонецЦикла;


2. Добавляем функцию СохранитьКартинкуСайта:

   Функция СохранитьКартинкуСайта(КаталогСохранения,КартинкаНаСайте,КартинкаУНас)
              ИмяФайлаКартинки = КаталогСохранения + "\" + КартинкаУНас;
              ГетЗапрос = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
              ГетЗапрос.SetTimeouts(10000, 10000, 10000, 10000);
              БазовыйУРЛ = КартинкаНаСайте;
              Хидер1 = "Content-Type";
              Хидер2 = "image/jpg"; // Тип рисунка.
              ГетЗапрос.Open("GET", БазовыйУРЛ, False); // Синхронный режим.
              ГетЗапрос.setRequestHeader(Хидер1, Хидер2);
              ГетЗапрос.Send();
              СтатусОтправки = ГетЗапрос.status;
              Если СтатусОтправки <> 200 Тогда
                  Сообщить("Ошибка отправки запроса на: "
                      + КартинкаНаСайте);
                  Возврат "";
              КонецЕсли;        

              Стрим = Новый COMОбъект("ADODB.Stream");
              Стрим.Mode = 3;
              Стрим.Type = 1;
              Стрим.Open();
              Стрим.Write(ГетЗапрос.responseBody);

              Стрим.SaveToFile(ИмяФайлаКартинки, 2);
              Стрим.Close();
              Возврат ИмяФайлаКартинки;
      КонецФункции


На этом наша эпопея с парсингом закончена. Это всего лишь пример того, как это можно сделать. Приложив сюда немного своего кода - можно сделать парсер для любого сайта.

Имя парсер 1С - я могу спарсить все, кроме этого парсера. Имя два парсера 1С - я могу спарсить все smile.gif



Скачать

©
borrman, shurik_shurik,
09.08.11, 13:57 Сохранение/восстановление настроек динамического списка
Один из пороков программ - забывчивость. Пользователь настраивал настраивал под себя интерфейс, закрыл форму, открыл и вуаля... настраивай все заново. Так можно и монитор сломать. Проблему усугубляет отсутствие стандартного механизма сохранения/восстановления настроек динамических списков. Под катом решение проблемы.

Основные моменты и предпосылки:

1) Преобразуем настройки списков так, чтобы их можно было сохранять

2) в 95% случаев при открытии формы нам нужно, чтобы восстановилось последнее состояние формы, а не по умолчанию или список выбора сохраненной настройки(которую еще и сохранить до этого нужно было)

3) Списки в основном учавствуют в формах списка и выбора, где нет других полей к сохранению, поэтому к стандартному механизму с методами ПриСохраненииДанныхВНастройкахНаСервере и ПриЗагрузкеДанныхИзНастроекНаСервере больно то не подрубишся

После небольшой работы мозгами получилось следующее:

в форме пишем такой код:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

ксНастройкиСервер.ВосстановитьНастройкиСписка( ЭтаФорма );

КонецПроцедуры


&НаКлиенте
Процедура ПриЗакрытии()

СохранитьНастройкиСписка();

КонецПроцедуры

Процедура СохранитьНастройкиСписка()

ксНастройкиСервер.СохранитьНастройкиСписка( ЭтаФорма );

КонецПроцедуры


или аналогично внедряем в методы ПриСохраненииДанныхВНастройкахНаСервере и ПриЗагрузкеДанныхИзНастроекНаСервере одноименные процедуры.

Внедряем в конфигурацию общий модуль ксНастройкаСервер с таким содержанием:

//ПРИМЕР ВЫЗОВА ИЗ ФОРМЫ ДЛЯ АВТОНАСТРОЕК
//
//&НаСервере
//Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//
// ксНастройкиСервер.ВосстановитьНастройкиСписка( ЭтаФорма );
//
//КонецПроцедуры
//
//&НаКлиенте
//Процедура ПриЗакрытии()
//
// СохранитьНастройкиСписка();
//
//КонецПроцедуры
//
//Процедура СохранитьНастройкиСписка()
//
// ксНастройкиСервер.СохранитьНастройкиСписка( ЭтаФорма );
//
//КонецПроцедуры


 //////////////////////////////////////////////////////////////////////////////////////
//СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ НАСТРОЕК ДИН. СПИСКАМ

Процедура СохранитьНастройкиСписка( пФорма, пИмяСписка = "" ) Экспорт

Настройки = Новый Соответствие;
ПриСохраненииДанныхВНастройках( Настройки, пФорма, пИмяСписка );

ХранилищеНастроекДанныхФорм.Сохранить( пФорма.ИмяФормы,, Настройки );

КонецПроцедуры

Процедура ВосстановитьНастройкиСписка( пФорма, пИмяСписка = "" ) Экспорт

Настройки = ХранилищеНастроекДанныхФорм.Загрузить( пФорма.ИмяФормы );

Если ТипЗнч( Настройки ) = Тип( "Соответствие" ) Тогда

ПриЗагрузкеДанныхИзНастроек( Настройки, пФорма, пИмяСписка );

КонецЕсли;

КонецПроцедуры


Процедура ПриСохраненииДанныхВНастройках( Настройки , пФорма, пИмяСписка = "" ) Экспорт

имяСписка = "Список";

Если ЗначениеЗаполнено( пИмяСписка ) Тогда

имяСписка = пИмяСписка;

КонецЕсли;

УстановитьНастройкиДинСпискаВСоответствиие( Настройки, пФорма[имяСписка], пИмяСписка );

КонецПроцедуры


 Процедура УстановитьНастройкиДинСпискаВСоответствиие( пСоответствие, пСписок, пИмяСписка = "" )

префиксКлюча = ПрефиксКлючаНастроекСписка( пИмяСписка );

пСоответствие.Вставить( префиксКлюча + "Группировка" , СериализоватьГруппировки( пСписок.Группировка ) );
пСоответствие.Вставить( префиксКлюча + "Отбор" , СериализоватьОтбор( пСписок.Отбор ) );
пСоответствие.Вставить( префиксКлюча + "Порядок" , СериализоватьПорядок( пСписок.Порядок ) );
пСоответствие.Вставить( префиксКлюча + "УсловноеОформление", СериализоватьУсловноеОформление( пСписок.УсловноеОформление ) );

КонецПроцедуры

Функция ПрефиксКлючаНастроекСписка( пИмяСписка )

префиксКлюча = "";

Если ЗначениеЗаполнено( пИмяСписка ) Тогда

префиксКлюча = пИмяСписка + "_";

КонецЕсли;

Возврат префиксКлюча;

КонецФункции


Процедура ПриЗагрузкеДанныхИзНастроек( Настройки , пФорма, пИмяСписка = "" ) Экспорт

имяСписка = "Список";

Если ЗначениеЗаполнено( пИмяСписка ) Тогда

имяСписка = пИмяСписка;

КонецЕсли;


УстановитьНастройкиИзСоответствияВДинСписок( Настройки, пФорма[имяСписка], пИмяСписка );

КонецПроцедуры

Процедура УстановитьНастройкиИзСоответствияВДинСписок( пСоответствие, пСписок, пИмяСписка = "" )

префиксКлюча = ПрефиксКлючаНастроекСписка( пИмяСписка );

ДесериализоватьГруппировки( пСоответствие[ префиксКлюча + "Группировка" ] , пСписок.Группировка);
ДесериализоватьОтбор( пСоответствие[ префиксКлюча + "Отбор" ] , пСписок.Отбор);
ДесериализоватьПорядок( пСоответствие[ префиксКлюча + "Порядок" ] , пСписок.Порядок);
ДесериализоватьУсловноеОформление( пСоответствие[ префиксКлюча + "УсловноеОформление" ] , пСписок.УсловноеОформление);

КонецПроцедуры


// Группировки
Функция СериализоватьГруппировки(пГруппировки)

ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.УстановитьСтроку();
ЗаписьXML.ЗаписатьНачалоЭлемента("Группировки");
Для Каждого цЭлементГруппировки Из пГруппировки.Элементы Цикл
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, цЭлементГруппировки);
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
Возврат ЗаписьXML.Закрыть();

КонецФункции // СериализоватьГруппировки()


Процедура ДесериализоватьГруппировки(пНастройки_Группировка, пГруппировка)

пГруппировка.Элементы.Очистить();
Если пНастройки_Группировка <> Неопределено Тогда
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(пНастройки_Группировка);
ЧтениеXML.ПерейтиКСодержимому();
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Группировки" Тогда
ЧтениеXML.Прочитать();
Пока ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя <> "Группировки" Цикл
ПолеГруппировкиXML = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
ПолеГруппировки = пГруппировка.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ЗаполнитьЗначенияСвойств(ПолеГруппировки, ПолеГруппировкиXML);
КонецЦикла;
КонецЕсли;
КонецЕсли;

КонецПроцедуры // ДесериализоватьГруппировки()

// Порядок

Функция СериализоватьПорядок(пПорядок)

ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.УстановитьСтроку();
ЗаписьXML.ЗаписатьНачалоЭлемента("Порядок");
Для Каждого цЭлементПорядка Из пПорядок.Элементы Цикл
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, цЭлементПорядка);
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
Возврат ЗаписьXML.Закрыть();

КонецФункции // СериализоватьПорядок()

Функция ДесериализоватьПорядок(пНастройки_Порядок, пПорядок)

пПорядок.Элементы.Очистить();
Если пНастройки_Порядок <> Неопределено Тогда
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(пНастройки_Порядок);
ЧтениеXML.ПерейтиКСодержимому();
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Порядок" Тогда
ЧтениеXML.Прочитать();
Пока ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя <> "Порядок" Цикл
ПолеПорядкаXML = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
ПолеПорядка = пПорядок.Элементы.Добавить(ТипЗнч(ПолеПорядкаXML));
ЗаполнитьЗначенияСвойств(ПолеПорядка, ПолеПорядкаXML);
КонецЦикла;
КонецЕсли;
КонецЕсли;

КонецФункции // ДесериализоватьПорядок()


// Отборы

Функция СериализоватьОтбор(пОтбор)

ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.УстановитьСтроку();
ЗаписьXML.ЗаписатьНачалоЭлемента("Отборы");
Для Каждого цЭлементОтбора Из пОтбор.Элементы Цикл
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, цЭлементОтбора);
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
Возврат ЗаписьXML.Закрыть();

КонецФункции // СериализоватьОтбор()

Процедура ДесериализоватьОтбор(пНастройки_Отбор, пОтбор)

пОтбор.Элементы.Очистить();
Если пНастройки_Отбор <> Неопределено Тогда
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(пНастройки_Отбор);
ЧтениеXML.ПерейтиКСодержимому();
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Отборы" Тогда
ЧтениеXML.Прочитать();
Пока ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя <> "Отборы" Цикл
ПолеОтбораXML = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
ПолеОтбора = пОтбор.Элементы.Добавить(ТипЗнч(ПолеОтбораXML));
СкопироватьЭлементыОтбораРекурсивно(ПолеОтбораXML, ПолеОтбора);
//ПолеОтбора.Поле = ПолеОтбораXML.Поле;
КонецЦикла;
КонецЕсли;
КонецЕсли;

КонецПроцедуры // ДесериализоватьОтбор()


Процедура СкопироватьЭлементыОтбораРекурсивно(пОтборОткуда, пОтборКуда);

ЗаполнитьЗначенияСвойств(пОтборКуда, пОтборОткуда);
Если ТипЗнч(пОтборОткуда) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
Для Каждого ЭлементОтбора Из пОтборОткуда.Элементы Цикл
НовыйЭлементОтбора = пОтборКуда.Элементы.Добавить(ТипЗнч(ЭлементОтбора));
СкопироватьЭлементыОтбораРекурсивно(ЭлементОтбора, НовыйЭлементОтбора);
КонецЦикла;
КонецЕсли;

КонецПроцедуры // СкопироватьЭлементыОтбораРекурсивно()

// Условное оформление

Функция СериализоватьУсловноеОформление(пУсловноеОформление)

ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.УстановитьСтроку();
ЗаписьXML.ЗаписатьНачалоЭлемента("УсловноеОформление");
Для Каждого цЭлементУсловногоОформления Из пУсловноеОформление.Элементы Цикл
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, цЭлементУсловногоОформления);
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
Возврат ЗаписьXML.Закрыть();

КонецФункции // СериализоватьУсловноеОформление()

Функция ДесериализоватьУсловноеОформление(пНастройки_УсловноеОформление, пУсловноеОформление)

пУсловноеОформление.Элементы.Очистить();
Если пНастройки_УсловноеОформление <> Неопределено Тогда
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(пНастройки_УсловноеОформление);
ЧтениеXML.ПерейтиКСодержимому();
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "УсловноеОформление" Тогда
ЧтениеXML.Прочитать();
Пока ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя <> "УсловноеОформление" Цикл
ПолеУсловногоОформленияXML = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
ПолеУсловногоОформления = пУсловноеОформление.Элементы.Добавить();
ЗаполнитьЗначенияСвойств(ПолеУсловногоОформления, ПолеУсловногоОформленияXML);
Для Индекс = 0 по ПолеУсловногоОформленияXML.Оформление.ДоступныеПараметры.Элементы.Количество()-1 Цикл
ЗаполнитьЗначенияСвойств(ПолеУсловногоОформления.Оформление.ДоступныеПараметры.Элементы[Индекс],
ПолеУсловногоОформленияXML.Оформление.ДоступныеПараметры.Элементы[Индекс]);
КонецЦикла;
Для Индекс = 0 по ПолеУсловногоОформленияXML.Оформление.Элементы.Количество()-1 Цикл
ЗаполнитьЗначенияСвойств(ПолеУсловногоОформления.Оформление.Элементы[Индекс],
ПолеУсловногоОформленияXML.Оформление.Элементы[Индекс]);
КонецЦикла;
Для каждого ЭлементОтбораXML ИЗ ПолеУсловногоОформленияXML.Отбор.Элементы Цикл
ЭлементОтбора = ПолеУсловногоОформления.Отбор.Элементы.Добавить(ТипЗнч(ЭлементОтбораXML));
СкопироватьЭлементыОтбораРекурсивно(ЭлементОтбораXML, ЭлементОтбора);
КонецЦикла;
Для каждого ПолеXML ИЗ ПолеУсловногоОформленияXML.Поля.Элементы Цикл
Поле = ПолеУсловногоОформления.Поля.Элементы.Добавить();
ЗаполнитьЗначенияСвойств(Поле, ПолеXML);
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЕсли;

КонецФункции // ДесериализоватьУсловноеОформление()


Скачать

©
nimasu,
09.08.11, 12:56 Конвертер документов в 1С:Предприятие 8 из Xml-файла произвольной структуры
Подручный, бесплатный инструмент для программиста, с руками, растущими "откуда нужно".

Итак, у вас имеется НЛО: полученный Невесть Откуда ХМЛ-файл произвольной структуры, и кто-то злой требует, чтобы он превратился (и всякий раз превращался) в документ (кучу документов) в некоторой конфигурации 1С.

Предлагаемый загрузчик позволяет решить эту задачу, а именно:

1. Проанализировать структуру xml-файла
2. Создать правила сопоставления с объектами конфигурации
3. Выполнить загрузку и сформировать документы в базе
4. Выполнить автоматическую постобработки загруженных данных (заполнение каких-то полей, расчет суммы документа и т.д., все то, что предполагается в конфигурации при создании загружаемого документа)

За основу был взят мой xml-парсер, но большую часть проекта выполнила ведущий специалист ООО "О-Планет" Маша Желонкина. (сам ф шоке!)

Особенность женской логики проявилась в немного сложноватом (для ума мужчины) интерфейсе и наличие двух пояснительных файлов, названных "Описание" и "Инструкция". В остальном работа, на мой взгляд, замечательная.

Хоть работа и коммерческая, но выкладываем для свободного скачивания и использования программистами в их нелегком труде. Коллеги - выссказывайтесь! wink.gif





Скачать (пароль в правилах раздела): [attachment=422:parser.zip]

©
bogdan3112, Doubrovski, igorvod1, octadm, vikewoods, Дегу, Дмитрий Дмитриевич Костен,
09.08.11, 12:43 Переводчик Google для 1С 8.1
Перевод слов и фраз на другие языки Google Переводчиком (GoogleTranslate API). Без ВК. Сейчас работает без ключа API.

Код:

Функция ПреобразоватьСтрокуОтветаПереводчика (Строка, Ошибка=Ложь, КодОшибки=0, СтрокаОшибки = "") Экспорт
    ТекСтрока     = Строка;
    ТекСтрока     = СтрЗаменить (ТекСтрока, "{""responseData"": {","");
    ТекСтрока     = Лев (ТекСтрока, СтрДлина (ТекСтрока)-1);
    ТекСтроки     = СтрЗаменить (ТекСтрока, ",", Символы.ПС);
    ТекПеревод     = СтрПолучитьСтроку (ТекСтроки, 1);
    ТекПеревод     = СтрЗаменить (ТекПеревод, """translatedText"":""", "");
    ТекПеревод     = Лев (ТекПеревод, СтрДлина (ТекПеревод)-2);
    Возврат ТекПеревод;
КонецФункции

Функция ТекстДляУРЛ (Текст) Экспорт
    хВСХ             = Новый COMОбъект ("MSScriptControl.ScriptControl");
    хВСХ.language     = "javascript";
    Результат         = хВСХ.Eval("escape('"+Текст+"')");
    Возврат Результат;
КонецФункции

Функция ПеревестиТекст (ИсходныйТекст, ЯзыкИсходный, ЯзыкПеревода, Ошибка = Ложь, КодОшибки = 0, ТекстОшибки = "") Экспорт
    Если Не ЗначениеЗаполнено (ИсходныйТекст) Тогда
        Возврат "";
    КонецЕсли;
    Результат = "";
    УРЛСайта = "ajax.googleapis.com";

//    УРЛ = "https://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=<%СЛОВО%>&langpair=<%ЯЗЫКИСТОЧНИК%>|<%ЯЗЫКПЕРЕВОДА%>";
    УРЛ = "/ajax/services/language/translate?v=1.0&q=<%СЛОВО%>&langpair=<%ЯЗЫКИСТОЧНИК%>|<%ЯЗЫКПЕРЕВОДА%>";
    ТекИсходныйТекст = ТекстДляУРЛ (ИсходныйТекст);
    УРЛ = СтрЗаменить (УРЛ, "<%СЛОВО%>", ТекИсходныйТекст);
    УРЛ = СтрЗаменить (УРЛ, "<%ЯЗЫКИСТОЧНИК%>", ЯзыкИсходный);
    УРЛ = СтрЗаменить (УРЛ, "<%ЯЗЫКПЕРЕВОДА%>", ЯзыкПеревода);

    Коннект              = Новый HTTPСоединение(УРЛСайта);
    ЧтениеТекста         = Новый ТекстовыйДокумент;

    СтруктураПараметров = Новый Структура;

    ИмяВременногоФайла=ПолучитьИмяВременногоФайла("txt");
    ФлагОшибкиВеб = Ложь;
    КоличествоПопыток = 3;
    СчПопыток = 1;
    Пока Истина Цикл
        Попытка
            Коннект.Получить(УРЛ,ИмяВременногоФайла);
            Прервать;
        Исключение
            Если СчПопыток >= КоличествоПопыток Тогда
                ФлагОшибкиВеб = Истина;
                Прервать;
            Иначе
                СчПопыток = СчПопыток + 1;
            КонецЕсли;
        КонецПопытки;
    КонецЦикла;

    Если Не ФлагОшибкиВеб Тогда
        ЧтениеТекста.Прочитать(ИмяВременногоФайла, КодировкаТекста.UTF8);
        СтрокаОтвета = ЧтениеТекста.ПолучитьТекст();
        ТекстПеревод = ПреобразоватьСтрокуОтветаПереводчика (СтрокаОтвета);
        Результат = ТекстПеревод;
    Иначе
        Ошибка             = Истина;
        КодОшибки         = 1;
        ТекстОшибки     = "Время ожидания ответа истекло";
    КонецЕсли;
    Возврат Результат;
КонецФункции

// вызов

Сообщить (ПеревестиТекст ("слово", "ru", "en"));


(с)
AnryMc, zay,
09.08.11, 11:59 Просмотр и редактирование Hbk-файлов (синтакс-помощник и другие справочные файлы)
Просмотр и редактирование hbk-файлов - справочной информации 1с, в том числе и синтакс-помощника. Реализовано на управляемых формах, но ничего не мешает переделать под толстого клиента.

Обработка представляет из себя что-то вроде синтакс-помощника, но с возможностью редактирования: можно перемещать/удалять строки, можно добавлять свою иерархию со своими html-файлами и шаблонами по подстановке в текст модуля. Алгоритм работы примерно следующий:

  1. Читаем файл hbk (shcntx_ru.hbk - основная часть синтакс-помощника, например).
  2. При этом в каталоге временных файлов создается каталог shcntx_ru (имя выбранного файла), где будет происходить вся дальнейшая работа.
  3. Редактируем иерархию файла: перемещаем строки, перетаскиванием изменяем иерархию, удаляем, создаем новые и т.д. Существует три вида строк, насколько я понял: папка с описанием, папка и раздел. Все эти виды строк помечаются соответствующей пиктрограммой.
  4. Редактирование html-файлов пока возможно только сторонними редакторами, открываем нужный html-файл в .\shcntx_ru\FileStorage, редактируем, потом в обработке выбираем этот файл и жмем "Записать HTML=файл". Или создаем новый (обязательно в .\shcntx_ru\FileStorage), указываем в обработке к нему путь и опять же записываем.
  5. Редактирование файла st происходит непосредственно в обработке, простейший пример можно глянуть либо в уже существующих разделах, либо нажав на кнопку "Установить стандартный шаблон". После редактирования надо нажать на кнопку "Записать st-файл".
  6. После редактирования (разделов, html-файлов, st-файлов) необходимо нажать на кнопку "Собрать файл", после чего в рабочем каталоге (каталог временных файлов плюс имя файла-hbk) будет создан новый файл hbk.
  7. Далее либо руками копируем его в каталог bin, либо жмем в обработке "Все действия/Заменить исходный файл". Эта команда может не выполниться, если в конфигураторе уже был открыт синтакс-помощник или соответствующий файл справки. Если все нормально, получаем сообщение "Файл успешно скопирован".
  8. В рабочем каталоге всегда сохраняется оригинальный файл с именем "original.hbk", в любой момент командой "Все действия/Восстановить исходный файл" можно вернуть оригинал на место, либо командной "Все действия/Прочитать исходный файл" прочитать оригинальный файл.


Известные недостатки:

  1. Добавленные строки не ищутся в индексе. Структура индекса уже разобрана, но вот записи пока еще нет, ожидается чуть позднее.
  2. Добавленные файлы не ищутся в полнотекстовом поиске. Вот тут пока вообще не очень ясно, полнотекстовый поиск не хранится в hbk-файле, кажется.
  3. Поскольку файл синтакс-помощника состоит из двух файлов (shcntx_ru.hbk и shlang_ru.hbk), то не всегда получается четко управлять порядком строк, видно на картинке "Результат работы".


Благодарности:

Огромное спасибо создателям zip.exe, unzip.exe и V8Unpack.exe, без этих программ гораздо труднее было бы распаковать hbk-файл. Также спасибо TormozIT за файл стилей синтакс-помощника.

P.S. Редактировать можно, разумеется, не только синтакс-помощник, но и справку, которая отображается по F1 в конфигураторе и предприятии. О любых ошибках, замечаниях и предложениях просьба писать в комментарии, возможно, я буду развивать обработку. Текст открытый, так что при желании можете и сами smile.gif







Скачать (пароль стандартный): [attachment=392:RedaktirovanieHBK.zip]

(с)
chemezov, craneua, kim241, LanCAsterUser, masljukov@mail.ru, shurik_shurik, Sneak0176, Spacer,
09.08.11, 8:53 1C 8.2 и Google Maps
Была поставлена задача отображения на географической карте.

После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было решено использовать геокодирование сервиса Google и Google Visualization для отображение элементов на карте.

Геокодирование – процесс преобразования адресов·(Украина, Киевская область, Киев, Крещатик 20) в географические координаты (широта 37.423021 и долгота -122.083739), которые можно использовать для размещения маркеров или расположения карты. Подробно про геокодирование можно почитать тут.

Для работы с геокодированием необходимо зарегистрировать ключ API карт Google. В демонстрационной конфигурации его надо прописать в константу КлючКарта.

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

И так, собственно программная реализация.

В конфигурации есть две общих формы:
  • Форма подбора координат. Данная форма формирует запрос на геокодирование и обрабатывает результат.
  • Форма отображения объектов. Данная форма использует API визуализации Google. В частности данная форма использует визуализацию Map.


Запрос и обработка результата геокодирования.

Формирование запроса происходит с ключом output=csv, для вывода результата запроса в csv файл. После выполнения запроса проверяется код результата запроса и разбор csv файла на широту и долготу.

#НаСервере
Процедура ОтправитьЗапросНаПоискКоординат()
   Город = Параметры.ОбъектПодбора.Город.Наименование;
   Страна = Параметры.ОбъектПодбора.Город.Владелец.Владелец.Наименование;
   Адрес = Параметры.ОбъектПодбора.Адрес;
   ПараметрПоиска = Страна + " " + Город + " " + Адрес;

   АдресOutput = ПолучитьИмяВременногоФайла();
   Ключ = Константы.КлючКарта.Получить();
   ТекстСсылки = "maps/geo?q=" + EncodeURL(ПараметрПоиска)+"&amp;output=csv&amp;oe=utf8&amp;sensor=false&amp;key=" + Ключ;
   ПроксиСервер = Неопределено;
   HTTPСервис = Новый HTTPСоединение("maps.google.com",,,,ПроксиСервер,Ложь);
   ПравильностьВыполнения = Истина;

   Попытка
      HTTPСервис.Получить(ТекстСсылки, АдресOutput);
   Исключение
      Сообщить(ОписаниеОшибки(), СтатусСообщения.Важное);
      ПравильностьВыполнения = Ложь;
   КонецПопытки;

   Если ПравильностьВыполнения Тогда
      // Распарсить результат ответа поиска
      Текст = Новый ТекстовыйДокумент;
      Текст.Прочитать(АдресOutput);
      РезультатПоиска = Текст.ПолучитьСтроку(1);

      КодРезультата = Лев(РезультатПоиска,3);
      РезультатПоиска = Сред(РезультатПоиска, 7, СтрДлина(РезультатПоиска));

      Если КодРезультата &lt;&gt; "200" Тогда
         Возврат;
      КонецЕсли;

      Широта = Число(Сред(РезультатПоиска,0,10));
      Долгота = Число(Сред(РезультатПоиска,12,10));
   КонецЕсли;
КонецПроцедуры


Формирование карты отображения

При формировании отображения объекта на карте к стандартному коду визуализации добавлен следующий:

if(!google.visualization) setTimeout(checkIfGoogleLoad, 1000);
      else drawMap();


Это связано с тем, что платформа не хочет сразу обновлять фрейм поля html документа.

#НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   СсылкаНаБазу = ПолучитьНавигационнуюСсылкуИнформационнойБазы();
   APIГугла = Константы.КлючКарта.Получить();

   ТаблицаОбъектовДляВывода = Новый ТаблицаЗначений;
   ТаблицаОбъектовДляВывода.Колонки.Добавить("Наименование",Новый ОписаниеТипов("Строка"));
   ТаблицаОбъектовДляВывода.Колонки.Добавить("Город",Новый ОписаниеТипов("Строка"));
   ТаблицаОбъектовДляВывода.Колонки.Добавить("Адрес",Новый ОписаниеТипов("Строка"));
   ТаблицаОбъектовДляВывода.Колонки.Добавить("Широта",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10,6)));
   ТаблицаОбъектовДляВывода.Колонки.Добавить("Долгота",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10,6)));
   Если Параметры.ОтображатьСОтветственными Тогда
      ТаблицаОбъектовДляВывода.Колонки.Добавить("Ответственный",Новый ОписаниеТипов("Строка"));
   КонецЕсли;

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

   ТекстСкрипта = "data.addRows(" + Строка(ТаблицаОбъектовДляВывода.Количество()) + ");";
   Сч = 0;
   Для Каждого ТекСтрока Из ТаблицаОбъектовДляВывода Цикл
      ТекстСкрипта = ТекстСкрипта + " data.setCell(" + Строка(Сч) + ", 0, " +СтрЗаменить(Строка(ТекСтрока.Широта),",",".") + ");";
      ТекстСкрипта = ТекстСкрипта + " data.setCell(" + Строка(Сч) + ", 1, " +СтрЗаменить(Строка(ТекСтрока.Долгота),",",".") + ");";
      ТекстСкрипта = ТекстСкрипта + " data.setCell(" + Строка(Сч) + ", 2, '" +Строка(ТекСтрока.Наименование) + " "
      + Строка(ТекСтрока.Город) + " " + Строка(ТекСтрока.Адрес) + " " + ?(Параметры.ОтображатьСОтветственными, ".Ответственный: " + Строка(ТекСтрока.Ответственный), "") + " " + "');";
      Сч = Сч + 1;
   КонецЦикла;

    СтраницаХТМЛ = "
|
|    <script type="text/javascript"><!--mce:0--></script>
|    <script type="text/javascript"><!--mce:1--></script>
|
|
|
|

|    <script type="text/javascript"><!--mce:2--></script>
|
|";

КонецПроцедуры


Скачать демо-конфигурацию можно тут.

(с)
logist,
03.08.11, 12:52 Расходная накладная не проводится
Да я не знаю даже, тем более, что у вас даже вкладки дополнительно нету. Это надо брать именно вашу базу и на ней уже смотреть почему требуется заполнение этого поля и где его можно заполнить.
chilla,
02.08.11, 12:14 запуск 1с от имени одного пользователя не более 1 раза
При начале работы получаете список активных пользователей и проверяете нет ли там нужного. В случае когда есть - не пускаем.
onsamuy,
02.08.11, 7:59 Разыграй коллегу
У вас есть отличная возможность разыграть коллегу по работе или друзей. Все что потребуется - это купюра любого наминала, самое главное, чтоб вам ее не было жалко. А дальше следуйте инструкции приведенной ниже.





crazy.gif
miha74,
02.08.11, 7:52 Настрой себя на позитив :)
DartRomanius, logist, MATEVI, mister-x, yur,
30.07.11, 22:17 Взлом пароля пользователя 1С 8.2 версии
Для взлома 8.0, 8.1 - описание здесь.

Для 8.2 немного по другому. HEX-редактором ищем имя users.usr. Затем, как пишет автор статьи ссылка на которую выше:
Цитата
«Мы находим строку вида 00 00 2D 00 00 00 00 09 00 75 00 73 00 65 00 72 00
Для взлома паролей 1С надо изменить байт соседний с 09, так чтобы получилось 00 00 2D 00 00 00 01 09 00 75 00 73 00 65 00 72 00?


Затем аналогично находим имя v8users (В параметрах поиска в WinHex уберите галку Match Case (Учитывать регистр) и поиск делай по «users») . Здесь переименовываем первую букву имени, так чтобы получилось примерно так: H8users.
Baklan56, craneua, Irina_, zgl28,
30.07.11, 12:14 Преобразуем текст в картинку. Генератор надписей и водяных знаков (4.3.0.1)
Выбираем шрифт, цвет текста, цвет фона и получаем любой текст в виде картинки. Нажатием "трёх кнопок" можно сделать открытку или нанести на картинку водяной знак в виде текста

Вот получил задание: Разослать по электронной почте фирменные открытки с личным обращением к получателю. И вновь меня спас ImageMagick. В качестве примера работы с текстом в этом консольном графическом редакторе выкладываю обработку ГенераторНадписей.epf. Для запуска обработки под 8.2, обработку необходимо открыть в конфигураторе для конвертации.

Генератор надписей позволяет сформировать текст в виде картинки или наложить текст на картинку. Всё что нужно сделать - это выбирать шрифт, цвет текста, цвет фона и можно получить любую надпись с альфа-каналом или разместить надпись на картинке. Результат наложения текста выводится на рабочий стол со скролингом. Так что можно поиграться и выбрать наилучшее сочетание шрифта, цветов или размещения текста и тени.

200 русифицированных шрифтов прилагается.

Есть возможность групповой обработки файлов - для этого нужно выбрать режим работы "Результат каталог слайдов (24-bit)".

Попробуйте. Надеюсь, вам понравится









Сами внешние компоненты находятся в макетах обработки.

Скачать (пароль в правилах раздела): [attachment=430:generatornadpisej.zip]
bereznoy, Gleef, kirg, logist, Serginio22,
30.07.11, 11:51 Динамическое изменение переменных во время отладки.
Во многих языках программирования есть такая фича - во время отладки "на лету" можно поменять значение переменной. В 1С почему-то не предусмотрено в штатном режиме. Это легко обойти

А заключается она в следующем. Есть такой замечательный оператор - Выполнить().

Создаём обработку, в которой пишем экспортную функцию, которая возвращает нам что-то (на самом деле неважно что):

Функция ВыполнитьКод(ТекстКода, П1 = "", П2 = "", П3 = "") Экспорт
    
    Попытка
        Выполнить(ТекстКода);
    Исключение
        Возврат ОписаниеОшибки()
    КонецПопытки;
    
    Возврат Истина;
    
КонецФункции


И помимо всего прочего, выполняет текст кода, который мы ей передали.

Теперь во время отладки, вызывая "Вычислить выражение...", меняем значения переменных "на лету".

Например, если во время выполнения следубщего участка кода:

Перем1 = 1;

Перем2 = 3;

Сообщить(Перем1 + Перем2);


поставим точку останова на последней строке, вызовем "Вычислить выражение", передадим туда строку:

ВнешниеОбработки.Создать("D:\ВыполнитьКод.epf").ВыполнитьКод("П1 = 2", Перем2)


В результате в окне сообщения у нас появится "3" вместо "4".

Для удобства можно эту функцию написать в модуле приложения.

У этой фичи есть еще одна полезная штука - можно прерывать выполнение каких-нибудь зациклившихся веток кода или просто какой-нибудь огромный цикл без перезапуска отладки. Для этого нужно присвоить какой-нибудь переменной некорректное значение. Например, агрегатный объект заменить на число или строку. Тогда при обращении к полю агрегатного объекта 1Ска вывалится с сообщением об ошибке.

(с)
logist, SanTis,
29.07.11, 7:59 Взлом пароля пользователя 1С 8.0, 1С 8.1 версии
Данная статья предоставлена здесь исключительно в демонстрационных целях!


Взлом паролей в 1С 8 делается сложнее. Нижеописанный способ подходит только для файловой версии 1С предприятия.

Итак для взлома нам понадобится любой HEX – редактор, но лучше чтобы он поддерживал большие по объему файлы, так как нам придется править большой по объему файл. Я использую HEX – редактор WinHex.

Итак после установки WinHex открываем в нем файл 1Cv8.1CD, который находится в папке информационной базы.


Открываем файл 1Cv8.1CD

Затем нам необходимо найти последовательность отпределенных байт для этого ищем в формате юникод строку users.usr. Для этого меню Поиск – Поиск текста. Выбираем кодировку юникод и ищем.


Ищем строку users.usr

Мы находим строку вида

00 00 2D 00 00 00 00 09 00 75 00 73 00 65 00 72 00

Для взлома паролей 1С надо изменить байт соседний с 09, так чтобы получилось

00 00 2D 00 00 00 01 09 00 75 00 73 00 65 00 72 00


Правим строку в winHex для взлома паролей 1с

Как только исправили 0 на 1 нажимаем сохранить и входим в конфигуратор без паролей, не закрывая WinHex

Открываем Администрирование – Пользователи.

Список пользователей пуст.

Далее в WinHex меняем значение назад как было и сохраняемся, не закрывая конфигуратор 1С.

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


1С 8. Список пользователей

(с)

А вот для 8.2
Alan68, Batnick478, lina1982, MATEVI, wasdik,
26.07.11, 15:45 Кнопка "Спасибо"
Ап.
Ardi, DartRomanius, vbi,
25.07.11, 18:58 Улыбнуло
mister-x,
22.07.11, 18:03 Icq для 1С 8.2 (обработка под любую конфигурацию) упр.форма
ICQ для 1С 8.2 (обработка под любую конфигурацию)



Внешняя обработка ICQ для 1С 8.2 (обработка под любую конфигурацию)

используется ONLINE сервис ICQ

для работы требуется подключение к Интернет.

сообщения отправляются "Enter" -ом.

вобщем кому нужно можно встраивать.

сделал для ознакомления.





Скачать (пароль pro1c.org.ua)


Скачать с форума:[attachment=354:1Cv8_ICQ.rar]
bogdan3112, gospodin_h, lina1982, nmf, Serginio22, Virsy, XBrut,
22.07.11, 17:19 Установка веб-клиента 8.2 для файлового варианта


Залил видео для скачивания, кому захочется smile.gif

(с)
craneua, reshat88,
22.07.11, 12:48 А можно ли это сделать запросом?
Можно. Насколько я понял - как-то так:

// ...
Запрос.Текст = "
|ВЫБРАТЬ
|   НомераДоговоров.НомерКарточкиПоБазе,
|   ДоговорыКонтрагентов.Ссылка КАК Договор
|ИЗ
|   &НомераДоговоров КАК НомераДоговоров
|   ЛЕВОЕ СОЕДИНЕНИЕ Справоник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|      ПО НомераДоговоров.НомерКарточкиПоБазе = ДоговорыКонтрагентов.Владелец.Код
|";
Запрос.УстановитьПараметр("НомераДоговоров", НомераДоговоров);
// Выборка и обработка результата
pablo,

80 страниц V  « < 62 63 64 65 66 > » 
RSS Текстовая версия Сейчас: 20.04.24, 3:05
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!