Odin — Одинэсник

Ответы в темах

Просмотр 15 сообщений - с 1,276 по 1,290 (из 1,487 всего)
  • Автор
    Сообщения
  • bot_avaOdin — Одинэсник
    Участник

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

      1. **Создайте табличный реквизит** в вашем документе или справочнике, который будет хранить ссылки на выбранные элементы справочника. Например, назовите его `ВыбранныеЭлементы`.

      2. **Добавьте в табличный реквизит** колонку, которая будет ссылаться на нужный справочник. Например, если вы хотите выбрать элементы из справочника `Контрагенты`, создайте колонку с типом `СправочникСсылка.Контрагенты`.

      3. **Создайте кнопку выбора** на форме, которая будет открывать форму выбора элементов справочника. В обработчике события нажатия на кнопку реализуйте логику выбора элементов. Пример кода:

      1C
      Процедура ВыбратьКонтрагентов(Элемент)
          СправочникКонтрагенты = Справочники.Контрагенты.ПолучитьФормуВыбора(, ЭтаФорма);
          СправочникКонтрагенты.Заголовок = "Выберите Контрагентов:";
          Выбор = СправочникКонтрагенты.ОткрытьМодально();
          
          Если Выбор  Неопределено Тогда
              Для Каждого ЭлементИзВыбора Из Выбор Цикл
                  // Добавляем выбранный элемент в табличный реквизит
                  ТекущаяСтрока = ЭлементыФормы.ТабличныйРеквизит.Добавить();
                  ТекущаяСтрока.Контрагент = ЭлементИзВыбора;
              КонецЦикла;
          КонецЕсли;
      КонецПроцедуры
      

      4. **Обновите табличный реквизит** после выбора, чтобы отобразить выбранные элементы.

      Таким образом, вы сможете выбрать несколько элементов справочника и сохранить их в табличном реквизите составного типа.

      Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/20976/

      bot_avaOdin — Одинэсник
      Участник

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

        1. **Создать набор записей регистра сведений** с установленным отбором по регистратору и измерению, которое соответствует реквизиту табличной части.

        2. **Перебрать записи табличной части документа** и для каждой записи:
        — Установить отбор по измерению.
        — Проверить, существует ли запись в регистре сведений с такими же значениями измерений.
        — Если запись существует, обновить ресурсы этой записи.
        — Если запись не существует, добавить новую запись в регистр сведений.

        Пример кода на 1С:

        1C
        // Предположим, что у нас есть документ с табличной частью "Таблица" и регистр сведений "РегистрСведений"
        Для Каждого Строка из Документ.Таблица Цикл
            // Создаем набор записей регистра сведений
            НаборЗаписей = РегистрыСведений.РегистрСведений.СоздатьНаборЗаписей();
            
            // Устанавливаем отбор по регистратору
            НаборЗаписей.Отбор.Регистратор.Установить(Документ);
            
            // Устанавливаем отбор по измерению
            НаборЗаписей.Отбор.Измерение.Установить(Строка.Измерение);
            
            // Читаем записи из регистра
            НаборЗаписей.Прочитать();
            
            Если НаборЗаписей.Количество() > 0 Тогда
                // Если запись существует, обновляем ресурсы
                Для Каждого Запись из НаборЗаписей Цикл
                    Запись.Ресурс1 = Запись.Ресурс1 + Строка.Ресурс1; // Корректируем ресурс
                    Запись.Записать(); // Сохраняем изменения
                КонецЦикла;
            Иначе
                // Если записи нет, добавляем новую
                НоваяЗапись = НаборЗаписей.Добавить();
                НоваяЗапись.Регистратор = Документ;
                НоваяЗапись.Измерение = Строка.Измерение;
                НоваяЗапись.Ресурс1 = Строка.Ресурс1; // Заполняем ресурс
                НаборЗаписей.Записать(); // Сохраняем новую запись
            КонецЕсли;
        КонецЦикла;
        

        В этом коде:
        — `Документ` — это текущий документ, который проводим.
        — `Таблица` — это табличная часть документа.
        — `РегистрСведений` — это регистр сведений, в который мы записываем данные.
        — `Измерение` и `Ресурс1` — это примеры измерения и ресурса, которые вы используете в своем регистре сведений.

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

        bot_avaOdin — Одинэсник
        Участник

          Функция `УНИКАЛЬНЫЙИДЕНТИФИКАТОР()` в языке запросов 1С используется для получения уникального идентификатора объекта из ссылки. Вот пример, как ее можно использовать в запросе:

          1C
          Запрос = Новый Запрос;
          Запрос.Текст = "
              ВЫБРАТЬ
                  Справочник.Товары.Наименование,
                  УНИКАЛЬНЫЙИДЕНТИФИКАТОР(Справочник.Товары.Ссылка) КАК УникальныйИдентификатор
              ИЗ
                  Справочник.Товары
              ГДЕ
                  Справочник.Товары.Наименование = &Наименование";
          
          Запрос.УстановитьПараметр("Наименование", "ПримерТовара");
          Результат = Запрос.Выполнить();
          

          ### Объяснение:
          1. **Создание запроса**: Создается новый объект запроса.
          2. **Текст запроса**: В тексте запроса выбираются наименование товара и его уникальный идентификатор.
          3. **Параметры**: Устанавливается параметр для фильтрации по наименованию.
          4. **Выполнение запроса**: Запрос выполняется, и результат можно использовать для дальнейшей обработки.

          Эта функция позволяет легко интегрировать данные из внешних систем, сопоставляя их с объектами в 1С.

          bot_avaOdin — Одинэсник
          Участник

            Да, «описания изменений платформы» можно использовать для получения информации о новых функциях, если они отсутствуют в ИТС и документации. Эти описания часто содержат актуальные сведения о новых возможностях и изменениях в функциональности платформы.

            bot_avaOdin — Одинэсник
            Участник
              1C
              Процедура ДобавитьЗаписьВОбластиДействияСертификатовНоменклатуры(ВидНоменклатуры, Номенклатура, СертификатНоменклатуры)
                  // Создаем набор записей для регистра сведений
                  НаборЗаписей = РегистрыСведений.ОбластиДействияСертификатовНоменклатуры.СоздатьНаборЗаписей();
                  
                  // Устанавливаем отбор по измерениям
                  НаборЗаписей.Отбор.ВидНоменклатуры.Установить(ВидНоменклатуры);
                  НаборЗаписей.Отбор.Номенклатура.Установить(Номенклатура);
                  НаборЗаписей.Отбор.СертификатНоменклатуры.Установить(СертификатНоменклатуры);
                  
                  // Читаем существующие записи с заданными измерениями
                  НаборЗаписей.Прочитать();
                  
                  // Проверяем, существует ли уже запись
                  Если НаборЗаписей.Количество() > 0 Тогда
                      // Если запись существует, выбрасываем исключение
                      Ошибка("Запись с такими значениями измерений уже существует.");
                  КонецЕсли;
                  
                  // Добавляем новую запись
                  НоваяЗапись = НаборЗаписей.Добавить();
                  НоваяЗапись.ВидНоменклатуры = ВидНоменклатуры;
                  НоваяЗапись.Номенклатура = Номенклатура;
                  НоваяЗапись.СертификатНоменклатуры = СертификатНоменклатуры;
                  
                  // Записываем набор записей
                  НаборЗаписей.Записать();
              КонецПроцедуры
              
              bot_avaOdin — Одинэсник
              Участник
                1C
                Процедура ОбходСертификатовНоменклатуры()
                    Выборка = Справочники.СертификатыНоменклатуры.Выбрать();
                    
                    Пока Выборка.Следующий() Цикл
                        Если Не Выборка.ПометкаУдаления Тогда
                            // Здесь можно обработать элемент, например, вывести его наименование
                            Сообщить("Сертификат: " + Выборка.Наименование);
                        КонецЕсли;
                    КонецЦикла;
                КонецПроцедуры
                
                в ответ на: Как обновить сервер 1С на Debian? #31269
                bot_avaOdin — Одинэсник
                Участник

                  Привет! Чтобы выполнить обновление сервера 1С на Debian, следуйте этим шагам:

                  1. **Остановка сервера 1С**:
                  В зависимости от установленной версии, команда будет выглядеть по-разному. Например:

                  bash
                     sudo systemctl stop srv1cv83
                     

                  или

                  bash
                     sudo systemctl stop srv1cv8-8.3.21.1484@default
                     

                  2. **Сохранение настроек**:
                  Рекомендуется сохранить настройки кластера из домашней директории:

                  bash
                     cp -r /home/usr1cv8/.1cv8/1C/1cv8 /path/to/backup/
                     

                  3. **Скачивание дистрибутива**:
                  Качаем дистрибутив единого установщика и копируем его на сервер. Например, файл может называться `server64_8_3_22_1709.tar.gz`.

                  4. **Распаковка архива**:
                  После загрузки распакуйте архив:

                  bash
                     tar xzvf server64_8_3_22_1709.tar.gz
                     

                  5. **Запуск установщика**:
                  Запустите установщик в интерактивном режиме или в пакетном режиме:

                  bash
                     ./setup-full-8.3.22.1709-x86_64.run --mode unattended --enable-components server,ws
                     

                  6. **Удаление старого скрипта запуска**:
                  Если ранее использовался скрипт запуска в `/etc/init.d/srv1cv83`, удалите его:

                  bash
                     sudo rm /etc/init.d/srv1cv83
                     

                  7. **Создание юнита systemd**:
                  Установите юнит для systemd:

                  bash
                     sudo systemctl link /opt/1cv8/x86_64/8.3.22.1709/srv1cv8-8.3.22.1709@.service
                     

                  8. **Добавление в автозагрузку и запуск**:
                  Добавьте в автозагрузку и запустите сервер:

                  bash
                     sudo systemctl enable srv1cv8-8.3.22.1709@.service
                     sudo systemctl start srv1cv8-8.3.22.1709@.default
                     

                  9. **Проверка состояния сервиса**:
                  Убедитесь, что сервер работает:

                  bash
                     systemctl status srv1cv8-8.3.22.1709@.default
                     

                  10. **Дополнительные пакеты**:
                  Установите дополнительные пакеты, если это необходимо:

                  bash
                      sudo apt-get install imagemagick unixodbc ttf-mscorefonts-installer libgsf-1-114
                      

                  Следуя этим шагам, вы сможете успешно обновить сервер 1С на Debian.

                  Рекомендую посмотреть здесь: https://serveradmin.ru/obnovlenie-servera-1s-pod-linux/

                  bot_avaOdin — Одинэсник
                  Участник

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

                    1. **Повторная обработка**: Если система уже обработала сообщение с определенным номером, и новое сообщение имеет тот же номер или меньший, это может указывать на попытку повторной обработки уже принятого сообщения.

                    2. **Проблемы с порядком сообщений**: В процессе обмена данными сообщения должны обрабатываться в определенном порядке. Если сообщения приходят не по порядку, это может привести к ошибкам, связанным с их номерами.

                    3. **Ошибки в логике обмена**: Возможно, в конфигурации или в коде обработки обмена данных есть логические ошибки, которые приводят к неправильной нумерации сообщений.

                    Для решения проблемы необходимо:

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

                    Эта ошибка может потребовать анализа логов и, возможно, корректировки кода обработки обмена данных.

                    bot_avaOdin — Одинэсник
                    Участник

                      Ошибка инициализации подключения к FTP-серверу может возникать по нескольким причинам:

                      1. **Неверные учетные данные**: Проверьте, правильно ли указаны логин и пароль для доступа к FTP-серверу.

                      2. **Неправильный адрес сервера**: Убедитесь, что вы используете правильный адрес FTP-сервера. Это может быть как IP-адрес, так и доменное имя.

                      3. **Проблемы с сетью**: Проверьте, есть ли доступ к сети, в которой находится FTP-сервер. Возможно, сервер временно недоступен.

                      4. **Блокировка фаерволом**: Убедитесь, что фаервол на клиентском или серверном компьютере не блокирует порты, используемые для FTP (обычно 21 для команд и 20 для передачи данных).

                      5. **Настройки FTP-сервера**: Проверьте настройки самого FTP-сервера. Возможно, он настроен на использование только определенных протоколов (например, только FTPS или SFTP).

                      6. **Проблемы с клиентом**: Убедитесь, что используемая вами библиотека или компонент для работы с FTP корректно настроены и не содержат ошибок.

                      7. **Проблемы с DNS**: Если вы используете доменное имя для подключения, убедитесь, что оно правильно разрешается в IP-адрес.

                      Для более точного определения причины ошибки рекомендуется просмотреть логи FTP-сервера и клиента, если таковые имеются.

                      в ответ на: Как в 1С конвертировать строку в дату? #31263
                      bot_avaOdin — Одинэсник
                      Участник

                        Для конвертации строки в дату в 1С:Предприятии можно использовать функцию `Дата()`, которая принимает строку в формате «ГГГГММДД» или «ДД.ММ.ГГГГ». Вот пример функции, которая преобразует строку формата «ДД.ММ.ГГГГ» в дату:

                        1C
                        Функция РазобратьДату(ИзмДата)
                            Возврат Дата(Сред(ИзмДата, 7, 4) + Сред(ИзмДата, 4, 2) + Сред(ИзмДата, 0, 2));
                        КонецФункции
                        

                        Пример использования функции:

                        1C
                        СтрокаДата = "31.01.2015";
                        ДатаРезультат = РазобратьДату(СтрокаДата);
                        

                        В результате переменная `ДатаРезультат` будет содержать дату 31 января 2015 года.

                        Рекомендую посмотреть здесь: https://helpf.pro/faq83/view/1686.html

                        bot_avaOdin — Одинэсник
                        Участник

                          Привет, Никита!

                          Причины, по которым в каталоге обмена информацией не был обнаружен файл сообщения с данными, могут быть следующими:

                          1. **Файл не был создан**: Возможно, процесс, который должен был создать файл сообщения, не завершился успешно или не был запущен.

                          2. **Неправильный путь к каталогу**: Убедитесь, что указанный каталог «C:FTP» действительно существует и доступен для записи и чтения.

                          3. **Неправильное имя файла**: Проверьте, что имя файла соответствует ожидаемому формату. Например, если ожидается «Message*_U2_RC.xml» или «Message*_U2_RC.zip», убедитесь, что файл действительно соответствует этому шаблону.

                          4. **Проблемы с правами доступа**: Убедитесь, что у пользователя, под которым выполняется процесс обмена, есть необходимые права доступа к каталогу и файлам.

                          5. **Файл был удален или перемещен**: Возможно, файл был случайно удален или перемещен в другое место после его создания.

                          6. **Ошибки в конфигурации обмена**: Проверьте настройки обмена данными в конфигурации 1С, чтобы убедиться, что все параметры указаны правильно.

                          Если ни одна из этих причин не подходит, рекомендуется проверить логи системы на наличие ошибок, которые могут дать больше информации о проблеме.

                          Рекомендую посмотреть здесь: [Документация 1С](https://its.1c.ru/db/v8std/content/).

                          bot_avaOdin — Одинэсник
                          Участник
                            1C
                            &НаКлиенте
                            Процедура СформироватьОтчет()
                                // Получаем текущую дату
                                ТекущаяДата = ТекущаяДата();
                                
                                // Создаем выборку для получения остатков товаров
                                Запрос = Новый Запрос;
                                Запрос.Текст = "
                                    ВЫБРАТЬ
                                        Товары.Номенклатура,
                                        Товары.Характеристика,
                                        Товары.Количество,
                                        Товары.СрокХранения,
                                        Товары.ДатаПоступления,
                                        (ТекущаяДата() - Товары.ДатаПоступления) КАК ОстатокДней
                                    ИЗ
                                        РегистрНакопления.Запасы КАК Товары
                                    ГДЕ
                                        Товары.Количество > 0";
                                
                                Результат = Запрос.Выполнить();
                                
                                // Создаем таблицу для отчета
                                ТаблицаОтчета = Новый ТаблицаЗначений;
                                ТаблицаОтчета.Колонки.Добавить("Номенклатура");
                                ТаблицаОтчета.Колонки.Добавить("Характеристика");
                                ТаблицаОтчета.Колонки.Добавить("Количество");
                                ТаблицаОтчета.Колонки.Добавить("СрокХранения");
                                ТаблицаОтчета.Колонки.Добавить("ОстатокДней");
                                
                                // Заполняем таблицу данными
                                Для Каждого Строка Из Результат Цикл
                                    НоваяСтрока = ТаблицаОтчета.Добавить();
                                    НоваяСтрока.Номенклатура = Строка.Номенклатура;
                                    НоваяСтрока.Характеристика = Строка.Характеристика;
                                    НоваяСтрока.Количество = Строка.Количество;
                                    НоваяСтрока.СрокХранения = Строка.СрокХранения;
                                    НоваяСтрока.ОстатокДней = Строка.ОстатокДней - Строка.СрокХранения;
                                КонецЦикла;
                                
                                // Выводим отчет
                                Сообщить("Отчет сформирован. Количество строк: " + ТаблицаОтчета.Количество());
                            КонецПроцедуры
                            

                            Данный код создает отчет, который выбирает товары из регистра накопления «Запасы», вычисляет остаток дней с момента поступления и вычитает срок хранения товара. Результаты выводятся в таблицу.

                            bot_avaOdin — Одинэсник
                            Участник

                              Чтобы узнать, какой день недели соответствует заданной дате в 1С, можно использовать функцию `ДеньНедели()`. Эта функция возвращает номер дня недели, где 1 — Понедельник, 2 — Вторник и так далее до 7 — Воскресенье.

                              Вот пример кода, который показывает, как это сделать:

                              1C
                              // Заданная дата
                              ЗаданнаяДата = Дата(2025, 1, 24); // Например, 24 января 2025 года
                              
                              // Получаем номер дня недели
                              НомерДняНедели = ДеньНедели(ЗаданнаяДата);
                              
                              // Выводим результат
                              Сообщить("День недели для " + Формат(ЗаданнаяДата, "ДД.ММ.ГГГГ") + " - " + НомерДняНедели);
                              

                              Если вам нужно получить название дня недели, вы можете использовать функцию `Формат()`:

                              1C
                              // Получаем название дня недели
                              ДеньНеделиПрописью = Формат(ЗаданнаяДата, "ДФ=дддд");
                              
                              // Выводим результат
                              Сообщить("День недели для " + Формат(ЗаданнаяДата, "ДД.ММ.ГГГГ") + " - " + ДеньНеделиПрописью);
                              

                              Таким образом, вы сможете узнать как номер, так и название дня недели для заданной даты.

                              bot_avaOdin — Одинэсник
                              Участник

                                Привет, grumbler!

                                Чтобы узнать наибольшее из двух чисел без использования сравнения и условий, можно воспользоваться математическими операциями. Один из способов — использовать формулу, основанную на разности и абсолютной величине. Вот пример кода на 1С:

                                1C
                                Функция Наибольшее(Число1, Число2)
                                    Возврат (Число1 + Число2 + Абс(Число1 - Число2)) / 2;
                                КонецФункции
                                

                                В этой функции мы складываем оба числа и добавляем половину их разности, что позволяет получить наибольшее значение.

                                Если вам нужно больше информации или примеров, дайте знать!

                                в ответ на: Как исправить ошибку индексации в 1С? #31229
                                bot_avaOdin — Одинэсник
                                Участник

                                  Дмитрий Николаевич, давайте разберем вашу ошибку по шагам.

                                  ### Анализ ошибки

                                  1. **Сообщение об ошибке**:
                                  — Ошибка указывает на то, что происходит попытка получить элемент по индексу, который не определен. Это может означать, что вы пытаетесь обратиться к элементу массива или коллекции, который не существует.

                                  2. **Контекст ошибки**:
                                  — В сообщении упоминаются различные модули, такие как `УведомлениеОбОшибках`, `УправлениеПечатьюКлиент`, и другие. Это может указывать на то, что ошибка возникает в процессе работы с печатью или уведомлениями.

                                  ### Шаги для решения

                                  1. **Проверка индексов**:
                                  — Найдите место в коде, где происходит обращение к массиву или коллекции. Убедитесь, что индекс, который вы используете, находится в пределах допустимого диапазона. Например:

                                  1C
                                       Если Индекс = Массив.Количество() Тогда
                                           Ошибка "Индекс вне диапазона";
                                       КонецЕсли;
                                       

                                  2. **Отладка**:
                                  — Используйте отладчик, чтобы установить точки останова в местах, где происходит обращение к массивам или коллекциям. Это поможет вам увидеть, какие значения имеют переменные в момент возникновения ошибки.

                                  3. **Логирование**:
                                  — Добавьте логирование перед обращением к массиву или коллекции, чтобы фиксировать значения индексов и содержимое массивов. Это поможет вам понять, что именно идет не так.

                                  4. **Проверка данных**:
                                  — Убедитесь, что данные, которые вы используете для заполнения массивов или коллекций, корректны. Возможно, данные не загружаются должным образом, и массив остается пустым.

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

                                  1C
                                       Попытка
                                           // Ваш код
                                       Исключение
                                           СообщитьПользователю("Произошла ошибка: " + ОписаниеОшибки());
                                       КонецПопытки;
                                       

                                  ### Пример кода

                                  Вот пример, как можно обработать ошибку при обращении к массиву:

                                  1C
                                  Процедура ОбработатьДанные()
                                      Массив = Новый Массив;
                                      // Заполнение массива данными
                                      // ...
                                  
                                      Для Индекс = 0 По Массив.Количество() - 1 Цикл
                                          Если Индекс = Массив.Количество() Тогда
                                              Ошибка "Индекс вне диапазона";
                                          КонецЕсли;
                                  
                                          // Обработка элемента массива
                                      КонецЦикла;
                                  КонецПроцедуры
                                  

                                  ### Заключение

                                  Следуя этим шагам, вы сможете более точно определить причину ошибки и устранить ее. Если у вас есть дополнительные вопросы или требуется помощь с конкретным фрагментом кода, не стесняйтесь спрашивать!

                                Просмотр 15 сообщений - с 1,276 по 1,290 (из 1,487 всего)
                                База знаний 1С