воскресенье, 25 августа 2024 г.

Проверка XML-файла на соответствие схеме

Дано: Большой XML-файл, при попытке загрузить через SSIS в базу SQL падает с неинформативной ошибкой. Доступа к ETL-проекту нет. Надо найти ошибку.

Решение:

// 7.7

Процедура Сформировать()

    Анализатор = СоздатьОбъект("AddIn.XMLParser");
    ДокДляПроверки = Анализатор.СоздатьДокумент();

    Схемы = Анализатор.СоздатьКоллекциюСхем();
    Схемы.ДобавитьСхему("", "полный путь и имя файла.xsd");
    ДокДляПроверки.Схемы = Схемы;

    Попытка
        ДокДляПроверки.Загрузить("полный путь и имя файла.xml" );
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    
КонецПроцедуры

 

//8.x - https://forum.infostart.ru/forum9/topic71808/

суббота, 8 июня 2024 г.

К предыдущему: про девочку и маркетинг

 Отсюда: https://marketingburo.info/pritcha

Заходили тут намедни в один большой магазин справить мне пальто на осень. Самое время для этого, в аккурат пора. Ибо и холодает уже ощутимо, да и определённая, не всем понятная рифма — тоже обязывает.

Зашли чинно, не спеша выбрали нужного фасона вещь, пощупали сукнецо, поплевались на цены и пошёл я мерить.

Тесновато пальтецо! В плечах узко, потрескивает угрожающе, того и гляди — разворочу дорогую иностранную конструкцию. А приглянулось меж тем оно, да и ходить долго, другие искать — не шибко я любитель.

Как тут быть?

Типовая история

Отсюда:

 

В свое время вокруг «девочки, которая убьет ваш маркетинг» много копий было сломано. Многочисленные рассказы о том, что «крепостное право отменили», что «зажрались вообще», что «выдумали все, просто деньги платить не хотят сотрудникам» и прочие булыжники пролетариата.

А меж тем, в истории сей вся мировая скорбь еврейского народа любого коммерсанта. Практически «скупая мужская слеза, из высохших глазниц».

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

пятница, 24 ноября 2023 г.

Получить все таблицы в базе MS SQL, в которых есть колонка с определенным названием

Для автоматизации задачи получения информации о периодах хранения данных в базе 1С.

Решение здесь.

select table_name 
from information_schema.columns
where column_name='_Period'

вторник, 19 сентября 2023 г.

Отключение промежуточных задач ознакомления для комплексных процессов в 1С Документооборот 2.1

Задача:

В 1С Документооборот 2.1 отключить создание задачи ознакомления после каждого этапа комплексного процесса (вложенный процесс согласования).

Создавать задачу нужно 1 раз, когда процесс завершён, или если какой-то этап отклонили, и надо уведомить об этом создателя.

 
Идеи:
https://its.1c.ru/db/metod8dev#content:5874:hdoc - процессы и задачи
https://infostart.ru/1c/tools/1161532/ - Отключение создания задачи ознакомления для бизнес-процесса "Согласование" в 1С: Документооборот

Решение:
Процессу согласования добавить  дополнительный реквизит "Не создавать задачу ознакомления", булево. Для процесса согласования в шаблоне комплексного процесса установить этот реквизит в Истина.
 
Изменить модуль объекта бизнес-процесса Согласование:
 
1. новая процедура ПолучитьЗначениеДопРеквизита
 
Функция ПолучитьЗначениеДопРеквизита(ИмяДопРеквизита)    //
    ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ИмяДопРеквизита);
    СтруктураПоиска = Новый Структура("Свойство", ДопСвойство);
    МассивСтрок = ЭтотОбъект.ДополнительныеРеквизиты.НайтиСтроки(СтруктураПоиска);
    Если МассивСтрок.Количество()=0 Тогда
        Возврат 0;
    КонецЕсли;
    ОписаниеДопСвойства = МассивСтрок[0];
    Возврат ОписаниеДопСвойства.Значение;
