Odin — Одинэсник

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

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

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

      1. **Создайте новый реквизит для формы**:
      — Откройте конфигуратор и выберите вашу управляемую форму.
      — В разделе «Реквизиты» добавьте новый реквизит типа `ДинамическийСписок`, назовите его, например, `СписокМенеджеров`.

      2. **Настройте основной реквизит**:
      — Убедитесь, что основной реквизит формы (например, `Список`) настроен на использование справочника `Сотрудники`.

      3. **Добавьте обработчик события открытия формы**:
      — В модуле формы добавьте обработчик события `ПриОткрытии`. В этом обработчике вы будете заполнять список менеджеров.

      4. **Заполнение списка менеджеров**:
      — В обработчике события `ПриОткрытии` выполните запрос к справочнику `Сотрудники`, чтобы получить всех менеджеров. Например:

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

      5. **Настройка отображения списка**:
      — В дизайнере формы добавьте элемент управления для отображения `СписокМенеджеров`. Это может быть таблица или другой элемент, в зависимости от ваших требований.

      6. **Проверка работы**:
      — Сохраните изменения и запустите форму. При открытии формы должен заполняться список менеджеров из справочника сотрудников.

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

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

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

        Для отправки документов JSON по HTTP в 1С:Предприятии можно использовать объект `HTTPЗапрос`. Вот пример кода, который демонстрирует, как это сделать:

        1C
        &НаСервереБезКонтекста
        Процедура Отправить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Данные.Вставить("Поставщик?", Ложь);
            
            // Преобразуем структуру в JSON
            JSONСтрока = JSONЗапись(JSONДанные);
            
            // Устанавливаем тело запроса
            Запрос.УстановитьТело(JSONСтрока);
            
            // Отправляем запрос
            Ответ = HTTPСоединение.Отправить(Запрос);
            
            // Обрабатываем ответ
            Если Ответ.КодСостояния = 200 Тогда
                Сообщить("Документ успешно отправлен.");
            Иначе
                Сообщить("Ошибка отправки документа: " + Ответ.КодСостояния + " " + Ответ.ПолучитьТело());
            КонецЕсли;
        КонецПроцедуры
        
        Функция JSONЗапись(Данные)
            // Создаем объект записи JSON
            Запись = Новый ЗаписьJSON;
            Запись.УстановитьСтроку(Новый Строка);
            
            // Записываем данные в JSON
            Запись.ЗаписатьНачалоОбъекта();
            Для Каждого Параметр Из Данные Цикл
                Запись.ЗаписатьИмяСвойства(Параметр.Ключ);
                Запись.ЗаписатьЗначение(Параметр.Значение);
            КонецЦикла;
            Запись.ЗаписатьКонецОбъекта();
            
            // Возвращаем JSON-строку
            Возврат Запись.ПолучитьСтроку();
        КонецФункции
        

        В этом примере:
        — Мы создаем HTTP-запрос и устанавливаем URL.
        — Устанавливаем заголовок `Content-Type` для указания, что отправляем данные в формате JSON.
        — Формируем структуру данных, которую хотим отправить, и преобразуем ее в JSON-строку.
        — Устанавливаем тело запроса и отправляем его.
        — Обрабатываем ответ от сервера.

        Не забудьте заменить `http://example.com/api/endpoint` на ваш фактический URL.

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

          Привет, Александр!

          Для подключения к MS SQL Server 2022 с использованием объекта `ADODB.Connection` в 1С, строка подключения может выглядеть следующим образом:

          1C
          строкаСоединения = "Provider=SQLOLEDB;Data Source=имя_сервера;Initial Catalog=имя_базы;User ID=имя_пользователя;Password=пароль;";
          соединение = новый COMОбъект("ADODB.Connection");
          соединение.Open(строкаСоединения);
          

          Здесь:
          — `имя_сервера` — это имя вашего SQL сервера или его IP-адрес.
          — `имя_базы` — это имя базы данных, к которой вы хотите подключиться.
          — `имя_пользователя` и `пароль` — это учетные данные для доступа к базе данных.

          Если вы используете Windows аутентификацию, строка подключения будет выглядеть так:

          1C
          строкаСоединения = "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).

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

            Привет, Александр!

            Для отправки документов по HTTP в 1С:Предприятие можно использовать следующий пример кода. Этот код демонстрирует, как сформировать HTTP-запрос для отправки файла на сервер:

            1C
            &НаСервере
            Процедура ОтправитьДокументНаСервер(ПутьКФайлу, 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 и путь к файлу.

            Если у вас есть дополнительные вопросы или нужна помощь с конкретными аспектами, дайте знать!

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

              Привет, VLADIMIR!

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

              1C
              Процедура ПриОткрытии() Экспорт
                  ЭлементыФормы.Номенклатура.Доступность = Не ЗначениеЗаполнено(ЭлементыФормы.Номенклатура.Значение);
                  ЭлементыФормы.Процент.Доступность = Не ЗначениеЗаполнено(ЭлементыФормы.Процент.Значение);
                  ЭлементыФормы.ДатаПо.Доступность = Не ЗначениеЗаполнено(ЭлементыФормы.ДатаПо.Значение);
              КонецПроцедуры
              

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

              Если у вас есть дополнительные вопросы или требуется помощь с другими аспектами управляемых форм, дайте знать!

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

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

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

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

                ### Пример использования:

                1C
                &НаСервере
                Процедура ПримерИспользования()
                    МассивДанных = Новый Массив();
                    МассивДанных.Добавить("Значение1");
                    МассивДанных.Добавить("Значение2");
                    МассивДанных.Добавить("Значение3");
                
                    ТаблицаЗначений = Новый ТаблицаЗначений();
                    МассивВТаблицуЗначений(МассивДанных, ТаблицаЗначений, "Имя");
                
                    // Теперь ТаблицаЗначений заполнена данными из массива
                КонецПроцедуры
                

                ### Описание:
                1. **Процедура `МассивВТаблицуЗначений`** принимает массив, таблицу значений и имя колонки, в которую будут записаны данные.
                2. **Создание колонки**: В таблице значений создается колонка с указанным именем.
                3. **Заполнение таблицы**: Для каждого элемента массива создается новая строка в таблице значений, и значение элемента массива записывается в соответствующую колонку.

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

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

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

                  Привет, Mikhail!

                  Использование обработки «Войсковая часть» в 1С БГУ может быть затруднительным, так как БГУ (Бухгалтерия государственного учреждения) имеет свои особенности и отличия от других конфигураций 1С.

                  1. **Совместимость**: Если обработка была разработана для другой конфигурации (например, для Бухгалтерии предприятия), то могут возникнуть проблемы с совместимостью. БГУ имеет специфические объекты и механизмы, которые могут не поддерживаться в обработке.

                  2. **Адаптация**: Если обработка использует стандартные объекты и методы, которые есть и в БГУ, то, возможно, потребуется лишь небольшая адаптация кода. Однако, если в обработке используются специфические для другой конфигурации функции, то потребуется более серьезная доработка.

                  3. **Тестирование**: Рекомендуется протестировать обработку в тестовой среде БГУ, чтобы выявить возможные ошибки и несоответствия.

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

                  В общем, использование обработки «Войсковая часть» в БГУ возможно, но может потребовать доработки и тестирования.

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

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

                    Привет, Данил!

                    Для настройки аутентификации операционной системы с клиентской машины на Linux, когда сервер 1С, Microsoft SQL Server и контроллер домена установлены на Windows Server 2008 R2, вам потребуется выполнить несколько шагов. Основной метод аутентификации в данном случае будет использовать Kerberos. Вот пошаговая инструкция:

                    ### Шаг 1: Установка необходимых пакетов на Linux

                    Убедитесь, что на вашей клиентской машине под управлением Linux установлены необходимые пакеты для работы с Kerberos. Обычно это `krb5-user`, `libkrb5-dev` и другие зависимости. Установите их с помощью пакетного менеджера:

                    bash
                    sudo apt update
                    sudo apt install krb5-user libkrb5-dev
                    

                    ### Шаг 2: Настройка конфигурации Kerberos

                    Отредактируйте файл конфигурации Kerberos `/etc/krb5.conf`, чтобы он соответствовал вашему домену. Пример конфигурации:

                    ini
                    [libdefaults]
                        default_realm = DOMAIN.LOC
                        dns_lookup_realm = false
                        dns_lookup_kdc = true
                    
                    [realms]
                        DOMAIN.LOC = {
                            kdc = your.kdc.server
                            admin_server = your.kdc.server
                        }
                    
                    [domain_realm]
                        .domain.loc = DOMAIN.LOC
                        domain.loc = DOMAIN.LOC
                    

                    Замените `your.kdc.server` на имя вашего контроллера домена.

                    ### Шаг 3: Создание ключевого табличного файла (keytab)

                    На контроллере домена создайте пользователя для 1С и сгенерируйте ключевой файл (keytab). Используйте утилиту `ktpass`:

                    bash
                    ktpass -princ usr1cv8/srv-1cserver.domain.ru@DOMAIN.LOC -mapuser usr1cv8 -pass YourPassword -out usr1cv8.keytab
                    

                    Скопируйте полученный файл `usr1cv8.keytab` на клиентскую машину в удобное место, например, `/etc/krb5.keytab`.

                    ### Шаг 4: Проверка Kerberos

                    На клиентской машине выполните команду `kinit`, чтобы проверить, что аутентификация работает:

                    bash
                    kinit -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.

                    Если у вас возникнут дополнительные вопросы, не стесняйтесь спрашивать!

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

                      Ошибка заключается в том, что вы пытаетесь получить значение атрибута «Vid» из элемента «Dokument», но «Vid» не является атрибутом этого элемента, а является дочерним элементом. В вашем XML-фрагменте «Vid» находится внутри элемента «Dokument», а не как его атрибут.

                      Чтобы исправить это, вам нужно сначала прочитать дочерние элементы внутри «Dokument». Вот пример, как это можно сделать:

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

                      В этом коде мы сначала проверяем, что мы находимся внутри элемента «Dokument», а затем читаем его дочерние элементы, чтобы получить значение «Vid».

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

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

                        Здравствуйте, Наталья!

                        Реквизит `AfterIndexKey` в справочнике «Диадок: юр/физлица» используется для хранения значения, которое указывает на ключ, который следует использовать после текущего индекса. Это может быть полезно для оптимизации работы с данными, особенно в контексте обработки и поиска информации в справочнике.

                        Основные функции этого реквизита могут включать:

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

                        Таким образом, `AfterIndexKey` является важным инструментом для повышения эффективности работы с данными в справочнике «Диадок: юр/физлица».

                        Если у вас есть дополнительные вопросы или нужна помощь с кодом, дайте знать!

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

                          Сергей, вот пример кода для загрузки прихода из XML файла в 1С. Этот код считывает данные из предоставленного XML и создает документ «Поступление товаров» с соответствующими реквизитами и строками товаров.

                          1C
                          &НаСервереФункция ЗагрузитьПриходИз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 файлу, например:

                          1C
                          ЗагрузитьПриходИзXML("C:pathtoyourfile.xml");
                          

                          Если у вас есть дополнительные вопросы или требуется доработка, дайте знать!

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

                            Привет, art!

                            Чтобы отбирать из регистра только те организации, у которых значение перечисления «ДляЮридическихЛиц», вам нужно добавить условие в ваш запрос. Предположим, что новое измерение в регистре называется `ВидОрганизации`. Вам нужно будет добавить это условие в секцию `ГДЕ` вашего запроса.

                            Вот как это можно сделать:

                            1C
                            ВЫБРАТЬ
                              РеализацияТоваровУслугТовары.Номенклатура КАК ТоварНаименование,
                              РеализацияТоваровУслугТовары.Количество,
                              РеализацияТоваровУслугТовары.Сумма КАК Сумма,
                              РеализацияТоваровУслугТовары.СуммаНДС КАК СуммаНДС,
                              РеализацияТоваровУслугТовары.Ссылка.Сделка,
                              РеализацияТоваровУслугТовары.Ссылка.Сделка.Номер,
                              РеализацияТоваровУслугТовары.Ссылка.Сделка.Дата,
                              РеализацияТоваровУслугТовары.Цена КАК Цена,
                              РеализацияТоваровУслугТовары.Цена * РеализацияТоваровУслугТовары.Количество КАК СуммаБезНДС,
                              РеализацияТоваровУслугТовары.Сумма / РеализацияТоваровУслугТовары.Количество * РеализацияТоваровУслугТовары.Количество + РеализацияТоваровУслугТовары.СуммаНДС КАК СуммаСНДС,
                              РеализацияТоваровУслугТовары.Номенклатура.Код КАК ТоварКод,
                              РеализацияТоваровУслугТовары.Ссылка.Контрагент,
                              РеализацияТоваровУслугТовары.Ссылка.Дата КАК ДатаДокументаРеал,
                              РеализацияТоваровУслугТовары.Ссылка.Контрагент.ИНН КАК ИННПокупателя,
                              РеализацияТоваровУслугТовары.Ссылка.Контрагент.НаименованиеПолное КАК ПредставлениеПлательщика,
                              РеализацияТоваровУслугТовары.Ссылка.Сделка.Номер КАК Основание,
                              РеализацияТоваровУслугТовары.Ссылка.Дата КАК ДатаДокумента,
                              РеализацияТоваровУслугТовары.Ссылка.Номер КАК НомерДокумента,
                              ПодразделенияОрганизацийСрезПоследних.Организация КАК ПредставлениеПоставщика,
                              ПодразделенияОрганизацийСрезПоследних.Организация.ИНН КАК ИННОрганизации,
                              ПодразделенияОрганизацийСрезПоследних.Подразделение.Адрес КАК АдресОрганизации,
                              РеализацияТоваровУслугТовары.Ссылка.СуммаДокумента КАК ИтогСуммыСНДС
                            ИЗ
                              Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
                                ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегистрСведений.СрезПоследних(&ДатаДокумента, ) КАК ПодразделенияОрганизацийСрезПоследних
                                ПО РеализацияТоваровУслугТовары.Склад.Подразделение = ПодразделенияОрганизацийСрезПоследних.Подразделение
                            ГДЕ
                              РеализацияТоваровУслугТовары.Ссылка = &Ссылка
                              И РеализацияТоваровУслугТовары.Цена > 0
                              И РеализацияТоваровУслугТовары.Количество > 0
                              И ПодразделенияОрганизацийСрезПоследних.ВидОрганизации = Перечисления.ВидыОрганизацийПодразделений.ДляЮридическихЛиц
                            

                            В этом запросе добавлено условие:

                            1C
                            И ПодразделенияОрганизацийСрезПоследних.ВидОрганизации = Перечисления.ВидыОрганизацийПодразделений.ДляЮридическихЛиц
                            

                            Это условие будет фильтровать записи, оставляя только те, у которых значение `ВидОрганизации` равно «ДляЮридическихЛиц».

                            Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать!

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

                              Чтобы добавить в ваш запрос информацию о серии номенклатуры, необходимо включить соответствующее поле из регистра или справочника, где хранится информация о сериях. Предположим, что у вас есть справочник «СерииНоменклатуры», который содержит информацию о сериях для каждой номенклатуры.

                              Вот как можно изменить ваш запрос, чтобы добавить поле «Серия»:

                              sql
                              ВЫБРАТЬ
                                СпрНоменклатура.Ссылка КАК Номенклатура,
                                ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,
                                ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток,
                                СерииНоменклатуры.Ссылка КАК Серия
                              ИЗ
                                Справочник.Номенклатура КАК СпрНоменклатура
                                  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&период, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
                                    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки
                                    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СерииНоменклатуры КАК СерииНоменклатуры
                                    ПО СпрНоменклатура.Ссылка = СерииНоменклатуры.Номенклатура
                                  ПО СпрНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
                              ГДЕ
                                ВЫБОР
                                    КОГДА &ТолькоВНаличии
                                      ТОГДА ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) > 0
                                    ИНАЧЕ ИСТИНА
                                  КОНЕЦ
                                И ВЫБОР
                                    КОГДА &ТолькоСЦенами
                                      ТОГДА ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) > 0
                                    ИНАЧЕ ИСТИНА
                                  КОНЕЦ
                              

                              В этом измененном запросе добавлено левое соединение с справочником «СерииНоменклатуры», чтобы получить информацию о серии для каждой номенклатуры. Поле `СерииНоменклатуры.Ссылка` добавлено в выборку, чтобы вернуть ссылку на серию номенклатуры. Убедитесь, что в вашей базе данных существует соответствующий справочник и поле для серий.

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

                                Ошибка, которую вы видите, связана с выполнением SQL-запроса к базе данных. Сообщение указывает на то, что объект с именем `#tt1` не найден. Это может быть временная таблица, которая не была создана или была удалена до выполнения запроса.

                                Вот основные моменты, которые стоит проверить:

                                1. **Создание временной таблицы**: Убедитесь, что временная таблица `#tt1` была создана перед выполнением запроса, который к ней обращается.

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

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

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

                                Если вы проверите эти моменты и исправите возможные ошибки, проблема должна быть решена.

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

                                  Привет, Михаил!

                                  Вот пример кода на языке 1С, который заполняет массив случайными целыми числами и сортирует его методом пузырька:

                                  1C
                                  &НаКлиенте
                                  Процедура ЗаполнитьИОтсортироватьМассив()
                                      // Определяем размер массива
                                      Размер = 20;
                                      
                                      // Создаем массив
                                      МассивСлучайныхЧисел = Новый Массив();
                                      
                                      // Заполняем массив случайными целыми числами от 1 до 100
                                      Для И = 1 По Размер Цикл
                                          СлучайноеЧисло = СлучайноеЧисло(1, 100);
                                          МассивСлучайныхЧисел.Добавить(СлучайноеЧисло);
                                      КонецЦикла;
                                      
                                      // Выводим массив до сортировки
                                      Сообщить("Массив до сортировки: " + МассивСлучайныхЧисел.Строка());
                                      
                                      // Сортируем массив методом пузырька
                                      Для И = 0 По МассивСлучайныхЧисел.Количество() - 1 Цикл
                                          Для J = 0 По МассивСлучайныхЧисел.Количество() - 2 - И Цикл
                                              Если МассивСлучайныхЧисел[J] > МассивСлучайныхЧисел[J + 1] Тогда
                                                  // Меняем местами
                                                  Временное = МассивСлучайныхЧисел[J];
                                                  МассивСлучайныхЧисел[J] = МассивСлучайныхЧисел[J + 1];
                                                  МассивСлучайныхЧисел[J + 1] = Временное;
                                              КонецЕсли;
                                          КонецЦикла;
                                      КонецЦикла;
                                      
                                      // Выводим массив после сортировки
                                      Сообщить("Массив после сортировки: " + МассивСлучайныхЧисел.Строка());
                                  КонецПроцедуры
                                  

                                  Этот код создает массив из 20 случайных целых чисел в диапазоне от 1 до 100, сортирует его методом пузырька и выводит массив до и после сортировки.

                                  Если у тебя есть дополнительные вопросы или нужна помощь, дай знать!

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