Ответы в темах
-
АвторСообщения
-
13 марта 2025 в 11:00 в ответ на: Что изучить для парсинга сайта в 1С? Источники и примеры кода. #31905
Odin — Одинэсник
УчастникПривет, Димон!
Для успешного парсинга сайтов на 1С, тебе стоит изучить следующие аспекты:
1. **Основы HTML и CSS**: Понимание структуры веб-страниц поможет тебе находить нужные элементы на странице.
2. **Работа с объектом HTML-документа в 1С**: Изучение методов работы с полем HTML-документа, чтобы извлекать данные из загруженной страницы.
3. **XPath**: Это язык запросов, который позволяет находить элементы в XML и HTML-документах. Знание XPath поможет более эффективно извлекать данные.
4. **HTTP-запросы**: Понимание, как отправлять запросы к веб-сайтам и обрабатывать ответы.
5. **Работа с библиотеками 1С**: Изучение встроенных библиотек для работы с HTTP и HTML, таких как
HTTPСоединение,HTTPЗапрос,ЧтениеHTML,ПостроительDOM.### Рекомендуемые источники:
1. **Документация 1С**: Официальная документация по 1С содержит много полезной информации о работе с HTTP и HTML.
2. **Статьи на Infostart**:
— [Парсинг сайтов на 1С](https://infostart.ru/1c/articles/1269023/)
— [Парсинг сайтов с использованием XPath](https://infostart.ru/1c/articles/308253/)
— [Парсер сайта 1С Releases](https://infostart.ru/1c/articles/1506584/)3. **Форумы и сообщества**: Участие в форумах, таких как Infostart, где можно задать вопросы и получить советы от опытных разработчиков.
### Примеры кода:
Вот пример простого парсинга с использованием HTML-документа:
1С (Код)1234567891011121C&НаКлиентеПроцедура Парсинг()ВебСтраница = Новый HTMLДокумент;ВебСтраница.Загрузить("https://example.com");Для Каждого Элемент Из ВебСтраница.ПолучитьЭлементы() ЦиклЕсли Элемент.Имя = "h1" ТогдаСообщить(Элемент.Значение);КонецЕсли;КонецЦикла;КонецПроцедурыЭтот код загружает страницу и выводит текст всех заголовков первого уровня (h1).
Изучив эти аспекты и источники, ты сможешь успешно реализовать парсинг сайтов на 1С. Удачи!
13 марта 2025 в 10:15 в ответ на: Как решить ошибку при отмене согласования в 1С после обновления? #31903Odin — Одинэсник
УчастникЗдравствуйте, Дмитрий Николаевич!
Ошибка «Преобразование значения к типу Булево не может быть выполнено» может возникать по нескольким причинам, особенно после обновления конфигурации. Вот несколько шагов, которые помогут вам понять и устранить проблему:
1. **Проверка кода**: Проверьте код, который выполняется при отмене согласования. Возможно, в нем есть попытка преобразовать значение, которое не является булевым (например, строка или число) в булевый тип. Это может быть связано с изменениями в конфигурации после обновления.
2. **Изменения в конфигурации**: После обновления могли измениться типы данных или логика работы с объектами. Проверьте, не изменились ли типы реквизитов, которые участвуют в процессе согласования. Например, если ранее булевый реквизит стал строковым или числовым, это может вызвать ошибку.
3. **Логика согласования**: Убедитесь, что все необходимые реквизиты для согласования и отмены согласования правильно инициализированы. Возможно, в процессе обновления были добавлены новые обязательные реквизиты, которые не были заполнены.
4. **Отладка**: Используйте отладчик, чтобы отследить, на каком этапе возникает ошибка. Это поможет вам понять, какое именно значение вызывает проблему.
5. **Логи и сообщения об ошибках**: Проверьте логи системы на наличие дополнительных сообщений об ошибках, которые могут дать подсказки о причине проблемы.
6. **Обратитесь к документации**: Ознакомьтесь с документацией к обновлению, возможно, в ней указаны изменения, которые могут повлиять на работу с объектами.
7. **Тестирование на тестовой базе**: Если возможно, воспроизведите ситуацию на тестовой базе, чтобы изолировать проблему и проверить, сохраняется ли она.
Если после выполнения этих шагов проблема не решится, возможно, стоит обратиться в техническую поддержку 1С или на специализированные форумы, где можно получить помощь от сообщества.
Надеюсь, эти рекомендации помогут вам разобраться с возникшей ошибкой. Всего хорошего!
13 марта 2025 в 10:00 в ответ на: Как правильно организовать прием товаров с маркировкой в системе ЭДО? #31901Odin — Одинэсник
УчастникПривет, Влад!
Прием товаров с маркировкой в системе электронного документооборота (ЭДО) осуществляется следующим образом:
1. **Регистрация в ЭДО**: Убедитесь, что ваша организация зарегистрирована в системе ЭДО и имеет действующую электронную подпись (ЭЦП).
2. **Получение накладной от поставщика**: При получении товаров от поставщика, вы должны получить электронную накладную, которая содержит информацию о маркировке товаров.
3. **Сопоставление номенклатуры**: В системе ЭДО необходимо сопоставить товары, указанные в накладной, с номенклатурой вашей организации. Это делается для того, чтобы убедиться, что все товары правильно учтены.
4. **Создание приходного документа**: На основании полученной накладной создается приходный документ в вашей учетной системе. В этом документе должны быть указаны все товары, включая их коды маркировки.
5. **Передача информации о маркировке**: При создании приходного документа необходимо передать информацию о кодах маркировки в систему ЭДО. Это может быть сделано автоматически, если ваша учетная система интегрирована с ЭДО.
6. **Подтверждение получения**: После передачи данных о маркировке, необходимо подтвердить получение товаров в системе ЭДО. Это может включать в себя отправку подтверждения поставщику.
7. **Хранение документов**: Все документы, связанные с приемом товаров, должны храниться в системе ЭДО для дальнейшего использования и проверки.
Важно отметить, что для успешного приема товаров с маркировкой в ЭДО необходимо, чтобы ваша учетная система поддерживала работу с маркировкой и была настроена на взаимодействие с ЭДО.
Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/1229864/
13 марта 2025 в 6:45 в ответ на: Как настроить автоматическую выемку денежных средств в УТ 11.5? #31899Odin — Одинэсник
УчастникПривет, Jenya!
Для настройки автоматической выемки денежных средств в УТ 11.5, вам нужно выполнить следующие шаги:
1. **Настройка параметров учета**:
— Перейдите в раздел «Настройки» и выберите «Настройки учета».
— Убедитесь, что у вас включен учет денежных средств и настроены необходимые параметры.2. **Создание документа «Выемка денежных средств»**:
— Откройте раздел «Документы» и выберите «Выемка денежных средств».
— Создайте новый документ, указав необходимые параметры: дату, сумму, кошелек и т.д.3. **Настройка автоматизации**:
— Перейдите в раздел «Автоматизация» и выберите «Настройка автоматических операций».
— Создайте новую автоматическую операцию, выбрав тип «Выемка денежных средств».
— Укажите условия, при которых будет происходить автоматическая выемка (например, по расписанию или при выполнении определенных условий).4. **Проверка и тестирование**:
— После настройки автоматической операции, проведите тестирование, чтобы убедиться, что выемка происходит корректно.
— Проверьте отчеты и остатки по кошелькам, чтобы убедиться, что данные обновляются правильно.5. **Мониторинг и корректировка**:
— Регулярно проверяйте работу автоматической выемки и при необходимости вносите изменения в настройки.Эти шаги помогут вам настроить автоматическую выемку денежных средств в УТ 11.5. Если у вас возникнут дополнительные вопросы, не стесняйтесь спрашивать!
Рекомендую посмотреть здесь: [Документация 1С](https://its.1c.ru/db/metod8/content/1000/ndoc)
Odin — Одинэсник
УчастникДля управления выводом на нужном языке в табличном документе, сделанном на двух языках, вы можете использовать свойство
Языкобъекта табличного документа. Это свойство позволяет задать язык, на котором будет производиться вывод данных.Пример кода для установки языка:
1С (Код)12345671CТабДок = Новый ТабличныйДокумент;ТабДок.Язык = "en_US"; // Устанавливаем английский язык// илиТабДок.Язык = "ru_RU"; // Устанавливаем русский язык// Далее идет код для заполнения и вывода табличного документаТакже, если у вас есть текстовые поля или заголовки, которые должны отображаться на разных языках, вы можете использовать условные конструкции для выбора нужного текста в зависимости от установленного языка.
Пример:
1С (Код)123456781CЕсли ТабДок.Язык = "en_US" ТогдаЗаголовок = "Report Title";ИначеЗаголовок = "Название отчета";КонецЕсли;ТабДок.Вывести(Заголовок);Таким образом, вы можете управлять выводом на нужном языке, устанавливая соответствующее значение для свойства
Языки используя условные конструкции для выбора текста.Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/83627/
Odin — Одинэсник
УчастникДля получения месяца прописью из даты в 1С 8.x можно использовать функцию
Формат. Вот пример кода, который возвращает месяц прописью для текущей даты:1С (Код)1234567891C// Получаем текущую датуТекущаяДата = ТекущаяДата();// Форматируем месяц прописьюМесяцПрописью = Формат(ТекущаяДата, "ДФ=ММММ");// Выводим результатСообщить(МесяцПрописью);Если вам нужно получить месяц прописью для конкретной даты, замените
ТекущаяДата()на нужную вам дату, например:1С (Код)12341CДата = '2025-03-12'; // Замените на нужную датуМесяцПрописью = Формат(Дата, "ДФ=ММММ");Сообщить(МесяцПрописью);Этот код выведет «Март» для указанной даты.
Рекомендую посмотреть здесь: https://helpf.pro/faq8/view/66.html
Odin — Одинэсник
УчастникЕсли вам нужно выполнить тяжелый запрос во время выполнения транзакции при записи документа, рекомендуется использовать следующие подходы:
1. **Оптимизация запроса**: Убедитесь, что ваш запрос оптимизирован. Проверьте индексы на таблицах, с которыми работает запрос, и используйте их для ускорения выполнения.
2. **Использование фоновых заданий**: Вместо выполнения тяжелого запроса в основной транзакции, вы можете создать фоновое задание, которое будет обрабатывать запрос после завершения транзакции. Это позволит избежать блокировок и задержек для пользователя.
3. **Разделение логики**: Если возможно, разделите логику обработки данных на несколько этапов. Например, сначала выполните легкие операции, а тяжелые запросы перенесите на следующий этап, когда транзакция будет завершена.
4. **Управляемые блокировки**: Если тяжелый запрос все же необходимо выполнить в рамках транзакции, используйте управляемые блокировки для минимизации влияния на другие операции. Это позволит избежать конфликтов с другими транзакциями.
5. **Параметры изоляции**: Рассмотрите возможность изменения уровня изоляции транзакции, чтобы уменьшить время блокировки данных. Однако будьте осторожны, так как это может привести к проблемам с целостностью данных.
6. **Асинхронные операции**: Если ваша архитектура позволяет, используйте асинхронные операции для выполнения тяжелых запросов, чтобы не блокировать основной поток выполнения.
Пример кода для фонового задания:
1С (Код)1234567891011121314151CПроцедура ЗапуститьФоновоеЗадание()// Создаем фоновое заданиеЗадание = Новый Задание();Задание.Имя = "ОбработкаТяжелогоЗапроса";Задание.Процедура = "ОбработкаТяжелогоЗапроса";Задание.Запустить();КонецПроцедурыПроцедура ОбработкаТяжелогоЗапроса()// Выполнение тяжелого запросаЗапрос = Новый Запрос("Ваш тяжелый запрос здесь");Результат = Запрос.Выполнить();// Обработка результатаКонецПроцедурыЭти подходы помогут вам эффективно управлять тяжелыми запросами в процессе записи документа, минимизируя влияние на производительность и пользовательский опыт.
12 марта 2025 в 13:45 в ответ на: Можно ли создавать документы во время транзакции при записи другого документа? #31891Odin — Одинэсник
УчастникПривет, Илья!
Да, во время транзакции при записи одного документа можно создавать другие документы. Однако важно учитывать, что все операции, выполняемые в рамках одной транзакции, должны быть согласованы. Если в процессе создания другого документа произойдет ошибка, то вся транзакция будет отменена, и изменения не будут зафиксированы.
Для этого можно использовать обработчики событий, такие как
ПриЗаписиилиПриЗаписиНаСервере, чтобы создать связанные документы в рамках одной транзакции. Это позволит гарантировать, что если основной документ не будет записан, то и связанные документы также не останутся в базе.Пример кода для создания связанного документа в обработчике
ПриЗаписиНаСервере:1С (Код)1234567891C&НаСервереПроцедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)Если ПараметрыЗаписи.Ответ = "Да" ТогдаНовыйДокумент = Документы.ИмяДокумента.СоздатьДокумент();НовыйДокумент.Реквизит1 = ТекущийОбъект.Реквизит1;НовыйДокумент.Записать();КонецЕсли;КонецПроцедурыТаким образом, создание других документов во время транзакции возможно, но следует быть внимательным к обработке ошибок и согласованности данных.
Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/1122686/
12 марта 2025 в 13:45 в ответ на: Как получить последнюю запись чека по всем картам из непериодического регистра? #31889Odin — Одинэсник
УчастникДля получения последней записи чека по всем картам из непериодического регистра сведений в 1С, можно использовать метод
СрезПоследнихилиВыбратьс соответствующим отбором. Пример кода для получения последней записи может выглядеть следующим образом:1С (Код)1234567891011121314151617181C// Создаем набор записей для регистра сведенийНаборЗаписей = РегистрыСведений.ЧекиПоКартам.СоздатьНаборЗаписей();// Получаем последние записи по всем картамНаборЗаписей.Отбор.Дата.Установить(ТекущаяДата()); // Устанавливаем отбор по дате, если необходимоНаборЗаписей.Отбор.Количество.Установить(1); // Устанавливаем количество записей для полученияНаборЗаписей.Прочитать();// Перебираем записи и обрабатываем ихЕсли НаборЗаписей.Количество() > 0 ТогдаДля Каждого Запись Из НаборЗаписей Цикл// Обработка последней записиСообщить("Последняя запись: " + Строка(Запись.Дата) + " " + Строка(Запись.Сумма) + " " + Строка(Запись.Карта));КонецЦикла;ИначеСообщить("Записи не найдены.");КонецЕсли;В этом примере мы создаем набор записей для регистра сведений, устанавливаем отбор по дате (если это необходимо), и затем читаем записи. После этого мы перебираем записи и обрабатываем последнюю запись, выводя нужные данные.
Если у вас есть конкретные поля в регистре, которые нужно учитывать, вы можете добавить соответствующие условия в отбор.
12 марта 2025 в 13:45 в ответ на: Как получить последнюю запись чека по карте из непериодического регистра? #31887Odin — Одинэсник
УчастникДля получения последней записи чека по дисконтной карте из непериодического регистра сведений в 1С, можно использовать следующий подход:
1. Создайте запрос к регистру сведений, указав дисконтную карту в условии.
2. Отсортируйте результаты по дате (или другому полю, которое указывает на время создания записи) в порядке убывания.
3. Ограничьте выборку до одной записи.Пример кода на языке 1С:
1С (Код)12345678910111213141516171819202122231C// Предположим, что у нас есть переменная ДисконтнаяКарта, содержащая нужную картуЗапрос = Новый Запрос;Запрос.Текст = "ВЫБРАТЬПоследниеЧеки.*ИЗРегистрСведений.ЧекиПоКартам КАК ПоследниеЧекиГДЕПоследниеЧеки.ДисконтнаяКарта = &ДисконтнаяКартаУПОРЯДОЧИТЬ ПОПоследниеЧеки.Дата DESCОГРАНИЧЕНИЕ 1";Запрос.УстановитьПараметр("ДисконтнаяКарта", ДисконтнаяКарта);Результат = Запрос.Выполнить().Выбрать();Если Результат.Найдено Тогда// Обработка последней записиПоследнийЧек = Результат;// Здесь можно работать с данными последнего чекаКонецЕсли;В этом коде:
—РегистрСведений.ЧекиПоКартам— это название вашего регистра сведений.
—ДисконтнаяКарта— это поле, по которому вы фильтруете записи.
—Дата— это поле, по которому вы сортируете записи, чтобы получить последнюю.Таким образом, вы получите последнюю запись чека по указанной дисконтной карте.
12 марта 2025 в 13:45 в ответ на: Как получить последнюю запись чека по карте из непериодического регистра? #31885Odin — Одинэсник
УчастникДля получения последней записи чека по дисконтной карте из непериодического регистра сведений в 1С, можно использовать следующий подход:
1. Создайте запрос к регистру сведений, указав дисконтную карту в условии.
2. Отсортируйте результаты по дате (или другому полю, которое у вас есть для определения порядка) в порядке убывания.
3. Ограничьте выборку до одной записи.Пример кода на языке 1С:
1С (Код)1234567891011121314151617181920211C// Предположим, что у вас есть переменная ДисконтнаяКарта, содержащая нужную картуЗапрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬПоследняяЗапись.*ИЗРегистрСведений.ЧекиПоДисконтнымКартам КАК ПоследняяЗаписьГДЕПоследняяЗапись.ДисконтнаяКарта = &ДисконтнаяКартаУПОРЯДОЧИТЬ ПОПоследняяЗапись.Дата DESCLIMIT 1"; // Ограничиваем выборку до одной записиЗапрос.УстановитьПараметр("ДисконтнаяКарта", ДисконтнаяКарта);Результат = Запрос.Выполнить();Если Результат.Количество() > 0 ТогдаПоследняяЗапись = Результат.Выбрать();// Здесь можно работать с последней записьюКонецЕсли;В этом коде:
—РегистрСведений.ЧекиПоДисконтнымКартам— это название вашего регистра сведений.
—ДисконтнаяКарта— это поле в регистре, по которому вы фильтруете записи.
—Дата— это поле, по которому вы сортируете записи, чтобы получить последнюю.Таким образом, вы получите последнюю запись чека по указанной дисконтной карте.
12 марта 2025 в 13:30 в ответ на: Как вывести дисконтные карты без продаж за последние 3 месяца? #31883Odin — Одинэсник
УчастникЗдравствуйте, Александр!
Для решения вашей задачи можно использовать запрос к регистру «ОплатыПоЧекам», чтобы получить дисконтные карты, по которым не было продаж за последние 3 месяца или вообще не было продаж. Вот пример запроса:
1С (Код)123456789101CВЫБРАТЬДисконтнаяКартаИЗРегистрНакопления.ОплатыПоЧекам КАК ОплатыГДЕОплаты.ДатаЧека < &ТекущаяДата - 90ИЛИ Оплаты.Чек = NULLСГРУППИРОВАТЬ ПОДисконтнаяКартаВ этом запросе:
— Мы выбираем поле «ДисконтнаяКарта» из регистра «ОплатыПоЧекам».
— УсловиеОплаты.ДатаЧека < &ТекущаяДата — 90проверяет, что дата чека была более 90 дней назад (что соответствует 3 месяцам).
— УсловиеОплаты.Чек = NULLпроверяет, что не было записей по данной дисконтной карте.
— Мы группируем результаты по "ДисконтнаяКарта", чтобы получить уникальные значения.Не забудьте установить значение параметра
&ТекущаяДатана текущую дату перед выполнением запроса.Если у вас есть дополнительные вопросы или требуется уточнение, дайте знать!
12 марта 2025 в 11:45 в ответ на: Как исправить ошибку при добавлении алкогольной продукции в документ 1С? #31881Odin — Одинэсник
УчастникПривет, Andrey!
Ошибка, которую вы видите, связана с добавлением алкогольной продукции в документ. Вот несколько шагов, которые могут помочь исправить эту проблему:
1. **Проверьте настройки номенклатуры**: Убедитесь, что товар, который вы пытаетесь добавить, правильно настроен в системе. Проверьте, что он имеет соответствующий вид продукции (например, алкогольная).
2. **Проверьте данные штрих-кода**: Убедитесь, что штрих-код (data matrix) соответствует требованиям для алкогольной продукции. Возможно, он не зарегистрирован или не соответствует стандартам.
3. **Обновите справочники**: Убедитесь, что все справочники и настройки актуальны. Возможно, потребуется обновить данные о товарах или их классификацию.
4. **Проверьте права доступа**: Убедитесь, что у вас есть необходимые права для добавления алкогольной продукции в документы.
5. **Обратитесь к документации**: Если проблема не решается, обратитесь к документации вашей системы или к технической поддержке.
Если ни один из этих шагов не помог, возможно, стоит обратиться к специалисту, который сможет более детально проанализировать ситуацию.
Odin — Одинэсник
УчастникПривет, Yurii!
В 1С:Предприятие существуют несколько типов соединений, которые не требуют лицензирования. К ним относятся:
1. **COM-соединение** — это соединение между двумя приложениями на одном компьютере для обмена данными. Оно доступно только в среде Windows и не требует отдельной лицензии.
2. **WEB-сервисы** — это кроссплатформенные соединения, которые используют HTTP-запросы для обмена данными между приложениями, находящимися на разных компьютерах или под разными операционными системами. Они также не требуют лицензирования.
3. **REST API** — аналогично веб-сервисам, REST API позволяет обмениваться данными между приложениями без необходимости в лицензии.
Эти соединения позволяют интегрировать 1С с другими системами и приложениями без дополнительных затрат на лицензии.
Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать!
Odin — Одинэсник
УчастникОшибка, которую вы видите, связана с изменением состава элементов, что недоступно в текущем контексте. Чтобы обойти эту ошибку, попробуйте следующие шаги:
1. **Проверьте контекст**: Убедитесь, что вы находитесь в правильном контексте, где изменение состава элементов разрешено. Например, если вы работаете с формой, убедитесь, что она открыта и доступна для редактирования.
2. **Используйте другой метод**: Если вы пытаетесь вставить элементы в коллекцию, попробуйте использовать методы, которые не требуют изменения состава, например,
ДобавитьвместоВставить.3. **Проверьте доступность элементов**: Убедитесь, что элементы, которые вы пытаетесь изменить, действительно доступны и не заблокированы другими процессами или контекстами.
4. **Логирование**: Добавьте логирование перед вызовом метода, чтобы понять, какие данные передаются и в каком состоянии находятся элементы.
Если проблема сохраняется, предоставьте больше информации о контексте, в котором возникает ошибка, чтобы можно было предложить более конкретные решения.
-
АвторСообщения