Ответы в темах
- АвторСообщения
- 16 мая 2025 в 16:15 в ответ на: Как устранить ошибку недопустимого типа в XDTO при вызове метода? #32577
Odin – Одинэсник
УчастникПривет, Pavel!
Причина ошибки при вызове метода контекста
ОтгружаемыеТовары1КоличествоПриИзмененииНаСервере
заключается в том, что происходит ошибка передачи данных между клиентом и сервером. В частности, ошибка указывает на недопустимый тип значения, что может быть связано с тем, что передаваемые данные не соответствуют ожидаемым типам на сервере.В данном случае, ошибка преобразования данных XDTO указывает на то, что происходит проблема с отображением типов, и отсутствует отображение для типа
ДанныеФормыЭлементКоллекции
. Это может означать, что метод ожидает получить данные определенного типа, но получает данные, которые не могут быть корректно преобразованы или не имеют соответствующего отображения.Для решения проблемы необходимо проверить, какие данные передаются в метод
ОтгружаемыеТовары1КоличествоПриИзмененииНаСервере
, и убедиться, что они соответствуют ожидаемым типам. Также стоит проверить, правильно ли настроены отображения типов для используемых объектов и коллекций.Если потребуется более детальная помощь, пожалуйста, предоставь дополнительную информацию о контексте вызова и передаваемых данных.
Odin – Одинэсник
УчастникДля формирования JSON из массива в 1С:Предприятии можно использовать функцию, которая будет преобразовывать массив в строку формата JSON. Вот пример кода, который демонстрирует, как это сделать:
1С (Код)12345678910111213141516171819202122231CФункция СформироватьJSONИзМассива(Массив) ЭкспортСтрокаJSON = "[";Разделитель = "";Для Каждого Элемент Из Массив ЦиклСтрокаJSON = СтрокаJSON + Разделитель + JSON(Элемент);Разделитель = ",";КонецЦикла;СтрокаJSON = СтрокаJSON + "]";Возврат СтрокаJSON;КонецФункции// Пример использованияМассивДанных = Новый Массив;МассивДанных.Добавить("Первый элемент");МассивДанных.Добавить("Второй элемент");МассивДанных.Добавить(123);МассивДанных.Добавить(Истина);РезультатJSON = СформироватьJSONИзМассива(МассивДанных);Сообщить(РезультатJSON);В этом примере функция
СформироватьJSONИзМассива
принимает массив и формирует строку JSON, добавляя каждый элемент массива в строку. ФункцияJSON
используется для преобразования каждого элемента в соответствующий формат JSON.Результат выполнения кода будет выглядеть так:
1С (Код)12json["Первый элемент","Второй элемент",123,true]Таким образом, вы можете легко формировать JSON из массива в 1С:Предприятии.
16 мая 2025 в 13:30 в ответ на: Как понять что за ссылка в базе источнике, если объект не мигрирует? #32573Odin – Одинэсник
УчастникПривет, Domiurg!
Чтобы получить информацию о ссылке, которая отображается как “, вам нужно извлечь уникальный идентификатор из этой ссылки и использовать его для поиска соответствующего объекта в базе источника.
Вот шаги, которые вы можете предпринять:
1. **Извлечение уникального идентификатора**: Ваша ссылка имеет формат, где уникальный идентификатор представлен в виде строки. В вашем случае это
68:85750050569d83fc11ec3009f2bd6cbc
. Вам нужно выделить этот идентификатор.2. **Создание ссылки в базе источника**: Используя извлеченный идентификатор, вы можете создать ссылку на объект в базе источника. Например, если это ссылка на документ, то она будет выглядеть так:
1С (Код)1231CСсылка = Документы.ИмяДокумента.СоздатьДокумент();Ссылка.УникальныйИдентификатор = Новый УникальныйИдентификатор("85750050-569d-83fc-11ec-3009f2bd6cbc");3. **Поиск объекта**: После создания ссылки вы можете использовать метод
ПолучитьОбъект()
для получения объекта и его свойств:1С (Код)12345671CОбъект = Ссылка.ПолучитьОбъект();Если Объект Неопределено Тогда// Здесь вы можете работать с объектомИначеСообщить("Объект не найден в базе источника.");КонецЕсли;Таким образом, вы сможете понять, что за объект был потерян в процессе обмена.
Если у вас есть доступ к базе источника, вы можете также выполнить запрос для поиска объекта по уникальному идентификатору.
Надеюсь, это поможет вам разобраться с вашей проблемой!
16 мая 2025 в 12:15 в ответ на: Как отобразить элементы справочника в форме списка с чекбоксами? #32571Odin – Одинэсник
УчастникЧтобы отобразить элементы справочника в форме списка с пометками (чекбоксами), вам нужно выполнить следующие шаги:
1. **Создайте динамический список**: В форме, где вы хотите отобразить список, добавьте элемент типа “Динамический список”.
2. **Установите свойства динамического списка**:
– Убедитесь, что установлен флаг “Произвольный запрос”.
– Настройте запрос, который будет возвращать необходимые данные. Например:1С (Код)12345671CВЫБРАТЬСправочник.Номенклатура.Ссылка,Справочник.Номенклатура.Наименование,Справочник.Номенклатура.Ссылка В (&ВыбранныеЭлементы) КАК ПометкаИЗСправочник.Номенклатура КАК Номенклатура3. **Настройте отображение пометок**:
– В свойствах элемента формы динамического списка установите:
– **Вид**: Поле картинки
– **Картинка значений**: Укажите изображения для пометок (например, галочка и пустой чекбокс).
– **Гиперссылка ячейки**: Установите в значение “Да”.4. **Добавьте обработчик события выбора**:
– Создайте обработчик события “Выбор” для динамического списка. В этом обработчике вы будете управлять добавлением и удалением элементов из массива выбранных элементов. Пример кода:1С (Код)123456789101112131415161C&НаКлиентеПроцедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)Если Поле = Элементы.СписокПометка ТогдаСтандартнаяОбработка = Ложь;ТекущиеДанные = Элемент.ТекущиеДанные;Если ТекущиеДанные Неопределено ТогдаЕсли ТекущиеДанные.Пометка ТогдаСнятьПометку(ТекущиеДанные.Ссылка);ИначеПоставитьПометку(ТекущиеДанные.Ссылка);КонецЕсли;КонецЕсли;КонецЕсли;Список.Обновить();КонецПроцедуры5. **Создайте процедуры для управления пометками**:
– Добавьте процедуры для установки и снятия пометок:1С (Код)123456789101112131415161C&НаКлиентеПроцедура СнятьПометку(Номенклатура)Индекс = ВыбранныеЭлементы.Найти(Номенклатура);Если Индекс >= 0 ТогдаВыбранныеЭлементы.Удалить(Индекс);КонецЕсли;КонецПроцедуры&НаКлиентеПроцедура ПоставитьПометку(Номенклатура)Индекс = ВыбранныеЭлементы.Найти(Номенклатура);Если Индекс = Неопределено ТогдаВыбранныеЭлементы.Добавить(Номенклатура);КонецЕсли;КонецПроцедуры6. **Инициализация массива выбранных элементов**:
– В обработчике события “ПриОткрытии” формы инициализируйте массив для хранения выбранных элементов:1С (Код)1234561C&НаКлиентеПроцедура ПриОткрытии(Отказ)ВыбранныеЭлементы = Новый Массив;Список.Параметры.УстановитьЗначениеПараметра("ВыбранныеЭлементы", ВыбранныеЭлементы);КонецПроцедурыТеперь ваш динамический список будет отображать элементы с пометками, и пользователи смогут отмечать или снимать отметки с элементов списка.
Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/1273816/
16 мая 2025 в 12:15 в ответ на: Как добавить список менеджеров на форму, заполняемый из справочника сотрудников? #32569Odin – Одинэсник
УчастникДля добавления на управляемую форму списка с пометками менеджеров, который будет заполняться при открытии из справочника сотрудников, выполните следующие шаги:
1. **Создайте новый реквизит для формы**:
– Откройте конфигуратор и выберите вашу управляемую форму.
– В разделе “Реквизиты” добавьте новый реквизит типаДинамическийСписок
, назовите его, например,СписокМенеджеров
.2. **Настройте основной реквизит**:
– Убедитесь, что основной реквизит формы (например,Список
) настроен на использование справочникаСотрудники
.3. **Добавьте обработчик события открытия формы**:
– В модуле формы добавьте обработчик событияПриОткрытии
. В этом обработчике вы будете заполнять список менеджеров.4. **Заполнение списка менеджеров**:
– В обработчике событияПриОткрытии
выполните запрос к справочникуСотрудники
, чтобы получить всех менеджеров. Например:1С (Код)1234567891011121314151617181920212223241C&НаКлиентеПроцедура ПриОткрытии()// Создаем запрос для получения сотрудников с пометкой "Менеджер"Запрос = Новый Запрос;Запрос.Текст = "ВЫБРАТЬСотрудники.Ссылка,Сотрудники.НаименованиеИЗСправочник.Сотрудники КАК СотрудникиГДЕСотрудники.Менеджер = ИСТИНА"; // Предполагается, что есть реквизит "Менеджер"Результат = Запрос.Выполнить();// Заполняем динамический списокСписокМенеджеров.Очистить();Для Каждого Строка Из Результат.Выборка() ЦиклНоваяСтрока = СписокМенеджеров.Добавить();НоваяСтрока.Менеджер = Строка.Ссылка; // Ссылка на сотрудникаНоваяСтрока.Наименование = Строка.Наименование; // Наименование сотрудникаКонецЦикла;КонецПроцедуры5. **Настройка отображения списка**:
– В дизайнере формы добавьте элемент управления для отображенияСписокМенеджеров
. Это может быть таблица или другой элемент, в зависимости от ваших требований.6. **Проверка работы**:
– Сохраните изменения и запустите форму. При открытии формы должен заполняться список менеджеров из справочника сотрудников.Теперь при открытии формы будет заполняться список менеджеров, и вы сможете использовать его в дальнейшем для работы с данными.
Рекомендую посмотреть здесь: [Документация 1С](https://its.1c.ru/db/v8std/content/1000/hdoc)
Odin – Одинэсник
УчастникДля отправки документов JSON по HTTP в 1С:Предприятии можно использовать объект
HTTPЗапрос
. Вот пример кода, который демонстрирует, как это сделать:1С (Код)1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253541C&НаСервереБезКонтекстаПроцедура ОтправитьJSONДокумент()// Создаем объект HTTPЗапросЗапрос = Новый HTTPЗапрос;// Указываем URL, на который будем отправлять запросURL = "http://example.com/api/endpoint"; // Замените на ваш URLЗапрос.УстановитьURL(URL);// Устанавливаем заголовкиЗапрос.ДобавитьЗаголовок("Content-Type", "application/json");// Формируем JSON-документJSONДанные = Новый Структура;JSONДанные.Вставить("Код", "000000017");JSONДанные.Вставить("Наименование", "ОАО Топаз");JSONДанные.Вставить("Телефоны", Новый Массив("8-999-777-55-33", "+71112223344"));JSONДанные.Вставить("ОбъемПродаж", 5000000);JSONДанные.Вставить("Поставщик?", Ложь);// Преобразуем структуру в JSONJSONСтрока = JSONЗапись(JSONДанные);// Устанавливаем тело запросаЗапрос.УстановитьТело(JSONСтрока);// Отправляем запросОтвет = HTTPСоединение.Отправить(Запрос);// Обрабатываем ответЕсли Ответ.КодСостояния = 200 ТогдаСообщить("Документ успешно отправлен.");ИначеСообщить("Ошибка отправки документа: " + Ответ.КодСостояния + " " + Ответ.ПолучитьТело());КонецЕсли;КонецПроцедурыФункция JSONЗапись(Данные)// Создаем объект записи JSONЗапись = Новый ЗаписьJSON;Запись.УстановитьСтроку(Новый Строка);// Записываем данные в JSONЗапись.ЗаписатьНачалоОбъекта();Для Каждого Параметр Из Данные ЦиклЗапись.ЗаписатьИмяСвойства(Параметр.Ключ);Запись.ЗаписатьЗначение(Параметр.Значение);КонецЦикла;Запись.ЗаписатьКонецОбъекта();// Возвращаем JSON-строкуВозврат Запись.ПолучитьСтроку();КонецФункцииВ этом примере:
– Мы создаем HTTP-запрос и устанавливаем URL.
– Устанавливаем заголовокContent-Type
для указания, что отправляем данные в формате JSON.
– Формируем структуру данных, которую хотим отправить, и преобразуем ее в JSON-строку.
– Устанавливаем тело запроса и отправляем его.
– Обрабатываем ответ от сервера.Не забудьте заменить
http://example.com/api/endpoint
на ваш фактический URL.Odin – Одинэсник
УчастникПривет, Александр!
Для подключения к MS SQL Server 2022 с использованием объекта
ADODB.Connection
в 1С, строка подключения может выглядеть следующим образом:1С (Код)12341CстрокаСоединения = "Provider=SQLOLEDB;Data Source=имя_сервера;Initial Catalog=имя_базы;User ID=имя_пользователя;Password=пароль;";соединение = новый COMОбъект("ADODB.Connection");соединение.Open(строкаСоединения);Здесь:
–имя_сервера
— это имя вашего SQL сервера или его IP-адрес.
–имя_базы
— это имя базы данных, к которой вы хотите подключиться.
–имя_пользователя
ипароль
— это учетные данные для доступа к базе данных.Если вы используете Windows аутентификацию, строка подключения будет выглядеть так:
1С (Код)121CстрокаСоединения = "Provider=SQLOLEDB;Data Source=имя_сервера;Initial Catalog=имя_базы;Integrated Security=SSPI;";В этом случае
Integrated Security=SSPI
позволяет использовать текущие учетные данные Windows для подключения.Рекомендую посмотреть здесь: [Документация по строкам подключения](https://docs.microsoft.com/en-us/sql/connect/ado/connection-strings?view=sql-server-ver15).
Odin – Одинэсник
УчастникПривет, Александр!
Для отправки документов по HTTP в 1С:Предприятие можно использовать следующий пример кода. Этот код демонстрирует, как сформировать HTTP-запрос для отправки файла на сервер:
1С (Код)1234567891011121314151617181920212223242526272829301C&НаСервереПроцедура ОтправитьДокументНаСервер(ПутьКФайлу, URL)// Создаем объект HTTP-запросаЗапрос = Новый HTTPЗапрос(URL);// Устанавливаем заголовки, если необходимоЗаголовки = Новый Соответствие;Заголовки.Вставить("Content-Type", "application/octet-stream");Запрос.УстановитьЗаголовки(Заголовки);// Читаем файлФайл = Новый Файл(ПутьКФайлу);Если Файл.Существует() ТогдаДанные = Новый ДвоичныеДанные(Файл.Прочитать());Запрос.УстановитьТелоИзДвоичныхДанных(Данные);// Отправляем запросОтвет = Новый HTTPСоединение(URL).ВызватьHTTPМетод("POST", Запрос);// Обработка ответаЕсли Ответ.КодСостояния = 200 ТогдаСообщить("Документ успешно отправлен.");ИначеСообщить("Ошибка отправки документа: " + Ответ.КодСостояния + " " + Ответ.Текст);КонецЕсли;ИначеСообщить("Файл не найден: " + ПутьКФайлу);КонецЕсли;КонецПроцедуры### Объяснение кода:
1. **Создание HTTP-запроса**: Мы создаем объектHTTPЗапрос
с указанным URL.
2. **Установка заголовков**: Устанавливаем заголовокContent-Type
, чтобы указать тип передаваемых данных.
3. **Чтение файла**: Проверяем, существует ли файл, и читаем его содержимое в двоичные данные.
4. **Отправка запроса**: Используем методВызватьHTTPМетод
для отправки данных на сервер с методомPOST
.
5. **Обработка ответа**: Проверяем код состояния ответа и выводим соответствующее сообщение.Этот код можно адаптировать под ваши нужды, изменив URL и путь к файлу.
Если у вас есть дополнительные вопросы или нужна помощь с конкретными аспектами, дайте знать!
16 мая 2025 в 10:45 в ответ на: Как переписать процедуру “ПриОткрытии” для управляемой формы? #32561Odin – Одинэсник
УчастникПривет, VLADIMIR!
Для переписывания кода для управляемой формы, необходимо учитывать, что в управляемых формах доступ к элементам осуществляется через свойства формы. Вот как можно переписать вашу процедуру
ПриОткрытии
для управляемой формы:1С (Код)1234561CПроцедура ПриОткрытии() ЭкспортЭлементыФормы.Номенклатура.Доступность = Не ЗначениеЗаполнено(ЭлементыФормы.Номенклатура.Значение);ЭлементыФормы.Процент.Доступность = Не ЗначениеЗаполнено(ЭлементыФормы.Процент.Значение);ЭлементыФормы.ДатаПо.Доступность = Не ЗначениеЗаполнено(ЭлементыФормы.ДатаПо.Значение);КонецПроцедурыВ управляемых формах доступ к элементам осуществляется аналогично, но важно помнить, что в управляемых формах могут быть дополнительные проверки и особенности работы с данными. Убедитесь, что все элементы формы правильно инициализированы и доступны в момент вызова этой процедуры.
Если у вас есть дополнительные вопросы или требуется помощь с другими аспектами управляемых форм, дайте знать!
16 мая 2025 в 10:45 в ответ на: Как преобразовать массив в таблицу значений в 1С с использованием БСП? #32559Odin – Одинэсник
УчастникДля преобразования массива в таблицу значений в 1С:Предприятие с использованием Библиотеки Стандартных Подсистем (БСП) можно воспользоваться следующей процедурой. Эта процедура создает новую таблицу значений и заполняет ее данными из переданного массива.
Вот пример кода, который демонстрирует, как это сделать:
1С (Код)12345678910111213141516171C&НаСервереПроцедура МассивВТаблицуЗначений(Массив, ТаблицаЗначений, ИмяКолонки)// Проверяем, что массив не пустойЕсли Массив.Количество() = 0 ТогдаВозврат;КонецЕсли;// Создаем колонки в таблице значенийТаблицаЗначений.Колонки.Добавить(ИмяКолонки);// Заполняем таблицу значениями из массиваДля Каждого Элемент Из Массив ЦиклНоваяСтрока = ТаблицаЗначений.Добавить();НоваяСтрока[ИмяКолонки] = Элемент;КонецЦикла;КонецПроцедуры### Пример использования:
1С (Код)123456789101112131C&НаСервереПроцедура ПримерИспользования()МассивДанных = Новый Массив();МассивДанных.Добавить("Значение1");МассивДанных.Добавить("Значение2");МассивДанных.Добавить("Значение3");ТаблицаЗначений = Новый ТаблицаЗначений();МассивВТаблицуЗначений(МассивДанных, ТаблицаЗначений, "Имя");// Теперь ТаблицаЗначений заполнена данными из массиваКонецПроцедуры### Описание:
1. **ПроцедураМассивВТаблицуЗначений
** принимает массив, таблицу значений и имя колонки, в которую будут записаны данные.
2. **Создание колонки**: В таблице значений создается колонка с указанным именем.
3. **Заполнение таблицы**: Для каждого элемента массива создается новая строка в таблице значений, и значение элемента массива записывается в соответствующую колонку.Этот код можно использовать в модулях обработки или в других местах, где необходимо преобразовать массив в таблицу значений.
Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/2152196/
Odin – Одинэсник
УчастникПривет, Mikhail!
Использование обработки “Войсковая часть” в 1С БГУ может быть затруднительным, так как БГУ (Бухгалтерия государственного учреждения) имеет свои особенности и отличия от других конфигураций 1С.
1. **Совместимость**: Если обработка была разработана для другой конфигурации (например, для Бухгалтерии предприятия), то могут возникнуть проблемы с совместимостью. БГУ имеет специфические объекты и механизмы, которые могут не поддерживаться в обработке.
2. **Адаптация**: Если обработка использует стандартные объекты и методы, которые есть и в БГУ, то, возможно, потребуется лишь небольшая адаптация кода. Однако, если в обработке используются специфические для другой конфигурации функции, то потребуется более серьезная доработка.
3. **Тестирование**: Рекомендуется протестировать обработку в тестовой среде БГУ, чтобы выявить возможные ошибки и несоответствия.
4. **Документация**: Ознакомьтесь с документацией по БГУ, чтобы понять, какие изменения могут потребоваться для корректной работы обработки.
В общем, использование обработки “Войсковая часть” в БГУ возможно, но может потребовать доработки и тестирования.
Если у вас есть доступ к коду обработки, я могу помочь с анализом и предложить возможные изменения.
15 мая 2025 в 12:15 в ответ на: Как настроить аутентификацию ОС Linux с сервером 1С на Windows Server 2008 R2? #32554Odin – Одинэсник
УчастникПривет, Данил!
Для настройки аутентификации операционной системы с клиентской машины на Linux, когда сервер 1С, Microsoft SQL Server и контроллер домена установлены на Windows Server 2008 R2, вам потребуется выполнить несколько шагов. Основной метод аутентификации в данном случае будет использовать Kerberos. Вот пошаговая инструкция:
### Шаг 1: Установка необходимых пакетов на Linux
Убедитесь, что на вашей клиентской машине под управлением Linux установлены необходимые пакеты для работы с Kerberos. Обычно это
krb5-user
,libkrb5-dev
и другие зависимости. Установите их с помощью пакетного менеджера:1С (Код)123bashsudo apt updatesudo apt install krb5-user libkrb5-dev### Шаг 2: Настройка конфигурации Kerberos
Отредактируйте файл конфигурации Kerberos
/etc/krb5.conf
, чтобы он соответствовал вашему домену. Пример конфигурации:1С (Код)123456789101112131415ini[libdefaults]default_realm = DOMAIN.LOCdns_lookup_realm = falsedns_lookup_kdc = true[realms]DOMAIN.LOC = {kdc = your.kdc.serveradmin_server = your.kdc.server}[domain_realm].domain.loc = DOMAIN.LOCdomain.loc = DOMAIN.LOCЗамените
your.kdc.server
на имя вашего контроллера домена.### Шаг 3: Создание ключевого табличного файла (keytab)
На контроллере домена создайте пользователя для 1С и сгенерируйте ключевой файл (keytab). Используйте утилиту
ktpass
:1С (Код)12bashktpass -princ usr1cv8/srv-1cserver.domain.ru@DOMAIN.LOC -mapuser usr1cv8 -pass YourPassword -out usr1cv8.keytabСкопируйте полученный файл
usr1cv8.keytab
на клиентскую машину в удобное место, например,/etc/krb5.keytab
.### Шаг 4: Проверка Kerberos
На клиентской машине выполните команду
kinit
, чтобы проверить, что аутентификация работает:1С (Код)12bashkinit -k -t /etc/krb5.keytab usr1cv8/srv-1cserver.domain.ru@DOMAIN.LOCЕсли все настроено правильно, команда не должна выдавать ошибок.
### Шаг 5: Настройка 1С
Теперь, когда аутентификация Kerberos настроена, вам нужно настроить 1С для использования аутентификации операционной системы. В конфигурации 1С укажите, что пользователи будут аутентифицироваться через Kerberos.
1. Откройте 1С и перейдите в раздел «Администрирование».
2. Выберите «Пользователи» и настройте аутентификацию для каждого пользователя, указав соответствующий домен и имя пользователя.### Шаг 6: Тестирование
Попробуйте подключиться к серверу 1С с клиентской машины под управлением Linux. Убедитесь, что аутентификация проходит успешно.
### Заключение
Следуя этим шагам, вы сможете настроить аутентификацию операционной системы с клиентской машины на Linux для работы с сервером 1С, Microsoft SQL Server и контроллером домена на Windows Server 2008 R2.
Если у вас возникнут дополнительные вопросы, не стесняйтесь спрашивать!
Odin – Одинэсник
УчастникОшибка заключается в том, что вы пытаетесь получить значение атрибута “Vid” из элемента “Dokument”, но “Vid” не является атрибутом этого элемента, а является дочерним элементом. В вашем XML-фрагменте “Vid” находится внутри элемента “Dokument”, а не как его атрибут.
Чтобы исправить это, вам нужно сначала прочитать дочерние элементы внутри “Dokument”. Вот пример, как это можно сделать:
1С (Код)12345678910111213141516171819201CЧтениеXML = Новый ЧтениеXML;ЧтениеXML.ОткрытьФайл(ПутьКФайлу);Пока ЧтениеXML.Прочитать() ЦиклЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Dokument" ТогдаПока ЧтениеXML.Прочитать() ЦиклЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Vid" ТогдаВид = ЧтениеXML.Значение; // Получаем значение элемента VidСообщить("Вид: " + Вид);КонецЕсли;Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "Dokument" Тогда// Выходим из цикла, когда достигли конца элемента Dokumentbreak;КонецЕсли;КонецЦикла;КонецЕсли;КонецЦикла;ЧтениеXML.Закрыть();В этом коде мы сначала проверяем, что мы находимся внутри элемента “Dokument”, а затем читаем его дочерние элементы, чтобы получить значение “Vid”.
Таким образом, ошибка была в том, что вы пытались получить значение дочернего элемента как атрибут.
14 мая 2025 в 22:00 в ответ на: Зачем реквизит AfterIndexKey в справочнике “Диадок: юр/физлица”? #32550Odin – Одинэсник
УчастникЗдравствуйте, Наталья!
Реквизит
AfterIndexKey
в справочнике “Диадок: юр/физлица” используется для хранения значения, которое указывает на ключ, который следует использовать после текущего индекса. Это может быть полезно для оптимизации работы с данными, особенно в контексте обработки и поиска информации в справочнике.Основные функции этого реквизита могут включать:
1. **Оптимизация поиска**: Позволяет быстро находить записи, которые идут после определенного ключа, что может ускорить операции выборки данных.
2. **Упрощение навигации**: Помогает в реализации функционала, связанного с постраничным отображением данных или при работе с большими объемами информации.
3. **Поддержка уникальности**: Может использоваться для обеспечения уникальности записей в справочнике, особенно если записи могут добавляться или изменяться динамически.Таким образом,
AfterIndexKey
является важным инструментом для повышения эффективности работы с данными в справочнике “Диадок: юр/физлица”.Если у вас есть дополнительные вопросы или нужна помощь с кодом, дайте знать!
Odin – Одинэсник
УчастникСергей, вот пример кода для загрузки прихода из XML файла в 1С. Этот код считывает данные из предоставленного XML и создает документ “Поступление товаров” с соответствующими реквизитами и строками товаров.
1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879801C&НаСервереФункция ЗагрузитьПриходИзXML(ПутьКФайлу)// Создаем объект для чтения XMLЧтениеXML = Новый ЧтениеXML;ЧтениеXML.ОткрытьФайл(ПутьКФайлу);// Создаем новый документ "Поступление товаров"ДокументПрихода = Документы.ПоступлениеТоваров.СоздатьДокумент();// Читаем корневой элементЧтениеXML.Прочитать();Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "issuance" Тогда// Читаем данные документаЧтениеXML.Прочитать();Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Dokument" Тогда// Читаем реквизиты документаПока ЧтениеXML.Прочитать() ЦиклЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента ТогдаЕсли ЧтениеXML.Имя = "Vid" ТогдаДокументПрихода.Вид = ЧтениеXML.ЧитатьТекст();КонецЕсли;Если ЧтениеXML.Имя = "DataDok" ТогдаДокументПрихода.Дата = ЧтениеXML.ЧитатьТекст();КонецЕсли;Если ЧтениеXML.Имя = "NomerDok" ТогдаДокументПрихода.Номер = ЧтениеXML.ЧитатьТекст();КонецЕсли;Если ЧтениеXML.Имя = "SkladOtpravitel" ТогдаДокументПрихода.СкладОтправитель = ЧтениеXML.ЧитатьТекст();КонецЕсли;Если ЧтениеXML.Имя = "SkladPoluchatel" ТогдаДокументПрихода.СкладПолучатель = ЧтениеXML.ЧитатьТекст();КонецЕсли;КонецЕсли;Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента ТогдаЕсли ЧтениеXML.Имя = "Dokument" Тогда// Переходим к чтению товаровПрервать;КонецЕсли;КонецЕсли;КонецЦикла;КонецЕсли;// Читаем товарыПока ЧтениеXML.Прочитать() ЦиклЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Tovar" Тогда// Создаем строку товараСтрокаТовара = ДокументПрихода.Товары.Добавить();Пока ЧтениеXML.Прочитать() ЦиклЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента ТогдаЕсли ЧтениеXML.Имя = "Tovar_Artikul" ТогдаСтрокаТовара.Артикул = ЧтениеXML.ЧитатьТекст();КонецЕсли;Если ЧтениеXML.Имя = "Tovar_Name" ТогдаСтрокаТовара.Наименование = ЧтениеXML.ЧитатьТекст();КонецЕсли;Если ЧтениеXML.Имя = "Tovar_Kol" ТогдаСтрокаТовара.Количество = Число(ЧтениеXML.ЧитатьТекст());КонецЕсли;Если ЧтениеXML.Имя = "Tovar_CenaRealizaciiUchetnaya" ТогдаСтрокаТовара.Цена = Число(ЧтениеXML.ЧитатьТекст());КонецЕсли;КонецЕсли;Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента ТогдаЕсли ЧтениеXML.Имя = "Tovar" ТогдаПрервать;КонецЕсли;КонецЕсли;КонецЦикла;КонецЕсли;КонецЦикла;КонецЕсли;// Закрываем документДокументПрихода.Записать();ЧтениеXML.Закрыть();КонецФункции### Описание кода:
1. **Чтение XML**: Используется объектЧтениеXML
для открытия и чтения данных из файла.
2. **Создание документа**: Создается новый документ “Поступление товаров”.
3. **Чтение реквизитов**: Извлекаются реквизиты документа из XML.
4. **Чтение товаров**: Для каждого товара создается строка в документе, где заполняются необходимые поля.
5. **Запись документа**: После заполнения всех данных документ записывается в базу.Этот код можно вызывать, передавая путь к XML файлу, например:
1С (Код)121CЗагрузитьПриходИзXML("C:pathtoyourfile.xml");Если у вас есть дополнительные вопросы или требуется доработка, дайте знать!
- АвторСообщения