ffmpeg remove audio ¶
ffmpeg -i $input_file -c copy -an $output_file
base64 ¶
$ base64 -i myfont.ttf -o fontbase64.txt
macbook crazy usb ¶
$ sudo killall -STOP -c usbd
postgres reduce db size ¶
VACUUM tbl_name;
VACUUM FULL tbl_name;
postgres table sizes ¶
select
table_name,
pg_size_pretty(pg_total_relation_size(quote_ident(table_name))),
pg_total_relation_size(quote_ident(table_name))
from information_schema.tables
where table_schema = 'public'
order by 3 desc;
1c map value from one range to another ¶
Функция map(x, in_min, in_max, out_min, out_max) Экспорт
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
КонецФункции
1c колонтитул ¶
Макет.НижнийКолонтитул.ТекстСлева = "ООО " + СтруктПарамОрг.КомпанияНаименованиеООО + Символы.ПС;
1c /c ЗапуститьОбновлениеИнформационнойБазы ¶
/c ЗапуститьОбновлениеИнформационнойБазы
sql truncate generator ¶
SELECT concat('TRUNCATE TABLE ', TABLE_NAME, ';')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '_Doc%'
1c URI ¶
Функция СтруктураURI(Знач СтрокаURI) Экспорт
СтрокаURI = СокрЛП(СтрокаURI);
// схема
Схема = "";
Позиция = Найти(СтрокаURI, "://");
Если Позиция > 0 Тогда
Схема = НРег(Лев(СтрокаURI, Позиция - 1));
СтрокаURI = Сред(СтрокаURI, Позиция + 3);
КонецЕсли;
// строка соединения и путь на сервере
СтрокаСоединения = СтрокаURI;
ПутьНаСервере = "";
Позиция = Найти(СтрокаСоединения, "/");
Если Позиция > 0 Тогда
ПутьНаСервере = Сред(СтрокаСоединения, Позиция + 1);
СтрокаСоединения = Лев(СтрокаСоединения, Позиция - 1);
КонецЕсли;
// информация пользователя и имя сервера
СтрокаАвторизации = "";
ИмяСервера = СтрокаСоединения;
Позиция = Найти(СтрокаСоединения, "*");
Если Позиция > 0 Тогда
СтрокаАвторизации = Лев(СтрокаСоединения, Позиция - 1);
ИмяСервера = Сред(СтрокаСоединения, Позиция + 1);
КонецЕсли;
// логин и пароль
Логин = СтрокаАвторизации;
Пароль = "";
Позиция = Найти(СтрокаАвторизации, ":");
Если Позиция > 0 Тогда
Логин = Лев(СтрокаАвторизации, Позиция - 1);
Пароль = Сред(СтрокаАвторизации, Позиция + 1);
КонецЕсли;
// хост и порт
Хост = ИмяСервера;
Порт =
"";
Позиция = Найти(ИмяСервера, ":");
Если Позиция > 0 Тогда
Хост = Лев(ИмяСервера, Позиция - 1);
Порт = Сред(ИмяСервера, Позиция + 1);
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("Схема", Схема);
Результат.Вставить("Логин", Логин);
Результат.Вставить("Пароль", Пароль);
Результат.Вставить("ИмяСервера", ИмяСервера);
Результат.Вставить("Хост", Хост);
Результат.Вставить("Порт", ?(Порт <> "", Число(Порт), Неопределено));
Результат.Вставить("ПутьНаСервере", ПутьНаСервере);
Возврат Результат;
КонецФункции
holy crap ¶
/Applications/Yandex.app/Contents/MacOS/Yandex --no-sandbox
cryptoshit ¶
/Applications/Yandex.app/Contents/MacOS/Yandex --no-sandbox
1с без нулей ¶
Функция ПолучитьНомерБезПрефиксаИНулей(Знач Номер) Экспорт
ЧистыйНомер = "";
Длина = СтрДлина(Номер);
Индекс = 0;
Для Сч = 1 По Длина Цикл
С = Сред(Номер, Сч, 1);
Если С = "1"
ИЛИ С = "2"
ИЛИ С = "3"
ИЛИ С = "4"
ИЛИ С = "5"
ИЛИ С = "6"
ИЛИ С = "7"
ИЛИ С = "8"
ИЛИ С = "9"
Тогда
Индекс = Сч;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Прав(Номер, Длина - Индекс + 1);
КонецФункции
1с удалить повторяющиеся элементы массива ¶
Функция УдалитьПовторяющиесяЭлементыМассива(Массив) Экспорт
ТекущийИндекс = 0;
ВсегоЭлементов = Массив.Количество();
Пока ТекущийИндекс < ВсегоЭлементов Цикл
Индекс2 = ТекущийИндекс + 1;
Пока Индекс2 < ВсегоЭлементов Цикл
Если Массив[Индекс2] = Массив[ТекущийИндекс] Тогда
Массив.Удалить(Индекс2);
ВсегоЭлементов = ВсегоЭлементов - 1;
Иначе
Индекс2 = Индекс2 + 1;
КонецЕсли;
КонецЦикла;
ТекущийИндекс = ТекущийИндекс + 1;
КонецЦикла;
Возврат Массив;
КонецФункции
tmp ¶
ШК = Формат(ТекущаяДата(), "ДФ=гг");
ДлинаНомера = СтрДлина(ПараметрыПаспорта.ОсновныеПараметры.Номер);
Для Сч = 1 по 10 - ДлинаНомера Цикл
ШК = ШК + "0";
КонецЦикла;
ШК = ШК + ПараметрыПаспорта.ОсновныеПараметры.Номер;
ИмяФайлаШтрихкода = ПолучитьИмяВременногоФайла("jpg");
Соединение = Новый HTTPСоединение("***", , , , , , Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/barcode?barcode=" + ШК);
Ответ = Соединение.Получить(Запрос, ИмяФайлаШтрихкода);
macos remove quaratine ¶
xattr -d -r com.apple.quarantine [PATHTOFILE]
ЗУП запрос отработано удержано ¶
ВЫБРАТЬ
&Сотрудник КАК Сотрудник,
&ФизическоеЛицо КАК ФизическоеЛицо,
&ГрафикРаботы КАК ГрафикРаботы
ПОМЕСТИТЬ ВТСотрудник
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Удержания.ФизическоеЛицо КАК ФизическоеЛицо,
Удержания.Результат КАК Результат,
Удержания.ИдентификаторСтроки КАК ИдентификаторСтроки,
Удержания.Регистратор КАК Регистратор,
ЗначенияПоказателейУдержаний.Значение КАК Значение,
ЗначенияПоказателейУдержаний.Показатель КАК Показатель,
ДанныеПоГрафику.Дни КАК ДнейПоГрафику,
ДанныеПоГрафику.Часы КАК ЧасовПоГрафику,
Отработано.Дней КАК ОтработаноДней,
Отработано.Часов КАК ОтработаноЧасов
ИЗ
ВТСотрудник КАК ВТСотрудник
ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.Удержания КАК Удержания
ПО (Удержания.ФизическоеЛицо = ВТСотрудник.ФизическоеЛицо)
И (Удержания.ПериодРегистрации = &ПериодРегистрации)
И (Удержания.ВидРасчета = &ВидРасчета)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияПоказателейУдержаний КАК ЗначенияПоказателейУдержаний
ПО (Удержания.Регистратор = ЗначенияПоказателейУдержаний.Регистратор)
И (ЗначенияПоказателейУдержаний.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиРасчетаЗарплаты.РасчетнаяБаза))
И (ЗначенияПоказателейУдержаний.ИдентификаторСтроки = Удержания.ИдентификаторСтроки)
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ГрафикиРаботыПоВидамВремени.ГрафикРаботы КАК ГрафикРаботы,
СУММА(ГрафикиРаботыПоВидамВремени.ОсновноеЗначение) КАК Дни,
СУММА(ГрафикиРаботыПоВидамВремени.ДополнительноеЗначение) КАК Часы
ИЗ
РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботыПоВидамВремени
ГДЕ
ГрафикиРаботыПоВидамВремени.ГрафикРаботы = &ГрафикРаботы
И ГрафикиРаботыПоВидамВремени.Дата МЕЖДУ &Дата1 И &Дата2
И ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = &ВидУчетаВремени
СГРУППИРОВАТЬ ПО
ГрафикиРаботыПоВидамВремени.ГрафикРаботы) КАК ДанныеПоГрафику
ПО ВТСотрудник.ГрафикРаботы = ДанныеПоГрафику.ГрафикРаботы
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ОтработанноеВремяПоСотрудникамОбороты.ФизическоеЛицо КАК ФизическоеЛицо,
ОтработанноеВремяПоСотрудникамОбороты.ОтработаноДнейОборот КАК Дней,
ОтработанноеВремяПоСотрудникамОбороты.ОтработаноЧасовОборот КАК Часов,
ОтработанноеВремяПоСотрудникамОбороты.ОплаченоДнейОборот КАК ОплаченоДнейОборот,
ОтработанноеВремяПоСотрудникамОбороты.ОплаченоЧасовОборот КАК ОплаченоЧасовОборот
ИЗ
РегистрНакопления.ОтработанноеВремяПоСотрудникам.Обороты(&Дата1, &Дата2, День, Сотрудник = &Сотрудник) КАК ОтработанноеВремяПоСотрудникамОбороты) КАК Отработано
ПО ВТСотрудник.ФизическоеЛицо = Отработано.ФизическоеЛицо
ЗУП ЗАПРОС дни/часы по графику работы ¶
ВЫБРАТЬ
ГрафикиРаботыПоВидамВремени.ГрафикРаботы КАК ГрафикРаботы,
СУММА(ГрафикиРаботыПоВидамВремени.ОсновноеЗначение) КАК Дни,
СУММА(ГрафикиРаботыПоВидамВремени.ДополнительноеЗначение) КАК Часы
ИЗ
РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботыПоВидамВремени
ГДЕ
ГрафикиРаботыПоВидамВремени.ГрафикРаботы = &ГрафикРаботы
И ГрафикиРаботыПоВидамВремени.Дата МЕЖДУ &Дата1 И &Дата2
И ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = &ВидУчетаВремени
СГРУППИРОВАТЬ ПО
ГрафикиРаботыПоВидамВремени.ГрафикРаботы
ios endless trust ¶
sudo killall -STOP -c usbd
*nix rsync ¶
rsync -av @: ./
*nix find and move ¶
find -type f -print0 | xargs -0 -I {} mv {}
*nix port check ¶
sudo netstat -naptu | grep
sudo ss -atnp | grep
1c last incoming ¶
ВЫБРАТЬ
Н.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВТТовары
ИЗ
Справочник.Номенклатура КАК Н
ГДЕ
Н.Ссылка В(&МассивНоменклатур)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Т.Ссылка КАК Номенклатура,
МАКСИМУМ(Товары.Ссылка.Дата) КАК ДатаПоследнегоПоступления
ПОМЕСТИТЬ ВТДатаПоследнегоПоступления
ИЗ
ВТТовары КАК Т
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПриобретениеТоваровУслуг.Товары КАК Товары
ПО Т.Ссылка = Товары.Номенклатура
ГДЕ
Товары.Ссылка.Проведен
СГРУППИРОВАТЬ ПО
Т.Ссылка
ИНДЕКСИРОВАТЬ ПО
Номенклатура
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПоследниеПоступления.Номенклатура КАК Номенклатура,
ПоследниеПоступления.ДатаПоследнегоПоступления КАК ДатаПоследнегоПоступления,
ПоследниеЦены.Цена КАК ПоследняяЗакупочнаяЦена
ИЗ
ВТДатаПоследнегоПоступления КАК ПоследниеПоступления
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриобретениеТоваровУслуг.Товары КАК ПоследниеЦены
ПО ПоследниеПоступления.Номенклатура = ПоследниеЦены.Номенклатура
И ПоследниеПоступления.ДатаПоследнегоПоступления = ПоследниеЦены.Ссылка.Дата
И (ПоследниеЦены.Ссылка.Проведен)
pyinstaller ¶
pyinstaller --onefile --noconsole run.py
ffmpeg mov -> mp4 ¶
ffmpeg -i my-video.mov -vcodec h264 -acodec mp2 my-video.mp4
cron linux find and delete files older than 10 days (but not dirs) ¶
0 4 * * * find /<path>/* -mtime +10 -delete
SQL check *.mdf version ¶
dbcc checkprimaryfile ('F:\DBASE\SQL\1C\ut.mdf', 2)
.vimrc ¶
syntax on
set number
set tabstop=4
set expandtab
set nowrap
django get postgres version ¶
from django.db import connection
print(connection.cursor().connection.server_version)
1с длительные операции ¶
Выполняемая процедура должна быть в модуле менеджера.
Запуск на клиенте.
1c datamobile ws config ¶
<point name="DataMobileExch"
alias="wsDMExch.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
1c clients managers ¶
ВЫБРАТЬ
ПоследниеДокументыКонтрагентов.Контрагент.Наименование КАК Наименование,
ПоследниеДокументыКонтрагентов.Контрагент.Код КАК КодКонтрагента,
ПоследниеДокументыКонтрагентов.Контрагент.ИНН КАК ИНН,
ПоследниеДокументыКонтрагентов.Контрагент.НаименованиеПолное КАК НаименованиеПолное,
НАЧАЛОПЕРИОДА(ПоследниеДокументыКонтрагентов.Дата, ДЕНЬ) КАК ПоследнийЗаказ,
ПоследниеДокументыКонтрагентов.Ответственный,
ПоследниеДокументыКонтрагентов.Ссылка
ИЗ
Документ.ЗаказПокупателя КАК ПоследниеДокументыКонтрагентов
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
Доки.Контрагент КАК Контрагент,
МАКСИМУМ(Доки.Дата) КАК ДатаПоследнегоДокумента
ИЗ
Документ.ЗаказПокупателя КАК Доки
ГДЕ НЕ Доки.ПометкаУдаления И Доки.Проведен
СГРУППИРОВАТЬ ПО
Доки.Контрагент) КАК ДатыПоследнихДокументовКонтрагентов
ПО ПоследниеДокументыКонтрагентов.Контрагент = ДатыПоследнихДокументовКонтрагентов.Контрагент
И ПоследниеДокументыКонтрагентов.Дата = ДатыПоследнихДокументовКонтрагентов.ДатаПоследнегоДокумента
ГДЕ НЕ ПоследниеДокументыКонтрагентов.Контрагент = &ПустаяСсылка
И НЕ ПоследниеДокументыКонтрагентов.ПометкаУдаления И ПоследниеДокументыКонтрагентов.Проведен
УПОРЯДОЧИТЬ ПО
ПоследниеДокументыКонтрагентов.Контрагент.Наименование,
ПоследнийЗаказ УБЫВ
python postgres dumper ¶
#!/usr/bin/env python3
'''
Simplest PostgreSQL db dumper and backup rotator.
Put it on cron.
Removes backups with BACKUP_PREFIX
in BACKUP_PATH older than BACKUP_DAYS.
Easy as pie.
'''
from datetime import datetime
import os
from pathlib import Path
from subprocess import Popen, PIPE
import sys
import time
now = time.time()
now_formatted = datetime.now().strftime('%d-%m-%Y_%H-%M')
DB_USER = ''
DB_PASSWORD = ''
DB_NAME = ''
DB_PORT = ''
DB_HOST = ''
DB_PASSWORD = ''
BACKUP_PREFIX = ''
BACKUP_PATH = Path('')
BACKUP_DAYS = 4
dump_name = '{}/{}{}.pg'.format(BACKUP_PATH, BACKUP_PREFIX, now_formatted)
dump_cmd = f'pg_dump -h {DB_HOST} -p {DB_PORT} -U {DB_USER} -Fc {DB_NAME} > {dump_name}'
os.environ['PGPASSWORD'] = DB_PASSWORD
popen = Popen(dump_cmd, shell=True)
popen.wait()
for f in os.listdir(BACKUP_PATH):
if not f.startswith(BACKUP_PREFIX):
continue
f = os.path.join(BACKUP_PATH, f)
if os.stat(f).st_mtime < now - BACKUP_DAYS * 86400:
if os.path.isfile(f):
os.remove(os.path.join(BACKUP_PATH, f))
mounting exfat external drive stalls on macos ¶
taken from: https://developer.apple.com/forums/thread/680500
"Anyways, if your disk happens to be ExFAT, and you remember improperly removing the disk the last time you used it, chances are, fsck is holding it hostage (metaphorically, of course). fsck is trying to repair the disk, but it will stall forever, so you want to launch Disk Utility, and the Terminal. Try to mount the disk, and switch to Terminal and write sudo pkill -f fsck. The disk will mount in read-only mode, and from there, you can repair it with First Aid in Disk Utility. This won't work for non-ExFat drives, as macOS manages them differently."
ОС Вариатор ¶
ВЫБРАТЬ
ИзменениеПараметровНачисленияАмортизацииОСОС.Ссылка КАК Ссылка,
ИзменениеПараметровНачисленияАмортизацииОСОС.ОсновноеСредство КАК ОС,
ИзменениеПараметровНачисленияАмортизацииОСОС.СрокПолезногоИспользованияБУ КАК СрокПолезногоИспользованияБУ
ПОМЕСТИТЬ ВТИзменениеПараметров
ИЗ
Документ.ИзменениеПараметровНачисленияАмортизацииОС.ОС КАК ИзменениеПараметровНачисленияАмортизацииОСОС
ГДЕ
ИзменениеПараметровНачисленияАмортизацииОСОС.Ссылка.Дата МЕЖДУ &ДатаИзмененийОС1 И &ДатаИзмененийОС2
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Данные.ОС КАК ОС,
СУММА(Данные.Остаток01 - Данные.Остаток02) КАК Остаток
ПОМЕСТИТЬ ВТОстаткиАмортизации
ИЗ
(ВЫБРАТЬ
ХозрасчетныйОстатки01.Субконто1 КАК ОС,
ХозрасчетныйОстатки01.СуммаОстатокДт КАК Остаток01,
0 КАК Остаток02
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаРасчета, , , ) КАК ХозрасчетныйОстатки01
ГДЕ
ХозрасчетныйОстатки01.Счет = &Счет0101
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ХозрасчетныйОстатки02.Субконто1,
0,
ХозрасчетныйОстатки02.СуммаОстатокКт
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаРасчета, , , ) КАК ХозрасчетныйОстатки02
ГДЕ
ХозрасчетныйОстатки02.Счет = &Счет0201) КАК Данные
СГРУППИРОВАТЬ ПО
Данные.ОС
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
СостоянияОСОрганизацийСрезПоследних.ОсновноеСредство КАК ОС,
СостоянияОСОрганизацийСрезПоследних.ОсновноеСредство.Код КАК ИнвНомер,
СостоянияОСОрганизацийСрезПоследних.ДатаСостояния КАК ДатаПринятияКУчету,
СостоянияОСОрганизацийСрезПоследних.ОсновноеСредство.ГруппаОС КАК ОсновноеСредствоГруппаОС,
ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ПервоначальнаяСтоимость КАК ПервоначальнаяСтоимостьБУ,
ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.СрокПолезногоИспользования КАК СрокПолезногоИспользованияБУ,
ВЫРАЗИТЬ(ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.СрокПолезногоИспользования / 12 КАК ЧИСЛО(3, 0)) КАК СрокПолезногоИспользованияБУЛет,
ДОБАВИТЬКДАТЕ(СостоянияОСОрганизацийСрезПоследних.ДатаСостояния, ГОД, ВЫРАЗИТЬ(ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.СрокПолезногоИспользования / 12 КАК ЧИСЛО(3, 0))) КАК ПризнакАктуальности,
ЕСТЬNULL(ИзменениеПараметров.Ссылка, &ПустаяСсылка) КАК СсылкаНаИзменениеПараметров,
ВЫБОР
КОГДА ЕСТЬNULL(ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.СрокПолезногоИспользования, 0) = 0
ТОГДА 0
ИНАЧЕ ВЫРАЗИТЬ(ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ПервоначальнаяСтоимость / ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.СрокПолезногоИспользования КАК ЧИСЛО(15, 2))
КОНЕЦ КАК ЕжемесячнаяАмортизация,
ОстаткиАмортизации.Остаток КАК ОстатокАмортизации
ПОМЕСТИТЬ ВТОС
ИЗ
РегистрСведений.СостоянияОСОрганизаций.СрезПоследних(&ДатаРасчета, ) КАК СостоянияОСОрганизацийСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.СрезПоследних(&ДатаРасчета, ) КАК ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних
ПО СостоянияОСОрганизацийСрезПоследних.ОсновноеСредство = ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПараметрыАмортизацииОСБухгалтерскийУчет.СрезПоследних(&ДатаРасчета, ) КАК ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних
ПО СостоянияОСОрганизацийСрезПоследних.ОсновноеСредство = ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство
ЛЕВОЕ СОЕДИНЕНИЕ ВТОстаткиАмортизации КАК ОстаткиАмортизации
ПО СостоянияОСОрганизацийСрезПоследних.ОсновноеСредство = ОстаткиАмортизации.ОС
ЛЕВОЕ СОЕДИНЕНИЕ ВТИзменениеПараметров КАК ИзменениеПараметров
ПО СостоянияОСОрганизацийСрезПоследних.ОсновноеСредство = ИзменениеПараметров.ОС
ГДЕ
СостоянияОСОрганизацийСрезПоследних.Состояние <> &СостояниеСнятоСУчета
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 39
ВТОС.ОС КАК ОС,
ВТОС.ОС.ГруппаОС КАК ГруппаОС,
ВТОС.ИнвНомер КАК ИнвНомер,
ВТОС.СсылкаНаИзменениеПараметров КАК СсылкаНаИзменениеПараметров,
ВТОС.ОсновноеСредствоГруппаОС КАК ОсновноеСредствоГруппаОС,
ВТОС.ПервоначальнаяСтоимостьБУ КАК ПервоначальнаяСтоимостьБУ,
ВТОС.ДатаПринятияКУчету КАК ДатаПринятияКУчету,
ВТОС.СрокПолезногоИспользованияБУ КАК СрокПолезногоИспользованияБУ,
ВТОС.СрокПолезногоИспользованияБУЛет КАК СрокПолезногоИспользованияБУЛет,
ВТОС.ОстатокАмортизации КАК ОстатокАмортизации,
ВТОС.ЕжемесячнаяАмортизация КАК ЕжемесячнаяАмортизация,
// Что если мы увеличим срок полезного использования на 30%?
ВТОС.СрокПолезногоИспользованияБУ * 1.3 КАК НовыйСрок,
ВЫРАЗИТЬ(ВТОС.СрокПолезногоИспользованияБУ * 1.3 / 12 КАК ЧИСЛО(3, 0)) КАК НовыйСрокЛет,
ВТОС.ПервоначальнаяСтоимостьБУ / (ВТОС.СрокПолезногоИспользованияБУ * 1.3) КАК НоваяЕжемесячнаяАмортизация,
// Что если мы установим срок полезного использования = 50 лет?
50 * 12 КАК НовыйСрок50,
50 КАК НовыйСрок50Лет,
ВТОС.ПервоначальнаяСтоимостьБУ / (50*12) КАК НоваяЕжемесячнаяАмортизация50Лет
ПОМЕСТИТЬ ВТДанные
ИЗ
ВТОС КАК ВТОС
ГДЕ
ВТОС.ОстатокАмортизации > 0
И ВТОС.ОС.ГруппаОС = &ГруппаОССооружения
И ВТОС.СрокПолезногоИспользованияБУЛет > 5
И ВТОС.ЕжемесячнаяАмортизация > 500000
И ВТОС.СсылкаНаИзменениеПараметров = &ПустаяСсылка
И ВТОС.ПризнакАктуальности > &ДатаНачало2022
УПОРЯДОЧИТЬ ПО
ВТОС.ДатаПринятияКУчету
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
СУММА(Д.Было) КАК Было,
СУММА(Д.Стало) КАК Стало,
СУММА(Д.Стало) - СУММА(Д.Было) КАК Изменение,
СУММА(Д.Стало50) - СУММА(Д.Было) КАК Изменение50Лет
ПОМЕСТИТЬ ВТДельты
ИЗ
(ВЫБРАТЬ
СУММА(Д1.ЕжемесячнаяАмортизация) КАК Было,
0 КАК Стало,
0 КАК Стало50
ИЗ
ВТДанные КАК Д1
ОБЪЕДИНИТЬ
ВЫБРАТЬ
0,
СУММА(Д2.НоваяЕжемесячнаяАмортизация),
0
ИЗ
ВТДанные КАК Д2
ОБЪЕДИНИТЬ
ВЫБРАТЬ
0,
0,
Д3.НоваяЕжемесячнаяАмортизация50Лет
ИЗ
ВТДанные КАК Д3) КАК Д;
ВЫБРАТЬ * ИЗ ВТДельты
python tk threaded output to textwidget ¶
#https://github.com/beenje/tkinter-logging-text-widget
import datetime
import queue
import logging
import signal
import time
import threading
import tkinter as tk
from tkinter.scrolledtext import ScrolledText
from tkinter import ttk, VERTICAL, HORIZONTAL, N, S, E, W
logger = logging.getLogger(__name__)
class Clock(threading.Thread):
"""Class to display the time every seconds
Every 5 seconds, the time is displayed using the logging.ERROR level
to show that different colors are associated to the log levels
"""
def __init__(self):
super().__init__()
self._stop_event = threading.Event()
def run(self):
logger.debug('Clock started')
previous = -1
while not self._stop_event.is_set():
now = datetime.datetime.now()
if previous != now.second:
previous = now.second
if now.second % 5 == 0:
level = logging.ERROR
else:
level = logging.INFO
logger.log(level, now)
time.sleep(0.2)
def stop(self):
self._stop_event.set()
class QueueHandler(logging.Handler):
"""Class to send logging records to a queue
It can be used from different threads
The ConsoleUi class polls this queue to display records in a ScrolledText widget
"""
# Example from Moshe Kaplan: https://gist.github.com/moshekaplan/c425f861de7bbf28ef06
# (https://stackoverflow.com/questions/13318742/python-logging-to-tkinter-text-widget) is not thread safe!
# See https://stackoverflow.com/questions/43909849/tkinter-python-crashes-on-new-thread-trying-to-log-on-main-thread
def __init__(self, log_queue):
super().__init__()
self.log_queue = log_queue
def emit(self, record):
self.log_queue.put(record)
class ConsoleUi:
"""Poll messages from a logging queue and display them in a scrolled text widget"""
def __init__(self, frame):
self.frame = frame
# Create a ScrolledText wdiget
self.scrolled_text = ScrolledText(frame, state='disabled', height=12)
self.scrolled_text.grid(row=0, column=0, sticky=(N, S, W, E))
self.scrolled_text.configure(font='TkFixedFont')
self.scrolled_text.tag_config('INFO', foreground='black')
self.scrolled_text.tag_config('DEBUG', foreground='gray')
self.scrolled_text.tag_config('WARNING', foreground='orange')
self.scrolled_text.tag_config('ERROR', foreground='red')
self.scrolled_text.tag_config('CRITICAL', foreground='red', underline=1)
# Create a logging handler using a queue
self.log_queue = queue.Queue()
self.queue_handler = QueueHandler(self.log_queue)
formatter = logging.Formatter('%(asctime)s: %(message)s')
self.queue_handler.setFormatter(formatter)
logger.addHandler(self.queue_handler)
# Start polling messages from the queue
self.frame.after(100, self.poll_log_queue)
def display(self, record):
msg = self.queue_handler.format(record)
self.scrolled_text.configure(state='normal')
self.scrolled_text.insert(tk.END, msg + '\n', record.levelname)
self.scrolled_text.configure(state='disabled')
# Autoscroll to the bottom
self.scrolled_text.yview(tk.END)
def poll_log_queue(self):
# Check every 100ms if there is a new message in the queue to display
while True:
try:
record = self.log_queue.get(block=False)
except queue.Empty:
break
else:
self.display(record)
self.frame.after(100, self.poll_log_queue)
class FormUi:
def __init__(self, frame):
self.frame = frame
# Create a combobbox to select the logging level
values = ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']
self.level = tk.StringVar()
ttk.Label(self.frame, text='Level:').grid(column=0, row=0, sticky=W)
self.combobox = ttk.Combobox(
self.frame,
textvariable=self.level,
width=25,
state='readonly',
values=values
)
self.combobox.current(0)
self.combobox.grid(column=1, row=0, sticky=(W, E))
# Create a text field to enter a message
self.message = tk.StringVar()
ttk.Label(self.frame, text='Message:').grid(column=0, row=1, sticky=W)
ttk.Entry(self.frame, textvariable=self.message, width=25).grid(column=1, row=1, sticky=(W, E))
# Add a button to log the message
self.button = ttk.Button(self.frame, text='Submit', command=self.submit_message)
self.button.grid(column=1, row=2, sticky=W)
def submit_message(self):
# Get the logging level numeric value
lvl = getattr(logging, self.level.get())
logger.log(lvl, self.message.get())
class ThirdUi:
def __init__(self, frame):
self.frame = frame
ttk.Label(self.frame, text='This is just an example of a third frame').grid(column=0, row=1, sticky=W)
ttk.Label(self.frame, text='With another line here!').grid(column=0, row=4, sticky=W)
class App:
def __init__(self, root):
self.root = root
root.title('Logging Handler')
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
# Create the panes and frames
vertical_pane = ttk.PanedWindow(self.root, orient=VERTICAL)
vertical_pane.grid(row=0, column=0, sticky="nsew")
horizontal_pane = ttk.PanedWindow(vertical_pane, orient=HORIZONTAL)
vertical_pane.add(horizontal_pane)
form_frame = ttk.Labelframe(horizontal_pane, text="MyForm")
form_frame.columnconfigure(1, weight=1)
horizontal_pane.add(form_frame, weight=1)
console_frame = ttk.Labelframe(horizontal_pane, text="Console")
console_frame.columnconfigure(0, weight=1)
console_frame.rowconfigure(0, weight=1)
horizontal_pane.add(console_frame, weight=1)
third_frame = ttk.Labelframe(vertical_pane, text="Third Frame")
vertical_pane.add(third_frame, weight=1)
# Initialize all frames
self.form = FormUi(form_frame)
self.console = ConsoleUi(console_frame)
self.third = ThirdUi(third_frame)
self.clock = Clock()
self.clock.start()
self.root.protocol('WM_DELETE_WINDOW', self.quit)
self.root.bind('', self.quit)
signal.signal(signal.SIGINT, self.quit)
def quit(self, *args):
self.clock.stop()
self.root.destroy()
def main():
logging.basicConfig(level=logging.DEBUG)
root = tk.Tk()
app = App(root)
app.root.mainloop()
if __name__ == '__main__':
main()
1c user message ¶
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Товары не заполнены";
Сообщение.Поле = "Товары";
Сообщение.Сообщить();
Отказ = Истина;
1с ням ¶
#Область Например_ОбъявлениеТипов
Если Ложь Тогда Док = Документы.РеализацияТоваровУслуг.СоздатьДокумент() КонецЕсли;
#КонецОбласти
Django InformationRegisterManager ¶
class InformationRegisterManager(models.Manager):
def get_latest(slice_date=None):
if not slice_date:
slice_date = timezone_now()
q = '''
SELECT
cpp.product_id,
p.article,
cpp.competitor_id,
cpp.price,
cpp.created_at
FROM
marketing_competitorproductprice AS cpp
INNER JOIN (
SELECT
MAX(cpp_inner.created_at) AS maxdate,
cpp_inner.product_id,
cpp_inner.competitor_id
FROM
marketing_competitorproductprice AS cpp_inner
GROUP BY
cpp_inner.product_id,
cpp_inner.competitor_id
) AS filter
ON
cpp.product_id = filter.product_id
AND cpp.competitor_id = filter.competitor_id
AND cpp.created_at = filter.maxdate
JOIN catalog_product as p
ON cpp.product_id = p.id
'''
rows = runsql(q, [])
return rows
1c read *.xls[x] on client ¶
&НаКлиенте
Процедура ОткрытьФайл(Команда)
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайла.Заголовок = "Прочитать табличный документ из файла";
ДиалогВыбораФайла.Фильтр = "Лист Excel 2007+ (*.xlsx)|*.xlsx| Лист Excel 2003 (*.xls)|*.xls|";
Если ДиалогВыбораФайла.Выбрать() Тогда
Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ДиалогВыбораФайла.ПолноеИмяФайла));
ЗагрузитьТабличныйДокументИзФайла(Адрес, ДиалогВыбораФайла.ПолноеИмяФайла);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьТабличныйДокументИзФайла(Адрес, ИмяФайла)
//Необходимо чтение файлов XLS или XLSX
Расширение = Прав(ИмяФайла, 4);
Расширение = СтрЗаменить(Расширение, ".", "");
ФайлПриемник = ПолучитьИмяВременногоФайла(Расширение);
ДанныеХранилища = ПолучитьИзВременногоХранилища(Адрес);
ДанныеХранилища.Записать(ФайлПриемник);
ТабличныйДокумент.Очистить();
ТабличныйДокумент.Прочитать(ФайлПриемник);
КонецПроцедуры
Get your local Git repository on Bitbucket ¶
Step 1: Switch to your repository's directory
$ cd /path/to/your/repo
Step 2: Connect your existing repository to Bitbucket
$ git remote add origin git@bitbucket.org:qaua/vrbb.git
$ git push -u origin master
1c save/restore report builder settings ¶
// НастройкиПостроителя - реквизит обработки (Строка, неогр)
// событие формы
Процедура ПередСохранениемЗначений(Отказ)
НастройкиПостроителя = ЗначениеВСтрокуВнутр(ПостроительОтчета.ПолучитьНастройки());
КонецПроцедуры
Процедура ВосстановитьНастройкиПостроителя()
Если СокрЛП(НастройкиПостроителя) <> "" Тогда
Попытка
ПостроительОтчета.УстановитьНастройки(ЗначениеИзСтрокиВнутр(НастройкиПостроителя));
Исключение
КонецПопытки;
КонецЕсли;
КонецПроцедуры
// событие формы
Процедура ПриОткрытии()
ВосстановитьНастройкиПостроителя();
КонецПроцедуры
// событие формы
Процедура ПослеВосстановленияЗначений()
ВосстановитьНастройкиПостроителя();
КонецПроцедуры
1c ADO Excel ¶
&НаСервере
Функция ОбработатьФайлНаСервере(ПутьКФайлу)
first_row = 1;
last_row = 0;
conn_string = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + СокрЛП(ПутьКФайлу) + ";Extended Properties=""Excel 12.0;HDR=NO;IMEX=1;""";
ADODBConnection = New COMObject("ADODB.Connection");
ADODBConnection.ConnectionString = conn_string;
Try
ADODBConnection.Open();
Except
Try
conn_string = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + СокрЛП(ПутьКФайлу) + ";Extended Properties=""Excel 8.0;HDR=NO;IMEX=1;""";
ADODBConnection.ConnectionString = conn_string;
ADODBConnection.Open();
Except
msg = "COM object is not available. Tried Microsoft.ACE.OLEDB.12.0, Microsoft.Jet.OLEDB.4.0";
print(msg);
return 1;
Endtry
Endtry;
schema = ADODBConnection.OpenSchema(20); // 20 - enum for adSchemaTables
While Schema.EOF() = 0 Do
sheet_name = schema.Fields("table_name").Value;
query = "SELECT * FROM [" + sheet_name + "]";
ADODBRecordset = New COMObject("ADODB.Recordset");
ADODBRecordset.Open(query, ADODBConnection);
If (ADODBRecordset.EOF ИЛИ ADODBRecordset.BOF) Then
line_count = 0;
Сообщить(НСтр("ru = '" + sheet_name + ": не содержит данных.'"), СтатусСообщения.Внимание);
// Завершение работы.
// Закрытие Объектов.
ADODBRecordset.Close();
ADODBConnection.Close();
ADODBRecordset = Неопределено;
ADODBConnection = Неопределено;
Endif;
// Импирически определенные параметры для правильного определения количества строк листа.
//ADODBRecordset.AbsolutePage = 1;
//ADODBRecordset.AbsolutePosition = 1;
// Параметр, возвращаемый в вызывающую процедуру.
КолвоСтрокExcel = ADODBRecordset.RecordCount + 1; // (+1) - учет Строки-Заголовока, которая "съедается".
КолвоКолонокExcel = ADODBRecordset.Fields.Count;
ТаблицаРезультат = Новый ТаблицаЗначений;
// Формирование колонок результирующей таблицы.
// "НомерСтроки" - для наглядности и удобства.
// В зависимости от разрабатываемой обработки.
// "Сопоставлено" - может быть другим.
// Здесь же могут быть добавлены другие колонки, не формируемые из содержимого файла EXCEL.
ТаблицаРезультат.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число"), "№", 4);
ТаблицаРезультат.Колонки.Добавить("Сопоставлено", Новый ОписаниеТипов("Булево"), "Сопоставлено", 1);
Для ит = 1 ПО КолвоКолонокExcel Цикл
Поле = ADODBRecordset.Fields.Item(ит - 1);
ИмяКолонки = "К_" + ит;
Колонка = ТаблицаРезультат.Колонки.Добавить(ИмяКолонки, , СокрЛП(СтрЗаменить(Поле.Name, "#", ".")));
// Замена "#" на ".", т.к. при считывании ADODB "." в имени колонки заменяется на "#".
КонецЦикла;
// ТаблицаРезультат: 1-я строка - Строка-Заголовок.
// Добавление этой строки обусловлено исключительно из соображений идентичности содержимого файла EXCEL и ТаблицыЗначений,
// выводимой на форме Обработки, и дальнейшей обработки строки заголовка
// с целью сопоставления колонок EXCEL и реквизитов 1С: для Справочников, ПВХ, Регистров, Документов.
// Если в Вашей обработке в результирующей таблице в качестве 1-ой строки не нужна Строка-Заголовок, то
// следует закомментировать следующий цикл:
НоваяСтрока = ТаблицаРезультат.Добавить();
НоваяСтрока.НомерСтроки = 1;
Для ит = 1 ПО КолвоКолонокExcel Цикл
ИмяКолонки = "К_" + ит;
Колонка = ТаблицаРезультат.Колонки.Найти(ИмяКолонки);
НоваяСтрока[ИмяКолонки] = Колонка.Заголовок;
КонецЦикла;
// ТаблицаРезультат: Формирование строк по указанному диапазону: НачСтрока - КонСтрока.
НомерСтроки = 1;
Пока ADODBRecordset.EOF() = 0 Цикл
НомерСтроки = НомерСтроки + 1;
Если НомерСтроки < first_row Тогда // Номер строки вне диапазона считываемых строк.
ADODBRecordset.MoveNext(); // Следующая строка.
Продолжить;
КонецЕсли;
Если last_row > 0 И НомерСтроки > last_row Тогда // Номер строки вне диапазона считываемых строк.
Прервать;
КонецЕсли;
НоваяСтрока = ТаблицаРезультат.Добавить();
НоваяСтрока.НомерСтроки = НомерСтроки;
Для ит = 1 ПО КолвоКолонокExcel Цикл
Поле = ADODBRecordset.Fields.Item(ит - 1);
Если Поле.ActualSize = 0 Тогда // Пустое поле EXCEL.
Продолжить;
КонецЕсли;
ЗначениеЯчейки = Поле.Value; // Учитывая параметр HDR=YES в строке соединения, данные считываются в соответствии с их типом.
ИмяКолонки = "К_" + ит;
НоваяСтрока[ИмяКолонки] = СтрЗаменить(ЗначениеЯчейки, Символы.НПП, "");
// Используется при формировании таблицы на форме обработки.
ШиринаКолонки = ТаблицаРезультат.Колонки[ИмяКолонки].Ширина;
ДлинаСтроки = СтрДлина(СокрЛП(ЗначениеЯчейки));
ТаблицаРезультат.Колонки[ИмяКолонки].Ширина = ?(ШиринаКолонки < ДлинаСтроки, ДлинаСтроки, ШиринаКолонки);
КонецЦикла;
ADODBRecordset.MoveNext(); // Следующая строка.
КонецЦикла;
Schema.MoveNext();
КонецЦикла;
ADODBRecordset.Close();
ADODBConnection.Close();
ADODBRecordset = Неопределено;
ADODBConnection = Неопределено;
Сообщить(ТаблицаРезультат.Количество());
Возврат ТаблицаРезультат;
КонецФункции
1c WSLink ¶
/////////////////////////
// Инициализация по объекту конфигурации
ns = "namespace"; // нэймспейс
username = "XXX"; // логин, может не быть
password = "XXX"; // пароль, может не быть
WS = WSСсылки.ИмяWSСсылки.СоздатьWSПрокси(ns, "ИмяWSОперации", "ИмяWSОперации_SOAP12");
WS.Пользователь = username;
WS.Пароль = password;
// XDTO может не быть (пользуйтесь строками :-))
//pack = WS.ФабрикаXDTO.Пакеты.Получить(ns);
Ответ = WS.ОперацияВебСервиса(ВходнойПараметр1, ВходнойПараметр2, ..., ВходнойПараметрN);
/////////////////////////
// Инициализация по wsdl-ссылке
ns = "namespace"; // нэймспэйс
url = "http://YOUR_WSDL_LINK?wsdl";
username = "XXXXXX"; // логин, может не быть
password = "XXXXXX"; // пароль, может не быть
Определение = Новый WSОпределения(url, username, password);
WS = Новый WSПрокси(Определение, ns, "WebServiceName", "WebServiceNameSoap");
Ответ = WS.ОперацияВебСервиса(ВходнойПараметр1, ВходнойПараметр2, ..., ВходнойПараметрN);
1c fast write to xls ¶
Процедура СформироватьЭксельФайл(ТЗ)
Excel = Новый COMОбъект("Excel.Application");
Document = Excel.Workbooks.Add(); // Тут главное добавить новую книгу в эксель-документ
ВсегоСтрок = ТЗ.Количество();
ВсегоКолонок = ТЗ.Колонки.Количество();
ComSafeArr = Новый COMSafeArray("VT_VARIANT", ВсегоКолонок, ВсегоСтрок);
Для СчСтрок = 0 По ВсегоСтрок - 1 Цикл
Строка = ТЗ[СчСтрок];
Для СчКолонок = 0 По ВсегоКолонок - 1 Цикл
ComSafeArr.SetValue(СчКолонок, СчСтрок, Лев(Строка[СчКолонок], 900)); // к сожалению строки надо обрезать
КонецЦикла;
КонецЦикла;
Excel.Range(Excel.Cells(1, 1), Excel.Cells(ВсегоСтрок, ВсегоКолонок)).Value = ComSafeArr;
Excel.Visible = 1; // Покажем получившееся
КонецПроцедуры
1c read XML ¶
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
Элементы = ДокументDOM.ПолучитьЭлементыПоИмени("");
Для Каждого Элемент из Элементы Цикл
Сообщить(Элемент.ТекстовоеСодержимое);
КонецЦикла;
1c file dialog ¶
ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбора.Фильтр = "*.*";
Если ДиалогВыбора.Выбрать() Тогда
ПутьКФайлу = ДиалогВыбора.ПолноеИмяФайла;
КонецЕсли;
1c read Excel ¶
Excel = Новый COMОбъект("Excel.Application");
Workbook = Excel.Workbooks.Open(ПутьКФайлу);
Данные = Новый ТаблицаЗначений;
СтрокаКолонок = 1; // строка с названиями колонок
ПерваяСтрока = 2; // первая строка с данными
ПерваяКолонка = 1; // и так понятно
CurPage = Workbook.Sheets(1); // обрабатываем только первый лист
КоличествоСтрок = CurPage.Cells.SpecialCells(11).Row;
КоличествоКолонок = CurPage.Cells.SpecialCells(11).Column;
ДанныеФайла = CurPage.Range(CurPage.Cells(ПерваяСтрока, ПерваяКолонка), CurPage.Cells(КоличествоСтрок, КоличествоКолонок)).Value.Выгрузить();
Для Счетчик = 1 По КоличествоКолонок Цикл
Попытка
Данные.Колонки.Добавить(ОчиститьСтроку(CurPage.Cells(СтрокаКолонок, Счетчик).Text), Новый ОписаниеТипов("Строка"), CurPage.Cells(СтрокаКолонок, Счетчик).Text);
Исключение
Данные.Колонки.Добавить("Колонка"+Строка(Счетчик), Новый ОписаниеТипов("Строка"), "Колонка"+Строка(Счетчик));
Сообщить("Какая-то ошибка в колонке: " + "Колонка" + Строка(Счетчик));
КонецПопытки;
КонецЦикла;
Для Счетчик = 1 По КоличествоСтрок Цикл
НоваяСтрока = Данные.Добавить();
КонецЦикла;
Для Счетчик = 0 По КоличествоКолонок - 1 Цикл
Данные.ЗагрузитьКолонку(ДанныеФайла[Счетчик], Счетчик);
КонецЦикла;
Сообщить("Чтение файла завершено.");
Excel.Application.Quit();
1c standard period ¶
&НаКлиенте
Процедура ВыбратьПериод(Команда)
Диалог = Новый ДиалогРедактированияСтандартногоПериода();
Диалог.Период = Новый СтандартныйПериод(ДатаНачала, ДатаОкончания);
ОписаниеОповещенияОЗакрытии = Новый ОписаниеОповещения("ВыполнитьПослеВыбораПериода",ЭтотОбъект);
Диалог.Показать(ОписаниеОповещенияОЗакрытии);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьПослеВыбораПериода(Результат, Параметры) Экспорт
Если Результат <> Неопределено Тогда
ДатаНачала = Результат.ДатаНачала;
ДатаОкончания = Результат.ДатаОкончания;
КонецЕсли;
КонецПроцедуры
1c join ¶
function join(Знач list, delimeter=",") export
r = "";
for each item in list do
r = r + trimall(string(item)) + delimeter;
enddo;
if strlen(r) > 0 then
r = left(r, strlen(r) - strlen(delimeter));
endif;
return r;
endfunction
макет бойлерплэйт ¶
Об = РеквизитФормыВЗначение("Объект");
Макет = Об.ПолучитьМакет("Макет");
Данные = СтрРазделить(Макет.ПолучитьТекст(), Символы.ПС);
Для Каждого _ из Данные Цикл
ДанныеСтроки = СтрРазделить(_, Символы.Таб);
//
КонецЦикла;
1c clean xml ¶
Функция УдалитьНедопустимыеСимволыXML(СтрокаХМЛ)
Позиция = НайтиНедопустимыеСимволыXML(СтрокаХМЛ);
Пока Позиция <> 0 Цикл
НедопустимыйСимвол = Сред(СтрокаХМЛ, Позиция,1)
СтрокаХМЛ = СтрЗаменить(СтрокаХМЛ, НедопустимыйСимвол, "");
Позиция = НайтиНедопустимыеСимволыXML(СтрокаХМЛ);
КонецЦикла;
Возврат СтрокаХМЛ;
КонецФункции
Excel hyperlinks macro ¶
# Alt+F11 to open VB editor
# Insert module, insert code to module, close editor
# Alt+F8 -> run macro
Sub HyperAdd()
'Converts each text hyperlink selected into a working hyperlink
Dim xCell As Range
For Each xCell In Selection
ActiveSheet.Hyperlinks.Add Anchor:=xCell, Address:=xCell.Formula
Next xCell
End Sub
Microsoft.ACE.OLEDB.12.0 ¶
D:\>AccessDatabaseEngine.exe /passive
OR
D:\>AccessDatabaseEngine_X64.exe /passive
COM-подключение ¶
СтрокаПодключения = "File="""";Usr="""";Pwd=""""";
СтрокаПодключения = "Srvr="""";Ref="""";Usr="""";Pwd=""""";
V83COMConnector= Новый COMОбъект("V83.COMConnector");
Попытка
Возврат V83COMConnector.Connect(СтрокаПодключения);
Исключение
Сообщить(ОписаниеОшибки());
Сообщить("Ошибка подключения!");
Возврат Неопределено;
КонецПопытки;
Пользователь не идентифицирован ¶
SELECT Status FROM SchemaStorage WHERE SchemaID = 0;
UPDATE SchemaStorage SET Status = 100;
SQL restore ¶
USE master;
GO
ALTER DATABASE TEST_DB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
RESTORE DATABASE TEST_DB FROM DISK = N'C:\backups\PROD_BACKUP.bak' WITH FILE = 1, MOVE '' TO N'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLDEV\MSSQL\DATA\TEST_DB.mdf', MOVE 'PROD_DB_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLDEV\MSSQL\DATA\TEST_DB_log.ldf', NOUNLOAD, REPLACE, STATS = 10
GO
ALTER DATABASE TEST_DB SET MULTI_USER;
GO
order reporting ¶
from datetime import datetime
from catalog.models import Category, Product
from sales.models import Order, OrderItem
threshold = datetime(2018, 1, 1, 0, 0)
c = Category.objects.get(id=20)
pqs = Product.objects.filter(category__in=c.get_descendants(include_self=True))
pids = pqs.values_list('id', flat=True)
print(pqs.count())
orders = []
oiqs = OrderItem.objects.filter(product_id__in=pids).select_related('order', 'order__customer', 'product').order_by('order__created_at')
for oi in oiqs:
if oi.order.created_at < threshold:
continue
orders.append((
oi.order.customer.get_full_name(),
oi.order.customer.phone,
oi.order.customer.email,
oi.order.number,
str(oi.order.created_at),
oi.product.name,
str(oi.quantity),
str(oi.price)
))
for o in orders:
print('\t'.join(o))
find ¶
$ find . -group y -user y -exec ls {} +
Save image to ImageField ¶
for r in data:
p = Product.objects.filter(article=r[0]).first()
if not p:
print('article:', r[0], 'not found')
continue
pi_qs = ProductImage.objects.filter(product=p).delete()
pi = ProductImage(product=p, sorting_order=1)
pi.save()
pi.image.save(r[1], File(open(os.path.join(settings.BASE_DIR, 'tmp', 'Spares', r[1]), 'rb')), save=True)