Задать вопрос
  • Как в Вывести обединение таблиц по условию ??

    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;
    Ответ написан
    1 комментарий
  • Правильно ли выбрана архитектура базы данных и подход к решению задачи?

    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С, по факту будет не пустой, в ней будет куча служебных данных. Именно поэтому, ваша база выдала ошибку при подключении к кластеру (не были обнаружены, служебные данные в служебных таблицах)
    Ответ написан
    2 комментария
  • Как найти что обнуляет(стирает) значение реквизита в 1С?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Ну самое простое - посмотреть в журнале регистрации, кто и и когда изменяет этот справочник (там пишется пользователь , сеанс, дата. Есть отбор по ссылкам. Это даст хотя бы направление в которое нужно разбираться ...
    Ответ написан
    1 комментарий
  • Внешний обработчик 1с а не работает. Как решит?

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

    Mikhail_E
    @Mikhail_E
    1С, SQL
    В Общем случае для этого есть механизм "RLS" (Record Level Security), или ограничение доступа на уровне записей.
    НО: этот механизм довольно сильно скажется на производительности Базы (везде где будет ограничение, будут ощущаться тормоза), зато минимальными затратами получится сделать то, что вы хотите, и это будет в 1-й базе.
    2-й вариант, который обычно встречается на практике - создаются базы для каждого Филиала и настраивается "Распределенная база данных" (обмены между филиальными базами и центральной). Таким образом обычно каждый филиал работает со своей информацией, Которая по стандартным обменам стекается в центральную.
    Ответ написан
  • Как получить все последние комментарии для всех пользователей?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Ну если джойны не доступны только по причине того что таблицы на разных серверах, и вас (Судя по вашему варианту "Костыля" представление пользователя в виде "user_id" - вас устраивает. Думаю такой вариант будет по красивше ... (Но это не точно).

    Select
    CommentTable.user_id,
    CommentTable.comment,
    CommentTable.created_ts
    From 
    comments as CommentTable
    Inner join 
    (Select 
    t.user_id as user_id ,
    Max(t.created_ts) as LastTime
    From comments as t
    Group by t.user_id) as LastTimeTable
    On CommentTable.user_id = LastTimeTable.user_id 
    and CommentTable.created_ts = LastTimeTable.LastTime


    Если у вас к таблице "Users" доступен select ... думаю можно попробовать сначала создать на сервере Таблицы comments временную таблицу
    Что-то типа
    Create table #tt1
    (user_id nvarchar(10),
    user_name nvarchar(100))
    
    Insert into #tt1 
    Select user_id , user_name from users

    и потом джойнить временную таблицу юзерсов с таблицей которая получилась из запроса выше ... тогда будут доступны ещё и данные таблицы юзерс. (насчет оптимальности не уверен, но думаю сработает)
    Итого будет типа :
    Create table #tt1
    (user_id nvarchar(10),
    user_name nvarchar(100))
    
    Insert into #tt1 
    Select user_id , user_name from users
    
    Select
    CommentTable.user_id,
    users.user_name,
    CommentTable.comment,
    CommentTable.created_ts
    From 
    comments as CommentTable
    Inner join 
    (Select 
    t.user_id as user_id ,
    Max(t.created_ts) as LastTime
    From comments as t
    Group by t.user_id) as LastTimeTable
    On CommentTable.user_id = LastTimeTable.user_id 
    and CommentTable.created_ts = LastTimeTable.LastTime
    Left join #tt1 as users
    on CommentTable.user_id = users.user_id
    
    drop table #tt1
    Ответ написан
  • Существует ли ПО для учета сырья на молокозаводе?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Как описались выше, подобные решения есть у 1С.
    Например : 1С:Молокозавод. Модуль для 1С:ERP.
    Штука не очень дешевая (особенно учитывая внедрение силами франчей).
    Помимо "Автоматизации", если речь идёт об Производстве в РФ, стоит сразу подумать об ветеринарном сопровождении производства подконтрольной продукции в ФГИС "Меркурий". Это уже есть в 1С:ERP.
    (243-ФЗ - устанавливает, что ведение Вет. сертификатов необходимо производить с использованием ФГИС Меркурий
    "Приказ Министерства сельского хозяйства РФ от 27 декабря 2016 г. N 589" - говорит что при производстве и продаже - нужно оформлять Вет. документы. (приложение 1 - говорит что необходимо обеспечивать прослеживаемость сырья до готовой продукции.)
    Нарушение этого удовольствия:
    штрафы за хранение продукции без ВСД или несвоевременное погашение электронного ВСД в размере:
    • для организаций — от 20 000 до 30 000 рублей.
    За перевозку продукции без ВСД по ч. 2 статьи 10.8 КоАП РФ:
    • для организаций — от 300 000 до 500 000 рублей.
    + Блокировка в ФГИС Меркурий (Запрет отгрузки ГП) на срок 3-6 мес.
    В Общем то зависит от объёма производства ... и фин. возможностей организации.
    Можно конечно и свою небольшую конфигруацию для собственного учета написать силами программистов, и Меркурий в вэб версии оформлять, но геморно это, если объём партий большой.
    Ответ написан
    Комментировать
  • Должен ли одинаковый запрос выполнятся с разным временем?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    ИМХО:
    1. Чтобы запрос корректно отсек лишние данные у вас должен быть Актуальный индекс по полю "date" в таблице "route_list_date".
    2. Не помешал был актуальный индекс по полю "id" в таблицах "route_list_date" и по полю "route_list_date_id" в таблице "route_list" (чтобы внутреннее соединение прошло быстрее.)
    Ответ написан
    Комментировать
  • Почему конфигуратор не видит дистрибутив обновления?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    1. Убедитесь что вы скачали обновления именно для ЗУП (Базовая).
    Если п.1 выполнен и обновления точно для вашей версии (Базовой) тогда причина скорее всего в том, что предыдущие обновления вам ставили "Сравнением/объединением с файлом *.cf"
    Результат : Конфигурация поставщика осталась старой версии, а конфигруация бд (которая у вас на 1-м скриншоте) - актуальной версии.
    Когда вы выбираете обновление в конфигруаторе - программа сверяет текущую версию конфигруации поставщика и файлы обновления. в Итоге говорит что версии не подходят. (Привет прошлым обновляторам).
    Решение : Смотрите какая версия у вас текущая у конфигруации поставщика : (Конфигруация => Поддержка => Настройка поддержки. Там вы увидите вашу версию конфигруации поставщика. Скачиваете все обновления чтобы догнать конфигруацию до текущего вашего релизац конфигруации БД.
    Выбираете первый, и жмете обновить. Вам откроется окно "Сравнение/объединение конфиграции". снимаете ВСЕ Галки. жмете применить. Таким образом вы обновите конфигруацию поставщика до следующего релиза. И так пока конфигруация поставщика не станет равной текущей версии конфиграции БД.
    Дальше те действия, которые вы сейчас проделали - сработают.
    !Обязательно сделайте бэкап перед всей этой процедурой!
    UPD. Когда будете обновлять через дистрибутивы обновления обязательно поставте галку "Отображать окно сравнения конфигруаций" оно вылазит на одном из подготовительных шагов к обновления. если галку не поставите, она вам может текущую конфу затереть.
    Ответ написан
    7 комментариев
  • Как можно оформить в базе данных следующую таблицу?

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

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Да, есть такая возможность.
    У 1С есть такой объект в конфигураторе "Web Сервис". но на стороне сервера 1С должен стоять Apache или IIS. Она (1С) прописывает свою Dll в Веб сервер и Имя вебсервиса с путем к базе данных. Ты посылаешь запрос на вебсервер (Например Localhost/myDB/PostOrder), у него (Вебсервера) в конфиге прописано - обращаться на нужую Dll, Dll пересылает запрос на конкретную базу, а там конекретный вебсервис (По имени входа), а там уже процедура и дальше код 1С ... с возвратом или без .. по желанию.
    Больше информации гуглится по "1с веб сервис пример"
    Ответ написан
    Комментировать
  • Видит ли 1с сервер x32 больше 4 гигов ОЗУ в 64-битной системе?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Если нужно больше 4 Гб оперативы, "1С приложение обязательно должно быть х64"
    Ответ написан
  • Как реализовать обработчик?

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