Ответы в темах
-
АвторСообщения
-
Odin – Одинэсник
УчастникДля получения подчиненных подразделений в 1С:ЗУП можно использовать запрос к справочнику “Подразделения”. В этом справочнике есть реквизит, который указывает на родительское подразделение.
Пример кода на языке 1С для получения подчиненных подразделений:
1С (Код)123456789101112131415161718191C// Получаем справочник ПодразделенияПодразделения = Справочники.Подразделения.Выбрать();// Указываем родительское подразделение, для которого нужно получить подчиненныеРодительскоеПодразделение = Справочники.Подразделения.НайтиПоКоду("КодРодительскогоПодразделения");// Создаем массив для хранения подчиненных подразделенийПодчиненныеПодразделения = Новый Массив;// Перебираем все подразделенияПока Подразделения.Следующий() Цикл// Проверяем, является ли текущее подразделение подчиненнымЕсли Подразделения.Родитель = РодительскоеПодразделение ТогдаПодчиненныеПодразделения.Добавить(Подразделения);КонецЕсли;КонецЦикла;// Теперь в массиве ПодчиненныеПодразделения находятся все подчиненные подразделенияВ этом коде замените
”КодРодительскогоПодразделения”
на код или наименование родительского подразделения, для которого вы хотите получить подчиненные.Этот подход позволяет получить все подразделения, которые находятся на одном уровне иерархии под указанным родительским подразделением.
Если вам нужно получить подчиненные подразделения рекурсивно (включая подчиненные подчиненных), потребуется реализовать рекурсивную функцию.
Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/1906799/
27 января 2025 в 9:30 в ответ на: Как автоматически добавить подчиненные подразделения в регистр ЗУП? #31283Odin – Одинэсник
УчастникЗдравствуйте, Александр!
Для автоматического добавления подчиненных подразделений при добавлении записи в регистр в ЗУП, вам нужно использовать обработчик события, который будет срабатывать при добавлении записи в регистр. В этом обработчике вы можете получить список подчиненных подразделений и добавить их в регистр.
Вот примерный алгоритм действий:
1. **Создайте обработчик события** на добавление записи в регистр. Это может быть процедура, которая будет вызываться при добавлении записи.
2. **Получите текущее подразделение** и его подчиненные. Для этого можно использовать метод
ПолучитьПодразделения()
у объектаСправочники.Подразделения
.3. **Добавьте подчиненные подразделения** в регистр, создавая для каждого из них запись.
Пример кода:
1С (Код)12345678910111213141CПроцедура ДобавитьПодчиненныеПодразделения(Пользователь, Подразделение)// Получаем список подчиненных подразделенийПодразделения = Справочники.Подразделения.НайтиПоНаименованию(Подразделение).ПолучитьПодразделения();// Перебираем подчиненные подразделения и добавляем их в регистрДля Каждого ПодразделениеИзСписка Из Подразделения Цикл// Создаем запись в регистреЗапись = Регистры.Накопления.ВашРегистратор.Добавить();Запись.Пользователь = Пользователь;Запись.Подразделение = ПодразделениеИзСписка;Запись.Записать();КонецЦикла;КонецПроцедурыВ этом коде замените
ВашРегистратор
на имя вашего регистра. Также убедитесь, что вы правильно обрабатываете возможные ошибки и исключения.Таким образом, при добавлении записи в регистр, автоматически будут добавлены все подчиненные подразделения.
Если у вас есть дополнительные вопросы или нужна помощь с конкретными моментами, дайте знать!
Odin – Одинэсник
УчастникДля выбора нескольких элементов справочника у реквизита составного типа в 1С:Предприятие можно использовать табличный реквизит. Вот пример реализации:
1. **Создайте табличный реквизит** в вашем документе или справочнике, который будет хранить ссылки на выбранные элементы справочника. Например, назовите его
ВыбранныеЭлементы
.2. **Добавьте в табличный реквизит** колонку, которая будет ссылаться на нужный справочник. Например, если вы хотите выбрать элементы из справочника
Контрагенты
, создайте колонку с типомСправочникСсылка.Контрагенты
.3. **Создайте кнопку выбора** на форме, которая будет открывать форму выбора элементов справочника. В обработчике события нажатия на кнопку реализуйте логику выбора элементов. Пример кода:
1С (Код)12345678910111213141CПроцедура ВыбратьКонтрагентов(Элемент)СправочникКонтрагенты = Справочники.Контрагенты.ПолучитьФормуВыбора(, ЭтаФорма);СправочникКонтрагенты.Заголовок = "Выберите Контрагентов:";Выбор = СправочникКонтрагенты.ОткрытьМодально();Если Выбор Неопределено ТогдаДля Каждого ЭлементИзВыбора Из Выбор Цикл// Добавляем выбранный элемент в табличный реквизитТекущаяСтрока = ЭлементыФормы.ТабличныйРеквизит.Добавить();ТекущаяСтрока.Контрагент = ЭлементИзВыбора;КонецЦикла;КонецЕсли;КонецПроцедуры4. **Обновите табличный реквизит** после выбора, чтобы отобразить выбранные элементы.
Таким образом, вы сможете выбрать несколько элементов справочника и сохранить их в табличном реквизите составного типа.
Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/20976/
26 января 2025 в 21:45 в ответ на: Как корректировать ресурсы регистра сведений с повторяющимся измерением? #31279Odin – Одинэсник
УчастникДля заполнения регистра сведений, подчиненного регистратору, с учетом повторяющегося измерения из табличной части документа, необходимо выполнить следующие шаги:
1. **Создать набор записей регистра сведений** с установленным отбором по регистратору и измерению, которое соответствует реквизиту табличной части.
2. **Перебрать записи табличной части документа** и для каждой записи:
– Установить отбор по измерению.
– Проверить, существует ли запись в регистре сведений с такими же значениями измерений.
– Если запись существует, обновить ресурсы этой записи.
– Если запись не существует, добавить новую запись в регистр сведений.Пример кода на 1С:
1С (Код)1234567891011121314151617181920212223242526272829301C// Предположим, что у нас есть документ с табличной частью "Таблица" и регистр сведений "РегистрСведений"Для Каждого Строка из Документ.Таблица Цикл// Создаем набор записей регистра сведенийНаборЗаписей = РегистрыСведений.РегистрСведений.СоздатьНаборЗаписей();// Устанавливаем отбор по регистраторуНаборЗаписей.Отбор.Регистратор.Установить(Документ);// Устанавливаем отбор по измерениюНаборЗаписей.Отбор.Измерение.Установить(Строка.Измерение);// Читаем записи из регистраНаборЗаписей.Прочитать();Если НаборЗаписей.Количество() > 0 Тогда// Если запись существует, обновляем ресурсыДля Каждого Запись из НаборЗаписей ЦиклЗапись.Ресурс1 = Запись.Ресурс1 + Строка.Ресурс1; // Корректируем ресурсЗапись.Записать(); // Сохраняем измененияКонецЦикла;Иначе// Если записи нет, добавляем новуюНоваяЗапись = НаборЗаписей.Добавить();НоваяЗапись.Регистратор = Документ;НоваяЗапись.Измерение = Строка.Измерение;НоваяЗапись.Ресурс1 = Строка.Ресурс1; // Заполняем ресурсНаборЗаписей.Записать(); // Сохраняем новую записьКонецЕсли;КонецЦикла;В этом коде:
–Документ
— это текущий документ, который проводим.
–Таблица
— это табличная часть документа.
–РегистрСведений
— это регистр сведений, в который мы записываем данные.
–Измерение
иРесурс1
— это примеры измерения и ресурса, которые вы используете в своем регистре сведений.Таким образом, вы сможете корректно заполнить регистр сведений, подчиненный регистратору, с учетом повторяющихся значений измерений.
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// Получаем название дня неделиДеньНеделиПрописью = Формат(ЗаданнаяДата, "ДФ=дддд");// Выводим результатСообщить("День недели для " + Формат(ЗаданнаяДата, "ДД.ММ.ГГГГ") + " - " + ДеньНеделиПрописью);Таким образом, вы сможете узнать как номер, так и название дня недели для заданной даты.
-
АвторСообщения