• Как указать точный доп. реквизит для загрузки данных?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Можно попробовать что-то типа:
    РеквизитДляЗаписи = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", ИмяРеквизитаСвойства);


    Или любой другой реквизит, который точно отличается у доп. реквизитов
    Ответ написан
  • Как сформировать SQL запрос?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Вообще обычно для этого используется функция PIVOT TABLE

    Твой пример

    Результат:
    +=========+=======+==========+============+============+============+============+
    | fam     | name  | otch     | 2021-03-17 | 2021-03-18 | 2021-03-19 | 2021-03-23 |
    +=========+=======+==========+============+============+============+============+
    | Петров  | Иван  | Иванович | 0          | 0          | 3          | 3          |
    +---------+-------+----------+------------+------------+------------+------------+
    | Сидоров | Петр  | Иванович | 4          | 4          | 0          | 4          |
    +---------+-------+----------+------------+------------+------------+------------+
    | Смирнов | Федор | Иванович | 0          | 0          | 0          | 5          |
    +---------+-------+----------+------------+------------+------------+------------+
    Ответ написан
  • Как ускорить (оптимизировать) SQL-запрос с временным интервалом?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    1. Нужен индекс по полю "daten"
    2. Избавится от расчета даты в запросе, и передавать в запрос конкретную дату, рассчитанную перед запросом.
    UPD: 2-й пункт особого прироста не даст, из-за расчета справа от сравнения.
    Ответ написан
  • Как сгенерировать строки с датами в sql?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Да уж ))
    Ну вообще думаю будет как-то так :
    Пример на MSSQL
    Пример на Psql13

    Результат:
    +========+============+=====================+
    | userid | regdate    | newdate             |
    +========+============+=====================+
    | 1      | 2020-11-01 | 2020-11-01 00:00:00 |
    +--------+------------+---------------------+
    | 1      | 2020-11-01 | 2020-12-01 00:00:00 |
    +--------+------------+---------------------+
    | 1      | 2020-11-01 | 2020-12-31 00:00:00 |
    +--------+------------+---------------------+
    | 1      | 2020-11-01 | 2021-01-30 00:00:00 |
    +--------+------------+---------------------+
    | 1      | 2020-11-01 | 2021-03-01 00:00:00 |
    +--------+------------+---------------------+
    | 2      | 2020-12-01 | 2020-12-01 00:00:00 |
    +--------+------------+---------------------+
    | 2      | 2020-12-01 | 2020-12-31 00:00:00 |
    +--------+------------+---------------------+
    | 2      | 2020-12-01 | 2021-01-30 00:00:00 |
    +--------+------------+---------------------+
    | 2      | 2020-12-01 | 2021-03-01 00:00:00 |
    +--------+------------+---------------------+
    Ответ написан
  • Как правильно связать таблицы связь многие к многим?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    ну ... типа ... добавить таблицы :
    1. связь Юзерс-Группы,
    2. Связь Группы - Софт
    ...
    Ответ написан
  • Возможно ли Извлечь / Выбрать значение доп. реквизита номенклатуры?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Если БСП внедрена (Бухгалтерия/УТ/ЕРП/УНФ) тогда так :
    НаименованиеРеквизита = "";	 //Сюда вставить наименование реквизита
    	ЗначениеРеквизита = ""; 		//Сюда вставить значение
    
    	ВашРеквизит = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(НаименованиеРеквизита );
    
    	ТаблицаДопРеквизитов = Новый ТаблицаЗначений;
    	ТаблицаДопРеквизитов.Колонки.Добавить("Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"));
    	ТаблицаДопРеквизитов.Колонки.Добавить("Значение");
    
    	НоваяСтрокаЗначений = ТаблицаДопРеквизитов.Добавить();
    	НоваяСтрокаЗначений.Свойство = ВашРеквизит;
    	НоваяСтрокаЗначений.Значение= ЗначениеРеквизита ;
    	УправлениеСвойствами.ЗаписатьСвойстваУОбъекта( НоваяНоменклатураСсылка, ТаблицаДопРеквизитов)
    Ответ написан
  • Можно ли прочитать данные, если есть ошибки, и залить их в другую БД?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    !Рекомендую сначала сделать физическую копию файлов БД (mdf,ldf)!
    Как вариант определить битые таблицы по ID, и попробовать Checktable на конкретных таблицах сначала Repair_rebuild, если СУБД ответит что минимальный уровень - REPAIR_ALLOW_DATA_LOSS , значит сделать Checktable(<ПутьКТаблице>,REPAIR_ALLOW_DATA_LOSS ). Покоцанные страницы таблиц будут очищены, но те, что не покоцаны, должны стать доступны для работы (часть данных потеряется, но БД должна стать доступна для работы).
    Если определить битые таблицы по ID - проблематично (по каким-то причинам) можно сразу на БД зарядить :
    DBCC CheckDB (<ИМЯБД>, REPAIR_ALLOW_DATA_LOSS).
    Т.е. скрипт примерно такой:
    USE ИмяБД;
    GO  
    --(Далее выполнять поочереди)
    EXEC sp_resetstatus 'ИмяБД'
    GO
    
    ALTER DATABASE 'ИмяБД' SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    GO
    
    --Попробовать:
    DBCC CHECKALLOC (ИмяБД, REPAIR_REBUILD) WITH NO_INFOMSGS
    GO
    
    --Если СУБД сообщит, что для исправления ошибок - минимальный уровень 
    --REPAIR_ALLOW_DATA_LOSS тогда:
    DBCC CheckDB (ИмяБД, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS
    GO
    
    ALTER DATABASE ИмяБД SET MULTI_USER
    GO
    Ответ написан
  • Отобразить видимость регистра накоплений?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    скорее всего первый документ не является регистратором регистра
    Ответ написан
  • Как заставить сервер c 2xE5-2630 v4, 128GB, raid ssd грузить процессор на 100% (тест Гилева 21,65)?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    1. Загрузить процессор на MSSQL можно так :
    - Должна быть задача на SQL серваке, которая потребует этих ресурсов (в простое или при малых задачах SQL проц не загрузит)
    - Ставим параллелизм = количеству ядер
    - Ставим Стоимостной порог в 0.
    После завершения текущих проверок, советую вернуть MAXDOP/MaxThreshhold на (1/4 или 1/8 от количества ядер а порог выявить методом проб и замеров). Дело в том, что загрузка проца 100% не значит что всё будет быстрее (только в некоторых случаях типа проверки целостности). Т.к. при распараллеливании запросов по ядрам, появляются "Накладные расходы" на распараллеливание и сбор обратно результатов воедино. Это будет выглядеть как ожидания CXPACKET и Latch. (См "закон Амадала" + CXPACKET в гугле)
    2. "Проверка целостности базы данных" - на ежедневной основе смысла не имеет, особенно если база достаточно крупная. Её имеет смысл делать или при возникновении проблем, или раз в квартал/месяц ... зависит от размеров базы. UPD: Лучше всё же её делать, если позволяет размер и тех. окно. Т.к. можно упустить ошибку целостности и перенести её в бэкап.
    3. Если есть проблемы с производительностью, это вопрос не простой, и требует кучу опыта. Навскидку рекомендую сначала проверить :
    - Нагрузку на дисковую подсистему, и если там будет проблема (Очередь к диску более 2 в среднем) выполнить разнесение *.mdf, *.log, tempdb, инстанс кластера 1c серверов на отдельные диски.
    - Нагрузку на оперативку от MSSQL (можете гуглить это может вызывать большую активность IO на дисковую подсистему)
    - Проверить способ коннекта к MSSQL ("Shared memory" должно быть "on" и использоваться, если 1с сервак и mssql сервак физически на одно машине .. это +10% к производительности.
    ну и куча чего ещё ... в одном посте всего не расписать.
    и т.д. вариантов очень много.
    главный совет: решайте проблемы , только если она есть и мешает, если это лично ваше мнение, а пользователям не мешает, лучше делайте настройки по дефолту (см. APDEX, анализ производительности)
    UPD: И да, виртуалки для 1C + MSSQL = зло, и не потому что "фирма 1С плохая", а потому что у вас не сможет 1С и MSSQL не сможет общаться через оперативку, и между оператором чтения на MSSQL до железа сервера будет 4 прослойки (SQLOS, OS виртуалки, Гипервизор, OS сервера, вместо SQLOS + OS сервера).
    Ответ написан
  • Как разработать программу, приводящую данные к отчетному виду?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Это тема для дипломной работы ?
    По делу, начните с декомпозиции задачи.
    обдумайте :
    - Ввод первичных данных,
    - агрегация и хранение данных,
    - обработка данных (расчеты и вычисления),
    - Формирование и хранение схем-макетов "отчетного вида",
    - Получение схем-макетов с заполнением данными из бд и вывод на принтер
    ... делов то... )
    Ответ написан
  • Нерабочий кулер на ноутбуке?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    1. Если вы счастливый обладатель ноута DELL, "Работу/неисправность" куллера, можно посмотреть в биосе, там есть Log событий устройств. "Неисправность" - будет выглядеть как запись "Fan malfunction" с датой события.
    2. Если ещё не сделали, вырубите в биосе "C-State" - из-за него часто происходят "непонятки" с СО на ноутах DELL

    P.S. сам обладатель ноута G7 7790, СО просто отвратная. Без андервольтинга проца, из троттлинга не выходил в играх.
    Ответ написан
  • Near "отпуска": syntax error?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    На MSSQL проблема была что В Имени колонки не должно быть пробелов.
    CREATE TABLE Отпуск
    (Кодотпуска INTEGER PRIMARY KEY,
    ТипОтпуска CHAR (100) NOT NULL,
    ОплатаОтпуска FLOAT CHECK (ОплатаОтпуска > 10000),
    ЛьготыПоОтпуску FLOAT NOT NULL);

    так сработало ...
    и задумайтесь над использованием типов NVARCHAR и Money/Decimal/numeric ... всё таки цифры про деньги должны быть точными.
    Ответ написан
  • Как найти подмену в кириллице на латинские?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Можно воспользоваться regexp'ом
    <?php
    $str = "Привeт, как делa?";
    $pattern = "/[a-zA-Z]+/i";
    echo preg_match($pattern, $str); // Outputs 1


    Проверка PHP code
    Ответ написан
  • Как синхронизировать УПП и ERP?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    В общем случае, при такой постановке задачи, обычно используется Обмен с правилами КД2 или КД3.
    Примерная инструкция
    ... а дальше начнутся нюансы :
    Насколько быстро документ должен там появляться ? (Возможно вэбсервис потребуется)
    Нужен ли обратный обмен (Узлы обмена и регистрация изменений)
    Кто будет это контролировать/Администрировать ? (Работа с ошибками обмена)
    и т.д. но начать можно с простого ... Написать правила переноса на Конвертации данных 2.0 и перенести документ по опр. признакам в базу приемник. Потом создать (Или использовать существующий) узел обмена, через настройку обмена - загрузить свои правила и повесить обмен на регл. задание.
    Ответ написан
  • Как в Вывести обединение таблиц по условию ??

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Для описанного примера подходит left join, а для вывода строки при несовпадении использовать функции IsNull и Cast :

    TSQL пример

    Результат :

    +==================+======+===========+
    | name             | code | AutorCode |
    +==================+======+===========+
    | BookWithAutor    | 1    | 1         |
    +------------------+------+-----------+
    | BookWithoutAutor | 3    | Empty     |
    +------------------+------+-----------+
    Ответ написан
  • Как сделать выборку из таблицы и развернуть в строку?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Насколько понял, вам нужно попробовать реализовать "Pivot Table", но в PGSQL этой функции по умолчанию нет (я ей пользовался в MSSQL как встроенной). Если погуглить есть реализации этой функции на PGSQL через функцию "crosstab". Посмотрите, если устроит можете один раз организовать функцию и пользовать в подобных случаях. Но насколько это актуально конкретно для вас (может у вас всего 3 поля и имеет смысл просто запросом как в вашем примере реализовать) решать вам.
    Про языки, чтобы выбрать один указанный, оптимальнее использовать "coalesce( t.en, t.ru, t,ko)"

    UPD: т.к. имена полей у вас находятся в промежуточной таблице, если вы хотите чтобы значения "coalesce( t.en, t.ru, t,ko)" были в заголовках колонок, скорее всего придётся использовать "Динамический Pivot table" он несколько сложнее в организации, но производительней с точки зрения использования данных. Если же вас устроит "Fieidid" как заголовок колонки, можно воспользоваться обычным Pivot table.

    В MSSQL это выглядело бы примерно так:
    Select ItemId as ItemId,
    [fieldid1], [fieldid2], [fieldid3], [fieldid4], [fieldid5] 
    From
    (Select 
    	items.id as ItemId,
    	Coalesce(itemfields.en,itemfields.ru,itemfields.ko) as FieldName,
    	itemfields.fieldid as fieldid,
    	fields.key as value
    From
    	from items as items
    	left join item_fields as item_fields on items.id = item_fields.item_id
    		left join fields as fields On item_fields.fieldid = fields.id) SourceTable
    pivot
    (
    Max(value) for fieldid in ([fieldid1], [fieldid2], [fieldid3], [fieldid4], [fieldid5] )
    ) as PivotTable;
    Ответ написан
  • Правильно ли выбрана архитектура базы данных и подход к решению задачи?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Структура вполне себе жизнеспособная, если ей правильно пользоваться.
    Чтобы не "Лопатить всю таблицу", в которой через некоторое время будет много "Закрытых" заявок, необходимо добавить индекс по полю "Статус".
    Таким образом при выполнении запроса-выборки, если вы накладываете фильтр на эту колонку, лишние значения будут отсекаться (чтение будет сначала происходить по индексу, а затем уже строки из таблицы, которые подходят под критерии отбора).
    Ответ написан
  • Как сделать SUM и COUNT при LEFT JOIN запросе?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    SELECT 
        t1.id, COUNT(t2.field2) AS cnt, SUM(t2.field2) AS sum_field2
    FROM tbl1 as t1
    left join tbl2 as t2 
    ON t1.id = t2.id
    group by  t1.id
    Ответ написан
  • Как написать функцию замены вместо множества replace на sql?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Задача то какая ? судя по коду запроса, вы имя пытаетесь заменить иницалом ... если это так тогда так наверн :
    Select 
          case when <условие при котором надо брать 2 символа> then
               UPPER(Left(name, 2))
         else 
               UPPER(Left(name, 1))
          end
    from
    table1
    Ответ написан
  • Почему база созданная через psql не пригодна для использования в 1С?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Вручную, базы для 1С обычно не создаются по нескольким причинам.
    Одна из основных - структура таблиц, (в т.ч. имена полей и таблиц) должна быть в точности как 1С планируется её использовать. (Имена таблиц, далее будут записаны в соответствие, в отдельной таблице)
    Также после создания , эта структура бд, должна быть в опр. виде в двоичных данных в нескольких "Служебных таблицах", в точности воссоздать которую - дело крайне проблематичное.
    Если у вас есть желание создавать базы скриптом, самый простой способ - создать "пустышку" из 1С, создать бэкап, а далее его разворачивать там, где вам необходимо.
    З.Ы.: даже пустая база, созданная из 1С, по факту будет не пустой, в ней будет куча служебных данных. Именно поэтому, ваша база выдала ошибку при подключении к кластеру (не были обнаружены, служебные данные в служебных таблицах)
    Ответ написан