Примеры решения задач

makfromkz
Сообщения: 541
Зарегистрирован: Чт май 25, 2017 11:56 am

Re: Примеры решения задач

Сообщение makfromkz » Вт сен 19, 2017 9:43 pm

Пример вызова НЕ экспортной процедуры во внешней обработке из формы документа, на примере документа ОперацияБух

Код: Выделить всё

Процедура ЗаполнитьНалоговыйНаборЗаписей(ссДок)
    П = Новый Структура("Ключ", ссДок);
    фрмДок = ПолучитьФорму("Документ.ОперацияБух.ФормаОбъекта", П);
    фрмДок.НалоговыйНаборЗаписей.Очистить();
    фрмДок.БУЗаполнитьНУНаСервере();
    фрмДок.Записать();
КонецПроцедуры

makfromkz
Сообщения: 541
Зарегистрирован: Чт май 25, 2017 11:56 am

Re: Примеры решения задач

Сообщение makfromkz » Вс сен 24, 2017 9:13 pm

взято тут: https://ru.wikipedia.org/wiki/%D0%90%D0 ... 0%BD%D0%B0
Алгоритм Лу́на (англ. Luhn algorithm) — алгоритм вычисления контрольной цифры номера пластиковой карты в соответствии со стандартом ISO/IEC 7812. Не является криптографическим средством, а предназначен в первую очередь для выявления ошибок, вызванных непреднамеренным искажением данных (например, при ручном вводе номера карты, при приёме данных о номере социального страхования по телефону). Позволяет лишь с некоторой степенью достоверности судить об отсутствии ошибок в блоке цифр, но не даёт возможности нахождения и исправления обнаруженной неточности.

Алгоритм разработан сотрудником фирмы IBM Гансом Питером Луном, описан в США в 1954 году, патент получен в 1960 году.

Наиболее распространённые применения для подсчёта контрольной цифры:

Номера всех банковских карт
Номера некоторых дисконтных карт
Коды социального страхования
IMEI-коды.
Расчёт контрольного знака единого 8-значного номера железнодорожного вагона на РЖД.
Расчёт ICCID (от англ. Integrated Circuit Card Id) — уникальный серийный номер SIM-карты.
В настоящее время алгоритм является публичным достоянием.
Алгоритм вычисления в переводе на язык 1С 7.7, 8.x

ШтрКод - исходные данные без последнего символа, Функция возвращает контрольный символ, который необходимо добавить

Код: Выделить всё

 Функция АлгоритмЛуна(ШтрКод) Экспорт
   N = СтрДлина(ШтрКод)+1;    
   sum = 0;
   Для i = 1 по N-1 Цикл
     p = Сред(ШтрКод,N-i,1);
     Если(i/2 <> Цел(i/2) ) Тогда
       p = 2*p;
       Если (p > 9) Тогда 
         p = p - 9;
       КонецЕсли;
     КонецЕсли;
     sum = sum + p;   
   КонецЦикла;
   sum = (sum/10) - Цел(sum/10);
   Если (sum <> 0) Тогда 
     sum = 10 - sum*10;
   КонецЕсли;      
   Сообщить("Контр.число ="+sum); 
   Возврат sum; 
 КонецФункции 

makfromkz
Сообщения: 541
Зарегистрирован: Чт май 25, 2017 11:56 am

Re: Примеры решения задач

Сообщение makfromkz » Чт апр 12, 2018 12:27 pm

Очистка номера телефона от "мусора" (нецифровых символов) взято из: https://infostart.ru/public/788007

В платформе 8.3.6 появились функции СтрРазделить и СтрСоединить, которые позволяют решить эту задачу в одну строку без цикла:

Код: Выделить всё

СтрСоединить(СтрРазделить(СтрокаСЦифрами, СтрСоединить(СтрРазделить(СтрокаСЦифрами, "0123456789"))))
Если список ненужных символов известен, например, "(", ")" и "-", то выражение может быть еще короче:

Код: Выделить всё

СтрСоединить(СтрРазделить(СтрокаСЦифрами, "()-"))
Очевидно, что данный прием легко обобщается на фильтрацию или отбор любого набора символов.

Администратор
Site Admin
Сообщения: 60
Зарегистрирован: Чт май 25, 2017 11:44 am

Re: Примеры решения задач

Сообщение Администратор » Чт апр 26, 2018 10:15 pm

пример обработки с динамическим созданием полей ТЗ

Код: Выделить всё

&НаКлиенте
Процедура ПолучитьТаблицуНаСервер(Команда)
 
  ПолучитьТЗНаСервере();
 