КонецФункции
 
 
2. добавляем пару строк в процедуру ЗавершениеПриЗавершении
 
Процедура ЗавершениеПриЗавершении(ТочкаМаршрутаБизнесПроцесса, Отказ)
    
    УстановитьПривилегированныйРежим(Истина);
    ДатаЗавершения = ТекущаяДатаСеанса();
    
    СрокИсполненияДатой = ДатаЗавершения;
    
    РаботаСПроектами.ОтметитьОкончаниеВыполненияПроектнойЗадачи(ЭтотОбъект);
    
    // {{ начало изменений
    НеСоздаватьЗадачуОзнакомления = ПолучитьЗначениеДопРеквизита("Не создавать задачу ознакомления");
    Если НеСоздаватьЗадачуОзнакомления И (РезультатСогласования = Перечисления.РезультатыСогласования.Согласовано) Тогда
        Возврат;
    КонецЕсли;
    // конец изменений }}
 
    // Если процесс завершился положительно и нет задачи ознакомления (задача ознакомления могла быть
    // создана до перехода на редакцию 2.1), то создаем задачу ознакомления с результатом.
    Если РезультатСогласования = Перечисления.РезультатыСогласования.Согласовано
 
...

понедельник, 19 июня 2023 г.

Переименование БД MS SQL Server

Дано: База с неправильным именем не на том диске.

Надо: Переименовать и перенести.

Решение:

1. Меняем имя базы:

sp_renamedb 'старое' , 'новое'

 

2. Меняем логические и физические имена файлов:

ALTER DATABASE имя_базы MODIFY FILE (NAME = 'старое_data', NEWNAME = 'новое_data')
ALTER DATABASE имя_базы MODIFY FILE (NAME = 'старое_log', NEWNAME = 'новое_log')

 

3. Отключаем базу командой detach

4. Переименовываем файлы

5. Переносим в правильное расположение

6. Присоединяем командой attach, указывая правильные ссылки на файлы 

7. Возвращаем правильного владельца через sp_changedbowner (от чьего имени с базой работает 1С)

суббота, 17 июня 2023 г.

Как узнать, кто перезагрузил (выключил) сервер Windows?

Источник: https://winitpro.ru/index.php/2022/02/16/kto-perezagruzil-vyklyuchil-windows-server/ 

Решение: Информация об учетной записи, которая отправила команду перезагрузки Windows сохраняется в журнал событий.

  1. Открыть консоль Event Viewer ( eventvwr.msc ),  перейти в раздел Windows Logs -> System;
  2. Включить фильтр журнала событий, выбрав в контекстном меню пункт Filter Current Log
  3. В поле фильтра указать EventID 1074;  
  4. В журнале событий останутся только события выключения (перезагрузки);
  5. В событии от источника User32 будет указан пользователь, который инициировал перезагрузку Windows.

Можно получить информацию с помощью PowerShell. Следующая команда выберет все события с EventID 1074:

Get-WinEvent -FilterHashtable @{logname=’System’;id=1074}|ft TimeCreated,Id,Message 

 Если Windows была перезагружена нештатно (например, при потере электропитания, или появления BSOD), нужно искать события с EventID 6008.

 


Ошибка "Изменение конфигурации заблокированы средствами управления распределенными ИБ"

Проблема:

Надо повозиться с копией БД, но дереве метаданных объекты заблокированы, всплывает указанная в теме подсказка. Также заблокирована загрузка конфигурации из файла.

 

Решение:  

Выполнить обработку с командой:

ПланыОбмена.УстановитьГлавныйУзел(Неопределено); 

Отключить отслеживание телеметрии Nvidia в Windows

Источники:

https://spy-soft.net/otklyuchit-telemetriyu-nvidia/

https://ru.railstoolkit.com/otklyuchit-otslezhivanie-nvidia-telemetry-v-windows

https://bauinvest.su/otkljuchit-otslezhivanie-telemetrii-nvidia-v/

 

Утилитой Autoruns от Марка Русиновича

