arefaste/1C_Forums huggingface dataset:
Доброго времени!
Платформа 8.3.10.2667, конфа ERP 2.2.1.115.
1) В документе "X" реализован типовой способ прикрепления файлов (Excel в частности). Он отрабатывает корректно при том, что заходит в типовую функцию ПрисоединенныеФайлы.ДобавитьПрисоединенныйФайл() и передаёт в неё свои параметры. Файлы хранятся в томе на диске, и типовое прикрепление отрабатывает корректно.
2) С другой стороны - программно прописанное обращение к той же функции ПрисоединенныеФайлы.ДобавитьПрисоединенныйФайл(), где я передаю идентичные параметры. Она не отрабатывает до конца, плюясь на "Ошибку доступа к файлу".

Я выполняю первое и второе действие под одним и тем же пользователем 1с и ОС, но конфа ведёт себя по-разному. У меня к тому на диске (куда идёт запись файла) есть права только на Чтение.

Два вопроса:
Почему первое действие я могу выполнять, а второе нет?
Как я могу реализовать выполнение второго действия под правами как у первого?

Заранее спасибо!
---
Банально, USR1CV8 виноват был, спасибо всем.
---
кавычки в названии файла это нормально?
---
а программно в каком контексте выполняется? серверном или пользователя? и в этот момент где файл находится?
---
НаКлиенте файл перевожу в ДвоичныеДанные, передаю потом НаСервер через ВременноеХранилище. Далее НаСервере помещаю ДвоичныеДанные из ВременногоХранилища в "Новый ХранилищеЗначения" и скармливаю в параметры той типовой функции, что описал выше.
Справка - Пользователь USR1CV8, как сказал системный администратор - "не используется".
---
Банально, USR1CV8 виноват был, спасибо всем.
Конфигурация БП 3.0, Релиз 3.0.44.164.
В конфигурацию добавлен новый документ "АвансовыйОтчетСписок". При открытии уже записанного документа сообщение об ошибке "При проверки запрета изменения не найдены источники данных для таблицы "Документ.АвансовыйОтчетСписок". С чем это может быть связано?
---
yamawa, поищите функцию "ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения"
---
yamawa, поищите функцию "ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения"
---
oldfornit,такую функцию не нашли
---
oldfornit, изнивите функцию нашли, а искали функциональную опцию))) сейчас будем пробовать
---
oldfornit, Большое спасибо!!! Все получилось.
---
oldfornit, вознаграждение перечислили
---
добавлено вознаграждение
---
Сообщение было скрыто модератором.
---
Общий модуль "ДатыЗапретаИзмененияПереопределяемый" процедура "ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения" добавить строки по аналогии с типовыми.
Пример:
```1c
    ДатыЗапретаИзменения.ДобавитьСтроку(ИсточникиДанных, "Документ.СверкаВзаиморасчетов", "Дата", "ВзаимозачетыСписанияЗадолженности", "Организация");
```
---
Спасибо помогло!
Подскажите название процедуры добавляющую записи в бухгалтерский регистр.
Необходимо при нажатии на отражение данных в регл. учете произвести замену количества из типового реквизита на мой.
Нарыл только до...
1. Обработка ОтражениеДокументовВреглУчете
2. РеглУчетПроведениеСервер.ОтразитьДокументВФоне
3.. и поплыл
---
Необходимо при нажатии на отражение данных в регл. учете произвести замену количества из типового реквизита на мой
проще всего это сделать в модуле Рг бухгалтерии с отбором по типу регистратора,тут и стэк вызова смотрится

```1c
    Если ЭтотОбъект.Количество()> 0 Тогда
    Регистратор = ЭтотОбъект.Отбор.Регистратор.Значение;
    Если ТипЗнч(Регистратор) = Тип("ДокументСсылка.ПоступлениеБезналичныхДенежныхСредств") Тогда
    Если Регистратор.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПоступлениеОплатыПоПлатежнойКарте Тогда
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
```

правильнее сделать в модуле менеджера документа, в процедуре ТекстОтраженияВРеглУчете()
посмотреть тексты запросов можно в рабочем месте отражения в РСБУ, вытащив на форму кнопку Тестировать создание проводок
---
Процедура, которая формирует таблицу для бух. проводок частично находится в модуле менеджера документа, частично в общих модулях.

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