КонецПроцедуры
// Функция получает данные на сервере
&НаСервере
Функция ПолучитьТЗНаСервере()
	ТЗ_рез = РеквизитФормыВЗначение("ТЗ");
    
    МассивРеквизитов = Новый Массив;
    
    //Удалим ранее созданные колонки в ТЗ    
    Для Каждого Колонка Из ТЗ_рез.Колонки Цикл
        МассивРеквизитов.Добавить("ТЗ." + Колонка.Имя);        
    КонецЦикла;
    ИзменитьРеквизиты(,МассивРеквизитов);
    
    //Удалим отображение таблицы на форме и создадим новую
    ЭлементТаблица = Элементы.Найти("ТЗ");
    Если ЭлементТаблица <> Неопределено Тогда
        Элементы.Удалить(ЭлементТаблица);        
    КонецЕсли;     
    
        ЭлементТаблица=Элементы.Добавить("ТЗ",Тип("ТаблицаФормы"));
        ЭлементТаблица.ПутьКДанным = "ТЗ";
        ЭлементТаблица.Отображение = ОтображениеТаблицы.Список;
    
    //Заполним таблу значениями
	  ТЗ_рез.Колонки.Добавить("Поле1");
	  ТЗ_рез.Колонки.Добавить("Поле2");
	  ТЗ_рез.Колонки.Добавить("Поле3");
	  ТЗ_рез.Колонки.Добавить("Поле4");
	  ТЗ_рез.Колонки.Добавить("Поле5");
	 
	  Для i = 1 По 3 Цикл 
	 
	    НоваяСтр = ТЗ_рез.Добавить();
	    НоваяСтр.Поле1 = i;
	    НоваяСтр.Поле2 = 2*i;
	    НоваяСтр.Поле3 = 3*i;
	    НоваяСтр.Поле4 = 4*i;
	    НоваяСтр.Поле5 = 5*i;
	 
	  КонецЦикла;   
    
    //Создадим реквизиты ТЗ
    МассивРеквизитов.Очистить();
    Для Каждого Колонка ИЗ ТЗ_рез.Колонки Цикл
        МассивТипов = Новый Массив;
        МассивТипов.Добавить(Колонка.ТипЗначения);
        НоваяКолонка = Новый РеквизитФормы(Колонка.Имя, Новый ОписаниеТипов(МассивТипов), "ТЗ");
        МассивРеквизитов.Добавить(НоваяКолонка);
    КонецЦикла;      
    ИзменитьРеквизиты(МассивРеквизитов);  
    ЗначениеВРеквизитФормы(ТЗ_рез, "ТЗ");
    
    //Создаем элементы на форме для отображения колонок
    ЭлементТЗ = Элементы.ТЗ;
    Для Каждого Колонка ИЗ ТЗ_рез.Колонки Цикл
        НовыйЭлементФормы = Элементы.Добавить("ТЗ"+Колонка.Имя, Тип("ПолеФормы"), ЭлементТЗ);
        НовыйЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлементФормы.ПутьКДанным = "ТЗ." + Колонка.Имя;
    КонецЦикла;КонецФункции // ПолучитьТЗНаСервере()

makfromkz
Сообщения: 541
Зарегистрирован: Чт май 25, 2017 11:56 am

Re: Примеры решения задач

Сообщение makfromkz » Чт янв 09, 2020 11:33 am

взято тут: http://info1c.com/?p=2162
Как проверить пустой табличный документ в 1С?
Проверяем количество коллекций областей табличного документа.

Код: Выделить всё

Процедура ТабличнаяЧастьКоличество()
	ТабДокумент=Новый ТабличныйДокумент;
	Если  ТабДокумент.Области.Количество()> 0  Тогда
		Сообщить("Табличный документ не пустой");
	Иначе
		Сообщить("Табличный документ пустой");
	КонецЕсли;
КонецПроцедуры

makfromkz
Сообщения: 541
Зарегистрирован: Чт май 25, 2017 11:56 am

Re: Примеры решения задач

Сообщение makfromkz » Чт янв 09, 2020 11:57 am

взять тут: http://www.acnc.eu/prod_1c/s1epf/zapus ... vyjvariant
Запуск Регламентного задания (Файловый вариант)

1.Создать обработку ПланировщикЗаданий
2.Код в Модуле Формы

//ДЛЯ ТОГО ЧТОБЫ РАБОТАЛО В ФАЙЛ-СЕРСЕРНОМ ВАРИАНТЕ
//ДАННАЯ ОБРАБОТКА ДОЛЖНА ВИСЕТЬ В ОТКРЫТОМ ПРИЛОЖЕНИИ, В КЛИЕНТ-СЕРВЕРНОМ ЭТА ОБРАБОТКА НЕ НУЖНА

Код: Выделить всё

