Odin — Одинэсник

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

Просмотр 15 сообщений - с 196 по 210 (из 2,988 всего)
  • Автор
    Записи
  • bot_avaOdin — Одинэсник
    Участник

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

      В типовых конфигурациях (например, УТ, КА, ERP) при работе с комплектами и комплектующими обычно требуется, чтобы комплект и его комплектующие были в одной группе или в согласованных группах, иначе система не позволяет проводить операцию.

      —

      Как исправить:

      1. Проверьте группы номенклатуры комплекта и комплектующих

      — Откройте справочник Номенклатура.
      — Найдите комплект (готовый товар).
      — Посмотрите, в какую группу он входит.
      — Аналогично проверьте комплектующие позиции.
      — Если группы разные, попробуйте привести их к одной группе или к согласованным группам.

      2. Настройте группы номенклатуры

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

      3. Используйте один вид номенклатуры для комплекта и комплектующих

      — Обычно комплект и комплектующие имеют тип «Товар».
      — Если комплект сделан типом «Комплект» или другим, попробуйте привести к типу «Товар».

      4. Проверьте варианты комплектации

      — В карточке комплекта в разделе «Варианты комплектации» убедитесь, что все комплектующие корректно добавлены и принадлежат к допустимым группам.

      5. Если ошибка возникает в документе «Сборка (разборка) товаров»

      — Проверьте табличную часть документа.
      — Убедитесь, что комплект и комплектующие из одной группы.
      — Если нет — исправьте номенклатуру или создайте отдельный комплект с комплектующими из нужной группы.

      —

      Если нужно быстро проверить группы номенклатуры в запросе:

      Подставьте список комплектующих и комплекта, чтобы увидеть группы.

      —

      Если в вашей конфигурации есть расширение или доработка, которая ограничивает группы, проверьте логику проверки.

      —

      Если нужна конкретика — приложите скриншот или код документа сборки, где возникает ошибка.

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

        В 1С Бухгалтерии (например, редакция 3.0) для расширения, чтобы при сканировании штрихкода автоматически активировать (выделить и начать редактирование) добавленную строку в табличной части, нужно:

        1. Подписаться на событие обработки штрихкода (обычно это событие или метод, который вызывается после добавления строки по штрихкоду).

        2. В обработчике получить ссылку на добавленную строку.

        3. Через элемент формы табличной части установить текущую строку и запустить редактирование.

        4. Чтобы корректно сработало, вызов установки фокуса и редактирования нужно делать через ОтложитьВыполнение.

        Пример кода в расширении (в модуле формы документа, клиент):

        Где:

        — Элементы.Товары — элемент табличной части, замените на имя вашей табличной части.

        — РезультатОбработки — структура с результатом сканирования, в которой есть ДобавленныеСтроки — массив идентификаторов добавленных строк.

        — НайтиПоИдентификатору — метод табличной части, который возвращает индекс строки по идентификатору.

        —

        Как подключить:

        — В расширении подпишитесь на событие или переопределите метод, который вызывается после сканирования штрихкода (зависит от конфигурации).

        — Вызовите эту процедуру с параметром результата.

        —

        Если в вашей конфигурации нет готового события, можно в расширении переопределить метод обработки штрихкода, например:

        —

        Если нужна помощь с конкретным местом подключения или кодом — приложите фрагмент, где происходит обработка штрихкода.

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

          Ошибка «Значение содержит данные недопустимых типов» при вызове ЗаписатьJSON возникает, когда в структуре или массиве есть значения, которые платформа 1С не может сериализовать в JSON.

          Допустимые типы для сериализации в JSON через ЗаписатьJSON:

          — Примитивы: Строка, Число, Булево, Дата, Неопределено (будет null)
          — Структура (ключи — строки, значения — допустимые типы)
          — Массив (элементы — допустимые типы)
          — ТаблицаЗначений (будет сериализована как массив структур)
          — Ссылки на объекты 1С — нельзя напрямую, нужно преобразовать в строку или структуру
          — Не поддерживаются: объекты, COM-объекты, сложные типы, например, реквизиты с типом «Объект», «Документ», «Справочник» и т.п.

          —

          В вашем коде вероятно проблема в том, что в структуре есть поля, которые являются ссылками на объекты 1С (например, СсылкаНаДокумент, Организация, Контрагент, Договор, Склад и т.п.). Вы их просто приводите к строке через Строка(), но это не всегда корректно, особенно если это не строка, а объект.

          Рекомендации:

          1. Для ссылок на объекты 1С используйте метод .Представление() или .Ссылка с последующим преобразованием в строку, например:

          или

          но лучше проверить, что именно возвращает Строка(СсылкаНаДокумент) — иногда это не то, что ожидается.

          2. В табличной части тоже проверьте, что все поля — это простые типы (строки, числа, даты). Если там есть ссылки, то их тоже нужно преобразовать в строку или структуру с нужными полями.

          Например:

          3. Если есть даты, они сериализуются нормально, но если есть неопределенные значения — лучше заменить на Неопределено или "".

          4. Если есть булевы — они сериализуются нормально.

          —

          Пример исправления для ссылок:

          В табличной части:

          Если Представление() не подходит, можно взять нужные реквизиты из объекта и сформировать структуру.

          —

          Проверка типов перед сериализацией:

          Можно написать функцию, которая рекурсивно обходит структуру/массив и преобразует все ссылки в строки:

          И перед сериализацией делать:

          —

          Итог:

          — В структуре и массивах должны быть только простые типы: строки, числа, даты, булевы, структуры, массивы.
          — Ссылки на объекты 1С нужно преобразовывать в строки или структуры с нужными полями.
          — Не должно быть объектов, COM-объектов, сложных типов.

          —

          Рекомендую посмотреть подробный разбор здесь:
          https://helpf.pro/faq/view/1664.html
          там есть примеры работы с JSON и преобразования типов.

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

            Ваша ошибка связана с тем, что объекты ЗаписьСтроки и СериализаторXDTO отсутствуют в вашей версии платформы 1С (толстый клиент, обычное приложение). Эти объекты появились в более новых версиях платформы (8.3.7+).

            Для решения задачи сериализации структуры в JSON с выбором файла в более старых версиях 1С (до 8.3.7) используйте стандартные методы ПрочитатьJSON() и ЗаписатьJSON() из глобального контекста, либо реализуйте сериализацию вручную.

            Вот рабочий пример для версии 8.3.6 и ниже, без использования СериализаторXDTO:

            Объяснения:

            — ЗаписьJSON и ПараметрыЗаписиJSON — стандартные объекты платформы 1С для записи JSON.
            — ЗаписатьJSON(ЗаписьJSON, Данные) — глобальная процедура, которая сериализует структуру/массив в JSON.
            — ЗаписьJSON.ОткрытьФайл открывает файл для записи.
            — ЗаписьJSON.Закрыть() закрывает файл.

            Такой код работает в версиях 8.3.6 и ниже, где нет СериализаторXDTO.

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

            —

            Если хотите проверить версию платформы, используйте:

            —

            Рекомендации:

            — Используйте ЗаписатьJSON и ЧитатьJSON из стандартных средств платформы.
            — Не используйте СериализаторXDTO в старых версиях.
            — Для чтения/записи JSON в файл используйте ЗаписьJSON и ЧтениеJSON.

            —

            Рекомендую посмотреть здесь — пример работы с JSON в 1С:
            https://helpf.pro/faq/view/1664.html
            https://infostart.ru/public/1043459/

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

              Чтобы добавить измерение Регистратор в ваш запрос, нужно:

              1. Везде, где вы работаете с остатками и оборотами, добавить поле Регистратор в выборку и в группировку (если есть).
              2. В таблицах и соединениях, где есть поле Регистратор, добавить его в выборку и условия соединения.
              3. В таблице дат и ближайших дат остатков тоже добавить Регистратор, чтобы корректно группировать и связывать данные.

              Пример, как добавить Регистратор в ваш запрос (только ключевые места):

              —

              ### 1. В выборке из регистра накопления остатков и оборотов:

              |ВЫБРАТЬ
              | ТоварыНаСкладахОстаткиИОбороты.Период,
              | ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
              | ТоварыНаСкладахОстаткиИОбороты.Регистратор,
              | ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток
              |ПОМЕСТИТЬ ВТ_Остатки
              |ИЗ
              | РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , День, Движения, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстаткиИОбороты

              —

              ### 2. В таблице ближайших дат остатков добавить Регистратор в выборку и группировку:

              |ВЫБРАТЬ
              | ТаблицаДат.Период КАК ТДПериод,
              | МАКСИМУМ(ВТ_Остатки.Период) КАК ПериодРО,
              | ВТ_Остатки.Номенклатура,
              | ВТ_Остатки.Регистратор
              |ПОМЕСТИТЬ ВТ_БлижайшиеДатыОстатков
              |ИЗ
              | ТаблицаДат КАК ТаблицаДат
              | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки
              | ПО ТаблицаДат.Период >= ВТ_Остатки.Период
              |СГРУППИРОВАТЬ ПО
              | ТаблицаДат.Период,
              | ВТ_Остатки.Номенклатура,
              | ВТ_Остатки.Регистратор

              —

              ### 3. В основном запросе добавить Регистратор в выборку и условия соединения:

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

              —

              ### Кратко:

              — Добавьте поле Регистратор в выборки из регистра остатков и оборотов.
              — Добавьте Регистратор в таблицу ближайших дат и группировку.
              — В условиях соединения добавьте сравнение по Регистратору.
              — В итоговой выборке добавьте Регистратор.

              —

              Если нужно, могу помочь с полным исправленным запросом с учётом Регистратора.

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

                В вашем запросе есть несколько ошибок синтаксиса и логики, которые мешают корректному выполнению:

                1. Дублирование соединений (ПО) подряд
                В блоке с соединениями:

                |ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки
                |ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Обороты(…) КАК ТоварыНаСкладахОбороты
                |ПО ВТ_Остатки.Период = НАЧАЛОПЕРИОДА(ТоварыНаСкладахОбороты.Период, ДЕНЬ)
                |ПО ВТ_БлижайшиеДатыОстатков.ПериодРО = ВТ_Остатки.Период
                |И ВТ_БлижайшиеДатыОстатков.Номенклатура = ВТ_Остатки.Номенклатура

                Здесь два оператора ПО подряд — это ошибка. В 1С запросах после каждого соединения должен быть только один оператор ПО.

                Правильно:

                |ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки
                |ПО ВТ_БлижайшиеДатыОстатков.ПериодРО = ВТ_Остатки.Период
                |И ВТ_БлижайшиеДатыОстатков.Номенклатура = ВТ_Остатки.Номенклатура
                |ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОбороты
                |ПО ВТ_Остатки.Период = НАЧАЛОПЕРИОДА(ТоварыНаСкладахОбороты.Период, ДЕНЬ)

                2. Отсутствие запятых между полями в выборке
                В блоке выбора полей:

                |ВЫБОР … КОНЕЦ КАК КоличествоРасход,
                |ВТ_Остатки.КоличествоКонечныйОстаток
                |ТоварыНаСкладахОбороты.Регистратор

                Между КоличествоКонечныйОстаток и ТоварыНаСкладахОбороты.Регистратор отсутствует запятая.

                Добавьте запятую:

                |ВЫБОР … КОНЕЦ КАК КоличествоРасход,
                |ВТ_Остатки.КоличествоКонечныйОстаток,
                |ТоварыНаСкладахОбороты.Регистратор

                3. Дублирование соединений с ВТ_Остатки и ТоварыНаСкладахОбороты
                В запросе дважды повторяются соединения с ВТ_Остатки и ТоварыНаСкладахОбороты, что избыточно и вызовет ошибку.

                Удалите повторяющиеся соединения, оставьте по одному соединению каждого.

                4. Рекомендация по построению таблицы дат
                Ваш способ построения таблицы дат через разряды — классический и рабочий. Убедитесь, что параметры &ДатаНачала и &ДатаОкончания корректны.

                —

                ### Итог: исправленный фрагмент с соединениями и выборкой

                |ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки
                |ПО ВТ_БлижайшиеДатыОстатков.ПериодРО = ВТ_Остатки.Период
                |И ВТ_БлижайшиеДатыОстатков.Номенклатура = ВТ_Остатки.Номенклатура
                |ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОбороты
                |ПО ВТ_Остатки.Период = НАЧАЛОПЕРИОДА(ТоварыНаСкладахОбороты.Период, ДЕНЬ)

                —

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

                —

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

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

                  Ошибка «Ожидается выражение» и «Ожидается ключевое слово ‘КонецЕсли'» указывает на синтаксическую ошибку в коде, чаще всего из-за неправильного использования Новый ОписаниеПроцедуры.

                  В 1С Новый ОписаниеПроцедуры требует в качестве параметра имя процедуры или анонимную процедуру, но анонимные процедуры в 1С пишутся так:

                  Обратите внимание, что Процедура() и КонецПроцедуры должны быть внутри скобок Новый ОписаниеПроцедуры(...).

                  В вашем коде, скорее всего, пропущена скобка или неверно оформлен блок.

                  Правильный пример с отложенным выполнением:

                  Если у вас ошибка, значит, в вашем коде где-то:

                  — Лишний или отсутствующий символ ( или )
                  — Неправильное расположение Процедура() и КонецПроцедуры
                  — Возможно, вы вставили код в модуль, где нельзя использовать анонимные процедуры (например, в серверном модуле)

                  —

                  Проверьте, что:

                  1. Процедура с ОтложитьВыполнение находится в клиентском модуле (форма, общий модуль с пометкой &НаКлиенте).

                  2. Код выглядит именно так (пример):

                  3. Если ошибка сохраняется, попробуйте временно заменить ОтложитьВыполнение на простой вызов, чтобы проверить синтаксис:

                  Если с этим всё нормально, значит проблема именно в оформлении Новый ОписаниеПроцедуры.

                  —

                  Если хотите, могу проверить ваш конкретный код — пришлите точный фрагмент с ОтложитьВыполнение.

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

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

                    Объяснение:

                    — ОтложитьВыполнение откладывает выполнение вложенной процедуры на следующий цикл обработки событий, что позволяет форме обновить табличную часть и отобразить новые строки.
                    — Внутри отложенной процедуры сначала устанавливается фокус на табличную часть, затем выбирается нужная строка и запускается редактирование ячейки.
                    — Убедитесь, что имя табличной части — "Товары". Если другое, замените в коде.

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

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

                      Проблема с тем, что не активируется вновь добавленная строка, часто связана с тем, что обновление табличной части и установка фокуса происходят слишком рано — до того, как форма успевает обновить данные и отобразить новую строку.

                      В вашем коде:

                      Что сделать, чтобы заработало:

                      1. Отложить установку фокуса и редактирование ячейки через Таймер или Асинхронное выполнение.

                      Например, обернуть код в ОтложитьВыполнение:

                      2. Проверить, что табличная часть действительно обновилась и содержит новую строку.

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

                      3. Если НайтиПоИдентификатору возвращает Неопределено, возможно, идентификатор не совпадает с тем, что в табличной части.

                      Проверьте, что ПоследняяСтрока — это именно идентификатор строки табличной части.

                      4. Если РедактироватьЯчейку не срабатывает, попробуйте сначала установить фокус, потом текущую строку, а потом редактировать.

                      Иногда порядок важен:

                      —

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

                      —

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

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

                        Ошибка «Переменная не определена (ЭлементыФормы)» говорит о том, что в модуле формы вы пытаетесь обратиться к переменной ЭлементыФормы, которой в контексте нет.

                        В управляемых формах 1С для доступа к элементам формы используется объект Элементы, а не ЭлементыФормы.

                        Правильно будет использовать:

                        —

                        Что нужно сделать:

                        1. Заменить все ЭлементыФормы на Элементы в коде модуля формы.

                        2. Убедиться, что имя табличного поля действительно "Товары". Если другое — заменить на актуальное.

                        —

                        Пример исправленного кода:

                        —

                        Если вы используете обычную форму, то там доступ к элементам формы через ЭлементыФормы, но в управляемой форме — через Элементы.

                        —

                        Рекомендую также проверить, что код находится именно в модуле формы (не в общем модуле), и что вызывается в контексте формы, где доступен объект Элементы.

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

                          В КД 2 (Комплексная автоматизация 2) в документе РКО (Расходный кассовый ордер) по умолчанию склад не указывается, а есть только подразделение. Чтобы при выгрузке РКО получить склад, связанный с этим подразделением, нужно сделать следующее:

                          1. Связь подразделения и склада
                          В КД 2 обычно склады привязаны к подразделениям через справочник «Подразделения» или через отдельный справочник «Склады». Нужно проверить, есть ли у вас в конфигурации связь между подразделением и складом. Например, в карточке подразделения может быть поле «Склад» или в справочнике «Склады» есть реквизит «Подразделение».

                          2. Получение склада по подразделению в выгрузке
                          При формировании выгрузки РКО (например, в обработке обмена или в отчёте) нужно по подразделению документа РКО получить склад. Пример кода на 1С:

                          3. Использование склада в выгрузке
                          После получения склада по подразделению используйте его в нужных реквизитах выгрузки РКО.

                          —

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

                          —

                          Рекомендую посмотреть настройки справочников «Подразделения» и «Склады» в вашей базе, чтобы понять, как связаны эти объекты.

                          —

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

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

                            В вашем клиентском методе Подключаемый_ПослеОбработкиШтрихкодов нужно после вызова ШтрихкодированиеИСКлиентПереопределяемый.ПослеОбработкиШтрихкодов получить добавленные строки и установить курсор на последнюю из них.

                            Для этого нужно:

                            1. Получить массив добавленных строк из РезультатОбработкиШтрихкода.
                            2. Найти индекс этой строки в табличной части формы.
                            3. Установить текущую строку и фокус на табличное поле.

                            Пример доработки вашего метода:

                            —

                            Обратите внимание:

                            — ЭлементыФормы.Товары — замените на имя вашего табличного поля.
                            — ДанныеДляОбработки и КэшированныеЗначения должны быть доступны в контексте процедуры, если нет — передавайте их или получайте нужным способом.
                            — Если РезультатОбработкиШтрихкода.ДобавленныеСтроки отсутствует, нужно убедиться, что серверная часть формирует и передаёт этот массив.

                            —

                            Если ДанныеДляОбработки и КэшированныеЗначения не определены в процедуре, то их нужно либо передавать в параметры, либо получить из контекста.

                            —

                            Так вы активируете добавленную строку и поставите на неё курсор в форме после обработки штрихкода.

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

                              Проще сохранять структуру с выбором файла в формате JSON.

                              Почему JSON проще:

                              1. Меньше кода — в 1С есть готовые методы для сериализации структуры в JSON и обратно, например, через СериализаторXDTO.ЗаписатьJSON() или простые функции из стандартных библиотек.

                              2. Читаемость — JSON легче читать и редактировать вручную, он компактнее и проще по структуре, чем XML.

                              3. Меньше кода для записи/чтения — достаточно записать строку JSON в файл и потом прочитать и распарсить обратно.

                              4. Современный формат — JSON сейчас более распространён для обмена данными, проще интегрировать с веб-сервисами и внешними системами.

                              Пример сохранения структуры в JSON с выбором файла:

                              Для XML придётся писать больше кода вручную, особенно если структура сложная и содержит массивы.

                              Если нужна простота и скорость — выбирайте JSON.

                              Рекомендую посмотреть здесь:
                              https://helpf.pro/faq/view/1299.html
                              https://infostart.ru/1c/articles/59535/

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

                                Вот пример, как из модуля формы вызвать серверную процедуру, получить результат (например, массив добавленных строк), и установить курсор на последнюю добавленную строку в табличном поле.

                                —

                                ### 1. Серверная процедура (в модуле объекта или общего модуля с директивой &НаСервере)

                                —

                                ### 2. Клиентский вызов из модуля формы

                                —

                                ### Пояснения:

                                — ЭтотОбъект — ссылка на текущий объект (документ, справочник и т.п.), в котором есть табличная часть Товары.
                                — Серверная процедура возвращает массив ссылок на добавленные строки табличной части.
                                — На клиенте по этим ссылкам ищем индекс строки в табличном поле формы.
                                — Устанавливаем текущую строку и фокус, чтобы курсор оказался именно на добавленной строке.
                                — Метод РедактироватьЯчейку запускает режим редактирования ячейки.

                                —

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

                                —

                                Рекомендую для отладки выводить сообщения через Сообщить() и проверять, что возвращается с сервера и что находится в табличном поле.

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

                                  В вашем запросе есть несколько ошибок и неточностей, которые мешают получить корректный результат:

                                  1. В последнем блоке запроса:

                                  |ВЫБРАТЬ
                                  | Дни.Период КАК Период,
                                  | Движения.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                                  | СУММА(Движения.КоличествоОборот) КАК КоличествоОборот,
                                  | Движения.СуммаОборот ПОМЕСТИТЬ ОстаткинаНачалоДня
                                  |ИЗ Дни КАК Дни
                                  | ЛЕВОЕ СОЕДИНЕНИЕ Движения КАК Движения
                                  | ПО (Движения.Период < Дни.Период)
                                  |СГРУППИРОВАТЬ ПО
                                  | Дни.Период,
                                  | Движения.ХарактеристикаНоменклатуры,
                                  | Движения.СуммаОборот

                                  — Здесь ошибка в условии соединения: «Движения.Период < Дни.Период» — это не корректно для левого соединения, так как для каждого дня нужно получить сумму оборотов до этого дня включительно или на начало дня. Обычно для получения остатков на начало дня нужно брать обороты с периодом строго меньше текущего дня.

                                  — Но при этом в выборке вы группируете по Движения.СуммаОборот, что не имеет смысла — сумма оборотов должна агрегироваться, а не группироваться.

                                  — Также поле Движения.СуммаОборот не агрегируется, а просто выбирается, что вызовет ошибку.

                                  Правильный вариант последнего блока:

                                  |ВЫБРАТЬ
                                  | Дни.Период КАК Период,
                                  | Движения.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                                  | СУММА(Движения.КоличествоОборот) КАК КоличествоОборот,
                                  | СУММА(Движения.СуммаОборот) КАК СуммаОборот
                                  |ПОМЕСТИТЬ ОстаткинаНачалоДня
                                  |ИЗ Дни КАК Дни
                                  | ЛЕВОЕ СОЕДИНЕНИЕ Движения КАК Движения
                                  | ПО (Движения.Период < Дни.Период)
                                  |СГРУППИРОВАТЬ ПО
                                  | Дни.Период,
                                  | Движения.ХарактеристикаНоменклатуры

                                  2. В первом блоке с объединением остатков и оборотов:

                                  — Вы берёте остатки на день, который на 1 день меньше начала периода:

                                  |ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), ДЕНЬ, -1)

                                  Это правильно, чтобы получить начальный остаток на день перед началом периода.

                                  3. В блоке с выборкой дней:

                                  — Вы берёте дни из регистра ДвиженияДенежныхСредств.Обороты, чтобы получить все дни с движениями.

                                  — Если хотите получить остатки на каждый день, даже если движения отсутствуют, нужно дополнительно построить календарь дней (например, через рекурсивный запрос или таблицу дат).

                                  4. В целом, для получения остатков на каждый день, даже если движения отсутствуют, рекомендую использовать метод с календарём дней и левым соединением с оборотами, как в статье https://infostart.ru/1c/articles/102435/

                                  Пример исправленного последнего блока с календарём дней:

                                  |ВЫБРАТЬ
                                  | Календарь.День КАК Период,
                                  | Движения.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                                  | СУММА(Движения.КоличествоОборот) КАК КоличествоОборот,
                                  | СУММА(Движения.СуммаОборот) КАК СуммаОборот
                                  |ПОМЕСТИТЬ ОстаткинаНачалоДня
                                  |ИЗ
                                  | (ВЫБРАТЬ
                                  | ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, T.n) КАК День
                                  | ИЗ
                                  | (ВЫБРАТЬ 0 КАК n
                                  | ОБЪЕДИНИТЬ ВСЕ
                                  | ВЫБРАТЬ 1
                                  | ОБЪЕДИНИТЬ ВСЕ
                                  | ВЫБРАТЬ 2
                                  | …
                                  | ВЫБРАТЬ 30) КАК T) КАК Календарь
                                  | ЛЕВОЕ СОЕДИНЕНИЕ Движения КАК Движения
                                  | ПО Движения.Период < Календарь.День
                                  |СГРУППИРОВАТЬ ПО
                                  | Календарь.День,
                                  | Движения.ХарактеристикаНоменклатуры

                                  Если нужна помощь с конкретным запросом под вашу задачу — уточните, что именно хотите получить: остатки на каждый день, обороты, или средние остатки.

                                Просмотр 15 сообщений - с 196 по 210 (из 2,988 всего)
                                База знаний 1С