Запускаем от имени администратора. После чего в строке «Filter» делаем поиск по слову «nvidia». Когда программа отобразит результаты, убираем галочки с чекбоксов:

  • NvTmMon
  • NvTmRep
  • NvTmRepOnLogon

 

Планировщиком задач 

Запускаем планировщик задач и находим NvTmMon. После чего правым кликом мышки вызываем контекстное меню, в котором выбираем пункт «Отключить». Тоже самое с файлами NvTmRepOnLogon и NvTmRep. 

Список может отличаться, в зависимости от версии драйвера и компонентов:

  • NvTmMon — Монитор телеметрии Nvidia — запускает C: \ Program Files (x86) \ NVIDIA Corporation \ Update Core \ NvTmMon.exe
  • NvTmRep — Сбой Nvidia и Telemetry Reporter — запускает C: \ Program Files (x86) \ NVIDIA Corporation \ Update Core \ NvTmRep.exe
  • NvTmRepCR * — Задача аварийного репортера. Обнаружен трижды с числами 1-3 в тестовой системе после установки последней версии драйвера.
  • NvProfileUpdaterDaily — Программа обновления профиля NVIDIA — C: \ Program Files \ NVIDIA Corporation \ Update Core \ NvProfileUpdater64.exe
  • NvProfileUpdaterOnLogon — Программа обновления профиля NVIDIA — C: \ Program Files \ NVIDIA Corporation \ Update Core \ NvProfileUpdater64.exe

Прочие задачи

  • NvTmRepOnLogon — Nvidia Profile Updater — запускает C: \ Program Files (x86) \ NVIDIA Corporation \ Update Core \ NvTmRep.exe —logon
  • NvDriverUpdateCheckDaily — Контейнер Nvidia — C: \ Program Files \ nvidia corporation \ nvcontainer \ nvcontainer.exe
  • NvNodeLauncher — Программа запуска NVIDIA NvNode — C: \ Program Files (x86) \ NVIDIA Corporation \ NvNode \ nvnodejslauncher.exe

 

пятница, 13 мая 2022 г.

Отключение защиты от опасных действий в 1С

 
Защита от опасных действий появилась в платформе 1с, начиная с версии 8.3.8. Эта защита включена по умолчанию и включает в себя:
  • выдачу пользователю предупреждений о загрузке внешних отчётов, обработок и расширений
  • запрет на выполнение потенциально опасных функций языка в коде загруженных модулей
 
Способ 1  
В конфигураторе в свойствах пользователя снимите галку "Защита от опасных действий". Нажмите кнопку "ОK". Готово.
 
Способ 2
Этот способ предназначен только для опытных пользователей.
Есть возможность раз и навсегда отключить "Защиту от опасных действий" для всех баз (и для всех пользователей) . Это можно сделать на уровне настроек платформы.
1. Зайдите в папку, куда установлена 1с. Обычно это "c:\Program Files\1cv8".
2. В этой папке найдите подпапку с именем "conf". Зайдите в неё.
3. Здесь найдите и откройте на редактирование файл "conf.cfg".
4. Добавьте в конец этого файла строчку:
DisableUnsafeActionProtection=.*

воскресенье, 24 апреля 2022 г.

Где qBittorrent хранит список торрентов

В qBittorrent хранится список торрентов которые вы скачиваете/раздаете, но вы установили новую операционную систему и нужно перенести (мигрировать) список торрентов в заново установленную программу. 

Для Windows 10:
Настройки хранятся  в файле qbittorrent.ini:
C:\Users\<имяпользователя>\AppData\Roaming\qBittorrent
или %APPDATA%\qBittorrent

Список .torrent файлов хранится тут:
c:\Users\<имяпользователя>\AppData\Local\qBittorrent\BT_backup\
или %LOCALAPPDATA%\qBittorrent

