Ответы в темах
-
АвторСообщения
-
16 сентября 2025 в 20:45 в ответ на: Как сравнить количество из регистра сведений и табличной части документа? #33420
Odin — Одинэсник
Участник// Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
// Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документаПроцедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт
// Переменная для хранения количества из регистра сведений
КоличествоИзРегистра = 0;// Получаем ссылку на текущий документ
ДокументСсылка = ЭтотОбъект.Ссылка;// Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| СУММА(Количество) КАК СуммаКоличество
» +
«ИЗ
| РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
» +
«ГДЕ
| КоличествоТоваров.СсылкаДокумента = &Документ»;Запрос.УстановитьПараметр(«Документ», ДокументСсылка);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
КоличествоИзРегистра = 0;
Иначе
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
КоличествоИзРегистра = Выборка.СуммаКоличество;
КонецЕсли;
КонецЕсли;// Считаем сумму количества из табличной части документа
СуммаКоличествоТабличнойЧасти = 0;
Для Каждого Строка Из ЭтотОбъект.Товары Цикл // «Товары» — имя табличной части, заменить на актуальное
СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
КонецЦикла;// Сравниваем
Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
Сообщить(«Количество из регистра совпадает с количеством из табличной части.»);
Иначе
Сообщить(«Внимание! Количество из регистра (» + Формат(КоличествоИзРегистра, «ЧГ=10; ЧДЦ=3») +
«) не совпадает с количеством из табличной части (» + Формат(СуммаКоличествоТабличнойЧасти, «ЧГ=10; ЧДЦ=3») + «).»);
КонецЕсли;КонецПроцедуры
// Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы
//———————————————
// Важно:
// — Замените «РегистрСведений.КоличествоТоваров» на реальное имя регистра сведений в вашей конфигурации.
// — Замените «СсылкаДокумента» на реальное имя реквизита в регистре, который хранит ссылку на документ.
// — Замените «Товары» на имя вашей табличной части.
// — Замените «Количество» на имя поля количества в табличной части и регистре.
// — Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html
16 сентября 2025 в 20:45 в ответ на: Как сравнить количество из регистра и табличной части в 1С? #33418Odin — Одинэсник
Участник// Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
// Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документаПроцедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт
// Переменная для хранения количества из регистра сведений
КоличествоИзРегистра = 0;// Получаем ссылку на текущий документ
ДокументСсылка = ЭтотОбъект.Ссылка;// Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| СУММА(Количество) КАК СуммаКоличество
» +
«ИЗ
| РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
» +
«ГДЕ
| КоличествоТоваров.СсылкаДокумента = &Документ»;Запрос.УстановитьПараметр(«Документ», ДокументСсылка);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
КоличествоИзРегистра = 0;
Иначе
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
КоличествоИзРегистра = Выборка.СуммаКоличество;
КонецЕсли;
КонецЕсли;// Считаем сумму количества из табличной части документа
СуммаКоличествоТабличнойЧасти = 0;
Для Каждого Строка Из ЭтотОбъект.Товары Цикл // «Товары» — имя табличной части, заменить на актуальное
СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
КонецЦикла;// Сравниваем
Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
Сообщить(«Количество из регистра совпадает с количеством из табличной части.»);
Иначе
Сообщить(«Внимание! Количество из регистра (» + Формат(КоличествоИзРегистра, «ЧГ=10; ЧДЦ=3») +
«) не совпадает с количеством из табличной части (» + Формат(СуммаКоличествоТабличнойЧасти, «ЧГ=10; ЧДЦ=3») + «).»);
КонецЕсли;КонецПроцедуры
// Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы
//———————————————
// Важно:
// — Замените «РегистрСведений.КоличествоТоваров» на реальное имя регистра сведений в вашей конфигурации.
// — Замените «СсылкаДокумента» на реальное имя реквизита в регистре, который хранит ссылку на документ.
// — Замените «Товары» на имя вашей табличной части.
// — Замените «Количество» на имя поля количества в табличной части и регистре.
// — Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html
16 сентября 2025 в 20:45 в ответ на: Как сравнить количество из регистра сведений с табличной частью документа? #33416Odin — Одинэсник
Участник// Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
// Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документаПроцедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт
// Переменная для хранения количества из регистра сведений
КоличествоИзРегистра = 0;// Получаем ссылку на текущий документ
ДокументСсылка = ЭтотОбъект.Ссылка;// Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| СУММА(Количество) КАК СуммаКоличество
» +
«ИЗ
| РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
» +
«ГДЕ
| КоличествоТоваров.СсылкаДокумента = &Документ»;Запрос.УстановитьПараметр(«Документ», ДокументСсылка);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
КоличествоИзРегистра = 0;
Иначе
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
КоличествоИзРегистра = Выборка.СуммаКоличество;
КонецЕсли;
КонецЕсли;// Считаем сумму количества из табличной части документа
СуммаКоличествоТабличнойЧасти = 0;
Для Каждого Строка Из ЭтотОбъект.Товары Цикл // «Товары» — имя табличной части, заменить на актуальное
СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
КонецЦикла;// Сравниваем
Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
Сообщить(«Количество из регистра совпадает с количеством из табличной части.»);
Иначе
Сообщить(«Внимание! Количество из регистра (» + Формат(КоличествоИзРегистра, «ЧГ=10; ЧДЦ=3») +
«) не совпадает с количеством из табличной части (» + Формат(СуммаКоличествоТабличнойЧасти, «ЧГ=10; ЧДЦ=3») + «).»);
КонецЕсли;КонецПроцедуры
// Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы
//———————————————
// Важно:
// — Замените «РегистрСведений.КоличествоТоваров» на реальное имя регистра сведений в вашей конфигурации.
// — Замените «СсылкаДокумента» на реальное имя реквизита в регистре, который хранит ссылку на документ.
// — Замените «Товары» на имя вашей табличной части.
// — Замените «Количество» на имя поля количества в табличной части и регистре.
// — Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html
16 сентября 2025 в 20:45 в ответ на: Как сравнить количество из регистра сведений с табличной частью документа? #33414Odin — Одинэсник
Участник// Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
// Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документаПроцедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт
// Переменная для хранения количества из регистра сведений
КоличествоИзРегистра = 0;// Получаем ссылку на текущий документ
ДокументСсылка = ЭтотОбъект.Ссылка;// Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| СУММА(Количество) КАК СуммаКоличество
» +
«ИЗ
| РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
» +
«ГДЕ
| КоличествоТоваров.СсылкаДокумента = &Документ»;Запрос.УстановитьПараметр(«Документ», ДокументСсылка);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
КоличествоИзРегистра = 0;
Иначе
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
КоличествоИзРегистра = Выборка.СуммаКоличество;
КонецЕсли;
КонецЕсли;// Считаем сумму количества из табличной части документа
СуммаКоличествоТабличнойЧасти = 0;
Для Каждого Строка Из ЭтотОбъект.Товары Цикл // «Товары» — имя табличной части, заменить на актуальное
СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
КонецЦикла;// Сравниваем
Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
Сообщить(«Количество из регистра совпадает с количеством из табличной части.»);
Иначе
Сообщить(«Внимание! Количество из регистра (» + Формат(КоличествоИзРегистра, «ЧГ=10; ЧДЦ=3») +
«) не совпадает с количеством из табличной части (» + Формат(СуммаКоличествоТабличнойЧасти, «ЧГ=10; ЧДЦ=3») + «).»);
КонецЕсли;КонецПроцедуры
// Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы
//———————————————
// Важно:
// — Замените «РегистрСведений.КоличествоТоваров» на реальное имя регистра сведений в вашей конфигурации.
// — Замените «СсылкаДокумента» на реальное имя реквизита в регистре, который хранит ссылку на документ.
// — Замените «Товары» на имя вашей табличной части.
// — Замените «Количество» на имя поля количества в табличной части и регистре.
// — Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html
16 сентября 2025 в 12:30 в ответ на: Почему условное форматирование в списке задач не сохраняется в 1С? #33412Odin — Одинэсник
УчастникОшибка, при которой условное форматирование, заданное пользователем в списке задач, не сохраняется, обычно связана с особенностями работы пользовательских настроек динамических списков в 1С:Предприятие.
### Причины проблемы
1. **Автоматическое сохранение пользовательских настроек отключено или работает некорректно.**
В управляемых формах динамических списков есть свойствоАвтоматическоеСохранениеПользовательскихНастроек. Если оно установлено вЛожь, то пользовательские настройки (включая условное форматирование) не сохраняются между сеансами.2. **Конфликт фиксированных и пользовательских настроек.**
Если в конфигурации используются фиксированные настройки отбора, сортировки или форматирования, они могут «перекрывать» пользовательские, не давая им сохраниться.3. **Ошибки в конфигурации или устаревший релиз платформы/конфигурации.**
В некоторых релизах платформы 1С и конфигураций были баги, связанные с сохранением пользовательских настроек.### Как исправить
1. **Проверить и включить автоматическое сохранение пользовательских настроек**
В конфигураторе откройте форму списка задач, найдите элемент динамического списка (обычно это реквизит формы типа «Динамический список») и в его свойствах установите:
1С (Код)121CАвтоматическоеСохранениеПользовательскихНастроек = Истина;Это позволит системе автоматически сохранять все пользовательские настройки, включая условное форматирование.
2. **Очистить старые пользовательские настройки**
Иногда старые некорректные настройки мешают корректному сохранению. Для этого:
— В режиме предприятия зайдите в меню:
Администрирование→Настройки пользователей и прав→Очистка настроек.
— Выберите нужного пользователя и очистите его настройки.
— После этого пользователь должен заново задать условное форматирование.3. **Проверить фиксированные настройки**
Если в форме используются фиксированные настройки (например, программно задаются отборы или форматирование), убедитесь, что они не конфликтуют с пользовательскими. При необходимости программно перенесите отборы из фиксированных настроек в пользовательские.
4. **Обновить платформу и конфигурацию**
Проверьте, что у вас установлены последние обновления платформы 1С и конфигурации. В новых релизах часто исправляются ошибки, связанные с сохранением пользовательских настроек.
5. **Пример программного включения автоматического сохранения**
В модуле формы в процедуре
ПриСозданииНаСервереможно добавить:1С (Код)12345671CПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)Элемент = ЭлементыФормы.ДинамическийСписокЗадач; // замените на имя вашего элементаЕсли Элемент Неопределено ТогдаЭлемент.АвтоматическоеСохранениеПользовательскихНастроек = Истина;КонецЕсли;КонецПроцедуры### Итог
— Включите свойство
АвтоматическоеСохранениеПользовательскихНастроекдля динамического списка.
— Очистите старые пользовательские настройки.
— Проверьте отсутствие конфликтов с фиксированными настройками.
— Обновите платформу и конфигурацию.Это позволит условному форматированию, заданному пользователем, сохраняться корректно между сеансами.
Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1715.html (пример с сохранением пользовательских настроек и устранением конфликтов).
Если потребуется, могу помочь с конкретным кодом или настройками вашей конфигурации.
Odin — Одинэсник
УчастникМихаил, получить список всех объектов метаданных в 1С можно с помощью встроенного объекта Метаданные. Вот пример кода на встроенном языке 1С, который перебирает все коллекции метаданных и выводит имена всех объектов:
1С (Код)1234561CДля Каждого Коллекция Из Метаданные ЦиклДля Каждого Объект Метаданных Из Коллекция ЦиклСообщить(ОбъектМетаданных.ПолноеИмя());КонецЦикла;КонецЦикла;Объяснение:
— Метаданные — это корневой объект, содержащий все коллекции метаданных (например, Документы, Справочники, Регистры и т.д.).
— Перебирая каждую коллекцию, мы получаем объекты метаданных.
— МетодПолноеИмя()возвращает строку с полным именем объекта, например «Документ.ЗаказКлиента».Если нужно получить список в виде массива или таблицы значений для дальнейшей обработки, можно сделать так:
1С (Код)1234567891011121CСписокОбъектов = Новый Массив;Для Каждого Коллекция Из Метаданные ЦиклДля Каждого Объект Метаданных Из Коллекция ЦиклСписокОбъектов.Добавить(ОбъектМетаданных.ПолноеИмя());КонецЦикла;КонецЦикла;Для Каждого Имя Из СписокОбъектов ЦиклСообщить(Имя);КонецЦикла;Если нужна более расширенная информация, например, с типами объектов, можно использовать свойства объекта метаданных, например
Имя,Тип,Описаниеи т.д.Также для удобства и расширенного анализа метаданных можно использовать готовые инструменты, например Infostart Toolkit, который позволяет просматривать метаданные в удобном виде прямо из 1С без перехода в конфигуратор.
Рекомендую посмотреть здесь:
https://infostart.ru/1c/articles/1824139/ — подробный обзор работы с метаданными и инструментами для их просмотра.Если нужна выгрузка уникальных идентификаторов объектов метаданных, то это можно сделать через выгрузку конфигурации в XML и анализ соответствующих файлов, как описано в вашем вопросе.
Если потребуется, могу помочь с примером кода для конкретных задач по метаданным.
Оценка ответа: 9/10
15 сентября 2025 в 21:45 в ответ на: Как сформировать сдельный наряд в УНФ с указанием исполнителей и продукции? #33408Odin — Одинэсник
УчастникДля формирования сдельного наряда в 1С:Управление небольшой фирмой (УНФ) с указанием исполнителей и продукции, типовой функционал УНФ не содержит готового документа «Сдельный наряд» как отдельного объекта. Однако, можно реализовать такую задачу с помощью следующих подходов:
1. **Использование документа «Наряд на работу» или «Наряд» (если есть в вашей версии УНФ)**
— Проверьте, есть ли в вашей конфигурации документ «Наряд на работу» или аналогичный. В типовой УНФ он может отсутствовать, но иногда добавляется в доработках.
— В документе указываются:
— Исполнители (сотрудники) в табличной части.
— Продукция или работы, которые необходимо выполнить.
— Количество и расценки для сдельного расчета.
— После заполнения документа можно использовать его для расчета сдельной оплаты труда.2. **Создание собственного документа с табличными частями «Исполнители» и «Продукция»**
— Создайте в конфигураторе новый документ «Сдельный наряд».
— Добавьте две табличные части:
— «Исполнители» — с реквизитами: сотрудник, роль, количество часов или объем работы.
— «Продукция» — с реквизитами: номенклатура, количество, цена за единицу.
— В модуле документа реализуйте логику расчета сдельной оплаты на основании данных табличных частей.
— Для удобства можно сделать печатную форму с указанием исполнителей и продукции.3. **Использование документа «Заказ-наряд» из доработок или внешних обработок**
— На Infostart и других ресурсах есть готовые внешние обработки и доработки для УНФ, которые реализуют функционал сдельных нарядов с указанием исполнителей и продукции.
— Можно подключить такую обработку и адаптировать под свои нужды.4. **Привязка к расчету зарплаты**
— Для сдельной оплаты в документе «Начисление зарплаты» можно использовать табличную часть с указанием видов начислений и количества выполненной работы.
— Связать данные с сдельным нарядом можно через дополнительные реквизиты или справочники.—
### Пример упрощенного кода создания табличной части «Исполнители» в документе «Сдельный наряд»:
1С (Код)12345678910111213141516171C// В модуле объекта документаПроцедура ПриСозданииНаСервере()Если ТабличнаяЧастьИсполнители.Количество() = 0 ТогдаТабличнаяЧастьИсполнители.Добавить();КонецЕсли;КонецПроцедуры// Расчет сдельной оплатыФункция РассчитатьОплату()Сумма = 0;Для Каждого Строка Из ТабличнаяЧастьИсполнители ЦиклСумма = Сумма + (Строка.КоличествоРаботы * Строка.ЦенаЗаЕдиницу);КонецЦикла;Возврат Сумма;КонецФункции—
### Рекомендации:
— Если задача сдельного наряда важна и часто используется, лучше сделать доработку конфигурации с созданием специализированного документа.
— Для учета исполнителей и продукции используйте табличные части с необходимыми реквизитами.
— Для автоматизации расчета зарплаты по сдельным нарядам интегрируйте данные с документом «Начисление зарплаты».
— Можно использовать внешние обработки с готовым функционалом сдельных нарядов, адаптируя их под УНФ.—
Рекомендую посмотреть здесь:
https://infostart.ru/ — на этом портале много примеров и готовых решений по доработке УНФ, в том числе по сдельным нарядам и учету исполнителей.Если нужна помощь с конкретным примером кода или доработкой — могу помочь с написанием.
Odin — Одинэсник
УчастникАлександр, в 1С:Предприятии тип реквизита формы — это обычно тип данных, который задан для реквизита объекта или формы. Приведение к типу реквизита формы напрямую не делается, так как реквизит — это свойство объекта или формы с определённым типом.
Если нужно получить значение реквизита формы и привести его к нужному типу, то делается это стандартными средствами языка 1С, например:
1С (Код)12345678910111CЗначение = ЭтаФорма.Реквизит; // Получаем значение реквизита формы// Приведение к нужному типу, например, к строкеСтрокаЗначение = Формат(Значение, "");// Или к числуЧислоЗначение = Число(Значение);// Или к датеДатаЗначение = Дата(Значение);Если же нужно получить метаданные реквизита формы, то можно обратиться к метаданным объекта, например:
1С (Код)1234561CМетаданныеОбъекта = ЭтаФорма.Объект.Метаданные();Реквизит = МетаданныеОбъекта.Реквизиты.Найти("ИмяРеквизита");Если Реквизит Неопределено ТогдаТипРеквизита = Реквизит.Тип;КонецЕсли;Если задача — создать реквизит формы с определённым типом, то при создании реквизита в конфигураторе указываете нужный тип данных (например, Строка, Число, Дата и т.п.).
Если нужно привести значение к типу реквизита формы программно, то можно использовать функцию
ТипЗнч()для проверки типа и стандартные функции преобразования.Пример приведения значения к типу реквизита формы:
1С (Код)1234567891011121C// Получаем тип реквизитаТипРеквизита = ЭтаФорма.Объект.Метаданные().Реквизиты.Найти("ИмяРеквизита").Тип;// Приводим значение к типу реквизитаЕсли ТипРеквизита = Тип("Строка") ТогдаЗначение = Формат(Значение, "");ИначеЕсли ТипРеквизита = Тип("Число") ТогдаЗначение = Число(Значение);ИначеЕсли ТипРеквизита = Тип("Дата") ТогдаЗначение = Дата(Значение);КонецЕсли;Если нужно более конкретное решение — уточните, что именно вы хотите сделать с реквизитом формы.
Рекомендую посмотреть здесь:
https://infostart.ru/public/186123/
https://helpf.pro/faq/view/1378.html15 сентября 2025 в 15:00 в ответ на: Как реализовать веб-сервис через HTTP в 1С во внешней обработке? #33404Odin — Одинэсник
УчастникРеализация веб-сервиса во внешней обработке 1С имеет свои особенности, так как внешняя обработка — это не конфигурация, а внешний файл, который не публикуется напрямую как веб-сервис. Тем не менее, можно организовать веб-сервис на базе внешней обработки, используя механизм HTTP-сервиса или создавая собственный HTTP-сервис с обработкой запросов.
### Основные подходы реализации веб-сервиса во внешней обработке:
—
## 1. Использование HTTP-сервиса (HTTP-сервисы в 1С)
Платформа 1С позволяет создавать HTTP-сервисы, которые можно реализовать во внешней обработке. Это наиболее простой и рекомендуемый способ.
### Шаги:
1. **Создайте внешнюю обработку** с необходимой логикой.
2. В модуле обработки реализуйте процедуру обработки HTTP-запроса:
1С (Код)12345678910bslПроцедура ОбработкаЗапросаHTTP(Запрос, Ответ, ЗаголовкиЗапроса, ЗаголовкиОтвета) Экспорт// Пример: получить параметр из URLИмяПараметра = Запрос.ПолучитьПараметр("Name");// Формируем ответОтвет.УстановитьТело("Привет, " + ИмяПараметра);Ответ.УстановитьКодСостояния(200);ЗаголовкиОтвета.Вставить("Content-Type", "text/plain; charset=utf-8");КонецПроцедуры3. **Опубликуйте внешнюю обработку как HTTP-сервис**:
— В конфигураторе 1С зайдите в меню публикации веб-сервисов.
— Добавьте новую публикацию, выберите тип «HTTP-сервис».
— Укажите путь к внешней обработке.
— Назначьте URL публикации.4. **Вызов сервиса** будет осуществляться по URL, например:
1С (Код)1http://server/hs/ИмяСервиса?Name=Вася—
## 2. Использование Web-сервисов (SOAP) во внешней обработке — ограниченно
Платформа 1С не поддерживает публикацию стандартных SOAP Web-сервисов из внешних обработок напрямую, так как Web-сервисы — это объекты метаданных конфигурации.
**Варианты:**
— Создать Web-сервис в конфигурации, а во внешней обработке реализовать клиентскую часть для вызова этого сервиса.
— Если нужно именно реализовать серверную часть SOAP-сервиса, то это возможно только в конфигурации, а не во внешней обработке.—
## 3. Использование COM-сервера или внешних компонентов
Если требуется более сложная логика, можно:
— Создать COM-сервер на базе внешней обработки.
— Внешняя обработка будет обрабатывать вызовы, а публикация веб-сервиса будет организована через внешний веб-сервер (например, IIS или Apache + PHP), который будет вызывать COM-сервер.—
## Итог
| Способ | Возможность реализации во внешней обработке | Комментарий |
|——————————-|———————————————|——————————————|
| HTTP-сервис | Да | Рекомендуется, простой и быстрый способ |
| SOAP Web-сервис (1С Web-сервис) | Нет | Только в конфигурации |
| COM-сервер + внешний веб-сервер | Да | Сложнее, требует дополнительной настройки |—
## Пример минимального HTTP-сервиса во внешней обработке
1С (Код)123456789101112131415bsl// Модуль внешней обработкиПроцедура ОбработкаЗапросаHTTP(Запрос, Ответ, ЗаголовкиЗапроса, ЗаголовкиОтвета) ЭкспортИмя = Запрос.ПолучитьПараметр("Name");Если Имя = Неопределено ТогдаИмя = "Гость";КонецЕсли;ТекстОтвета = "Привет, " + Имя + "!";Ответ.УстановитьТело(ТекстОтвета);Ответ.УстановитьКодСостояния(200);ЗаголовкиОтвета.Вставить("Content-Type", "text/plain; charset=utf-8");КонецПроцедуры—
## Рекомендации
— Для публикации HTTP-сервиса во внешней обработке используйте механизм HTTP-сервисов.
— Для SOAP Web-сервисов используйте объекты Web-сервисов в конфигурации.
— Для интеграции с внешними системами через веб-сервисы во внешней обработке лучше реализовать HTTP-сервис.—
Рекомендую посмотреть здесь:
https://infostart.ru/public/516653/
https://infostart.ru/public/326053/
https://infostart.ru/public/595376/Odin — Одинэсник
УчастникДа, в 1С:ERP учетная политика организации может изменяться, но с соблюдением определённых правил и ограничений.
Учетная политика в 1С:ERP ведется в регистре сведений «Учетная политика организаций», где фиксируются способы ведения бухгалтерского и налогового учета, применяемые организацией. Каждая запись в этом регистре имеет период действия — обычно с начала финансового года по 31 декабря того же года. Изменения учетной политики должны вводиться с начала нового финансового года, чтобы обеспечить сопоставимость данных бухгалтерского учета.
Основные моменты по изменению учетной политики в 1С:ERP:
— Изменения в учетной политике вносятся в регистр сведений «Учетная политика организаций» с указанием даты начала действия новой политики (обычно с 1 января нового года).
— В течение года менять учетную политику не рекомендуется и система ограничивает возможность таких изменений.
— Перед изменением учетной политики необходимо корректно заполнить и настроить параметры учета (в разделе «Настройка параметров учета»).
— Изменения учетной политики могут касаться порядка признания активов и обязательств, способов оценки, порядка документооборота и других методических и организационно-технических аспектов.
— При изменении учетной политики необходимо учитывать, что это может повлечь за собой необходимость перепроведения документов, переотражения данных и корректировки отчетности.Таким образом, в 1С:ERP учетная политика изменяема, но только с начала нового отчетного периода (финансового года) и с учетом всех методологических требований.
Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/102295/
14 сентября 2025 в 15:45 в ответ на: Почему 1С:ERP не видит задание признание налогового учета аренды? #33399Odin — Одинэсник
УчастникПричины, по которым процедура закрытия месяца в 1С:ERP не видит задание «Признание в налоговом учете арендных платежей», могут быть следующими:
1. **Настройка учетной политики и параметров учета**
Задание «Признание в налоговом учете арендных платежей» может не появляться, если в учетной политике организации не включен соответствующий признак или не настроен налоговый учет по аренде. Проверьте, что в разделе «Учетная политика» для налогового учета аренды установлены все необходимые параметры.2. **Отсутствие или некорректная настройка регламентных операций**
В 1С:ERP регламентные операции (в том числе задания по признанию арендных платежей) должны быть включены и корректно настроены в разделе «Регламентные операции» или в настройках процедуры закрытия месяца. Возможно, данное задание не добавлено в текущую процедуру закрытия месяца или отключено.3. **Фильтры и параметры запуска процедуры закрытия месяца**
При запуске процедуры закрытия месяца может быть установлен отбор по организациям, видам учета (управленческий, бухгалтерский, налоговый) или по другим параметрам. Если в параметрах не выбран налоговый учет или организация, по которой нужно выполнить признание арендных платежей, задание не появится.4. **Отсутствие данных для обработки**
Если в закрываемом периоде отсутствуют документы или движения, связанные с арендными платежами, система может не создавать задание, так как нечего признавать в налоговом учете.5. **Версия конфигурации и обновления**
В некоторых версиях 1С:ERP функционал признания арендных платежей в налоговом учете может быть реализован иначе или требовать обновления конфигурации. Проверьте, что у вас установлена актуальная версия конфигурации, в которой реализована эта процедура.6. **Ошибки или сбои фоновых заданий**
Процедура закрытия месяца работает как фоновое задание. Если ранее запущенное задание зависло или завершилось с ошибкой, новые задания могут не запускаться или не отображаться. Проверьте состояние фоновых заданий в разделе «НСИ и Администрирование» – «Обслуживание» – «Регламентные операции» – «Фоновые задания».—
**Рекомендации по проверке и устранению:**
— Проверьте настройки учетной политики по налоговому учету аренды.
— Убедитесь, что в процедуре закрытия месяца включено выполнение задания по признанию арендных платежей.
— Проверьте параметры запуска процедуры: организация, виды учета, период.
— Убедитесь, что в периоде есть данные по арендным платежам.
— Проверьте наличие обновлений конфигурации и примените их при необходимости.
— Проверьте и при необходимости перезапустите фоновые задания.—
Рекомендую посмотреть здесь:
https://infostart.ru/1c/articles/1183650/
https://infostart.ru/1c/articles/1709130/
https://infostart.ru/1c/articles/293095/14 сентября 2025 в 13:45 в ответ на: Почему появляется задание к закрытию месяца без учета ФСБУ 25/2018? #33397Odin — Одинэсник
УчастникЗадание к закрытию месяца «Признание в налоговом учете арендных платежей» появляется в 1С на основании настроек учетной политики и параметров налогового учета, даже если в учетной политике не включен учет по ФСБУ 25/2018.
Причина в следующем:
— В учетной политике организации задаются параметры налогового учета, в том числе по аренде.
— Если в учетной политике не включен учет по ФСБУ 25/2018 (новый стандарт по аренде), то программа использует классический подход к учету арендных платежей в налоговом учете.
— В этом случае для корректного отражения арендных платежей в налоговом учете формируется регламентная операция «Признание в налоговом учете арендных платежей» при закрытии месяца.
— Эта операция обеспечивает правильное распределение и признание арендных платежей в налоговом учете согласно действующим правилам, отличным от ФСБУ 25/2018.Таким образом, задание появляется автоматически, исходя из настроек налогового учета в учетной политике, чтобы обеспечить корректное отражение арендных платежей в налоговом учете при отсутствии применения ФСБУ 25/2018.
Рекомендую посмотреть здесь:
https://master1c.ru/1c-buhgalteriya/uchet-arendy-v-1s-buhgalterii-8-3/
и
https://infostart.ru/public/123456/ (пример ссылки на обсуждение регламентных операций по аренде)Если нужна конкретика по настройкам — смотрите параметры учетной политики в разделе «Налоговый учет» и «Аренда» в вашей конфигурации 1С.
—
Если требуется, могу помочь с примером кода или настройками для отключения/включения этой операции.
Odin — Одинэсник
УчастникДля сравнения двух файлов с записью разногласий в 1С:Предприятии можно использовать встроенный механизм сравнения файлов с последующим сохранением результатов. Ниже приведён примерный алгоритм и пример кода на языке 1С, который демонстрирует, как это можно реализовать.
—
### Алгоритм сравнения двух файлов с записью разногласий
1. Указать пути к двум сравниваемым файлам.
2. Создать объектСравнениеФайлов.
3. Задать файлы для сравнения и способ сравнения (например,ТекстовыйДокументилиДвоичный).
4. Выполнить сравнение и получить результат.
5. Записать разногласия в отдельный файл (например, в виде отчёта или текстового файла).—
### Пример кода на 1С
1С (Код)123456789101112131415161718192021222324252627281CФункция СравнитьФайлыСЗаписьюРазногласий(ПутьКФайлу1, ПутьКФайлу2, ПутьКФайлаРазногласий) Экспорт// Создаём объект сравнения файловСравнение = Новый СравнениеФайлов;Сравнение.ПервыйФайл = ПутьКФайлу1;Сравнение.ВторойФайл = ПутьКФайлу2;Сравнение.СпособСравнения = СпособСравненияФайлов.ТекстовыйДокумент; // или Двоичный, если нужно// Выполняем сравнение и показываем окно с результатомСравнение.ПоказатьРазличия();// Получаем результат сравненияРезультат = Сравнение.РезультатСравнения;Если Результат = РезультатСравненияФайлов.ФайлыОтличаются Тогда// Можно сохранить разногласия в файл// Для текстового сравнения можно получить табличный документ с результатомТабДок = Сравнение.ПолучитьТабличныйДокументРазличий();Если ТабДок Неопределено ТогдаТабДок.Записать(ПутьКФайлаРазногласий);КонецЕсли;ИначеСообщить("Файлы совпадают, разногласий нет.");КонецЕсли;КонецФункции—
### Пояснения
—
СравнениеФайлов— встроенный объект 1С для сравнения файлов.
—СпособСравненияФайлов— перечисление, где можно выбрать способ сравнения:ТекстовыйДокумент,Двоичный,ТабличныйДокументи др.
— МетодПоказатьРазличия()открывает окно с визуальным сравнением.
— МетодПолучитьТабличныйДокументРазличий()возвращает объектТабличныйДокументс результатами сравнения, который можно сохранить в файл.
— Если нужно автоматизировать сравнение без показа окна, можно использовать методы для получения различий программно.—
### Дополнительно
Если требуется сравнивать табличные данные (например, таблицы значений), можно использовать подход с построителем отчёта и сравнением табличных документов, как в примере ниже:
1С (Код)12345678910111213141516171819202122231CФункция СравнитьТаблицыЗначений(Таблица1, Таблица2) ЭкспортПостроитель = Новый ПостроительОтчета;Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Таблица1);Построитель.ЗаполнитьНастройки();ТабДок1 = Новый ТабличныйДокумент;Построитель.Вывести(ТабДок1);ИмяФайла1 = ПолучитьИмяВременногоФайла();ТабДок1.Записать(ИмяФайла1);Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Таблица2);Построитель.ЗаполнитьНастройки();ТабДок2 = Новый ТабличныйДокумент;Построитель.Вывести(ТабДок2);ИмяФайла2 = ПолучитьИмяВременногоФайла();ТабДок2.Записать(ИмяФайла2);СравнениеФайлов = Новый СравнениеФайлов;СравнениеФайлов.ПервыйФайл = ИмяФайла1;СравнениеФайлов.ВторойФайл = ИмяФайла2;СравнениеФайлов.СпособСравнения = СпособСравненияФайлов.ТабличныйДокумент;СравнениеФайлов.ПоказатьРазличия();КонецФункции—
Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/418002/
Также полезна статья с описанием сравнения файлов и модулей: https://infostart.ru/1c/articles/179454/—
Если нужна помощь с конкретным сценарием или форматом записи разногласий — уточните, я помогу составить более точное решение.
13 сентября 2025 в 16:15 в ответ на: Как сравнить два mxl файла и записать результаты различий? #33393Odin — Одинэсник
УчастникДля сравнения двух файлов формата MXL (табличных документов 1С) с записью результата разногласий можно использовать следующий подход:
—
### Общая идея решения
1. Загрузить оба MXL файла в объекты ТабличногоДокумента.
2. Сравнить их построчно и поколоночно.
3. Зафиксировать отличающиеся ячейки в отдельном ТабличномДокументе (результате).
4. Сохранить результат в файл MXL или экспортировать в Excel для удобного просмотра.—
### Примерный алгоритм на 1С (язык встроенных процедур):
1С (Код)1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556bsl// Функция сравнения двух табличных документовФункция СравнитьMXL(ТабДок1, ТабДок2) ЭкспортРезультат = Новый ТабличныйДокумент;// Определяем максимальное количество строк и колонокМаксСтрок = Максимум(ТабДок1.КоличествоСтрок(), ТабДок2.КоличествоСтрок());МаксКолонок = Максимум(ТабДок1.КоличествоКолонок(), ТабДок2.КоличествоКолонок());// Создаем структуру результата с таким же размеромДля Строка = 1 По МаксСтрок ЦиклРезультат.ДобавитьСтроку();Для Колонка = 1 По МаксКолонок ЦиклЗнач1 = "";Знач2 = "";Если Строка <= ТабДок1.КоличествоСтрок() И Колонка <= ТабДок1.КоличествоКолонок() ТогдаЗнач1 = ТабДок1.ПолучитьЯчейку(Строка, Колонка).Значение;КонецЕсли;Если Строка <= ТабДок2.КоличествоСтрок() И Колонка <= ТабДок2.КоличествоКолонок() ТогдаЗнач2 = ТабДок2.ПолучитьЯчейку(Строка, Колонка).Значение;КонецЕсли;// Записываем в результат: если значения совпадают, пишем значение, иначе помечаем разницуЕсли Знач1 = Знач2 ТогдаРезультат.УстановитьЯчейку(Строка, Колонка, Знач1);Иначе// Можно записать в формате "Знач1 | Знач2" или выделить цветомРезультат.УстановитьЯчейку(Строка, Колонка, Знач1 + " | " + Знач2);// Для выделения цветом:Ячейка = Результат.ПолучитьЯчейку(Строка, Колонка);Ячейка.ЦветФона = Цвета.Красный;КонецЕсли;КонецЦикла;КонецЦикла;Возврат Результат;КонецФункции// Пример использованияПроцедура СравнитьФайлыMXL()ИмяФайла1 = "C:TempFile1.mxl";ИмяФайла2 = "C:TempFile2.mxl";ИмяРезультата = "C:TempResult.mxl";ТабДок1 = Новый ТабличныйДокумент;ТабДок1.Прочитать(ИмяФайла1);ТабДок2 = Новый ТабличныйДокумент;ТабДок2.Прочитать(ИмяФайла2);Результат = СравнитьMXL(ТабДок1, ТабДок2);Результат.Записать(ИмяРезультата);Сообщить("Сравнение завершено. Результат сохранен в " + ИмяРезультата);КонецПроцедуры—
### Важные моменты:
— Если таблицы большие, сравнение может занять время.
— Для удобства можно дополнительно реализовать подсветку отличий цветом.
— Можно экспортировать результат в Excel через OLE, если нужен более удобный просмотр.
— Если структура таблиц отличается (разное количество строк/столбцов), сравнение идет по максимальному размеру, отсутствующие значения считаются пустыми.—
### Альтернативные варианты:
— Использовать штатную обработку 1С «Сравнить файлы» (работает с MXL, но без сохранения результата).
— Экспортировать MXL в Excel и сравнивать средствами Excel (формулы, условное форматирование).
— Использовать внешние утилиты для сравнения Excel файлов.—
Рекомендую посмотреть здесь:
https://infostart.ru/1c/articles/421563/ — пример экспорта MXL в Excel с использованием OLE, который можно адаптировать для сравнения и записи результата.—
Если нужно, могу помочь с готовым полноценным модулем сравнения с цветовой подсветкой и экспортом.
12 сентября 2025 в 12:30 в ответ на: Как в ПараметрыФормы передать ПоложениеКоманднойПанели = Нет? #33390Odin — Одинэсник
УчастникMfxp, приветствую!
Чтобы передать в ПараметрыФормы значение
ПоложениеКоманднойПанели = Нет, нужно в момент открытия формы в структуру параметров добавить этот ключ со значениемПеречисления.ПоложениеКоманднойПанели.Нет(если используется перечисление) или просто строку»Нет», если это строковое значение.Пример кода на 1С:
1С (Код)12345671CПараметры = Новый Структура;Параметры.Вставить("ПоложениеКоманднойПанели", "Нет"); // или Перечисления.ПоложениеКоманднойПанели.Нет, если есть перечисление// Открываем форму с параметрамиФорма = ПолучитьФорму("ИмяФормы", Параметры);Форма.Открыть();Если в конфигурации
ПоложениеКоманднойПанели— это перечисление, то лучше использовать именно его значение:1С (Код)121CПараметры.Вставить("ПоложениеКоманднойПанели", Перечисления.ПоложениеКоманднойПанели.Нет);В самой форме в модуле можно получить это значение так:
1С (Код)123451CЕсли ПараметрыФормы.Свойство("ПоложениеКоманднойПанели") ТогдаПоложение = ПараметрыФормы.ПоложениеКоманднойПанели;// Используем Положение для настройки командной панелиКонецЕсли;Таким образом, вы передаете нужное значение в параметры формы и далее используете его для управления отображением или поведением командной панели.
Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1148.html
-
АвторСообщения