```1c
    Если ЭтотОбъект.Количество()> 0 Тогда
    Регистратор = ЭтотОбъект.Отбор.Регистратор.Значение;
    Если ТипЗнч(Регистратор) = Тип("ДокументСсылка.ПоступлениеБезналичныхДенежныхСредств") Тогда
    Если Регистратор.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПоступлениеОплатыПоПлатежнойКарте Тогда
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
```

правильнее сделать в модуле менеджера документа, в процедуре ТекстОтраженияВРеглУчете()
посмотреть тексты запросов можно в рабочем месте отражения в РСБУ, вытащив на форму кнопку Тестировать создание проводок
---
отладчик не помог?
---
ОбработкаПроведения() в модуле документа.
---
Процедура, которая формирует таблицу для бух. проводок частично находится в модуле менеджера документа, частично в общих модулях.

Чтобы ничего не ломать советую сделать подписку к набору записей регистра бухгалтерии и при записи в нем уже менять проводки по своему усмотрению.
---
Отладчик помогает, когда кода не так много... взрыв мозга начинается от объема инфы. В ЕРП проводки не формируются при проведении
1 и 5 вариант в ответах самые дельные. Спасибо товарищи.
Друзья, такой вопрос. Расширения пока используем не так часто, поэтому возможно вопрос тривиальный.

Требуется для отдельных пользователей дать возможность редактирования некоторых документов при этом очень не хочется менять типовую конфигурацию.
Пришла мысль создать расширение, добавить в него новую роль и в этой роли добавить права создания/изменения для нужных документов.
Все почти получилось: в списках появились кнопки "Создать", "Скопировать", в документе доступны "Записать", "Провести". По кнопке создать действительно создается новый документ, но при этом все поля документа как будто находятся в режиме "Только просмотр" поменять ничего нельзя.
В чем может быть причина и куда копать?
---
Перенести реквизиты документа в расширение и добавить в роли права на изменение.
---
Перенести реквизиты документа в расширение и добавить в роли права на изменение.
---
о, спасибо. реквизиты документа добавил до этого, но не обратил внимание, что там тоже есть права на каждый реквизит.сейчас проверю.
кстати, попутно еще вопрос - можно как-то сразу все реквизиты документа добавить в расширение, а не по одному?
---
да, при установке права "редактирование" в реквизитах все получилось. спасибо.
Добрый день!

Есть обработка, на которой есть ТаблицаЗначений.

Мне необходимо получить УИД по одноому из реквизитов этой таблицы. Этот реквизит - это справочникСсылка.
Как мне это сделать?
---
Это метод объекта типа СправочникСсылка.

```1c
    Для каждого ТекСтр Из ТаблицаЗначений Цикл
    ТекСтр.ГУИД = ТекСтр.РеквизитТипаСправочникСсылка.УникальныйИдентификатор();
    КонецЦикла;
```
---
Прочитать СП.
---
спасибо за цитирование сп, НО я ее внутри 1с могу прочитать)
Меня интересует, что в скобках будет? Стр.мойреквезит?
---
в скобках не будет ничего, параметров нет, читай СП
---
И кстати, вот так не работает!

```1c
    Справочники.ПользователиРесурсов.УникальныйИдентификатор();
```
---
и не должно
---
это тип СправочникМенеджер, а не СправочникСсылка.
---
```1c
    МОяСсылка = Справочники.ПользователиРесурсов.НайтиПоКоду("111");
    ГУИД = МОяСсылка.УникальныйИдентификатор();
```
---
Это метод объекта типа СправочникСсылка.