Скопировав эти папки поверх тех что есть, вы вернете прежние настройки и список торрентов. Предварительно нужно закрыть саму программу qBittorent. Перед заменой, сделайте резервную копию заменяемых файлов в этих папках.
Где хранить оригинальные файлы (*.torrent) указывается в настройках программы или они изначально там куда вы их сохранили сами.

 Источник: http://andreypominov.ru/gde-qbittorrent-khranit-spisok-torrentov/

суббота, 28 августа 2021 г.

1C 8.х Запуск в командной строке и пакетный режим

Источник: https://infostart.ru/1c/articles/153871/#14

 

Командная строка

Параметры командной строки выбора режима:

CONFIG
запуск системы 1С :Предприятие 8 в режиме «Конфигуратор»

ENTERPRISE
запуск системы 1С:Предприятие 8 в режиме «1С:Предприятие»

CREATEINFOBASE [/AddInList [ ]]
создание файлов поставки и обновления


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

Параметры файлового режима

File каталог информационной базы;
Locale язык (страна), которые будут использованы при создании информационной базы. Допустимые значения такие же как у параметра метода Формат. Параметр Locale задавать не обязательно. Если не задан, то будут использованы региональные установки текущей информационной базы.

Параметры клиент-серверного режима

Srvr имя сервера 1С:Предприятия;
Ref имя информационной базы на сервере;
SQLSrvr имя SQL сервера;
SQLDB имя SQL базы данных;
SQLUID имя пользователя SQL;
SQLPwd пароль пользователя SQL. Если пароль для пользователя SQL не задан, то данный параметр можно не указывать
SQLYOffs - смещение дат, используемое для хранения дат в SQL Server. Может принимать значения 0 или 2000. Данный параметр задавать не обязательно. Если не задан принимается значение 0.
Locale - язык (страна), (аналогично файловому варианту).

Для всех вариантов определены параметры:

понедельник, 23 августа 2021 г.

Небортовой самописец самопалов

https://www.facebook.com/aavtaran/posts/1212264005523974

Есть такой сорт программистов - "самописцы" - отважные изобретатели велосипедов, аж двухколёсных.
Если они могут что-то написать сами - они будут писать это сами, несмотря на то, что все уже давно написано до них и протестировано на тысячах проектов, как, например, логгеры.
Казалось бы, задача решена, обкатана, к мотыге прикручен фонарик и трактор, но нет!
Реальная история: Человек потратил время и написал свой логгер.
На вопрос «зачем?», отвечает, что у него там «всякие полезные штуки», например, «штатно пишутся только ворнинги и эрроры, а вот если выскочит эксепшн, то предыдущие N сообщений включая трейс тоже попадут в лог». Замечательно.
Также работник мотивировал самопал тем, что лог всегда можно посмотреть «на ходу и он не залочен» (открыл Маврикий в 2016 году), даже специально там мьютексы использовал, молодец какой.
Ну и вишенка - лог писался в xml руками. Файл открывался на запись, указатель ставился в конец и отматывал назад на несколько байт (надо же перетереть закрывающий тэг)
- Почему в xml?
- Ну.. эм.. так удобнее анализировать утилитами.
При этом данные все равно строкой.
Инструментарий он тоже свой для анализа логов писал, ну а что, кто там полезет разбираться – сидит человек, «работает».
В итоге производительность всей этой красоты была 25 записей в файл в секунду. Таким образом, логгер ограничивал производительность всей системы. А это время и деньги, потому что если записи в базу данных логгировать, то больше 25 записей в секунду не засунешь никогда.
А потом Заказчик ищет консультанта на стороне, да еще и боится обидеть «самописца», который не может разобраться, почему всё тормозит и не понимает, как исправить и использует нелепую фразу-заклинание: «Это что-то системное».
- Слушай, заколебались уже. Можете, не афишируя, глянуть, а? – спрашивает Заказчик.
- Можем.
Интереса ради берем первый попавшийся NLog и сравниваем с пожеланиями «самописца» к своей самоделке. Все решается конфигурацией за 5-15 минут в зависимости от степени знакомства.
Стартовым бонусом - не 25 записей в секунду, а 200 тысяч в ту же секунду, и то понятно, что если еще поработать, то можно удвоить.
При этом не надо ничего налаживать, потому что всё, с чем среднестатистический проект может столкнуться, уже давно найдено и исправлено.
Нет, «самописцы» не тупые, как мог бы подумать кто-то тупой. Напротив, они поражают бессмысленной глубиной. Они отказываются от фреймворков, от библиотек и даже от конструкций языка, странно, что они при этом не идут дальше и не отказываются от чужих (неизвестно кем написанных) языков, компиляторов, операционных систем и архитектур железа.
Даже не интересно, в какой момент у них наступает ступор и деревянность. Скорее всего, всё закончилось там же, где началось. Выучил что-то одно где-нибудь, а может, даже и в вузе, завис и решил, что познал и постиг. И вот это типа кошерно. А обращать внимание на то, что в мире произошло море всего, изучать опыт соседей по планете - типа от лукавого. Так и гоняют черепашку в logo, хотя нет, это уже для продвинутых, не кошерно.
P. S. Все совпадения случайны.
P. P. S. Нет, это не про тебя.
P. P. P. S. И не про тебя.
P. P. P. P. S. Вообще не комментируй эту запись.

