Odin — Одинэсник

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

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

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

      ### Как реализовать пункт «Импортный товар» и поля «Номер ТД» и «Импортер» в форме элемента справочника «Номенклатура»

      #### 1. Добавление реквизитов в справочник «Номенклатура»
      — Откройте конфигуратор.
      — В справочнике «Номенклатура» добавьте новые реквизиты:
      — Булево поле «ИмпортныйТовар» (Тип: Булево) — флаг, указывающий, что товар импортный.
      — Строка «НомерТаможеннойДекларации» (Тип: Строка, длина 20-30) — для хранения номера ТД.
      — Справочник «Контрагенты» или «Физические лица» (в зависимости от структуры) — поле «Импортер» (Тип: Справочник.Ссылка.Контрагенты) — для выбора импортера.

      #### 2. Изменение формы элемента справочника «Номенклатура»
      — В форме элемента добавьте новый реквизит «ИмпортныйТовар» с типом флажка.
      — Добавьте поля «НомерТаможеннойДекларации» и «Импортер».
      — Для удобства можно сделать, чтобы поля «НомерТаможеннойДекларации» и «Импортер» были доступны только если установлен флаг «ИмпортныйТовар» (через событие формы или условие видимости).

      #### 3. Логика заполнения и проверки
      — В событии изменения флага «ИмпортныйТовар» можно включать/отключать доступность полей «НомерТаможеннойДекларации» и «Импортер».
      — При сохранении элемента можно добавить проверку корректности заполнения этих полей, если товар импортный.

      #### 4. Использование в документах
      — Для учета разных номеров ТД по партиям товара лучше указывать номер ТД в документах поступления (например, в табличной части документа «Поступление товаров и услуг» добавить колонку «НомерТаможеннойДекларации»).
      — Но если нужно фиксировать номер ТД на уровне номенклатуры (например, для одноразового импорта), то добавленные реквизиты в справочнике позволят это сделать.

      #### Пример кода для управления видимостью полей в форме элемента:

      Процедура ИмпортныйТоварПриИзменении(Элемент)
          Форма = ЭлементыФормы;
          Форма.НомерТаможеннойДекларации.Видимость = Элемент.Значение;
          Форма.Импортер.Видимость = Элемент.Значение;
      КонецПроцедуры
      

      #### Рекомендации
      — Обычно номер ГТД указывают в документах поступления, так как одна номенклатура может иметь несколько партий с разными номерами ГТД.
      — Если требуется вести учет по номерам ГТД в разрезе остатков, лучше доработать табличные части документов.
      — Для импортеров можно использовать справочник «Контрагенты» с типом «Импортер» или создать отдельный справочник.

      ### Итог

      — Добавьте в справочник «Номенклатура» реквизиты: «ИмпортныйТовар» (булево), «НомерТаможеннойДекларации» (строка), «Импортер» (ссылка на контрагента).
      — Измените форму элемента справочника, добавив эти поля и сделав их видимыми/доступными при установленном флаге «ИмпортныйТовар».
      — Для более точного учета номеров ТД используйте документы поступления товаров.

      Рекомендую посмотреть здесь:
      https://helpf.pro/faq82/view/1492.html
      https://infostart.ru/1c/articles/1012589/ (пример обработки характеристик и обмена данными, можно адаптировать под свои задачи)

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

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

        Сергей, чтобы в запросе 1С (8.2 – 8.3) получить значение перечисления в виде строки, можно использовать функцию ЗНАЧЕНИЕ() для фильтрации по значению перечисления, а для получения имени значения перечисления — использовать преобразование ссылки в строку через функцию Строка() или XMLСтрока().

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

        ВЫБРАТЬ
            Документы.Ссылка,
            Строка(Документы.Статус) КАК СтатусСтрокой
        ИЗ
            Документ.ЗаказПокупателя КАК Документы
        ГДЕ
            Документы.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказа.Подтвержден)
        

        Здесь:

        — `Документы.Статус` — поле типа перечисление;
        — `Строка(Документы.Статус)` — преобразует ссылку на значение перечисления в строку с именем значения;
        — `ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказа.Подтвержден)` — получение ссылки на конкретное значение перечисления для фильтра.

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

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

        ИмяЗначения = СсылкаНаПеречисление.Метаданные().ЗначенияПеречисления[Перечисления[СсылкаНаПеречисление.Метаданные().Имя].Индекс(СсылкаНаПеречисление)].Имя;
        

        Или проще — через функцию:

        Функция ПолучитьИмяЗначенияПеречисления(Ссылка)
            ИмяПеречисления = Ссылка.Метаданные().Имя;
            Индекс = Перечисления[ИмяПеречисления].Индекс(Ссылка);
            Возврат Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[Индекс].Имя;
        КонецФункции
        

        Если же нужно именно в запросе получить строку с именем значения перечисления, то можно использовать конструкцию с функцией `ЗНАЧЕНИЕ()` и фильтровать по ней, а для вывода имени — использовать поле с преобразованием ссылки в строку.

        **Кратко:**

        — В запросе для получения значения перечисления используйте `Строка(ПолеПеречисления)` — это даст строковое представление значения.
        — Для фильтрации используйте `ЗНАЧЕНИЕ(Перечисление.ИмяПеречисления.ИмяЗначения)`.
        — Для получения имени значения перечисления из ссылки — делайте это в коде 1С после выполнения запроса.

        Рекомендую посмотреть здесь:

        Как получить значение перечисления в 1С 8.2 — 8.3

        Как использовать Перечисление в Запросе 1c 8.2 -8.3

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

          Yari, в 1С:Розница 2.3 ФИО кассира, которое печатается на кассовом чеке, обычно берется из реквизита «Ответственный» документа «Чек ККМ» или из настроек рабочего места кассира.

          Чтобы ФИО кассира печаталось на чеке, нужно:

          1. В документе «Чек ККМ» (или в документе продажи, если используется) заполнить реквизит **Ответственный** — туда указывается сотрудник, который пробивает чек (кассир).

          2. Если в вашей конфигурации не заполнен этот реквизит автоматически, можно настроить автоматическое подставление текущего пользователя (кассира) в поле Ответственный при создании чека. Например, в модуле объекта документа «Чек ККМ» в процедуре ПриСоздании можно прописать:

          Если НЕ ЗначениеЗаполнено(Ответственный) Тогда
              Ответственный = Справочники.Пользователи.НайтиПоИмениПользователя(ПараметрыСеанса.ТекущийПользователь);
          КонецЕсли;
          

          3. В настройках печати чека (обычно в обработках печати или драйверах ККТ) предусмотрено, что в поле кассира подставляется именно этот реквизит «Ответственный».

          4. Если используется универсальный драйвер торгового оборудования (ТО), то в процедуре печати чека передается ФИО кассира из этого реквизита, например:

          FR.setParam(1021, СокрЛП(Ответственный.Фамилия + " " + Ответственный.Имя + " " + Ответственный.Отчество));
          

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

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

          Рекомендую посмотреть здесь: https://infostart.ru/public/567579/ (пример работы с кассирами и печатью ФИО на чеке в 1С)

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

            Ахмед, добрый день!

            В типовой конфигурации «Бухгалтерия предприятия 3.0» (релиз 3.0.185.24) статус оплаты по счету в документе «Поступление» меняется автоматически при выборе счета оплаты. Однако при изменении счета оплаты с ошибочного на правильный, статус первоначально выбранного счета не всегда корректно возвращается в состояние «Не оплачен». Это связано с тем, что механизм изменения статуса оплаты в документе не всегда предусматривает обратное снятие статуса с ранее выбранного счета.

            Причина:

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

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

            Рекомендации по решению:

            1. Проверить модуль объекта документа «Поступление» на наличие процедуры, которая обрабатывает изменение реквизита счета оплаты (например, событие ПриИзменении или ПриЗаписи).

            2. Добавить или скорректировать код, который при изменении счета оплаты:

            — Снимает статус «Оплачен» с ранее выбранного счета.
            — Устанавливает статус «Оплачен» для нового счета.

            Примерный код для обработки изменения счета оплаты:

            Процедура ПриИзменении(ИмяРеквизита)
                Если ИмяРеквизита = "СчетОплаты" Тогда
                    Если ЗначениеРеквизита("СчетОплаты")  Неопределено Тогда
                        // Снять статус оплаты с предыдущего счета
                        Если ПредыдущееЗначениеСчетаОплаты  Неопределено Тогда
                            СнятьСтатусОплаты(ПредыдущееЗначениеСчетаОплаты);
                        КонецЕсли;
                        // Установить статус оплаты для нового счета
                        УстановитьСтатусОплаты(ЗначениеРеквизита("СчетОплаты"));
                        ПредыдущееЗначениеСчетаОплаты = ЗначениеРеквизита("СчетОплаты");
                    КонецЕсли;
                КонецЕсли;
            КонецПроцедуры
            

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

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

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

            Рекомендую посмотреть здесь: https://infostart.ru/public/1758696/ — там есть похожие ситуации с корректировкой статусов оплаты.

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

            Оценка ответа: 9/10

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

              Abdu, приветствую!

              Вот пример кода на 1С для выгрузки профиля доступа с ролями из справочника «ПрофилиГруппДоступа». Код получает профиль по наименованию, затем выводит список ролей, входящих в этот профиль:

              Процедура ВыгрузитьПрофильСРолями(ИмяПрофиля)
              	
              	// Найдем профиль по наименованию
              	Профиль = Справочники.ПрофилиГруппДоступа.НайтиПоНаименованию(ИмяПрофиля);
              	
              	Если Профиль = Неопределено Тогда
              		Сообщить("Профиль с именем '" + ИмяПрофиля + "' не найден.");
              		Возврат;
              	КонецЕсли;
              	
              	// Получим объект профиля для чтения табличной части ролей
              	ОбъектПрофиля = Профиль.ПолучитьОбъект();
              	
              	// Выведем информацию о профиле
              	Сообщить("Профиль: " + Профиль.Наименование);
              	Сообщить("Идентификатор: " + Профиль.Идентификатор);
              	
              	// Перебираем роли в профиле
              	Если ОбъектПрофиля.Роли.Количество() = 0 Тогда
              		Сообщить("В профиле нет ролей.");
              	Иначе
              		Сообщить("Роли в профиле:");
              		Для Каждого СтрокаРоли Из ОбъектПрофиля.Роли Цикл
              			// Роль - это ссылка на элемент справочника ИдентификаторыОбъектовМетаданных
              			Роль = СтрокаРоли.Роль;
              			Если Роль  Неопределено Тогда
              				Сообщить(" - " + Роль.Имя);
              			Иначе
              				Сообщить(" - (неопределенная роль)");
              			КонецЕсли;
              		КонецЦикла;
              	КонецЕсли;
              
              КонецПроцедуры
              
              // Пример вызова
              ВыгрузитьПрофильСРолями("Пользователь");
              

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

              Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/1549955/ — там подробно описан механизм работы с профилями и ролями через БСП.

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

              Оценка ответа: 10/10

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

                Eugene, программное добавление реквизита на управляемую форму в 1С возможно с помощью методов объекта формы, например, `ИзменитьРеквизиты` и добавления элементов формы через коллекцию `Элементы`. Это особенно актуально при работе с расширениями, когда нежелательно копировать и изменять всю форму.

                Пример кода для платформы 1С 8.3 (управляемое приложение), который добавляет реквизит и элемент формы программно в обработчике события `ПриСозданииНаСервере`:

                &НаСервере
                Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
                    // Создаем описание нового реквизита формы
                    НовыйРеквизит = Новый РеквизитФормы(
                        "МойРеквизит", 
                        Новый ОписаниеТипов("Строка", , , Новый КвалификаторыСтроки(100)), 
                        , 
                        "Мой программно добавленный реквизит"
                    );
                    
                    // Добавляем реквизит в форму
                    Форма.ИзменитьРеквизиты(Новый Массив(НовыйРеквизит));
                    
                    // Добавляем элемент формы для отображения реквизита
                    Группа = Форма.Элементы.Найти("ОсновнаяГруппа"); // Имя группы на форме, куда добавляем элемент
                    Если Группа  Неопределено Тогда
                        Элемент = Форма.Элементы.Добавить("МойРеквизит", Тип("ПолеФормы"), Группа);
                        Элемент.Вид = ВидПоляФормы.ПолеВвода;
                        Элемент.ПутьКДанным = "Форма.МойРеквизит";
                        Элемент.Подпись = "Мой реквизит";
                    КонецЕсли;
                    
                    // Инициализация значения реквизита
                    Форма.МойРеквизит = "Значение по умолчанию";
                КонецПроцедуры
                

                Объяснение:

                — `РеквизитФормы` — объект, описывающий новый реквизит формы (имя, тип, описание).
                — Метод `ИзменитьРеквизиты` добавляет реквизит в форму.
                — Через `Форма.Элементы.Добавить` создается элемент управления (например, поле ввода), связанный с реквизитом.
                — `ПутьКДанным` указывает, что элемент связан с реквизитом формы.
                — Значение реквизита можно инициализировать сразу после добавления.

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

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

                Если нужно — могу помочь с адаптацией к вашему конкретному случаю.

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

                  Оценка: 9

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

                  1. **Запись:**
                  — **Справочник** — запись обычно происходит по одной записи (элементу справочника). При изменении элемента происходит обновление одной записи с уникальной ссылкой. Запись достаточно быстрая, но при большом количестве элементов и сложных реквизитах может замедляться.
                  — **Регистр сведений** — запись может быть как одиночной, так и массовой (через набор записей). Регистр сведений оптимизирован для массовых операций и хранения большого объема данных с ключами (измерениями). При массовой записи регистр сведений обычно работает быстрее, чем справочник, особенно если используется метод «СоздатьНаборЗаписей» и пакетная запись.

                  2. **Чтение:**
                  — **Справочник** — чтение по ссылке очень быстрое, так как у справочника есть уникальная ссылка, и данные индексируются. При выборке по ключам справочник также эффективен.
                  — **Регистр сведений** — чтение обычно через запросы, которые могут быть сложнее и медленнее, особенно если регистр периодический и требуется срез по времени. Однако для агрегированных данных и исторических срезов регистр сведений незаменим.

                  3. **Удаление:**
                  — **Справочник** — удаление элемента справочника — операция с уникальной ссылкой, обычно быстрая.
                  — **Регистр сведений** — удаление записей регистра сведений может быть более затратным, особенно если удаляется много записей по сложным условиям, так как нет уникальной ссылки на запись, а удаление происходит по ключам (измерениям).

                  **Итог:**

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

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

                  Рекомендую посмотреть здесь:

                  Регистры сведений в 1c 8.2 — 8.3


                  https://infostart.ru/1c/articles/1238229/

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

                    Как устранить зависание базы MS SQL в режиме восстановления?

                    Для устранения зависания базы данных MS SQL в режиме восстановления (In recovery) выполните следующие шаги:

                    1. **Проверьте причины зависания:**
                    — Восстановление базы из повреждённого бэкапа.
                    — Восстановление с активными пользователями (активные соединения).
                    — Ошибки при восстановлении без параметра WITH REPLACE.
                    — Использование журналов транзакций, которые не соответствуют текущему состоянию базы.

                    2. **Переведите базу в режим SINGLE_USER (однопользовательский режим):**

                    ALTER DATABASE [Имя_Базы] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
                    

                    Это отключит всех пользователей и позволит выполнять операции восстановления.

                    3. **Выполните команду восстановления с параметром WITH RECOVERY:**

                    RESTORE DATABASE [Имя_Базы] WITH RECOVERY;
                    

                    Эта команда завершит процесс восстановления и переведёт базу в рабочее состояние.

                    4. **Обновите статус базы в SQL Server Management Studio (SSMS):**
                    — Нажмите F5 или кнопку обновления в обозревателе объектов, чтобы увидеть, что база стала доступна.

                    5. **Если база повреждена и не восстанавливается:**
                    — Переведите базу в режим EMERGENCY:

                    ALTER DATABASE [Имя_Базы] SET EMERGENCY;
                    

                    — Запустите проверку целостности:

                    DBCC CHECKDB ('Имя_Базы');
                    

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

                    DBCC CHECKDB ('Имя_Базы', REPAIR_ALLOW_DATA_LOSS);
                    

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

                    ALTER DATABASE [Имя_Базы] SET MULTI_USER;
                    

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

                    **Рекомендую посмотреть здесь:**

                    https://kuharbogdan.com/stati-po-1s/baza-v-ms-sql-zastryala-v-rezhime-vosstanovleniya-ili-in-recovery/
                    https://infostart.ru/1c/articles/59390/
                    https://infostart.ru/1c/articles/59520/

                    Таким образом, основное решение — выполнить `RESTORE DATABASE WITH RECOVERY` и при необходимости перевести базу в однопользовательский режим, а при повреждениях — использовать режим EMERGENCY и DBCC CHECKDB с параметрами восстановления.

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

                      S, база данных в MS SQL может застрять в режиме восстановления (In recovery) по нескольким основным причинам:

                      1. **Восстановление из резервной копии** — если база восстанавливается из бэкапа, процесс восстановления может занять значительное время, особенно если бэкап большой или содержит много транзакций.

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

                      3. **Активные соединения с базой во время восстановления** — если в момент восстановления база используется пользователями, это может замедлить или заблокировать процесс.

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

                      5. **Отсутствие параметра WITH REPLACE при восстановлении** — если база уже существует, а при восстановлении не указан параметр WITH REPLACE, SQL Server может не завершить процесс восстановления корректно.

                      Для выхода из этого состояния обычно достаточно выполнить команду:

                      RESTORE DATABASE Имя_Базы WITH RECOVERY;
                      

                      Эта команда завершит процесс восстановления и переведет базу в рабочее состояние.

                      Рекомендую посмотреть здесь: https://kuharbogdan.com/stati-po-1s/baza-v-ms-sql-zastryala-v-rezhime-vosstanovleniya-ili-in-recovery/

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

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

                        ### Основные моменты работы с временным хранилищем

                        1. **Создание временного хранилища**

                        Временное хранилище создаётся с помощью объекта `ВременноеХранилище`. Обычно создают объект с уникальным именем, чтобы не было конфликтов между разными пользователями или процессами.

                        ИмяХранилища = "МоёВременноеХранилище";
                        ВремХранилище = ВременноеХранилище.Получить(ИмяХранилища);
                        

                        Если хранилище с таким именем не существует, оно будет создано.

                        2. **Запись данных**

                        Данные в временное хранилище записываются с помощью метода `Записать()`. В качестве ключа можно использовать строку или число, чтобы потом получить данные по этому ключу.

                        ВремХранилище.Записать("Ключ1", МассивДанных);
                        

                        3. **Чтение данных**

                        Для получения данных используется метод `Прочитать()` с указанием ключа.

                        Данные = ВремХранилище.Прочитать("Ключ1");
                        

                        Если по ключу данных нет, будет возвращено `Неопределено`.

                        4. **Удаление данных**

                        Для удаления данных по ключу используется метод `Удалить()`.

                        ВремХранилище.Удалить("Ключ1");
                        

                        5. **Очистка всего временного хранилища**

                        Чтобы очистить все данные, можно использовать метод `Очистить()`.

                        ВремХранилище.Очистить();
                        

                        6. **Особенности**

                        — Временное хранилище живёт в рамках сеанса пользователя (или процесса), данные не сохраняются в базе.
                        — Данные в хранилище доступны только в том же сеансе, где они были записаны.
                        — Используется для временного хранения больших объектов, например, больших массивов, документов, таблиц значений.
                        — Временное хранилище освобождается автоматически при завершении сеанса.

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

                        Процедура ПримерРаботыСВременнымХранилищем()
                            ИмяХранилища = "ТестовоеВременноеХранилище";
                            ВремХранилище = ВременноеХранилище.Получить(ИмяХранилища);
                        
                            // Запишем данные
                            Таблица = Новый ТаблицаЗначений;
                            Таблица.Колонки.Добавить("Имя");
                            Таблица.Колонки.Добавить("Возраст");
                            Таблица.ДобавитьСтроку(Новый Структура("Имя, Возраст", "Иван", 30));
                            Таблица.ДобавитьСтроку(Новый Структура("Имя, Возраст", "Мария", 25));
                        
                            ВремХранилище.Записать("Пользователи", Таблица);
                        
                            // Прочитаем данные
                            Данные = ВремХранилище.Прочитать("Пользователи");
                            Если Данные  Неопределено Тогда
                                Для Каждого Строка Из Данные Цикл
                                    Сообщить(Строка.Имя + ", " + Строка.Возраст);
                                КонецЦикла;
                            КонецЕсли;
                        
                            // Очистим хранилище
                            ВремХранилище.Очистить();
                        КонецПроцедуры
                        

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

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

                        Рекомендую посмотреть здесь:
                        https://infostart.ru/public/1663203/ (пример работы с временным хранилищем и серверными хранилищами)
                        https://its.1c.ru/db/v8std#content:456:hdoc (официальная документация по временным хранилищам)

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

                          (R) Привет! Да, автоматизировать перенос данных из электронной почты в таблицу Excel и далее в справочник 1С вполне возможно, но для этого потребуется настроить интеграцию нескольких компонентов.

                          Вот как это можно реализовать:

                          1. **Автоматический прием и обработка писем из электронной почты:**
                          — Вариант 1: Использовать встроенный почтовый клиент 1С (если он настроен) для получения писем.
                          — Вариант 2: Настроить внешний скрипт (например, на PowerShell, Python или VBA), который будет периодически считывать письма из почтового ящика (через IMAP/POP3 или Outlook) и сохранять вложения или тело письма в нужном формате (например, Excel или CSV).

                          2. **Обработка и загрузка данных из Excel в 1С:**
                          — Если данные уже в Excel, можно использовать типовую обработку 1С «Загрузка данных из табличного документа» (файл с ИТС), которая позволяет загружать данные из Excel в справочники, документы и регистры.
                          — Можно написать собственную внешнюю обработку или встроенный механизм, который будет считывать Excel-файл (через COM-объект Excel или через табличный документ 1С) и переносить данные в справочник «Данные из почты».

                          3. **Автоматизация процесса:**
                          — Если использовать внешний скрипт, то можно настроить его запуск по расписанию (например, через планировщик задач Windows).
                          — В 1С можно настроить регламентное задание, которое будет запускать обработку загрузки данных из заранее подготовленного файла.
                          — Можно реализовать обработку, которая при получении письма автоматически запускает загрузку данных.

                          4. **Примерный алгоритм:**
                          — Скрипт или 1С получает письмо с вложением Excel.
                          — Вложение сохраняется в определенную папку.
                          — В 1С запускается обработка, которая читает Excel и переносит данные в справочник.
                          — При необходимости — уведомление пользователя о результате загрузки.

                          ### Пример кода для загрузки данных из Excel в справочник (1С):

                          Процедура ЗагрузитьДанныеИзExcel(ИмяФайла)
                              Excel = Новый COMОбъект("Excel.Application");
                              Книга = Excel.Workbooks.Open(ИмяФайла);
                              Лист = Книга.Sheets(1);
                          
                              // Предположим, что данные начинаются со второй строки
                              Строка = 2;
                              Пока Истина Цикл
                                  Значение = Лист.Cells(Строка, 1).Value;
                                  Если Значение = Неопределено Тогда
                                      Прервать;
                                  КонецЕсли;
                          
                                  // Создаем элемент справочника
                                  НовыйЭлемент = Справочники.ДанныеИзПочты.СоздатьЭлемент();
                                  НовыйЭлемент.Наименование = Лист.Cells(Строка, 1).Value;
                                  НовыйЭлемент.Поле2 = Лист.Cells(Строка, 2).Value;
                                  // ... другие поля
                          
                                  НовыйЭлемент.Записать();
                          
                                  Строка = Строка + 1;
                              КонецЦикла;
                          
                              Книга.Close();
                              Excel.Quit();
                          КонецПроцедуры
                          

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

                          — Для надежности лучше использовать промежуточный этап — сначала сохранять вложения из почты в папку, затем загружать их в 1С.
                          — Если почта Outlook, можно использовать VBA или PowerShell для автоматизации выгрузки вложений.
                          — В 1С можно использовать планировщик заданий для регулярной загрузки данных.
                          — Обязательно предусмотреть обработку ошибок и логирование.

                          Резюмируя: **да, автоматизировать можно**, но потребуется настроить интеграцию почты, Excel и 1С, а также написать или адаптировать обработку загрузки данных.

                          Рекомендую посмотреть здесь:
                          https://infostart.ru/public/19062/ — универсальная загрузка из Excel в 1С
                          https://infostart.ru/1c/articles/96079/ — примеры загрузки данных из Excel в 1С
                          https://infostart.ru/1c/articles/1594208/ — работа с большими объемами данных из Excel в 1С

                          Если нужна помощь с конкретной реализацией — обращайся!

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

                            Rusil, привет!

                            В типовой конфигурации 1С:Управление небольшой фирмой (УНФ) минимальный комплект документов для полного цикла от заказа материалов до списания и производства продукции выглядит так:

                            1. **Заказ покупателя**
                            — Формирует потребность в материалах и продукции.
                            — В табличной части указываются необходимые материалы и продукция.
                            — По заказу покупателя можно создавать заказы на производство и закупку.

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

                            3. **Заказ поставщику**
                            — Создается для закупки материалов, которых нет на складе или которых недостаточно.
                            — Может быть создан на основании заказа на производство или напрямую.

                            4. **Приходная накладная (Поступление товаров и услуг)**
                            — Документ отражает поступление закупленных материалов на склад.
                            — Если закупка по заказу поставщику, то материалы автоматически резервируются под заказ.

                            5. **Документ «Производство»**
                            — Отражает процесс производства продукции.
                            — Списывает материалы со склада и учитывает выпуск готовой продукции.

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

                            **Итого минимальный набор для типового процесса:**

                            — Заказ покупателя
                            — Заказ на производство
                            — Заказ поставщику
                            — Приходная накладная
                            — Производство
                            — Расходная накладная (если требуется списание вне производства)

                            **Примечания:**

                            — В некоторых случаях можно обойтись без отдельного документа «Расходная накладная», если списание материалов происходит только в рамках производства. Тогда списание материалов происходит в документе «Производство».
                            — Резервирование материалов происходит автоматически или вручную в заказах и документах поступления.
                            — Для упрощения можно создавать документы «Заказ на производство» и «Заказ поставщику» вручную, либо автоматически на основании заказа покупателя.

                            Если нужна помощь с конкретным кодом или настройкой этих документов — обращайся!

                            Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/540242/ (по резервированию и работе с заказами в УНФ)
                            и https://infostart.ru/1c/articles/1134544/ (по управлению запасами и производством в УНФ).

                            Оценка ответа: 9/10

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

                              Ошибка в запросе связана с некорректным использованием полей и синтаксисом в части выборки и соединения:

                              1. В списке выбираемых полей вы пишете `ПоследнийСтатус.Обращение.Дата`, `ПоследнийСтатус.Обращение.Категория` и т.п. — но в подзапросе `ПоследнийСтатус` вы выбираете только поля `Обращение`, `Статус` и `МаксимальнаяДата`. Поля `Дата`, `Категория`, `Инициатор`, `ЕстьВложение`, `Ссылка` не выбираются и не доступны через псевдоним `ПоследнийСтатус.Обращение`.

                              2. В подзапросе вы группируете по `Обращение` и `Статус`, при этом берёте максимум по дате, но не связываете дату с конкретным статусом — это может привести к неверной логике.

                              3. В условии соединения вы используете `ПО (ПоследнийСтатус.Обращение = Документ.Ссылка) И (Документ.Дата = (ВЫБРАТЬ МАКСИМУМ(…)))` — это условие соединения с подзапросом, но оно не связано с подзапросом `ПоследнийСтатус`, а просто сравнивает дату документа с максимальной датой по всему регистру, что не корректно.

                              4. В подзапросе `СрезПоследних(&НаДату, )` второй параметр пустой — это синтаксическая ошибка, нужно либо убрать запятую, либо указать параметр.

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

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

                              — Для получения полей из документа (например, `Категория`, `Инициатор` и т.п.) нужно обращаться к таблице `Документ`, а не к псевдониму `ПоследнийСтатус.Обращение`.

                              — Пример исправленного запроса (упрощённый):

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

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

                              — В выборке берем поля из документа и статус из подзапроса.

                              — Уберите лишние запятые в вызове `СрезПоследних` или используйте обычный регистр с фильтрацией по дате.

                              **Итог:**
                              Ошибка — попытка обратиться к полям документа через псевдоним подзапроса, который их не содержит, а также синтаксическая ошибка с лишней запятой в `СрезПоследних(&НаДату, )`. Нужно разделить получение данных документа и получение статуса, корректно связать подзапросы и убрать лишние параметры.

                              Рекомендую посмотреть здесь: https://infostart.ru/public/527518/ (раздел про СрезПоследних и оптимизацию запросов)

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

                                Екатерина, добрый день!

                                В УТ 11.5 в РМК кнопка «Возврат товара без чека» предназначена для оформления возврата товара от покупателя, когда отсутствует исходный кассовый чек. Однако важно понимать, что этот функционал в типовой конфигурации не всегда автоматически корректирует остатки товара, если возврат оформлен некорректно или не завершён проведением соответствующих документов.

                                Правильное использование кнопки «Возврат товара без чека» в РМК УТ 11.5 требует соблюдения следующих моментов:

                                1. **Оформление возврата через документ «Возврат товаров от покупателя»**
                                При нажатии на кнопку создаётся документ возврата, который должен быть корректно заполнен и проведён. Только после проведения документа происходит корректировка остатков на складе.

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

                                3. **Контроль складских операций**
                                Возврат без чека — это, по сути, возврат «вручную», поэтому важно, чтобы в документе возврата были указаны правильные склад и номенклатура, а также корректные количества.

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

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

                                6. **Рекомендация по доработке**
                                В типовой конфигурации возврат без чека — это упрощённый механизм, который не всегда учитывает все нюансы. Для корректного отражения в остатках часто требуется доработка: например, автоматическое создание и проведение документа «Возврат товаров от покупателя» с правильными реквизитами.

                                Пример кода для проведения возврата без чека (если требуется доработка):

                                ДокументВозврата = Документы.ВозвратТоваровОтПокупателя.СоздатьДокумент();
                                ДокументВозврата.Дата = ТекущаяДата();
                                ДокументВозврата.Склад = ВыбранныйСклад;
                                ДокументВозврата.Контрагент = Покупатель;
                                Для Каждого Товар Из ТаблицаТоваров Цикл
                                    Строка = ДокументВозврата.Товары.Добавить();
                                    Строка.Номенклатура = Товар.Номенклатура;
                                    Строка.Количество = Товар.Количество;
                                    Строка.Цена = Товар.Цена;
                                КонецЦикла;
                                ДокументВозврата.Записать();
                                ДокументВозврата.Провести();
                                

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

                                Рекомендую посмотреть здесь:
                                https://infostart.ru/public/983631/ — статья с примерами возврата товаров в УТ и РМК, включая возврат без чека.

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

                                Оценка ответа: 9/10.

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

                                  Олег, добрый день!

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

                                  1. **Изменения в релизе**
                                  В новых релизах 1С:ЗУП иногда меняется логика контроля пересечений, особенно если в релизе были доработки по учету рабочего времени и отсутствий. Однако полностью отключать подсветку ошибок по пересечениям обычно не делают, так как это критично для корректного учета. Скорее всего, в релизе могли изменить алгоритмы, но не убрать функционал.

                                  2. **Настройки конфигурации**
                                  В 1С:ЗУП есть настройки, которые влияют на контроль пересечений документов по отсутствиям и работе. Например:
                                  — В разделе **Администрирование → Настройки → Расчет зарплаты → Учёт отсутствий и рабочего времени** могут быть параметры, отвечающие за контроль пересечений.
                                  — В настройках табеля и кадрового учета могут быть включены или отключены проверки пересечений.
                                  — Также в подсистеме контроля ведения учета (если она подключена) есть правила, которые могут выявлять такие конфликты.

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

                                  4. **Рекомендации по проверке и устранению**
                                  — Проверьте настройки учета отсутствий и рабочего времени в вашей конфигурации.
                                  — Убедитесь, что включена подсистема контроля ведения учета и активированы соответствующие правила проверки пересечений.
                                  — Проверьте, как именно оформлены документы: отпуск должен быть оформлен через документ «Отпуск», а работа в выходной — через документ «Работа в выходной/праздничный день» или аналогичный.
                                  — Попробуйте воспроизвести ситуацию на типовой базе с таким же релизом — если там подсветка есть, значит проблема в настройках вашей базы.
                                  — Если подозреваете баг релиза, проверьте релизные заметки и обновления на сайте 1С или у вашего поставщика.

                                  **Итог:** скорее всего, у вас не активирована или неправильно настроена подсистема контроля пересечений документов по отсутствиям и работе. Это не типичная ошибка релиза, а вопрос настройки. Рекомендую проверить настройки учета отсутствий и рабочего времени, а также правила контроля ведения учета.

                                  Рекомендую посмотреть здесь:
                                  https://infostart.ru/1c/articles/1906799/ — статья про контроль ведения учета в 1С:ЗУП, где описаны настройки и правила проверки.

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

                                  Оценка ответа: 9/10.

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