```1c
    Для каждого ТекСтр Из ТаблицаЗначений Цикл
    ТекСтр.ГУИД = ТекСтр.РеквизитТипаСправочникСсылка.УникальныйИдентификатор();
    КонецЦикла;
```
```1c
    Если ШаблонИмениФайла = " Тогда
    Диалог.Заголовок="Выберите файл с исходными данными";
    Диалог.ПолноеИмяФайла=Источник;
    Диалог.ПредварительныйПросмотр=Ложь;
    Диалог.Фильтр=СтрокаФильтра;
    Если Диалог.Выбрать()=0 Тогда
    Возврат;
    КонецЕсли;
    //множественный выбор файлов
    Иначе
    СтандартнаяОбработка = Ложь;
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выберите файлы с исходными данными";
    Диалог.Фильтр = СтрокаФильтра;
    Диалог.ИндексФильтра = 0;
    Диалог.ПредварительныйПросмотр = Ложь;
    Диалог.ПроверятьСуществованиеФайла = Истина;
    Диалог.МножественныйВыбор = Истина;
    Диалог.ПолноеИмяФайла = Источник;

    ВыбФайл = Новый Массив;
    Если Диалог.Выбрать() Тогда
    МассивФайлов = Диалог.ВыбранныеФайлы;
    Для Каждого ИмяФайла Из МассивФайлов Цикл
    ВыбФайл.Добавить(Новый Файл(ИмяФайла));
    КонецЦикла
    КонецЕсли;
    КонецЕсли;

    Источник = Диалог.ПолноеИмяФайла;
```

Почему при выборе одного файла в Источник (поле ввода) передается имя файла, а при выборе нескольких файлов нет? Как его правильно передать?
---
так и собирай конкатенацией строк:

```1c
    ВыбФайл = Новый Массив;
    МассивИменФайлов = Новый Массив;
    Если Диалог.Выбрать() Тогда
    МассивФайлов = Диалог.ВыбранныеФайлы;
    Для Каждого ИмяФайла Из МассивФайлов Цикл
    ВыбФайл.Добавить(Новый Файл(ИмяФайла));
    МассивИменФайлов.Добавить(ИмяФайла);
    КонецЦикла
    КонецЕсли;
    Источник = СтрСоединить(МассивИменФайлов, ";");
```
---
а какое полное имя файла ожидаете получить из массива имен?
Вот выбрали:
C:\1.txt
C:\2.txt
C:\3.txt

Какое полное имя файла должна вернуть платформа в Диалог.ПолноеИмяФайла?
---
Нужно в поле ввода показать выбранные файлы, например, так "C:\1.txt; C:\2.txt; C:\3.txt".
---
так и собирай конкатенацией строк:

```1c
    ВыбФайл = Новый Массив;
    МассивИменФайлов = Новый Массив;
    Если Диалог.Выбрать() Тогда
    МассивФайлов = Диалог.ВыбранныеФайлы;
    Для Каждого ИмяФайла Из МассивФайлов Цикл
    ВыбФайл.Добавить(Новый Файл(ИмяФайла));
    МассивИменФайлов.Добавить(ИмяФайла);
    КонецЦикла
    КонецЕсли;
    Источник = СтрСоединить(МассивИменФайлов, ";");
```
---
даже по вашему коду все явно.
 ВыбФайл = Новый Массив; Если Диалог.Выбрать() Тогда МассивФайлов = Диалог.ВыбранныеФайлы; Для Каждого ИмяФайла Из МассивФайлов Цикл ВыбФайл.Добавить(Новый Файл(ИмяФайла)); КонецЦикла КонецЕсли;
---
Так ведь ты записываешь имена файлов в массив ВыбФайл, а в Источник передаёшь Диалог.ПолноеИмяФайла.
---
У Источника тип строка, и передаются туда не имена файлов, а "массив"
---
так массив нужно обработать, 1С не знает в каком виде собирать строку
Доброго дня, коллеги!

Пришло мне ТЗ по созданию некого отчета (для УТ11), в котором есть некое вычисляемое поле "СреднийДолг", рассчитываемое как Среднее(КонечныйОстаток) РН "РасчетыСКлиентами" (либо Сумма(КонечныйОстаток)/Количество(ДнейВПериоде), в данном случае не важно). Так вот решили, разумеется, это среднее по больнице, но вопрос в другом.
Мне средний долг требуется распределить по сумме документа РТУ - нижестоящей группировке!
Структура настроек компоновки примерно такая: Организация | Клиент | Соглашение | Реализация.
Поля: Выручка, себестоимость, ... ,СреднийДолг.

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