четверг, 25 марта 2021 г.

Ошибка 1С "Недопустимое состояние объекта !m_usingOldShema [backend - src\DBGenerationsImpl.cpp (2377)]"

При обновлении конфигурации появляется ошибка "Недопустимое состояние объекта !m_usingOldShema [backend - src\DBGenerationsImpl.cpp (2377)]"

Решение подсказали здесь: https://infostart.ru/1c/articles/1219486/

"Помогают любые действия, вызывающие реструктуризацию таблиц" - добавить/удалить объёкт метаданных, реструктуризация, смена режима совместимости и т.п.

среда, 3 марта 2021 г.

Перемещение базы данных TEMPDB

Отсюда: https://its.1c.ru/db/metod8dev/content/2377/hdoc

1. Определить логические имена файлов базы данных TEMPDB (колонка "NAME" результата выполнения процедуры). Для этого нужно в Query Analyzer выполнить следующую команду:

USE tempdb
GO
EXEC sp_helpfile
GO 

2. Изменить месторасположение файлов базы данных TEMPDB с помощью команды ALTER DATABASE. Для этого нужно в Query Analyzer выполнить следующую последовательность команд:

USE master
GO
ALTER DATABASE tempdb 
MODIFY FILE (NAME = tempdev, FILENAME = 'Новый_Диск:\Новый_Каталог\tempdb.mdf')
GO
ALTER DATABASE  tempdb 
MODIFY FILE (NAME = templog, FILENAME = 'Новый_Диск:\Новый_Каталог\templog.ldf')
GO

3. Перезапустить  Microsoft SQL Server. 

пятница, 6 марта 2020 г.

Как разрешить обычным пользователям RDP доступ к контроллеру домена

Ошибка: При входе сообщение: "To sign in remotely, you need the rights to sign in Remote Desktop Services. By default only members of the Administrators group have this right. If the group you’re in doesn’t have this right, or if the right has been removed from Administrators group, you need to be granted this right manually."

Решение: Дело в том, что возможность подключение к RDP в системах Windows определяется политикой Allow log on through Remote Desktop Services (в Windows 2003 и ранее политика называется Allow log on through terminal services). После повышения роли сервера до DC в этой политики остается только группа Administrators (это администраторы домена)..
По умолчанию удаленный rdp-доступ к рабочему столу контроллеров домена Active Directory есть только у членов группы администраторов домена.
Чтобы дать возможность подключения членам группы Remote Desktop Users нужно нужно на контроллере домена:
  1. Запустить редактор локальной политики (gpedit.msc)
  2. Перейти в раздел Computer Configuration -> Windows settings -> Security Settings -> Local policies -> User Rights Assignment
  3. Найти политику с именем Allow log on through Remote Desktop Services
  4. Отредактировать политику, добавив в нее доменную группу Remote Desktop Users (в формате domain\Remote Desktop Users), либо непосредственно доменного пользователя или группу (в формате domain\somegroupname)
  5. Запустить обновление локальный политик
    gpupdate /force 
