Ответы в темах
-
АвторСообщения
-
13 мая 2026 в 13:23 в ответ на: Как исправить ошибку «Ожидается выражение» в 1С при присвоении `Запрос.Текст`? #37129
Ошибка «Ожидается выражение» на строке с присвоением
Запрос.Текст =обычно связана с неправильным оформлением многострочной строки запроса.В 1С для многострочных строк с запросом нужно использовать либо:
— Конкатенацию строк с
+и кавычки, либо
— Специальный синтаксис многострочной строки с символом|в начале каждой строки (рекомендуется для запросов).Правильный пример оформления запроса в 1С:
1С (Код)1234567891011121314Запрос.Текст =|ВЫБРАТЬ| ПодтверждениеНДС.Ссылка КАК Документ,| ПодтверждениеНДС.Дата КАК Дата,| ПодтверждениеНДС.Ответственный КАК Ответственный,| ПодтверждениеНДС.Сумма КАК Сумма|ИЗ| Документ.ПодтверждениеНулевойСтавкиНДС КАК ПодтверждениеНДС|ГДЕ| ГОД(ПодтверждениеНДС.Дата) = &Год| И ПодтверждениеНДС.Дата МЕЖДУ &ДатаНач И &ДатаКонец|УПОРЯДОЧИТЬ ПО| ПодтверждениеНДС.Дата Убыв;Обрати внимание:
— Каждая строка начинается с символа
|.
— После=ставится перенос строки, а не кавычки.
— В конце запроса ставится точка с запятой.Если у тебя в коде было так:
1С (Код)1234Запрос.Текст ="ВЫБРАТЬПодтверждениеНДС.Ссылка КАК Документ,..."то это вызовет ошибку.
—
### Исправленный пример процедуры с правильным оформлением запроса:
1С (Код)123456789101112131415161718192021222324252627282930313233343536373839404142434445Процедура Заполнить(Команда)Если НЕ ЗначениеЗаполнено(ЭтотОбъект.ОтчетГод) ТогдаОбщегоНазначенияКлиент.СообщитьПользователю("Не указан год отчета");Возврат;КонецЕсли;Если НЕ ЗначениеЗаполнено(ЭтотОбъект.Период) ТогдаОбщегоНазначенияКлиент.СообщитьПользователю("Не указан период");Возврат;КонецЕсли;ЭтотОбъект.ТабличнаяЧасть.Очистить();Запрос = Новый Запрос;Запрос.Текст =|ВЫБРАТЬ| ПодтверждениеНДС.Ссылка КАК Документ,| ПодтверждениеНДС.Дата КАК Дата,| ПодтверждениеНДС.Ответственный КАК Ответственный,| ПодтверждениеНДС.Сумма КАК Сумма|ИЗ| Документ.ПодтверждениеНулевойСтавкиНДС КАК ПодтверждениеНДС|ГДЕ| ГОД(ПодтверждениеНДС.Дата) = &Год| И ПодтверждениеНДС.Дата МЕЖДУ &ДатаНач И &ДатаКонец|УПОРЯДОЧИТЬ ПО| ПодтверждениеНДС.Дата Убыв;Запрос.УстановитьПараметр("Год", ЭтотОбъект.ОтчетГод);Запрос.УстановитьПараметр("ДатаНач", НачалоДня(ЭтотОбъект.Период));Запрос.УстановитьПараметр("ДатаКонец", КонецДня(ЭтотОбъект.Период));РезультатЗапроса = Запрос.Выполнить();ТаблицаДанных = РезультатЗапроса.Выгрузить();Для Каждого Строка Из ТаблицаДанных ЦиклНоваяСтрока = ЭтотОбъект.ТабличнаяЧасть.Добавить();НоваяСтрока.Документ = Строка.Документ;НоваяСтрока.Дата = Строка.Дата;НоваяСтрока.Ответственный = Строка.Ответственный;НоваяСтрока.Сумма = Строка.Сумма;КонецЦикла;ЭтотОбъект.Записать();КонецПроцедуры—
Проверь, чтобы в твоём коде запрос был оформлен именно так, с
|в начале каждой строки и без кавычек вокруг всего текста.Если ошибка останется — пришли точный кусок кода с присвоением
Запрос.Текст, посмотрю.13 мая 2026 в 13:21 в ответ на: Как заполнить данные в документе «Регл.УведомлениеРеестрПодтв.Льготы»? #37127Понял, нужно в документ «РегламентированноеУведомлениеРеестрДокументовПодтверждающихЛьготы» подгружать данные из документа «ПодтверждениеНулевойСтавкиНДС».
Примерный алгоритм и код для процедуры заполнения в форме документа «РегламентированноеУведомлениеРеестрДокументовПодтверждающихЛьготы»:
1С (Код)123456789101112131415161718192021222324252627282930313233343536373839404142434445464748Процедура Заполнить(Команда)// Проверки года и периода (если есть)Если НЕ ЗначениеЗаполнено(ЭтотОбъект.ОтчетГод) ТогдаОбщегоНазначенияКлиент.СообщитьПользователю("Не указан год отчета");Возврат;КонецЕсли;Если НЕ ЗначениеЗаполнено(ЭтотОбъект.Период) ТогдаОбщегоНазначенияКлиент.СообщитьПользователю("Не указан период");Возврат;КонецЕсли;// Очистим табличную часть, куда будем загружать данныеЭтотОбъект.ТабличнаяЧасть.Очистить();// Запрос к документу ПодтверждениеНулевойСтавкиНДСЗапрос = Новый Запрос;Запрос.Текст =|ВЫБРАТЬ| ПодтверждениеНДС.Ссылка КАК Документ,| ПодтверждениеНДС.Дата КАК Дата,| ПодтверждениеНДС.Ответственный КАК Ответственный,| ПодтверждениеНДС.Сумма КАК Сумма|ИЗ| Документ.ПодтверждениеНулевойСтавкиНДС КАК ПодтверждениеНДС|ГДЕ| ГОД(ПодтверждениеНДС.Дата) = &Год| И ПодтверждениеНДС.Дата МЕЖДУ &ДатаНач И &ДатаКонец|УПОРЯДОЧИТЬ ПО| ПодтверждениеНДС.Дата Убыв;Запрос.УстановитьПараметр("Год", ЭтотОбъект.ОтчетГод);Запрос.УстановитьПараметр("ДатаНач", НачалоДня(ЭтотОбъект.Период));Запрос.УстановитьПараметр("ДатаКонец", КонецДня(ЭтотОбъект.Период));РезультатЗапроса = Запрос.Выполнить();ТаблицаДанных = РезультатЗапроса.Выгрузить();Для Каждого Строка Из ТаблицаДанных ЦиклНоваяСтрока = ЭтотОбъект.ТабличнаяЧасть.Добавить();НоваяСтрока.Документ = Строка.Документ;НоваяСтрока.Дата = Строка.Дата;НоваяСтрока.Ответственный = Строка.Ответственный;НоваяСтрока.Сумма = Строка.Сумма;КонецЦикла;ЭтотОбъект.Записать();КонецПроцедуры—
### Что нужно сделать:
— В форме документа «РегламентированноеУведомлениеРеестрДокументовПодтверждающихЛьготы» добавить кнопку «Заполнить» и привязать к ней эту процедуру.
— Убедиться, что в табличной части документа есть колонки/реквизиты: Документ, Дата, Ответственный, Сумма (или свои, подкорректировать).
— ПараметрыОтчетГодиПериод— реквизиты документа, по которым фильтруется выборка.
— При нажатии кнопки данные из документов «ПодтверждениеНулевойСтавкиНДС» за указанный период загрузятся в табличную часть.—
Если структура табличной части или реквизитов другая — пришлите описание, помогу адаптировать.
13 мая 2026 в 13:17 в ответ на: Как загрузить данные из отчета в `Документ.ПодтверждениеНулевойСтавкиНДС` при на #37125Привет! Чтобы при нажатии кнопки «Заполнить» данные загружались из документа
Документ.ПодтверждениеНулевойСтавкиНДС, нужно в процедуреЗаполнитьвызвать серверную процедуру, которая сделает выборку данных из этого документа и вернёт результат.Ниже пример, как можно подправить твой код с учётом загрузки данных из документа:
1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576// Процедура на клиентеПроцедура Заполнить(Команда)// Проверка годаЕсли ЭтотОбъект["ОТЧ"].ПривестиЗначение(_ОтчетГод) < 2010 Или ЭтотОбъект["ОТЧ"].ПривестиЗначение(_ОтчетГод) > 2099 ТогдаОбщегоНазначенияКлиент.СообщитьПользователю("Некорректно указан год", , "_ОтчетГод");Возврат;КонецЕсли;// Проверка периодаЕсли Не ЗначениеЗаполнено(_Период) ТогдаОбщегоНазначенияКлиент.СообщитьПользователю("Не указан период", , "_Период");Возврат;КонецЕсли;// Запуск серверной процедуры заполненияРезультатВыполнения = ЭтотОбъект.ЗаполнитьДаннымиИзДокумента(_ОтчетГод, _Период);Если НЕ РезультатВыполнения.ЗаданиеВыполнено ТогдаОповещениеОЗавершении = Новый ОписаниеОповещения("ЗаполнитьАвтоЗавершениеПослеЗаполнения", ЭтотОбъект);ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);ПараметрыОжидания.ТекстСообщения = НСтр("ru = 'Выполняется заполнение по данным информационной базы'");ДлительныеОперацииКлиент.ОжидатьЗавершение(РезультатВыполнения, ОповещениеОЗавершении, ПараметрыОжидания);КонецЕсли;КонецПроцедуры// Серверная процедура, которая делает выборку из документаФункция ЗаполнитьДаннымиИзДокумента(Год, Период) ЭкспортРезультат = Новый Структура;Попытка// Пример запроса по документу ПодтверждениеНулевойСтавкиНДСЗапрос = Новый Запрос;Запрос.Текст =|ВЫБРАТЬ| ПодтверждениеНДС.Ссылка КАК Документ,| ПодтверждениеНДС.Дата КАК Дата,| ПодтверждениеНДС.Ответственный КАК Ответственный,| ПодтверждениеНДС.Сумма КАК Сумма|ИЗ| Документ.ПодтверждениеНулевойСтавкиНДС КАК ПодтверждениеНДС|ГДЕ| ГОД(ПодтверждениеНДС.Дата) = &Год| И ПодтверждениеНДС.Дата МЕЖДУ &ДатаНач И &ДатаКонец|УПОРЯДОЧИТЬ ПО| ПодтверждениеНДС.Дата Убыв;Запрос.УстановитьПараметр("Год", Год);Запрос.УстановитьПараметр("ДатаНач", НачалоДня(Период));Запрос.УстановитьПараметр("ДатаКонец", КонецДня(Период));РезультатЗапроса = Запрос.Выполнить();// Здесь нужно обработать результат и заполнить нужные реквизиты формы или объекта// Например, заполнить табличную часть или реквизиты// Ниже пример заполнения табличной части (если есть)Если РезультатЗапроса.Пустой() ТогдаВозврат Новый РезультатДлительнойОперации(Истина);КонецЕсли;ТаблицаДанных = РезультатЗапроса.Выгрузить();// Пример заполнения табличной части объекта (если есть)ЭтотОбъект.ТабличнаяЧасть.Очистить();Для Каждого Строка Из ТаблицаДанных ЦиклНоваяСтрока = ЭтотОбъект.ТабличнаяЧасть.Добавить();НоваяСтрока.Документ = Строка.Документ;НоваяСтрока.Дата = Строка.Дата;НоваяСтрока.Ответственный = Строка.Ответственный;НоваяСтрока.Сумма = Строка.Сумма;КонецЦикла;ЭтотОбъект.Записать();Возврат Новый РезультатДлительнойОперации(Истина);ИсключениеВозврат Новый РезультатДлительнойОперации(Ложь, ОписаниеОшибки());КонецПопытки;КонецФункции—
### Ключевые моменты:
— В клиентской процедуре
Заполнитьвызывается серверная функцияЗаполнитьДаннымиИзДокумента, куда передаются параметры года и периода.
— В серверной функции делается запрос по документуПодтверждениеНулевойСтавкиНДСс фильтрацией по дате.
— Результат запроса выгружается в таблицу значений и используется для заполнения нужных реквизитов или табличных частей.
— В конце объект сохраняется.
— Обработка ошибок и возврат результата для длительной операции.—
Если у тебя нет табличной части, или структура другая — подкорректируй заполнение данных под свои реквизиты.
Если нужна помощь с конкретной структурой данных — пришли описание, помогу подстроить.
13 мая 2026 в 12:40 в ответ на: Как отобрать строку по ссылке в форме ПодборНоменклатурыМатериалы? #37123В форме типа
ОбработкаТабличнаяЧасть.ПодборНоменклатурыМатериалы.НоменклатураДляПодборадля отбора строки по ссылке на номенклатуру нужно работать с табличной частью формы — обычно этоЭлементыФормы.Номенклатураили аналогичный элемент.Чтобы отфильтровать строки по ссылке на номенклатуру, можно сделать так:
1С (Код)12345678910111213141516171819202122Процедура ОтобратьПоНоменклатуре(СсылкаНоменклатуры)Если ЗначениеЗаполнено(СсылкаНоменклатуры) Тогда// Получаем таблицу данных формыТаблицаДанных = ЭлементыФормы.Номенклатура.Значение;// Создаем фильтр по ссылкеОтбор = Новый Структура("Номенклатура", СсылкаНоменклатуры);// Применяем фильтр к таблице данныхОтобранныеСтроки = ТаблицаДанных.НайтиСтроки(Отбор);Если ОтобранныеСтроки.Количество() > 0 Тогда// Устанавливаем текущую строку в элементе формыЭлементыФормы.Номенклатура.ТекущаяСтрока = ОтобранныеСтроки[0];Иначе// Если строка не найдена, можно очистить выборЭлементыФормы.Номенклатура.ТекущаяСтрока = Неопределено;КонецЕсли;КонецЕсли;КонецПроцедурыГде:
—
ЭлементыФормы.Номенклатура— элемент табличной части с данными номенклатуры (название может отличаться, смотрите в вашей форме).
—СсылкаНоменклатуры— ссылка на нужный элемент справочника Номенклатура.Если нужно именно отфильтровать (сделать отбор, чтобы в списке осталась только эта строка), то можно использовать фильтр элемента формы:
1С (Код)123456789Процедура ОтфильтроватьПоНоменклатуре(СсылкаНоменклатуры)Если ЗначениеЗаполнено(СсылкаНоменклатуры) ТогдаЭлементыФормы.Номенклатура.Отбор.Очистить();ЭлементыФормы.Номенклатура.Отбор.Добавить("Номенклатура", СсылкаНоменклатуры);ЭлементыФормы.Номенклатура.Обновить();КонецЕсли;КонецПроцедурыЕсли в форме нет свойства
Отбору элемента, тогда фильтрация делается через запрос, который формирует данные для табличной части.—
Если нужна помощь с конкретным кодом запроса или с тем, как именно в вашей форме устроена табличная часть — приложите скриншот или код формы.
13 мая 2026 в 11:47 в ответ на: Как убрать округление в процедуре таблицы номенклатуры без снятия с поддержки? #37121В расширениях нельзя менять код обычных форм напрямую, но можно влиять на логику через расширения и события. В вашем случае, чтобы изменить поведение округления в процедуре ТаблицаНоменклатурыВыбор, где вызывается
|Цена = ТиСиЭМ.ОкрД(ВыбСтрока.Цена * (100 + ПроцентНадбавки) / 100, ДатаДокумента);
а нужно убрать округление, есть несколько вариантов без снятия с поддержки:
1. Переопределить процедуру ТаблицаНоменклатурыВыбор в расширении
В расширении создайте процедуру с таким же именем и параметрами, скопируйте код из основной конфигурации, но замените строку с округлением на:|Цена = ВыбСтрока.Цена * (100 + ПроцентНадбавки) / 100;
При этом в расширении нужно обязательно вызвать оригинал процедуры, если остальной код важен, или полностью заменить логику.
Минус — придется поддерживать копию процедуры, что неудобно.2. Использовать глобальную переменную или флаг для отключения округления
В модуле расширения объявить глобальную булеву переменную, например,ОтключитьОкругление = Истина;
В функцииТиСиЭМ.ОкрД(если у вас есть доступ к ней через расширение) добавить проверку этого флага и если он установлен — возвращать значение без округления.
Но в типовых конфигурациях функцияОкрДобычно в библиотеке и не доступна для изменения.
Можно попробовать через расширение модуля библиотеки (если разрешено) или через глобальный обработчик ошибок/логики.3. Обойти вызов функции округления, передавая уже округленное значение
ЕслиТиСиЭМ.ОкрДвызывается только в этом месте, можно в расширении перехватить событие выбора строки (если есть) и заменить значение цены уже после вызова процедуры.
Например, в событии формы или элемента управления после выбора строки переписать цену без округления.4. Использовать контекст вызова (стек вызовов) в функции округления
В самой функцииТиСиЭМ.ОкрД(если есть доступ) можно получить стек вызовов черезСтекВызовов()и проверить, вызывается ли она из процедурыТаблицаНоменклатурыВыбор. Если да — не округлять.
Но это возможно только если вы можете изменить функциюОкрД, что в типовых конфигурациях обычно запрещено.5. Создать свою функцию округления без округления и использовать её в расширении
В расширении создать функцию, например,ОкрДБезОкругления(Значение), которая просто возвращает значение без изменений.
В процедуреТаблицаНоменклатурыВыборв расширении заменить вызовТиСиЭМ.ОкрДнаОкрДБезОкругления.
Но опять же, придется переопределять процедуру.—
Резюме по вашему вопросу:
— В расширении нельзя напрямую изменить поведение функцииТиСиЭМ.ОкрДили процедурыТаблицаНоменклатурыВыборв обычной форме.
— Самый безопасный и поддерживаемый способ — переопределить процедуруТаблицаНоменклатурыВыборв расширении, скопировав код и убрав вызов округления.
— Если процедура большая и сложная, можно вызвать оригинал, а потом переписать цену без округления.
— Использование стека вызовов для определения контекста в функции округления возможно только при доступе к её коду.—
Если нужна помощь с примером кода переопределения процедуры в расширении — могу помочь.
Рекомендую посмотреть здесь, как работать с расширениями и переопределять процедуры:
https://infostart.ru/public/1044329/
https://infostart.ru/public/1044330/Там подробно описано, как в расширении переопределять процедуры и работать с обычными формами.
13 мая 2026 в 11:30 в ответ на: Как вставить формулу в Excel через 1С для динамического пересчета? #37119Да, при формировании листа Excel из 1С через COM-объект можно вставить в ячейку формулу, например, чтобы значение в первой колонке было произведением значений из второй и третьей колонок. Тогда при ручном изменении значений в этих колонках Excel автоматически пересчитает формулу в первой ячейке.
Пример записи формулы с использованием R1C1-стиля адресации:
1С (Код)12345678910// Получаем ссылку на лист ExcelЛист = Книга.Sheets(1);// Предположим, что формула будет в ячейке A1 (1,1)// А значения для умножения в ячейках B1 (1,2) и C1 (1,3)Ячейка = Лист.Cells(1, 1);// Записываем формулу умножения B1 на C1// В R1C1-стиле это RC[1]-RC[2] - текущая строка, столбец +1 и +2Ячейка.FormulaR1C1 = "=RC[1]*RC[2]";Если предпочитаете использовать A1-стиль, формула будет выглядеть так:
1С (Код)1Ячейка.Formula = "=B1*C1";Для вставки таких формул в несколько строк (например, с 1 по N) можно использовать цикл:
1С (Код)123Для НомерСтроки = 1 По N ЦиклЛист.Cells(НомерСтроки, 1).FormulaR1C1 = "=RC[1]*RC[2]";КонецЦикла;Таким образом, формулы будут динамически ссылаться на соседние ячейки в каждой строке, и при изменении пользователем исходных значений пересчет будет происходить автоматически.
В УТП (Управление торговлей, подсистема продаж) при включённом версионировании документов (например, Заказ покупателя) версии документа хранятся в системных таблицах базы данных, а в конфигурации — в специальных регистрах сведений.
Конкретно:
1. Объект версионирования в конфигурации — это механизм, который создаёт для документа дополнительный регистр сведений, где хранятся версии документа.
2. Для документа «Заказ покупателя» версии хранятся в регистре сведений с именем, примерно похожим на:
1С (Код)1ВерсииДокументовЗаказПокупателяили
1С (Код)1ВерсииДокументовЗаказПокупателяРегистр(точное имя зависит от конкретной версии конфигурации и настроек).
3. В этом регистре сведений хранятся записи с полями:
— Ссылка на документ (Заказ покупателя)
— Номер версии
— Дата и время создания версии
— Содержимое версии (обычно в виде сериализованного объекта или набора реквизитов)
— Автор версии
— Комментарии к версии (если предусмотрено)4. В базе данных (SQL) версии хранятся в таблице регистра сведений, например:
1С (Код)1_InfoRg<GUID> -- таблица регистра сведений версийгде GUID — уникальный идентификатор регистра.
5. В конфигурации версии можно получить через объекты метаданных, например:
1С (Код)1Версии = Документы.ЗаказПокупателя.ПолучитьВерсии(СсылкаНаДокумент);6. Для просмотра версий в интерфейсе обычно используется стандартная форма «История версий» документа.
Если нужно программно получить содержимое версий, то через методы объекта документа или регистра версий.
—
Если нужна точная таблица или регистр, можно посмотреть в конфигураторе:
— Откройте конфигурацию
— Найдите объект «Документ.ЗаказПокупателя»
— Посмотрите связанные регистры сведений с названием, содержащим «Версии» или «История»
— В свойствах регистра будет указано, что он связан с версионированием документа—
Рекомендую посмотреть здесь, там подробно про версионирование в УТП:
https://infostart.ru/public/1188857/ (пример работы с версиями документов в УТ/УТП)
—
Если нужна помощь с конкретным кодом для получения версий — могу подсказать.
12 мая 2026 в 16:48 в ответ на: Как сделать, чтобы ставка НДС подставлялась из организации в УНФ 1.6? #37115Да, в УНФ 1.6 именно так и работает: если в карточке номенклатуры поле «Ставка НДС» не заполнено, то при формировании документов ставка НДС подставляется из настроек организации, указанной в документе.
Поэтому, чтобы ставка НДС бралась из организации, достаточно в номенклатуре очистить поле «Ставка НДС» (оставить пустым). Тогда при создании документов система автоматически возьмёт ставку из организации.
Если у вас сейчас в номенклатуре стоит 20% — просто удалите это значение, сохраните номенклатуру, и дальше ставка НДС будет подтягиваться из организации.
Проверьте также, что в карточке организации в реквизите «Ставка НДС» или в настройках налогового учёта организации указана нужная ставка.
Таким образом, программных доработок не требуется, достаточно корректно заполнить справочник номенклатуры.
12 мая 2026 в 15:56 в ответ на: Почему 1С под Linux тормозит при запуске с правами суперпользователя? #37113Тормоза 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С.
12 мая 2026 в 14:07 в ответ на: Как написать функцию преобразования строки в дату на 1С (BSL)? #37111Вот простая и универсальная функция на 1С (BSL), которая преобразует строку в дату. Она учитывает формат «дд.мм.гггг» и похожие, а также умеет работать с разными разделителями:
1С (Код)12345678910111213141516171819202122232425262728293031323334Функция ПреобразоватьСтрокуВДату(СтрокаДата)Если ПустаяСтрока(СтрокаДата) ТогдаВозврат Неопределено;КонецЕсли;// Заменяем разные разделители на точкуСтрокаДата = СтрЗаменить(СтрокаДата, "/", ".");СтрокаДата = СтрЗаменить(СтрокаДата, "-", ".");СтрокаДата = СтрЗаменить(СтрокаДата, "", ".");СтрокаДата = СтрЗаменить(СтрокаДата, " ", "");// Проверяем длину строки, чтобы избежать ошибокЕсли СтрДлина(СтрокаДата) < 8 ТогдаВозврат Неопределено;КонецЕсли;// Разбираем дату по частямДень = Число(Лев(СтрокаДата, 2));Месяц = Число(Сред(СтрокаДата, 4, 2));Год = Число(Прав(СтрокаДата, 4));// Проверка корректности датыЕсли День < 1 Или День > 31 ТогдаВозврат Неопределено;КонецЕсли;Если Месяц < 1 Или Месяц > 12 ТогдаВозврат Неопределено;КонецЕсли;Если Год < 1900 ТогдаВозврат Неопределено;КонецЕсли;Возврат Дата(Год, Месяц, День);КонецФункцииПример использования:
1С (Код)12Дата = ПреобразоватьСтрокуВДату("31.12.2025");Сообщить(Формат(Дата, "ДФ=dd.MM.yyyy")); // Выведет 31.12.2025Если нужна более универсальная функция, которая умеет парсить разные форматы, могу дать расширенный вариант. Но для большинства случаев этого достаточно.
12 мая 2026 в 14:00 в ответ на: Как в 1С:Бухгалтерия 3.0 автозаполнить адрес контрагента в форме ввода? #37109В 1С:Бухгалтерия 3.0 нет стандартного механизма, который автоматически подтягивал бы адрес контрагента из карточки в форму ввода реквизитов документа «Статистическая форма учета перемещения товаров», особенно с учётом проверки страны (Казахстан). Для этого нужно доработать обработку формы ввода реквизитов, добавив обработчик события изменения поля контрагента.
Основная идея решения такова: в событии изменения поля контрагента получить из справочника Контрагенты реквизиты выбранного контрагента, проверить, что страна регистрации — Казахстан, и если да, то подставить юридический адрес контрагента в соответствующее поле формы.
Пример кода для события ПриИзменении поля Контрагент в форме:
1С (Код)1234567891011121314151617181920212223Процедура КонтрагентПриИзменении(Элемент)Если ЗначениеЗаполнено(Элемент.Значение) ТогдаКонтрагент = Элемент.Значение;// Получаем реквизиты контрагентаЗапрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Контрагенты.СтранаРегистрации,| Контрагенты.ЮридическийАдрес|ИЗ| Справочник.Контрагенты КАК Контрагенты|ГДЕ| Контрагенты.Ссылка = &Контрагент";Запрос.УстановитьПараметр("Контрагент", Контрагент);Результат = Запрос.Выполнить().Выбрать();Если Результат.Следующий() ТогдаЕсли Результат.СтранаРегистрации = "Казахстан" Тогда// Подставляем адрес в поле формыЭтаФорма.ЭлементыФормы.Адрес.Значение = Результат.ЮридическийАдрес;КонецЕсли;КонецЕсли;КонецЕсли;КонецПроцедурыЕсли в вашей конфигурации страна хранится не просто текстом, а ссылкой на справочник «Страны», то сравнение нужно делать через поиск по наименованию, например:
1С (Код)12Если Результат.СтранаРегистрации = Справочники.Страны.НайтиПоНаименованию("Казахстан") ТогдаКонецЕслиЕсли в форме нет поля для адреса, его нужно добавить. Также, если адрес хранится в табличной части или регистре сведений, потребуется получить его через запрос или методы объекта.
Для удобства и поддержки лучше оформить эту логику в общем модуле или в обработчике формы.
Если нужна помощь с конкретным кодом под вашу конфигурацию, уточните версию и структуру справочника Контрагенты, а также форму документа.
12 мая 2026 в 14:00 в ответ на: Как в 1С:Бухгалтерия 3.0 автоподставить адрес контрагента в форме док-та? #37107В 1С:Бухгалтерия 3.0 нет стандартного механизма, который автоматически подтягивал бы адрес контрагента из карточки в форму ввода реквизитов документа «Статистическая форма учета перемещения товаров», особенно с учётом проверки страны (Казахстан). Для этого нужно доработать обработку формы ввода реквизитов, добавив обработчик события изменения поля контрагента.
Основная идея решения такова: в событии изменения поля контрагента получить из справочника Контрагенты реквизиты выбранного контрагента, проверить, что страна регистрации — Казахстан, и если да, то подставить юридический адрес контрагента в соответствующее поле формы.
Пример кода для события ПриИзменении поля Контрагент в форме:
1С (Код)1234567891011121314151617181920212223Процедура КонтрагентПриИзменении(Элемент)Если ЗначениеЗаполнено(Элемент.Значение) ТогдаКонтрагент = Элемент.Значение;// Получаем реквизиты контрагентаЗапрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Контрагенты.СтранаРегистрации,| Контрагенты.ЮридическийАдрес|ИЗ| Справочник.Контрагенты КАК Контрагенты|ГДЕ| Контрагенты.Ссылка = &Контрагент";Запрос.УстановитьПараметр("Контрагент", Контрагент);Результат = Запрос.Выполнить().Выбрать();Если Результат.Следующий() ТогдаЕсли Результат.СтранаРегистрации = "Казахстан" Тогда// Подставляем адрес в поле формыЭтаФорма.ЭлементыФормы.Адрес.Значение = Результат.ЮридическийАдрес;КонецЕсли;КонецЕсли;КонецЕсли;КонецПроцедурыЕсли в вашей конфигурации страна хранится не просто текстом, а ссылкой на справочник «Страны», то сравнение нужно делать через поиск по наименованию, например:
1С (Код)12Если Результат.СтранаРегистрации = Справочники.Страны.НайтиПоНаименованию("Казахстан") ТогдаКонецЕслиЕсли в форме нет поля для адреса, его нужно добавить. Также, если адрес хранится в табличной части или регистре сведений, потребуется получить его через запрос или методы объекта.
Для удобства и поддержки лучше оформить эту логику в общем модуле или в обработчике формы.
Если нужна помощь с конкретным кодом под вашу конфигурацию, уточните версию и структуру справочника Контрагенты, а также форму документа.
12 мая 2026 в 14:00 в ответ на: Как в 1С:Бухгалтерия 3.0 в форме реквизитов автоматически подтягивать адрес конт #37105В 1С:Бухгалтерия 3.0 нет стандартного механизма, который автоматически подтягивал бы адрес контрагента из карточки в форму ввода реквизитов документа «Статистическая форма учета перемещения товаров», особенно с учётом проверки страны (Казахстан). Для этого нужно доработать обработку формы ввода реквизитов, добавив обработчик события изменения поля контрагента.
Основная идея решения такова: в событии изменения поля контрагента получить из справочника Контрагенты реквизиты выбранного контрагента, проверить, что страна регистрации — Казахстан, и если да, то подставить юридический адрес контрагента в соответствующее поле формы.
Пример кода для события ПриИзменении поля Контрагент в форме:
1С (Код)1234567891011121314151617181920212223Процедура КонтрагентПриИзменении(Элемент)Если ЗначениеЗаполнено(Элемент.Значение) ТогдаКонтрагент = Элемент.Значение;// Получаем реквизиты контрагентаЗапрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Контрагенты.СтранаРегистрации,| Контрагенты.ЮридическийАдрес|ИЗ| Справочник.Контрагенты КАК Контрагенты|ГДЕ| Контрагенты.Ссылка = &Контрагент";Запрос.УстановитьПараметр("Контрагент", Контрагент);Результат = Запрос.Выполнить().Выбрать();Если Результат.Следующий() ТогдаЕсли Результат.СтранаРегистрации = "Казахстан" Тогда// Подставляем адрес в поле формыЭтаФорма.ЭлементыФормы.Адрес.Значение = Результат.ЮридическийАдрес;КонецЕсли;КонецЕсли;КонецЕсли;КонецПроцедурыЕсли в вашей конфигурации страна хранится не просто текстом, а ссылкой на справочник «Страны», то сравнение нужно делать через поиск по наименованию, например:
1С (Код)12Если Результат.СтранаРегистрации = Справочники.Страны.НайтиПоНаименованию("Казахстан") ТогдаКонецЕслиЕсли в форме нет поля для адреса, его нужно добавить. Также, если адрес хранится в табличной части или регистре сведений, потребуется получить его через запрос или методы объекта.
Для удобства и поддержки лучше оформить эту логику в общем модуле или в обработчике формы.
Если нужна помощь с конкретным кодом под вашу конфигурацию, уточните версию и структуру справочника Контрагенты, а также форму документа.
12 мая 2026 в 14:00 в ответ на: Как автоподставить адрес контрагента Казахстана в 1С: Бухгалтерия 3.0? #37103В 1С:Бухгалтерия 3.0 нет стандартного механизма, который автоматически подтягивал бы адрес контрагента из карточки в форму ввода реквизитов документа «Статистическая форма учета перемещения товаров», особенно с учётом проверки страны (Казахстан). Для этого нужно доработать обработку формы ввода реквизитов, добавив обработчик события изменения поля контрагента.
Основная идея решения такова: в событии изменения поля контрагента получить из справочника Контрагенты реквизиты выбранного контрагента, проверить, что страна регистрации — Казахстан, и если да, то подставить юридический адрес контрагента в соответствующее поле формы.
Пример кода для события ПриИзменении поля Контрагент в форме:
1С (Код)1234567891011121314151617181920212223Процедура КонтрагентПриИзменении(Элемент)Если ЗначениеЗаполнено(Элемент.Значение) ТогдаКонтрагент = Элемент.Значение;// Получаем реквизиты контрагентаЗапрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Контрагенты.СтранаРегистрации,| Контрагенты.ЮридическийАдрес|ИЗ| Справочник.Контрагенты КАК Контрагенты|ГДЕ| Контрагенты.Ссылка = &Контрагент";Запрос.УстановитьПараметр("Контрагент", Контрагент);Результат = Запрос.Выполнить().Выбрать();Если Результат.Следующий() ТогдаЕсли Результат.СтранаРегистрации = "Казахстан" Тогда// Подставляем адрес в поле формыЭтаФорма.ЭлементыФормы.Адрес.Значение = Результат.ЮридическийАдрес;КонецЕсли;КонецЕсли;КонецЕсли;КонецПроцедурыЕсли в вашей конфигурации страна хранится не просто текстом, а ссылкой на справочник «Страны», то сравнение нужно делать через поиск по наименованию, например:
1С (Код)12Если Результат.СтранаРегистрации = Справочники.Страны.НайтиПоНаименованию("Казахстан") ТогдаКонецЕслиЕсли в форме нет поля для адреса, его нужно добавить. Также, если адрес хранится в табличной части или регистре сведений, потребуется получить его через запрос или методы объекта.
Для удобства и поддержки лучше оформить эту логику в общем модуле или в обработчике формы.
Если нужна помощь с конкретным кодом под вашу конфигурацию, уточните версию и структуру справочника Контрагенты, а также форму документа.
12 мая 2026 в 14:00 в ответ на: Как настроить авто подстановку адреса контрагента в форме ввода в 1С:Бухгалтерия #37101В 1С:Бухгалтерия 3.0 нет стандартного механизма, который автоматически подтягивал бы адрес контрагента из карточки в форму ввода реквизитов документа «Статистическая форма учета перемещения товаров», особенно с учётом проверки страны (Казахстан). Для этого нужно доработать обработку формы ввода реквизитов, добавив обработчик события изменения поля контрагента.
Основная идея решения такова: в событии изменения поля контрагента получить из справочника Контрагенты реквизиты выбранного контрагента, проверить, что страна регистрации — Казахстан, и если да, то подставить юридический адрес контрагента в соответствующее поле формы.
Пример кода для события ПриИзменении поля Контрагент в форме:
1С (Код)1234567891011121314151617181920212223Процедура КонтрагентПриИзменении(Элемент)Если ЗначениеЗаполнено(Элемент.Значение) ТогдаКонтрагент = Элемент.Значение;// Получаем реквизиты контрагентаЗапрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Контрагенты.СтранаРегистрации,| Контрагенты.ЮридическийАдрес|ИЗ| Справочник.Контрагенты КАК Контрагенты|ГДЕ| Контрагенты.Ссылка = &Контрагент";Запрос.УстановитьПараметр("Контрагент", Контрагент);Результат = Запрос.Выполнить().Выбрать();Если Результат.Следующий() ТогдаЕсли Результат.СтранаРегистрации = "Казахстан" Тогда// Подставляем адрес в поле формыЭтаФорма.ЭлементыФормы.Адрес.Значение = Результат.ЮридическийАдрес;КонецЕсли;КонецЕсли;КонецЕсли;КонецПроцедурыЕсли в вашей конфигурации страна хранится не просто текстом, а ссылкой на справочник «Страны», то сравнение нужно делать через поиск по наименованию, например:
1С (Код)12Если Результат.СтранаРегистрации = Справочники.Страны.НайтиПоНаименованию("Казахстан") ТогдаКонецЕслиЕсли в форме нет поля для адреса, его нужно добавить. Также, если адрес хранится в табличной части или регистре сведений, потребуется получить его через запрос или методы объекта.
Для удобства и поддержки лучше оформить эту логику в общем модуле или в обработчике формы.
Если нужна помощь с конкретным кодом под вашу конфигурацию, уточните версию и структуру справочника Контрагенты, а также форму документа.
-
АвторСообщения