```1c
    ВычислитьВыражение("Сумма(КонечныйОстаток)/Количество(ДнейВПериоде)/Сумма(СуммаРеализаций)", "Соглашение")*Сумма(СуммаРеализаций)
```
---
https://infostart.ru/public/386912/
---
Можно создать два вычисляемых выражения
Первое будет рассчитывается как средний долг по клиенту (в колонке "рассчитывать по" поставить галочку по клиенту)
Второе будет рассчитывается по Регистратору ( в колонке "рассчитывать по" поставить галочку регистратор или документ)
---
Так как будет выглядеть второе вычисляемое поле?
---
Тебя формула в ресурсах интересует?
---
Да, хоть приблизительная. Тяжело представить её, воображения не хватает)
---
https://infostart.ru/public/386912/
---
Можно попробовать в вычисляемых выражениях такую конструкцию

```1c
    ВычислитьВыражение("Сумма(КонечныйОстаток)/Количество(ДнейВПериоде)/Сумма(СуммаРеализаций)", "Соглашение")*Сумма(СуммаРеализаций)
```
---
Операция отношения не связана с распределением пропорционально :).
---
Пардон, я понял, что это тоже одно из решений, правда без округления
В ручном режиме запускаю все работает.
В фоновом режиме не работает, так как сервер у нас стоит на ПостГре и там нет путей к дискам.

Скажем хСтартером было бы удобно запускать обмен раз в час.
Но как обработкой запустить обмен на Битрикс?
---
Решили через запуск XStarter.

ПС.
Слишком много надо дорабатывать, чтобы заработал режим фона
---
не тупи укажи пути линукса!
---
так отладки нет.

Каталоги фоновый процесс создавать не может, а там имя каталогов от ГСЧ идет.
Да и в отладчик фонового процесса не попасть.

Пока не выходит, из того, то видно не может связаться с сайтом из фонового процесса.
Возможно из-за того, что не создается каталог для обмена.
---
так включите!
---
скорее всего вы пишите в корень, т.к. не указали папку, а в корень явно писать запрещено, но это лучше спросить у админа.
---
Я пишу в разные каталоги по ГСЧ, в конкретный каталог админ может открыть доступ, а вот в любой заранее не может.
В этом и проблема.

Поэтому кажется, что проще запускать обмен через xСтартер, но пока не пришло в голову, как получить Объект - Нужный мне план обмена.
---
Решили через запуск XStarter.

ПС.
Слишком много надо дорабатывать, чтобы заработал режим фона
Всем привет!

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

Создала для этого обработчик события:

```1c
    &НаСервере
    Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)

    ЗаполнитьЗначенияСвойств(ЭтаФорма,Настройки);
    УстановитьОтборНаСервере(ОтборФоновыхЗаданий);
    НастройкиЗагружены = Истина;

    КонецПроцедуры
```

Смотрю в отладке - Настройки - это соответствие, проваливаюсь в соответствие - ключ - "ОтборФоновыхЗначений", значение - фиксированная структура, проваливаюсь в эту структуру, мой заданный отбор есть. Иду дальше, На второй строке в отладке смотрю "ОтборФоновыхЗаданий" - НЕОПРЕДЕЛЕНО. Почему?? Что я и где упустила?
---
Решила проблему тем, что удалила:

```1c
    ЗаполнитьЗначенияСвойств(ЭтаФорма,Настройки);
```

и добавила обход по ключу.

```1c
    &НаСервере
    Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
    Для Каждого Настройка ИЗ Настройки Цикл
    Если Настройка.Ключ = "ОтборФоновыхЗаданий" Тогда
    ОтборФоновыхЗаданий = Настройка.Значение;
    УстановитьОтборНаСервере(ОтборФоновыхЗаданий);
    НастройкиЗагружены = Истина;
    КонецЕсли;
    КонецЦикла;

    КонецПроцедуры
```
---
Решила проблему тем, что удалила:

```1c
    ЗаполнитьЗначенияСвойств(ЭтаФорма,Настройки);
```

и добавила обход по ключу.