Требуемые группы не должны присутствовать в политике «Deny log on through Remote Desktop Services», т.к. она имеет приоритет

Лучше всего создать в домене новую группу безопасности, например, AllowDCLogin и добавить в нее учетные записи пользователей, которым нужно разрешить удаленный доступ к DC. Если нужно разрешить доступ сразу на все контроллеры домена AD, вместо редактирования локальной политики на каждом DC, лучше через консоль GPMC,msc добавить группу пользователей в доменную политику Default Domain Controllers Policy (политика Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment -> Allow log on through Remote Desktop Services).
Важно. В том случае, если вы изменяете доменную политику, не забудьте добавить в нее группы администраторов домена/предприятия, иначе они потеряют удаленный доступ к контроллерам домена

 Источник: https://winitpro.ru/index.php/2015/02/27/kak-razreshit-obychnym-polzovatelyam-rdp-dostup-k-kontrolleru-domena/

пятница, 20 декабря 2019 г.

1С 8.x : Этот хост неизвестен. Ошибка Windows Sockets - 11001

Проблема: При старте 1С на получаем сообщение "1С 8.x : Этот хост неизвестен. Ошибка Windows Sockets - 11001"

Решение:
Ошибка подключения к базе, расположенной на сервере 1С:Предприятия, возникает не всегда.
Подключение из Windows XP обычно проходит без особых проблем, при этом аналогичное подключение из Windows 7 может завершаться аварийно:
Ошибка 11001 - Windows Sockets
Лечится эта ошибка довольно просто - достаточно внести изменения в файл hosts

Файл hosts представляет собой
Обычный текстовый файл (не имеющий расширения). В hosts-файле по умолчанию прописан всего один IP-адрес (127.0.0.1), зарезервированный для localhost, то есть для локального ПК. Файл hosts представляет собой обычный текстовый файл (не имеющий расширения).

Где находится файл hosts
• Windows 95/98/ME – WINDOWS;
• Windows NT/2000/XP/Vista/7 – Windows/System32/drivers/etc.

И так у нас Win7 открываем C:\WINDOWS\system32\drivers\etc\hosts, и добавляем в него ip-адрес вашего сервера.
Например так:
192.168.1.100 sermac

Сохраните, и попробуйте через пару минут запустить программу.

Источник: https://helpf.pro/faq8/view/1482.html

вторник, 17 декабря 2019 г.

Ошибка SQL сервера с 1С: There is already an object named '#tt1' in the database

Проблема: В журнале регистрации фиксируются следующие события:

ОбщийМодуль.НашЧудесныйМодуль.Модуль(1000)}: Ошибка при вызове метода контекста (ВыполнитьПакет) по причине: Произошла исключительная ситуация (1C:Enterprise 8.3.8.2027): Ошибка СУБД: Microsoft SQL Server Native Client 10.0: There is already an object named '#tt1' in the database. HRESULT=80040E14, SQLSrvr: SQLSTATE=42S01, state=6, Severity=10, native=2714, line=1

Версия платформы: 8.3.8.2027, конфигурация 1С ДО Корп (2.1.8.13)

Решение:
https://forum.infostart.ru/forum83/topic106109/ (коммент от 2014: Проблема с неудалением временных таблиц, обсуждалась на партнерском форуме. Вероятно, кривая работа пула временных таблиц. Пока нормального решения нет.)
и немного здесь: http://www.gilev.ru/dieztt/

Т.к. менять версию платформы пока нельзя:
1) Обновление статистик
2) Дефрагментация индексов
3) Реиндексация индексов
4) Перезапуск сервера

Под катом текст на память:

понедельник, 14 октября 2019 г.

1С 7.7, "скрытые" возможности функции Шаблон., Получение и установка реквизита формы по его имени.

