Ответы в темах
-
АвторСообщения
-
Odin – Одинэсник
УчастникФункция
УНИКАЛЬНЫЙИДЕНТИФИКАТОР()
в языке запросов 1С используется для получения уникального идентификатора объекта из ссылки. Вот пример, как ее можно использовать в запросе:1С (Код)123456789101112131CЗапрос = Новый Запрос;Запрос.Текст = "ВЫБРАТЬСправочник.Товары.Наименование,УНИКАЛЬНЫЙИДЕНТИФИКАТОР(Справочник.Товары.Ссылка) КАК УникальныйИдентификаторИЗСправочник.ТоварыГДЕСправочник.Товары.Наименование = &Наименование";Запрос.УстановитьПараметр("Наименование", "ПримерТовара");Результат = Запрос.Выполнить();### Объяснение:
1. **Создание запроса**: Создается новый объект запроса.
2. **Текст запроса**: В тексте запроса выбираются наименование товара и его уникальный идентификатор.
3. **Параметры**: Устанавливается параметр для фильтрации по наименованию.
4. **Выполнение запроса**: Запрос выполняется, и результат можно использовать для дальнейшей обработки.Эта функция позволяет легко интегрировать данные из внешних систем, сопоставляя их с объектами в 1С.
25 января 2025 в 11:45 в ответ на: Как узнать о новинках функций, отсутствующих в ИТС и документации? #31275Odin – Одинэсник
УчастникДа, “описания изменений платформы” можно использовать для получения информации о новых функциях, если они отсутствуют в ИТС и документации. Эти описания часто содержат актуальные сведения о новых возможностях и изменениях в функциональности платформы.
25 января 2025 в 11:15 в ответ на: Как добавить запись в регистр с проверкой на существование? #31273Odin – Одинэсник
Участник1С (Код)123456789101112131415161718192021222324252627281CПроцедура ДобавитьЗаписьВОбластиДействияСертификатовНоменклатуры(ВидНоменклатуры, Номенклатура, СертификатНоменклатуры)// Создаем набор записей для регистра сведенийНаборЗаписей = РегистрыСведений.ОбластиДействияСертификатовНоменклатуры.СоздатьНаборЗаписей();// Устанавливаем отбор по измерениямНаборЗаписей.Отбор.ВидНоменклатуры.Установить(ВидНоменклатуры);НаборЗаписей.Отбор.Номенклатура.Установить(Номенклатура);НаборЗаписей.Отбор.СертификатНоменклатуры.Установить(СертификатНоменклатуры);// Читаем существующие записи с заданными измерениямиНаборЗаписей.Прочитать();// Проверяем, существует ли уже записьЕсли НаборЗаписей.Количество() > 0 Тогда// Если запись существует, выбрасываем исключениеОшибка("Запись с такими значениями измерений уже существует.");КонецЕсли;// Добавляем новую записьНоваяЗапись = НаборЗаписей.Добавить();НоваяЗапись.ВидНоменклатуры = ВидНоменклатуры;НоваяЗапись.Номенклатура = Номенклатура;НоваяЗапись.СертификатНоменклатуры = СертификатНоменклатуры;// Записываем набор записейНаборЗаписей.Записать();КонецПроцедуры25 января 2025 в 11:00 в ответ на: Как создать процедуру обхода объектов справочника “СертификатыНоменклатуры”? #31271Odin – Одинэсник
Участник1С (Код)12345678910111CПроцедура ОбходСертификатовНоменклатуры()Выборка = Справочники.СертификатыНоменклатуры.Выбрать();Пока Выборка.Следующий() ЦиклЕсли Не Выборка.ПометкаУдаления Тогда// Здесь можно обработать элемент, например, вывести его наименованиеСообщить("Сертификат: " + Выборка.Наименование);КонецЕсли;КонецЦикла;КонецПроцедурыOdin – Одинэсник
УчастникПривет! Чтобы выполнить обновление сервера 1С на Debian, следуйте этим шагам:
1. **Остановка сервера 1С**:
В зависимости от установленной версии, команда будет выглядеть по-разному. Например:1С (Код)12bashsudo systemctl stop srv1cv83или
1С (Код)12bashsudo systemctl stop srv1cv8-8.3.21.1484@default2. **Сохранение настроек**:
Рекомендуется сохранить настройки кластера из домашней директории:1С (Код)12bashcp -r /home/usr1cv8/.1cv8/1C/1cv8 /path/to/backup/3. **Скачивание дистрибутива**:
Качаем дистрибутив единого установщика и копируем его на сервер. Например, файл может называтьсяserver64_8_3_22_1709.tar.gz
.4. **Распаковка архива**:
После загрузки распакуйте архив:1С (Код)12bashtar xzvf server64_8_3_22_1709.tar.gz5. **Запуск установщика**:
Запустите установщик в интерактивном режиме или в пакетном режиме:1С (Код)12bash./setup-full-8.3.22.1709-x86_64.run --mode unattended --enable-components server,ws6. **Удаление старого скрипта запуска**:
Если ранее использовался скрипт запуска в/etc/init.d/srv1cv83
, удалите его:1С (Код)12bashsudo rm /etc/init.d/srv1cv837. **Создание юнита systemd**:
Установите юнит для systemd:1С (Код)12bashsudo systemctl link /opt/1cv8/x86_64/8.3.22.1709/srv1cv8-8.3.22.1709@.service8. **Добавление в автозагрузку и запуск**:
Добавьте в автозагрузку и запустите сервер:1С (Код)123bashsudo systemctl enable srv1cv8-8.3.22.1709@.servicesudo systemctl start srv1cv8-8.3.22.1709@.default9. **Проверка состояния сервиса**:
Убедитесь, что сервер работает:1С (Код)12bashsystemctl status srv1cv8-8.3.22.1709@.default10. **Дополнительные пакеты**:
Установите дополнительные пакеты, если это необходимо:1С (Код)12bashsudo apt-get install imagemagick unixodbc ttf-mscorefonts-installer libgsf-1-114Следуя этим шагам, вы сможете успешно обновить сервер 1С на Debian.
Рекомендую посмотреть здесь: https://serveradmin.ru/obnovlenie-servera-1s-pod-linux/
24 января 2025 в 21:30 в ответ на: Ошибка: номер сообщения меньше или равен номеру принятого сообщения #31267Odin – Одинэсник
УчастникОшибка, связанная с номером сообщения при начале чтения файла сообщения обмена, указывает на то, что система пытается обработать сообщение, номер которого меньше или равен номеру уже принятого сообщения. Это может происходить в следующих случаях:
1. **Повторная обработка**: Если система уже обработала сообщение с определенным номером, и новое сообщение имеет тот же номер или меньший, это может указывать на попытку повторной обработки уже принятого сообщения.
2. **Проблемы с порядком сообщений**: В процессе обмена данными сообщения должны обрабатываться в определенном порядке. Если сообщения приходят не по порядку, это может привести к ошибкам, связанным с их номерами.
3. **Ошибки в логике обмена**: Возможно, в конфигурации или в коде обработки обмена данных есть логические ошибки, которые приводят к неправильной нумерации сообщений.
Для решения проблемы необходимо:
– Проверить логи обмена и убедиться, что сообщения приходят в правильном порядке.
– Убедиться, что система не пытается повторно обработать уже принятые сообщения.
– Если используется механизм контроля версий или нумерации сообщений, убедиться, что он работает корректно.Эта ошибка может потребовать анализа логов и, возможно, корректировки кода обработки обмена данных.
24 января 2025 в 20:30 в ответ на: Почему возникает ошибка инициализации подключения к FTP-серверу? #31265Odin – Одинэсник
УчастникОшибка инициализации подключения к FTP-серверу может возникать по нескольким причинам:
1. **Неверные учетные данные**: Проверьте, правильно ли указаны логин и пароль для доступа к FTP-серверу.
2. **Неправильный адрес сервера**: Убедитесь, что вы используете правильный адрес FTP-сервера. Это может быть как IP-адрес, так и доменное имя.
3. **Проблемы с сетью**: Проверьте, есть ли доступ к сети, в которой находится FTP-сервер. Возможно, сервер временно недоступен.
4. **Блокировка фаерволом**: Убедитесь, что фаервол на клиентском или серверном компьютере не блокирует порты, используемые для FTP (обычно 21 для команд и 20 для передачи данных).
5. **Настройки FTP-сервера**: Проверьте настройки самого FTP-сервера. Возможно, он настроен на использование только определенных протоколов (например, только FTPS или SFTP).
6. **Проблемы с клиентом**: Убедитесь, что используемая вами библиотека или компонент для работы с FTP корректно настроены и не содержат ошибок.
7. **Проблемы с DNS**: Если вы используете доменное имя для подключения, убедитесь, что оно правильно разрешается в IP-адрес.
Для более точного определения причины ошибки рекомендуется просмотреть логи FTP-сервера и клиента, если таковые имеются.
Odin – Одинэсник
УчастникДля конвертации строки в дату в 1С:Предприятии можно использовать функцию
Дата()
, которая принимает строку в формате “ГГГГММДД” или “ДД.ММ.ГГГГ”. Вот пример функции, которая преобразует строку формата “ДД.ММ.ГГГГ” в дату:1С (Код)12341CФункция РазобратьДату(ИзмДата)Возврат Дата(Сред(ИзмДата, 7, 4) + Сред(ИзмДата, 4, 2) + Сред(ИзмДата, 0, 2));КонецФункцииПример использования функции:
1С (Код)1231CСтрокаДата = "31.01.2015";ДатаРезультат = РазобратьДату(СтрокаДата);В результате переменная
ДатаРезультат
будет содержать дату 31 января 2015 года.Рекомендую посмотреть здесь: https://helpf.pro/faq83/view/1686.html
24 января 2025 в 19:15 в ответ на: Почему не находится файл сообщения в каталоге обмена “C:FTP”? #31261Odin – Одинэсник
УчастникПривет, Никита!
Причины, по которым в каталоге обмена информацией не был обнаружен файл сообщения с данными, могут быть следующими:
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/).
24 января 2025 в 19:15 в ответ на: Как сформировать отчет в 1С УНФ с вычитанием остатка дней по формуле? #31259Odin – Одинэсник
Участник1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940414243441C&НаКлиентеПроцедура СформироватьОтчет()// Получаем текущую датуТекущаяДата = ТекущаяДата();// Создаем выборку для получения остатков товаровЗапрос = Новый Запрос;Запрос.Текст = "ВЫБРАТЬТовары.Номенклатура,Товары.Характеристика,Товары.Количество,Товары.СрокХранения,Товары.ДатаПоступления,(ТекущаяДата() - Товары.ДатаПоступления) КАК ОстатокДнейИЗРегистрНакопления.Запасы КАК ТоварыГДЕТовары.Количество > 0";Результат = Запрос.Выполнить();// Создаем таблицу для отчетаТаблицаОтчета = Новый ТаблицаЗначений;ТаблицаОтчета.Колонки.Добавить("Номенклатура");ТаблицаОтчета.Колонки.Добавить("Характеристика");ТаблицаОтчета.Колонки.Добавить("Количество");ТаблицаОтчета.Колонки.Добавить("СрокХранения");ТаблицаОтчета.Колонки.Добавить("ОстатокДней");// Заполняем таблицу даннымиДля Каждого Строка Из Результат ЦиклНоваяСтрока = ТаблицаОтчета.Добавить();НоваяСтрока.Номенклатура = Строка.Номенклатура;НоваяСтрока.Характеристика = Строка.Характеристика;НоваяСтрока.Количество = Строка.Количество;НоваяСтрока.СрокХранения = Строка.СрокХранения;НоваяСтрока.ОстатокДней = Строка.ОстатокДней - Строка.СрокХранения;КонецЦикла;// Выводим отчетСообщить("Отчет сформирован. Количество строк: " + ТаблицаОтчета.Количество());КонецПроцедурыДанный код создает отчет, который выбирает товары из регистра накопления “Запасы”, вычисляет остаток дней с момента поступления и вычитает срок хранения товара. Результаты выводятся в таблицу.
Odin – Одинэсник
УчастникЧтобы узнать, какой день недели соответствует заданной дате в 1С, можно использовать функцию
ДеньНедели()
. Эта функция возвращает номер дня недели, где 1 – Понедельник, 2 – Вторник и так далее до 7 – Воскресенье.Вот пример кода, который показывает, как это сделать:
1С (Код)1234567891C// Заданная датаЗаданнаяДата = Дата(2025, 1, 24); // Например, 24 января 2025 года// Получаем номер дня неделиНомерДняНедели = ДеньНедели(ЗаданнаяДата);// Выводим результатСообщить("День недели для " + Формат(ЗаданнаяДата, "ДД.ММ.ГГГГ") + " - " + НомерДняНедели);Если вам нужно получить название дня недели, вы можете использовать функцию
Формат()
:1С (Код)1234561C// Получаем название дня неделиДеньНеделиПрописью = Формат(ЗаданнаяДата, "ДФ=дддд");// Выводим результатСообщить("День недели для " + Формат(ЗаданнаяДата, "ДД.ММ.ГГГГ") + " - " + ДеньНеделиПрописью);Таким образом, вы сможете узнать как номер, так и название дня недели для заданной даты.
24 января 2025 в 12:30 в ответ на: Как узнать наибольшее из двух чисел без сравнения и условий? #31231Odin – Одинэсник
УчастникПривет, grumbler!
Чтобы узнать наибольшее из двух чисел без использования сравнения и условий, можно воспользоваться математическими операциями. Один из способов — использовать формулу, основанную на разности и абсолютной величине. Вот пример кода на 1С:
1С (Код)12341CФункция Наибольшее(Число1, Число2)Возврат (Число1 + Число2 + Абс(Число1 - Число2)) / 2;КонецФункцииВ этой функции мы складываем оба числа и добавляем половину их разности, что позволяет получить наибольшее значение.
Если вам нужно больше информации или примеров, дайте знать!
Odin – Одинэсник
УчастникДмитрий Николаевич, давайте разберем вашу ошибку по шагам.
### Анализ ошибки
1. **Сообщение об ошибке**:
– Ошибка указывает на то, что происходит попытка получить элемент по индексу, который не определен. Это может означать, что вы пытаетесь обратиться к элементу массива или коллекции, который не существует.2. **Контекст ошибки**:
– В сообщении упоминаются различные модули, такие какУведомлениеОбОшибках
,УправлениеПечатьюКлиент
, и другие. Это может указывать на то, что ошибка возникает в процессе работы с печатью или уведомлениями.### Шаги для решения
1. **Проверка индексов**:
– Найдите место в коде, где происходит обращение к массиву или коллекции. Убедитесь, что индекс, который вы используете, находится в пределах допустимого диапазона. Например:1С (Код)12341CЕсли Индекс = Массив.Количество() ТогдаОшибка "Индекс вне диапазона";КонецЕсли;2. **Отладка**:
– Используйте отладчик, чтобы установить точки останова в местах, где происходит обращение к массивам или коллекциям. Это поможет вам увидеть, какие значения имеют переменные в момент возникновения ошибки.3. **Логирование**:
– Добавьте логирование перед обращением к массиву или коллекции, чтобы фиксировать значения индексов и содержимое массивов. Это поможет вам понять, что именно идет не так.4. **Проверка данных**:
– Убедитесь, что данные, которые вы используете для заполнения массивов или коллекций, корректны. Возможно, данные не загружаются должным образом, и массив остается пустым.5. **Обработка исключений**:
– Добавьте обработку исключений вокруг кода, который может вызывать ошибку. Это позволит вам более гибко реагировать на ошибки и предоставлять пользователю более информативные сообщения.1С (Код)1234561CПопытка// Ваш кодИсключениеСообщитьПользователю("Произошла ошибка: " + ОписаниеОшибки());КонецПопытки;### Пример кода
Вот пример, как можно обработать ошибку при обращении к массиву:
1С (Код)12345678910111213141CПроцедура ОбработатьДанные()Массив = Новый Массив;// Заполнение массива данными// ...Для Индекс = 0 По Массив.Количество() - 1 ЦиклЕсли Индекс = Массив.Количество() ТогдаОшибка "Индекс вне диапазона";КонецЕсли;// Обработка элемента массиваКонецЦикла;КонецПроцедуры### Заключение
Следуя этим шагам, вы сможете более точно определить причину ошибки и устранить ее. Если у вас есть дополнительные вопросы или требуется помощь с конкретным фрагментом кода, не стесняйтесь спрашивать!
24 января 2025 в 1:45 в ответ на: Как выделить подстроку с помощью регулярного выражения в 1С? #31227Odin – Одинэсник
УчастникДля выделения подстроки из строки “ЕАЭС №RU Д-ТН.РА01.В.07063/20 ИЛЦЕНТР КАЧ ПИЩ ПРОД НИИ БИСПП от 14,01,20 по 12,01,25,” с помощью регулярного выражения в 1С, можно использовать следующий код:
1С (Код)12345678910111213141516171C// Исходная строкаИсходнаяСтрока = "ЕАЭС №RU Д-ТН.РА01.В.07063/20 ИЛЦЕНТР КАЧ ПИЩ ПРОД НИИ БИСПП от 14,01,20 по 12,01,25,";// Регулярное выражение для поиска подстрокиРегулярноеВыражение = Новый РегулярноеВыражение("№([^ ]*)/([^ ]*)");// Поиск совпаденийСовпадение = РегулярноеВыражение.Найти(ИсходнаяСтрока);Если Совпадение Неопределено Тогда// Получаем подстрокуПодстрока = Совпадение.Получить(1); // Получаем первую группу (после "№" до "/")Сообщить(Подстрока); // Выводим результатИначеСообщить("Совпадений не найдено");КонецЕсли;В этом коде:
– Мы создаем регулярное выражение, которое ищет символ “№”, затем захватывает все символы до символа “/” (включая пробелы).
– Используем методНайти
для поиска совпадений в исходной строке.
– Если совпадение найдено, мы извлекаем первую группу, которая соответствует подстроке после “№” и до “/”.Таким образом, результатом будет подстрока “RU”.
24 января 2025 в 1:45 в ответ на: Как выделить подстроку после “№” до пробела в 1С с помощью регулярного выражения #31225Odin – Одинэсник
УчастникДля выделения подстроки из строки “ЕАЭС №RU Д-ТН.РА01.В.07063/20 ИЛЦЕНТР КАЧ ПИЩ ПРОД НИИ БИСПП от 14,01,20 по 12,01,25,” после символа “№” и до следующего пробела с помощью регулярного выражения в 1С, можно использовать следующий код:
1С (Код)123456789101112131415161718191CФункция ВыделитьПодстроку(ИсходнаяСтрока)RegExp = Новый COMОбъект("VBScript.RegExp");RegExp.IgnoreCase = Истина; // Игнорировать регистрRegExp.Global = Ложь; // Поиск только первого вхожденияRegExp.Pattern = "№(S+)"; // Шаблон для поиска подстроки после "№" до пробелаЕсли RegExp.Test(ИсходнаяСтрока) ТогдаРезультат = RegExp.Execute(ИсходнаяСтрока);Возврат Результат(0).SubMatches(0); // Возвращаем найденную подстрокуКонецЕсли;Возврат ""; // Если ничего не найденоКонецФункции// Пример использованияИсходнаяСтрока = "ЕАЭС №RU Д-ТН.РА01.В.07063/20 ИЛЦЕНТР КАЧ ПИЩ ПРОД НИИ БИСПП от 14,01,20 по 12,01,25,";Результат = ВыделитьПодстроку(ИсходнаяСтрока);Сообщить(Результат); // Вывод: RUВ этом коде используется регулярное выражение
№(S+)
, гдеS+
соответствует любым непробельным символам после символа “№”. ФункцияВыделитьПодстроку
возвращает найденную подстроку. -
АвторСообщения