```1c
    &НаСервере
    Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
    Для Каждого Настройка ИЗ Настройки Цикл
    Если Настройка.Ключ = "ОтборФоновыхЗаданий" Тогда
    ОтборФоновыхЗаданий = Настройка.Значение;
    УстановитьОтборНаСервере(ОтборФоновыхЗаданий);
    НастройкиЗагружены = Истина;
    КонецЕсли;
    КонецЦикла;

    КонецПроцедуры
```
---
Молодец! Главное - себя похвалить за "найденное решение".
Уважаемые форумчане, подскажите.
Добавил в справочник контрагентов ТЧ. Вывел на форму. Запускаю в режиме предприятия - на форме ее нет! ЧЯДНТ?
---
значит програмно форма меняется или вообще другая открывается
---
ну очевидно колонки не добавили. Или прав нет.
---
Права полные. На реквизите самой ТЧ в "пользовательская видимость" стоит галка "Видимость"
в конфигураторе колонки вижу.
---
значит програмно форма меняется или вообще другая открывается
---
ТЧ добавлена самому справочнику или форме элемента?
---
авлена самому справочнику или форме элемента
К самому справочнику на форму вывел
---
Все, разобрался. Максим Б был прав, что форма контрагена отрисовывается программно из справочника партнеры. Это фишка УТ такая.
Всем спасибо.
Нужно выбрать все файлы в имени которых есть определенная комбинация символов. Как задать фильтр для имени файла?
---
Почитайте в синтаксис-помощнике про свойство Фильтр для ДиалогВыбораФайла
---
Почитайте в синтаксис-помощнике про свойство Фильтр для ДиалогВыбораФайла
Здравствуйте.

Есть ТЧ, в ней есть пару реквизитов которых я выкинул на форму. Теперь мне нужно скрыть(убрать) ТЧ документа, но те реквизиты что бы остались.
Сделал отдельную страницу куда закинул ТЧ, мне нужно сделать так что бы при открытии, я программно мог перейти на ту страницу и потом вернутся обратно. Можно ли такое сделать?
Как перейти на другую я понял : "ЭтаФорма.ТекущийЭлемент = Элементы.ГруппаСтраници.ПодчиненныеЭлементы.ГруппаДополнительная", а как мне её активировать и вернутся на другую?)
---
Реквизит ТЧ "сумма" отражает сумму конкретной строки? Или сумму всей табличной части?
Если первое то надо уставновить текущую строку при создании на форме, если я правильно понял.
Если второе, то должно и так работать
Какой путь к данным у "У меня есть реквизит ТЧ "сумма", я вынес его на панель УФ"
---
Теперь мне нужно скрыть(убрать) ТЧ документа, но те реквизиты что бы остались.
ничего не понятно,
но, реквизиты итак останутся, никуда не денутся, пока форма открыта.
А видимостью и доступностью можно программно управлять. Смотри палитру свойств у каждого элемента формы, там эти свойства есть. Их программно назначай и все.
С установкой страниц - ты вроде разобрался.
---
У меня есть реквизит ТЧ "сумма", я вынес его на панель УФ. ТЧ я закинул на другую страницу. Когда я открываю существующий документ, то сумма = 0. Но если я клацну на другую страницу и вернусь обратно, то сумма у меня будет та, которая в документа(так и должно быть изначально).
Если же оставить ТЧ внизу на первой странице, то все отлично, но ТЧ занимает много места, если убрать её видимость, то реквизит сумма пропадает с формы
---
Реквизит ТЧ "сумма" отражает сумму конкретной строки? Или сумму всей табличной части?
Если первое то надо уставновить текущую строку при создании на форме, если я правильно понял.
Если второе, то должно и так работать
Какой путь к данным у "У меня есть реквизит ТЧ "сумма", я вынес его на панель УФ"
---
Отражает сумму конкретной строки.
Разобрался, спасибо.
Понимаю что тема, наверно, изжевана, но никак не могу понять как во внешнем отчете получить значение реквизита формы.

У меня есть внешний отчет, у отчета есть Реквизит1, тип СправочникСсылка.СтруктураПредприятия. В идеале бы получить значение &НаКлиенте
---
ЭтаФорма.Реквизит1 или ЭтотОбъект.Реквизит1
---
ЭтаФорма.Реквизит1 или ЭтотОбъект.Реквизит1
---
можно просто Реквизит1