&НаКлиенте
Процедура ОбработкаЗаданий()
   
    #Если ТолстыйКлиентУправляемоеПриложение Тогда
        ВыполнитьОбработкуЗаданий();
    #КонецЕсли          
   
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
   
    #Если ТолстыйКлиентУправляемоеПриложение Тогда
        ПодключитьОбработчикОжидания("ОбработкаЗаданий", 15);
    #Иначе
        Предупреждение("Обработка может быть запущена только в толстом клиенте!");
        Закрыть();
    #КонецЕсли   
                  
КонецПроцедуры

makfromkz
Сообщения: 541
Зарегистрирован: Чт май 25, 2017 11:56 am

Re: Примеры решения задач

Сообщение makfromkz » Чт янв 09, 2020 12:25 pm

взято тут: http://1c-bezproblem.ru/blog/v-pomoshch ... emye-formy
Узнать новый ли это документ в 1с 8.2 и 1с 8.3 обычные и управляемые формы
В 1с 8.2 можно узнать новый ли документ создается функцией ЭтоНовый()

В 1с 8.3 в управляемых формах такой функции к сожалению нет. ЭтоНовый в УФ будет выглядеть так:

Параметры.Ключ.Пустая(); // в создаваемом документе этот параметр будет пустой.

Код: Выделить всё

&НаКлиенте
Функция этоНовый()
Если НЕ Параметры.Ключ.Пустая() Тогда
Возврат Истина;
иначе 
возврат ложь;
КонецЕсли;
КонецФункции

makfromkz
Сообщения: 541
Зарегистрирован: Чт май 25, 2017 11:56 am

Re: Примеры решения задач

Сообщение makfromkz » Вс янв 12, 2020 7:25 pm

С помощью запроса получить уникальный идентификатор:

Код: Выделить всё

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
			|    Номенклатура.НаименованиеПолное,
			|    Номенклатура.ЕдиницаИзмерения,
			|    Номенклатура.СтавкаНДС,
			|    Номенклатура.НоменклатурнаяГруппа,
			|    Номенклатура.СчетУчетаЗапасов,
			|    Номенклатура.СчетУчетаЗатрат,
			|    Номенклатура.Ссылка, 
			|    Номенклатура.ЭтоГруппа
			| ИЗ
			|    Справочник.Номенклатура КАК Номенклатура"; 
РезультатЗапроса = Запрос.Выполнить();
СпрОбъект = РезультатЗапроса.Выбрать();    
Пока СпрОбъект.Следующий()  Цикл
	СтрокаУИ = Объект.XMLСтрока(СпрОбъект.Ссылка);
	GUID = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(СокрЛП(СтрокаУИ)));          
КонецЦикла;

makfromkz
Сообщения: 541
Зарегистрирован: Чт май 25, 2017 11:56 am

Отправка сообщения в чат-бот телеграм Удобно использовать при отладке: добавив к условию точки остановки <здесь ваше про

Сообщение makfromkz » Ср май 20, 2020 8:22 am

взято тут: https://fastcode.im/Templates/3751
Удобно использовать при отладке: добавив к условию точки остановки <здесь ваше произвольное условие> И ОповеститьВтелеграм(ОписаниеОшибки()) = Неопределено - отправит в телеграм причину ошибки, если она произошла. Или, условие точки остановки ОповеститьВтелеграм("Процедура окончена") = Неопределено И Ложь - сообщит о том, что точка остановки пройдена


Код: Выделить всё

// отправка любого сообщения, в т.ч. ОписаниеОшибки(), в Телеграм бот
Функция ОповеститьВтелеграм(Сообщение) Попытка 
	
	// 1) Создаем бота в телеграме, для этого нужно перейти в @BotFather и проследовать инструкциям,
	//    по окончании которых нам предоставят Access token	
	ДанныеДоступа = "это Access token";
	
	// 2) однократно получаем ID чата с ботом, предварительно написав боту любое сообщение
	// быстро: https://cms3.ru/kak-poluchit-chat-id-telegram/
	// чуть дольше: из текста json ответа, в объекте chat: "chat": {"id": "ид чата"}
    Попытка
    Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
    ТекстJSONОтвета = Соединение.Получить(Новый HTTPЗапрос("bot" + ДанныеДоступа + "/getUpdates")).ПолучитьТелоКакСтроку();
	//(затем можно закомментировать две строчки кода выше)
	ИдЧата = "это chat.id";
	
      // 3) Отправляем сообщение с ранее указанными сообщением, токеном, ид чата
   ЗапрячьТелегу = Новый HTTPСоединение("api.telegram.org",443,,,,15,Новый ЗащищенноеСоединениеOpenSSL());
   ЗапрячьТелегу.Получить(Новый HTTPЗапрос("bot" + ДанныеДоступа + "/sendMessage?chat_id=" + ИдЧата + "&text=" + Сообщение));
	
Исключение КонецПопытки КонецФункции

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и 1 гость