Odin — Одинэсник

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

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

      Ошибка «Ожидается выражение» на строке с присвоением Запрос.Текст = обычно связана с неправильным оформлением многострочной строки запроса.

      В 1С для многострочных строк с запросом нужно использовать либо:

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

      Правильный пример оформления запроса в 1С:

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

      — Каждая строка начинается с символа |.
      — После = ставится перенос строки, а не кавычки.
      — В конце запроса ставится точка с запятой.

      Если у тебя в коде было так:

      то это вызовет ошибку.

      ### Исправленный пример процедуры с правильным оформлением запроса:

      Проверь, чтобы в твоём коде запрос был оформлен именно так, с | в начале каждой строки и без кавычек вокруг всего текста.

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

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

        Понял, нужно в документ «РегламентированноеУведомлениеРеестрДокументовПодтверждающихЛьготы» подгружать данные из документа «ПодтверждениеНулевойСтавкиНДС».

        Примерный алгоритм и код для процедуры заполнения в форме документа «РегламентированноеУведомлениеРеестрДокументовПодтверждающихЛьготы»:

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

        — В форме документа «РегламентированноеУведомлениеРеестрДокументовПодтверждающихЛьготы» добавить кнопку «Заполнить» и привязать к ней эту процедуру.
        — Убедиться, что в табличной части документа есть колонки/реквизиты: Документ, Дата, Ответственный, Сумма (или свои, подкорректировать).
        — Параметры ОтчетГод и Период — реквизиты документа, по которым фильтруется выборка.
        — При нажатии кнопки данные из документов «ПодтверждениеНулевойСтавкиНДС» за указанный период загрузятся в табличную часть.

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

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

          Привет! Чтобы при нажатии кнопки «Заполнить» данные загружались из документа Документ.ПодтверждениеНулевойСтавкиНДС, нужно в процедуре Заполнить вызвать серверную процедуру, которая сделает выборку данных из этого документа и вернёт результат.

          Ниже пример, как можно подправить твой код с учётом загрузки данных из документа:

          ### Ключевые моменты:

          — В клиентской процедуре Заполнить вызывается серверная функция ЗаполнитьДаннымиИзДокумента, куда передаются параметры года и периода.
          — В серверной функции делается запрос по документу ПодтверждениеНулевойСтавкиНДС с фильтрацией по дате.
          — Результат запроса выгружается в таблицу значений и используется для заполнения нужных реквизитов или табличных частей.
          — В конце объект сохраняется.
          — Обработка ошибок и возврат результата для длительной операции.

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

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

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

            В форме типа ОбработкаТабличнаяЧасть.ПодборНоменклатурыМатериалы.НоменклатураДляПодбора для отбора строки по ссылке на номенклатуру нужно работать с табличной частью формы — обычно это ЭлементыФормы.Номенклатура или аналогичный элемент.

            Чтобы отфильтровать строки по ссылке на номенклатуру, можно сделать так:

            Где:

            ЭлементыФормы.Номенклатура — элемент табличной части с данными номенклатуры (название может отличаться, смотрите в вашей форме).
            СсылкаНоменклатуры — ссылка на нужный элемент справочника Номенклатура.

            Если нужно именно отфильтровать (сделать отбор, чтобы в списке осталась только эта строка), то можно использовать фильтр элемента формы:

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

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

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

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

              |Цена = ТиСиЭМ.ОкрД(ВыбСтрока.Цена * (100 + ПроцентНадбавки) / 100, ДатаДокумента);

              а нужно убрать округление, есть несколько вариантов без снятия с поддержки:

              1. Переопределить процедуру ТаблицаНоменклатурыВыбор в расширении
              В расширении создайте процедуру с таким же именем и параметрами, скопируйте код из основной конфигурации, но замените строку с округлением на:

              |Цена = ВыбСтрока.Цена * (100 + ПроцентНадбавки) / 100;

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

              2. Использовать глобальную переменную или флаг для отключения округления
              В модуле расширения объявить глобальную булеву переменную, например, ОтключитьОкругление = Истина;
              В функции ТиСиЭМ.ОкрД (если у вас есть доступ к ней через расширение) добавить проверку этого флага и если он установлен — возвращать значение без округления.
              Но в типовых конфигурациях функция ОкрД обычно в библиотеке и не доступна для изменения.
              Можно попробовать через расширение модуля библиотеки (если разрешено) или через глобальный обработчик ошибок/логики.

              3. Обойти вызов функции округления, передавая уже округленное значение
              Если ТиСиЭМ.ОкрД вызывается только в этом месте, можно в расширении перехватить событие выбора строки (если есть) и заменить значение цены уже после вызова процедуры.
              Например, в событии формы или элемента управления после выбора строки переписать цену без округления.

              4. Использовать контекст вызова (стек вызовов) в функции округления
              В самой функции ТиСиЭМ.ОкрД (если есть доступ) можно получить стек вызовов через СтекВызовов() и проверить, вызывается ли она из процедуры ТаблицаНоменклатурыВыбор. Если да — не округлять.
              Но это возможно только если вы можете изменить функцию ОкрД, что в типовых конфигурациях обычно запрещено.

              5. Создать свою функцию округления без округления и использовать её в расширении
              В расширении создать функцию, например, ОкрДБезОкругления(Значение), которая просто возвращает значение без изменений.
              В процедуре ТаблицаНоменклатурыВыбор в расширении заменить вызов ТиСиЭМ.ОкрД на ОкрДБезОкругления.
              Но опять же, придется переопределять процедуру.

              Резюме по вашему вопросу:
              — В расширении нельзя напрямую изменить поведение функции ТиСиЭМ.ОкрД или процедуры ТаблицаНоменклатурыВыбор в обычной форме.
              — Самый безопасный и поддерживаемый способ — переопределить процедуру ТаблицаНоменклатурыВыбор в расширении, скопировав код и убрав вызов округления.
              — Если процедура большая и сложная, можно вызвать оригинал, а потом переписать цену без округления.
              — Использование стека вызовов для определения контекста в функции округления возможно только при доступе к её коду.

              Если нужна помощь с примером кода переопределения процедуры в расширении — могу помочь.
              Рекомендую посмотреть здесь, как работать с расширениями и переопределять процедуры:
              https://infostart.ru/public/1044329/
              https://infostart.ru/public/1044330/

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

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

                Да, при формировании листа Excel из 1С через COM-объект можно вставить в ячейку формулу, например, чтобы значение в первой колонке было произведением значений из второй и третьей колонок. Тогда при ручном изменении значений в этих колонках Excel автоматически пересчитает формулу в первой ячейке.

                Пример записи формулы с использованием R1C1-стиля адресации:

                Если предпочитаете использовать A1-стиль, формула будет выглядеть так:

                Для вставки таких формул в несколько строк (например, с 1 по N) можно использовать цикл:

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

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

                  В УТП (Управление торговлей, подсистема продаж) при включённом версионировании документов (например, Заказ покупателя) версии документа хранятся в системных таблицах базы данных, а в конфигурации — в специальных регистрах сведений.

                  Конкретно:

                  1. Объект версионирования в конфигурации — это механизм, который создаёт для документа дополнительный регистр сведений, где хранятся версии документа.

                  2. Для документа «Заказ покупателя» версии хранятся в регистре сведений с именем, примерно похожим на:

                  или

                  (точное имя зависит от конкретной версии конфигурации и настроек).

                  3. В этом регистре сведений хранятся записи с полями:

                  — Ссылка на документ (Заказ покупателя)
                  — Номер версии
                  — Дата и время создания версии
                  — Содержимое версии (обычно в виде сериализованного объекта или набора реквизитов)
                  — Автор версии
                  — Комментарии к версии (если предусмотрено)

                  4. В базе данных (SQL) версии хранятся в таблице регистра сведений, например:

                  где GUID — уникальный идентификатор регистра.

                  5. В конфигурации версии можно получить через объекты метаданных, например:

                  6. Для просмотра версий в интерфейсе обычно используется стандартная форма «История версий» документа.

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

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

                  — Откройте конфигурацию
                  — Найдите объект «Документ.ЗаказПокупателя»
                  — Посмотрите связанные регистры сведений с названием, содержащим «Версии» или «История»
                  — В свойствах регистра будет указано, что он связан с версионированием документа

                  Рекомендую посмотреть здесь, там подробно про версионирование в УТП:

                  https://infostart.ru/public/1188857/ (пример работы с версиями документов в УТ/УТП)

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

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

                    Да, в УНФ 1.6 именно так и работает: если в карточке номенклатуры поле «Ставка НДС» не заполнено, то при формировании документов ставка НДС подставляется из настроек организации, указанной в документе.

                    Поэтому, чтобы ставка НДС бралась из организации, достаточно в номенклатуре очистить поле «Ставка НДС» (оставить пустым). Тогда при создании документов система автоматически возьмёт ставку из организации.

                    Если у вас сейчас в номенклатуре стоит 20% — просто удалите это значение, сохраните номенклатуру, и дальше ставка НДС будет подтягиваться из организации.

                    Проверьте также, что в карточке организации в реквизите «Ставка НДС» или в настройках налогового учёта организации указана нужная ставка.

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

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

                      Тормоза 1С под Linux при запуске с правами суперпользователя (root) часто связаны с особенностями работы платформы и системы безопасности. Вот основные причины:

                      1. Проблемы с правами и безопасностью
                      Платформа 1С не рекомендует запускать клиент или сервер под root, так как это может приводить к конфликтам с механизмами безопасности, например, SELinux, AppArmor, или системными ограничениями. Это может замедлять работу из-за дополнительных проверок или блокировок.

                      2. Неправильные права на файлы и каталоги
                      Если 1С запущена под root, а база или каталоги имеют права, не соответствующие пользователю root, возможны задержки при доступе к файлам, особенно если используются сетевые диски или NFS.

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

                      4. Отсутствие или неправильная настройка системных ресурсов
                      Запуск под root может влиять на лимиты ресурсов (ulimit), которые отличаются от обычного пользователя, что может приводить к задержкам.

                      5. Проблемы с графическим окружением
                      Если запускается тонкий клиент 1С под root, могут быть проблемы с доступом к X-серверу или Wayland, что замедляет интерфейс.

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

                      — Запускайте 1С под обычным пользователем, специально созданным для работы с 1С.
                      — Проверьте права на каталоги и файлы базы, чтобы они были доступны пользователю 1С.
                      — Проверьте настройки SELinux/AppArmor и при необходимости временно отключите или настройте исключения.
                      — Проверьте настройки сети и DNS для пользователя root и обычного пользователя.
                      — Проверьте системные лимиты ресурсов (ulimit) для пользователя 1С.

                      Если нужна конкретика, приложите логи или опишите конфигурацию сервера и способ запуска 1С.

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

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

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

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

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

                          В 1С:Бухгалтерия 3.0 нет стандартного механизма, который автоматически подтягивал бы адрес контрагента из карточки в форму ввода реквизитов документа «Статистическая форма учета перемещения товаров», особенно с учётом проверки страны (Казахстан). Для этого нужно доработать обработку формы ввода реквизитов, добавив обработчик события изменения поля контрагента.

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

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

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

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

                          Для удобства и поддержки лучше оформить эту логику в общем модуле или в обработчике формы.

                          Если нужна помощь с конкретным кодом под вашу конфигурацию, уточните версию и структуру справочника Контрагенты, а также форму документа.

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

                            В 1С:Бухгалтерия 3.0 нет стандартного механизма, который автоматически подтягивал бы адрес контрагента из карточки в форму ввода реквизитов документа «Статистическая форма учета перемещения товаров», особенно с учётом проверки страны (Казахстан). Для этого нужно доработать обработку формы ввода реквизитов, добавив обработчик события изменения поля контрагента.

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

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

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

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

                            Для удобства и поддержки лучше оформить эту логику в общем модуле или в обработчике формы.

                            Если нужна помощь с конкретным кодом под вашу конфигурацию, уточните версию и структуру справочника Контрагенты, а также форму документа.

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

                              В 1С:Бухгалтерия 3.0 нет стандартного механизма, который автоматически подтягивал бы адрес контрагента из карточки в форму ввода реквизитов документа «Статистическая форма учета перемещения товаров», особенно с учётом проверки страны (Казахстан). Для этого нужно доработать обработку формы ввода реквизитов, добавив обработчик события изменения поля контрагента.

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

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

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

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

                              Для удобства и поддержки лучше оформить эту логику в общем модуле или в обработчике формы.

                              Если нужна помощь с конкретным кодом под вашу конфигурацию, уточните версию и структуру справочника Контрагенты, а также форму документа.

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

                                В 1С:Бухгалтерия 3.0 нет стандартного механизма, который автоматически подтягивал бы адрес контрагента из карточки в форму ввода реквизитов документа «Статистическая форма учета перемещения товаров», особенно с учётом проверки страны (Казахстан). Для этого нужно доработать обработку формы ввода реквизитов, добавив обработчик события изменения поля контрагента.

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

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

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

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

                                Для удобства и поддержки лучше оформить эту логику в общем модуле или в обработчике формы.

                                Если нужна помощь с конкретным кодом под вашу конфигурацию, уточните версию и структуру справочника Контрагенты, а также форму документа.

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

                                  В 1С:Бухгалтерия 3.0 нет стандартного механизма, который автоматически подтягивал бы адрес контрагента из карточки в форму ввода реквизитов документа «Статистическая форма учета перемещения товаров», особенно с учётом проверки страны (Казахстан). Для этого нужно доработать обработку формы ввода реквизитов, добавив обработчик события изменения поля контрагента.

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

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

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

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

                                  Для удобства и поддержки лучше оформить эту логику в общем модуле или в обработчике формы.

                                  Если нужна помощь с конкретным кодом под вашу конфигурацию, уточните версию и структуру справочника Контрагенты, а также форму документа.

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