(2) ЭтотОбъект а что реквизит объекта формы всегда реквизит формы?
---
По-моему даже напрямую можно в контексте формы обращаться.
---
Напрямую можно только в обработке, в отчете нельзя (хотя, вспоминая 7.7 - бред полный)
---
У меня довольно "мудреный" отчет: через метаданные сначала я отбираю документы у которых есть Реквизит1, потом из них отбираю те документы у которых есть табличная часть Товары и все это загоняю в таблицу значений. Из полученной ТЗ отбираю данные по условию Документ.Реквизит = ВыбРеквизит1

Остались несколько вопросов по отчету:

1. Быстрее ли будет использовать не ТЗ, а временное хранилище? Смогу ли я потом запросом выбрать нужные мне данные?

2. Пока искал ответ как получить значение реквизита на форме, пытался сделать отчет на основе СКД (ну и типа красивее) - тоже не получилось:
- добавляю набор данных - таблица значений
- добавляю поля как они называются в таблице значений:
     ДокСсылка
     Подразделение
     Номенклатура
     Количество
- на вкладке Параметры заполняю
    Имя ВыбПодразделение
    Заголовок Выб подразделение
    Тип СправочникСсылка.СтруктураПредприятия
    Параметр функции Настройка формы
    Включать в доступные поля - V

Тут работает до момента выбора нужного подразделения, я так понимаю что нужно прописать в коде выбор значения?
Здравствуйте, в 1С можно из формы сохранять и восстанавливать настройки динамического списка под своими названиями. И есть событие списка "ПриОбновленииСоставаПользовательскихНастроекНаСервере"

Подскажите, кто в курсе:
1). Можно ли как-то узнать название сохраненной настройки в этом событии ?
2). Можно ли скопировать настройку динамического списка одного пользователя для всех ?
---
В конфигурациях на основе БСП есть стандартный механизм копирования пользовательских настроек.
---
В конфигурациях на основе БСП есть стандартный механизм копирования пользовательских настроек.
---
Находится в Администрирование - Пользователи
Здравствуйте. Перелопатил форум, но так и не нашёл решения. Подскажите, где ошибся?

Я создаю новый документ и в табличную часть товаров нужно вбить номенклатуру. Если документ создаётся вручную, то товар ищется в поле "наименование".

```1c
    сТовары = НовыйДокумент.Товары.Добавить();
    Товар = Справочники.Номенклатура.НайтиПоНаименованию(Файл.Товар.Наименование);
    сТовары.Номенклатура = Товар.ПолучитьОбъект();
    сТовары.Номенклатура.Наименование = Файл.Товар.Наименование;
    сТовары.Номенклатура.Наименование.Записать();
```

Пишет ошибку "Поле объекта "Наименование " недоступно для записи" в сТовары.Номенклатура.Наименование = Файл.Товар.Наименование;
---
Вот ошибка сТовары.Номенклатура = Товар.ПолучитьОбъект();
 Вы пытаетесь прилепить объект, а нужна Ссылка Правильно сТовары.Номенклатура = Товар.Ссылка;
Так как Товар у Вас уже объект после найти по наименованию
И вот это сТовары.Номенклатура.Наименование.Записать();
Правильно НовыйДокумент.Записать();
---
Вот ошибка сТовары.Номенклатура = Товар.ПолучитьОбъект();
 Вы пытаетесь прилепить объект, а нужна Ссылка Правильно сТовары.Номенклатура = Товар.Ссылка;
Так как Товар у Вас уже объект после найти по наименованию
И вот это сТовары.Номенклатура.Наименование.Записать();
Правильно НовыйДокумент.Записать();
---
Тут похоже в каждой строчке по ошибке.
---
Ага ;)
---
Писал по примерам. Так что, пардон. Нужно не говорить что говнокод, а указывать где он, чтобы его не было =)
---
Про качество кода никто не говорил. Я просто посчитал количество строк и ошибок. :-)

Что должен делать код (0)?
---
Вы не правы. Решение лежит не в плоскости форума, а как правило, в плоскости синтакс помощника.