Отсюда: http://dml.compkaluga.ru/forum/index.php?showtopic=35958

На днях решал тут одну задачу, пришлось столкнуться вот с чем. Допустим на форме у нас есть несколько десятков реквизитов, типа Строка, с именами, к примеру Строка1, Строка2, Строка3 и т.п. Хотелось бы получить доступ к значениям этих реквизитов по имени. Эксперименты с Форма.ПолучитьАтрибут("Строка1") собственно ничего не дали. Полез копаться дальше и накопал вот что. Оказывается в 1С есть крайне полезная функция Шаблон, которая возвращает строку, полученную по шаблону заменой встроенных выражений на значения и форматированием. Так вот, получить значение реквизита формы по его имени можно следующим образом:

Значение = Шаблон("["+ИмяРеквизитаФормы+"]");

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

Значение=ЗначениеИзСтрокиВнутр(Шаблон("[ЗначениеВСтрокуВнутр("+ИмяРеквизитаФормы+")]")); // - это чтение реквизита формы через шаблон

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

//_______________________________________________________Функция УстАтрибут(Атр,Зн)
    
Атр = Зн;
     Возврат
"";
КонецФункции
// УстАтрибут(Атр,Зн) 

Процедура УстановитьАтрибут(Атр,Зн);
     Шаблон(
"[УстАтрибут("+ Атр + ",Зн)]");
КонецПроцедуры
// УстановитьАтрибут(Атр,Зн);

//_________________________________________________________
Функция ПолАтрибут(Атр,Зн)
    
Зн = Атр;
    Возврат
"";
КонецФункции
// УстАтрибут(Атр,Зн)


Процедура ПолучитьАтрибут(Атр,Зн);
     Шаблон(
"[ПолАтрибут("+ Атр + ",Зн)]");
КонецПроцедуры
// УстановитьАтрибут(Атр,Зн);


Использовать, естественно, через ПолучитьАтрибут(...) и УстановитьАтрибут(...) ... вот такой вот нестандартный подход.

пятница, 16 августа 2019 г.

В форме обработки 1С 7.7 не работает команда Активизировать


Проблема: При попытке в коде обработки выполнить команду Активизировать, чтобы вернуть курсор в поле ввода - получаем ошибку "В данной формуле не может быть вызвана эта процедура(функция)"

Решение: Несколько вариантов, например Установить фокус на поле ввода 7.7 или Активизировать поле ввода
Предлагаемый метод - использовать фиктивное закрытие формы. 
Бонус - получаем защиту от случайных нажатий клавиши Esc

Пример:
"РазрешитьЗакрытие" - служебная переменная, анализируемая в процедуре ПриЗакрытии().
"Штрихкод" - имя поля на форме, которое надо активизировать.

При закрытии анализируется переменная "РазрешитьЗакрытие", и в зависимости от её значения -  закрытие отменяется, активизируется требуемое поле и снова таки закрытие отменяется, или же - просто закрываем форму.

Перем РазрешитьЗакрытие;    // флаг используем для разрешения закрытия формы и для обхода ошибки активизации реквизита

Процедура АктивизироватьШтрихКод()    // через фиктивное закрытие формы обойдем ошибку функции Активизировать
    РазрешитьЗакрытие = 2;
    Форма.Закрыть(0);       // вызываем процедуру закрытия
КонецПроцедуры

Процедура ЗакрытьОбработку()        // нажали на кнопку Х - разрешаем закрытие
    РазрешитьЗакрытие = 1;
    Форма.Закрыть(0);       // вызываем процедуру закрытия
КонецПроцедуры

Процедура ПриЗакрытии()
   
    Если РазрешитьЗакрытие=0 Тогда        // простое закрытие запрещаем (страхуемся от случайных закрытий по ESC)
        Сообщить("Закрыть форму можно только по кнопке!");   
        СтатусВозврата(0);    // отменяем закрытие
    ИначеЕсли РазрешитьЗакрытие=1 Тогда    // всё в порядке, это закрытие по кнопке
        //
    ИначеЕсли РазрешитьЗакрытие=2 Тогда    // фиктивное закрытие - для активизации реквизита на форме
        Активизировать("ШтрихКод");       // активизируем наше поле
        СтатусВозврата(0);    // отменяем закрытие
        РазрешитьЗакрытие = 0;    // сбрасывам переменную
        возврат;
   КонецЕсли;
   
КонецПроцедуры

вторник, 4 июня 2019 г.

Программное изменения проводок документа 1С 7.7

Задача: Очистить субконто кредита у всех проводок в одной ручной операции
Решение:
Процедура Сформировать()
    опер = СоздатьОбъект("Операция");
    опер.НайтиОперацию(НашДокументНаФормеСВидомОперация);
    опер.ВключитьПроводки(0);
    опер.ВыбратьПроводки();
    Пока опер.ПолучитьПроводку()=1 Цикл
        опер.Кредит.Субконто(1,"");
    КонецЦикла;
    опер.Записать();
    опер.ВключитьПроводки(1);
КонецПроцедуры



Отсюда:
https://forum.mista.ru/topic.php?id=382542
https://forum.mista.ru/topic.php?id=382419
https://forum.mista.ru/topic.php?id=478141

четверг, 14 февраля 2019 г.

Ищем дубли наименований товаров при помощи запросов 1С

Отсюда

1С8.х

ВЫБРАТЬ
    Товары.Наименование КАК Наименование,
    КОЛИЧЕСТВО(Товары.Ссылка) КАК КоличествоДублей
ИЗ
    Справочник.Товары КАК Товары
СГРУППИРОВАТЬ ПО
    Товары.Наименование
ИМЕЮЩИЕ 
    КОЛИЧЕСТВО(Товары.Ссылка) > 1

среда, 12 декабря 2018 г.

Долго запускается 1С предприятие 7.7 (конфигуратор, монитор, отладчик)

Проблема: Долго запускается 1С предприятие 7.7 (конфигуратор, монитор, отладчик)
Решение: https://infostart.ru/public/301032/

Если у Вас всегда очень долго открывается 1С, заставка висит в течение нескольких минут, зависает при старте предприятия 7.7 и конфигуратор, и монитор, и отладчик, скорее всего, дело в файле 1cv7evt.txt (в подкаталоге Syslog в каталоге базы), вернее в размере этого файла.

Перенесите его в другую папку.

Cлужебный файл 1cv7evt.txt содержит в себе названия типов событий и названия пользовательских событий. Он требуется для того, чтобы во время просмотра журнала регистраций в момент установки фильтра на события можно было отбирать события пользователей по типу события и по событию.

Печать на сетевом принтере без диалога печати

Одно из решений : https://infostart.ru/public/84163/

Надо к имени принтера добавить в конце слэш
Вместо Т.Напечатать(0);
Надо написать:
Рег = СоздатьОбъект("РеестрWin");
Рег.ОткрытьКлюч("HKEY_CURRENT_USER","Software\1C\1Cv7\7.7\_НОВАЯ БАЗА\V7\" + ИмяПользователя + "\Moxel\Default","KEY_READ");
ИмяПринтера = "";
Рег.ЗапроситьЗначение("DefaultPrinter",ИмяПринтера);

Т = СоздатьОбъект("Таблица");
Т.ВывестиСекцию("Шапка");
Т.ПараметрыСтраницы(,,,,,,,,,,,ИмяПринтера + "\");
Т.Напечатать(0);

пятница, 23 ноября 2018 г.

Символы для маски реквизитов 1С 7.7

! — введенный символ преобразуется в верхний регистр;
9 — произвольный символ цифры;
# — произвольный символ цифры или «-» (знак минус) или «+» (знак плюс) или пробел;
N — любые алфавитно-цифровые символы (буквы или цифры);
Х (латинского алфавита) — произвольный символ;
@ — любые алфавитно-цифровые символы (буквы или цифры) в верх­нем регистре.