Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Настройка выгрузки номенклатуры на сайт(УТ - 1СБитрикс)

Здравствуйте. Подскажите пожалуйста, можно ли в модуле 1С-Битрикс, настроить выгрузку папок номенклатуры, только верхнего уровня? А не весь каталог номенклатуры?
Ответ: Спасибо, все получилось.
Вопрос: Выгрузка картинок номенклатуры

Добрый день!
Нужно выгрузить основную картинку каждой номенклатуры из каталога в базе в каталог на диске.

Код:
&НаКлиенте
Процедура ВыгрузитьКартинкиНоменклатуры(Команда)
    Если НЕ ЗначениеЗаполнено(КаталогФайла) Тогда
        Сообщить("Каталог файла не заполнен!");
        Возврат;
    КонецЕсли;
    Если НЕ ЗначениеЗаполнено(КаталогВБазе) Тогда
        Сообщить("Каталог в базе не заполнен!");
        Возврат;
    КонецЕсли;
    ТаблицаЗначений = ВыгрузитьКартинкиНоменклатурыНаСервере();
   
    Для каждого Стр Из ТаблицаЗначений Цикл
        Если Не ЗначениеЗаполнено(Стр.ФайлКартинки) Тогда
            Продолжить;
        КонецЕсли;
        Картинка = Стр.ФайлКартинки.ФайлХранилище.Получить();
        Если ТипЗнч(Картинка) = Тип("Картинка") Тогда
            Картинка.Записать(КаталогФайла + "\" + Стр.Артикул + "_" + Стр.Наименование + ".jpg");
        КонецЕсли;       
    КонецЦикла;
КонецПроцедуры

&НаСервереБезКонтекста
Функция  ВыгрузитьКартинкиНоменклатурыНаСервере()
    Запрос = Новый Запрос; //Вот так
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Номенклатура.Код,
        |    Номенклатура.Наименование,
        |    Номенклатура.Артикул,
        |    Номенклатура.ФайлКартинки
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура";

    Результат = Запрос.Выполнить();

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

&НаКлиенте
Процедура УстановитьКаталогФайла(Команда)
    Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.Заголовок = "Выберите каталог";
    Если ДиалогОткрытияФайла.Выбрать() Тогда
        Каталог = ДиалогОткрытияФайла.Каталог;
    Иначе
    Предупреждение(НСтр("ru = 'Каталог не выбран!'"));
    КонецЕсли;
    КаталогФайла = Каталог;
КонецПроцедуры
Вот тут в Картинка не получаются данные из базы хотя основная картинка у номенклатуры есть:
Делаю все как указано в С-П когда получаю картинку из ХранилищеЗначения. Может картинки вообще не тут храняться? Посмотрел в отладчике, там вроде все корректно получается и обращаюсь к нужному реквизиту, где хранится картинка:
Ответ:
Хорошо подправлю код, меньше ошибок будет
Вчера уже сам решил вопрос, обратился к функции общего модуля:
Код:
Картинка =  ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(Номенклатура);
Спасибо за помощь!
--- Объединение сообщений, 13 янв 2017 ---
Не пойму каким образом "хранится в томах"? Файл картинки же просто записывается на диск.
--- Объединение сообщений, 13 янв 2017 ---
Темка вот эта?
Там немного не мой вопрос... но все-равно спасибо.
Вопрос: Выгрузка изображений номенклатуры

Добрый день. Кто-нибудь знает как выгрузить картинку, прикрепленную к номенклатуре?
Пробовал сделать вот так, но значение Файл у меня в результате Неопределено. Может есть у кого рабочий пример?
&НаСервере
Процедура ВыгрузитьКартинкиНаСервере()
    КаталогИБ = "C:\wamp64\www\ххх\img\";
     КаталогНаДиске = Новый Файл("C:\wamp64\www\ххх\img\1");

    Если НЕ КаталогНаДиске.Существует() Тогда
            СоздатьКаталог(КаталогНаДиске.Путь);
    КонецЕсли;

    ИмяФайла = КаталогИБ + "1.jpg";
    
    Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Тестовая бита");
    
    Если Номенклатура <> Неопределено Тогда
        Файл = Номенклатура.ФайлКартинки.ФайлХранилище.Получить();
        Если Файл <> Неопределено Тогда
            Попытка 
                Сообщить("Производится локальная запись файла: " + ИмяФайла);
                Файл.Записать(ИмяФайла);
                Сообщить("Файл успешно записан на диск");
            Исключение
                Сообщить("Ошибка записи");
            КонецПопытки;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
Ответ:
Используй "Двоичные данные"

...........
РезультаТ = Неопределено;
    НМК                = СокрЛП(Строка(Номенклатура));
    КартинкаПоАртикулу = КаталогИЗО+"\"+НМК+".jpg";
    Попытка
        Картинка      = Новый ДвоичныеДанные(КартинкаПоАртикулу);
        НадоВыгружать = истина;
    Исключение
        НадоВыгружать = Ложь;
        Сообщить("Нет файла-"+НМК+".jpg"+" с изображением в исходном каталоге!");    
КонецПопытки;
................
Вопрос: Не могу победить XDTO при написании загрузки каталога Ресурс-Медиа

Собственно пишу загрузку каталога с Ресурс-Медиа и не могу передать параметры.
Код 1С:

    //Определение значений переменных

    АдресВСДЛ = ";;
    Логин = "XXXX";
    Пароль = "12345678";
    ПространствоИмен = ";;
    ИмяСервиса = "WSAPI";
    ИмяПорта = "WSAPISoap12";
    
    ssl = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);

    Определения = Новый WSОпределения(АдресВСДЛ, Логин, Пароль,,,ssl);
    Прокси = Новый WSПрокси(Определения, ПространствоИмен, ИмяСервиса, ИмяПорта,,,ssl);    
    Прокси.Пользователь = Логин;
    Прокси.Пароль = Пароль;

    //Получаю тип MaterialGroup_Tab
    Тип_MaterialGroup_Tab = Прокси.ФабрикаXDTO.Пакеты.Получить(ПространствоИмен).Получить("MaterialGroup_Tab");

    //Создаю объект типа MaterialGroup_Tab
    MaterialGroup_Tab = Прокси.ФабрикаXDTO.Создать(Тип_MaterialGroup_Tab);

    //Получаю тип элемента
    ТипЭлемента = Прокси.ФабрикаXDTO.Пакеты.Получить(ПространствоИмен).Получить("MaterialGroup");

    //Создаю значение типа MaterialGroup
    ЗначениеЭлемента = Прокси.ФабрикаXDTO.Создать(ТипЭлемента, "Тест");

    //Пытаюсь добавить
    MaterialGroup_Tab.Item.Добавить(ЗначениеЭлемента);


    //Получаю ошибку:
{ВнешняяОбработка.тест.Форма.Форма.Форма()}: Ошибка при вызове метода контекста (Добавить)
    MaterialGroup_Tab.Item.Добавить(ЗначениеЭлемента);
по причине:
Несоответствие типов XDTO:
Тип '{' не соответствует типу ''
Тип свойства не соответствует типу значения

Уже все мозги себе продумал. Помогите пожалуйста.
Ответ: () Вообще я имел ввиду чтоб получать полное описание номенклатуры. А потом уже запрашивать цену и остатки. А полный список выгрузить с общего каталога. Чтоб не писать кучу кода который был выше.
Вопрос: Автоподстановка номенклатуры в табличной части

Добрый день! При подборе номенклатуры автозапчастей ключевыми полями являются Артикул и Производитель, Наименование не важно. При добавлении строки с номенклатурой в табличной части наоборот по умолчанию предлагается заполнить поле Номенклатура, где, как раз, записано не ключевое поле Наименование. Нужно сделать так, чтобы продавец при добавлении новой строки вставил скопированный в буфер обмена Артикул, далее вставил значение в поле Производитель. Затем, если номенклатура с вставленными двумя ключами (Артикул и Производитель) существует, то она бы подставилась в строку табличной части. Если такой номенклатуры нет, то она бы создалась при определенном событии. Например, менеджер вставил Артикул и Производитель, номенклатура не подставилась, далее менеджер вставляет наименование в поле Номенклатура, при нажатии Enter или при переходе в другое поле (количество, например) номенклатура создается. Хотелось бы обойтись без внешней обработки. Возможно ли такое сделать? Спасибо!

Вложения:

  • Размер файла:
    17,8 КБ
    Просмотров:
    6
Ответ:
то есть сейчас при вставке артикула/производителя в соответствующее поле номенклатура не заполняется?
Вопрос: Отображение номенклатуры в Иерархии в печатной форме

Добрый день. Есть внешняя обработка, для печати документа. В данный момент она выводит просто список номенклатуры, без иерархии. А как сделать, что бы выводилось все в виде иерархии?
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
Функция Печать() Экспорт
    мВалютаРегламентированногоУчета = глЗначениеПеременной("ВалютаРегламентированногоУчета");
    мВалютаУпрУчета                 = глЗначениеПеременной("ВалютаУправленческогоУчета");
 
    ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
    Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
        ТоварКод = "Артикул";
    Иначе
        ТоварКод = "Код";
    КонецЕсли;
 
    Если СсылкаНаОбъект.Склад.ВидСклада = Перечисления.ВидыСкладов.НТТ Тогда
        ВалютаПересчета = мВалютаРегламентированногоУчета;
    Иначе
        ВалютаПересчета = мВалютаУпрУчета;
    КонецЕсли;
 
    ВалютаПечати = мВалютаРегламентированногоУчета;
    Параметры    = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаПересчета, СсылкаНаОбъект.Дата);
    Запрос       = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
    
    Запрос.Текст =
    "ВЫБРАТЬ
    |   Номер  КАК НомерДокумента,
    |   Дата   КАК ДатаДокумента,
    |   Дата   КАК ДатаНачалаИнвентаризации,
    |   Организация КАК Руководители,
    |   Организация,
    |   Склад.Представление КАК ПредставлениеСклада
    |ИЗ
    |   Документ.ИнвентаризацияТоваровНаСкладе КАК ИнвентаризацияТоваровНаСкладе
    |
    |ГДЕ
    |   ИнвентаризацияТоваровНаСкладе.Ссылка = &ТекущийДокумент";
 
    Шапка = Запрос.Выполнить().Выбрать();
    Шапка.Следующий();
    
    Запрос.УстановитьПараметр("Курс",            Параметры.Курс);
    Запрос.УстановитьПараметр("Кратность",       Параметры.Кратность);
    Запрос.УстановитьПараметр("ВидСкладаНТТ",    Перечисления.ВидыСкладов.НТТ);
 
    Запрос.Текст = 
    "ВЫБРАТЬ
    |   НомерСтроки КАК Номер,
    |   Номенклатура,
    |   Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
    |   Номенклатура.Родитель КАК Родитель,
    |   Номенклатура.НаименованиеПолное КАК ТоварНаименование,
    |   Номенклатура." + ТоварКод + "   КАК ТоварКод,
    |   ЕдиницаИзмерения.Представление  КАК ЕдиницаИзмеренияНаименование,
    |   ЕдиницаИзмерения.ЕдиницаПоКлассификатору.Код КАК ЕдиницаИзмеренияКодПоОКЕИ,
    |   Количество                     КАК ФактКоличество,
    |   КоличествоУчет                 КАК БухКоличество,
    |   ВЫБОР
    |       КОГДА Ссылка.Склад.ВидСклада = &ВидСкладаНТТ ТОГДА ЦенаВРознице
    |       ИНАЧЕ Цена * &Курс / &Кратность
    |   КОНЕЦ КАК Цена,
    |   ВЫБОР
    |       КОГДА Ссылка.Склад.ВидСклада = &ВидСкладаНТТ ТОГДА Количество * ЦенаВРознице
    |       ИНАЧЕ Сумма * &Курс / &Кратность
    |   КОНЕЦ КАК ФактСумма,
    |   ВЫБОР
    |       КОГДА Ссылка.Склад.ВидСклада = &ВидСкладаНТТ ТОГДА КоличествоУчет *ЦенаВРознице
    |       ИНАЧЕ СуммаУчет * &Курс / &Кратность
    |   КОНЕЦ КАК БухСумма,
    |   ХарактеристикаНоменклатуры     КАК Характеристика,
    |   СерияНоменклатуры КАК Серия
    |ИЗ
    |   Документ.ИнвентаризацияТоваровНаСкладе.Товары КАК Товары
    |   
    |ГДЕ
    |   Товары.Ссылка = &ТекущийДокумент
    |   И (Товары.Количество - Товары.КоличествоУчет) <> 0
    |   
    |УПОРЯДОЧИТЬ ПО
    |Товары.Номенклатура.Родитель";
 
    ВыборкаСтрокТовары = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);  //Добавил обход по группировкам
 
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ИнвентаризацияТоваровНаСкладе_ИНВ19";
    Макет       = ПолучитьМакет("ИНВ19КОПИЯ");
 
    // Выводим шапку накладной
    ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
    ОбластьМакета.Параметры.Заполнить(Шапка);
    СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента);
    ОбластьМакета.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации);
    ОбластьМакета.Параметры.ОрганизацияПоОКПО        = СведенияОбОрганизации.КодПоОКПО;
    ОбластьМакета.Параметры.ДатаДокумента            = Шапка.ДатаДокумента;
    ОбластьМакета.Параметры.ДатаНачалаИнвентаризации = Шапка.ДатаНачалаИнвентаризации;
    ОбластьМакета.Параметры.НомерДокумента           = ОбщегоНазначения.ПолучитьНомерНаПечать(СсылкаНаОбъект);
 
    Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизаций(Шапка.Руководители, Шапка.ДатаДокумента,);
    Руководитель = Руководители.Руководитель;
    Бухгалтер    = Руководители.ГлавныйБухгалтер;
 
    ТабДокумент.Вывести(ОбластьМакета);
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    
    НомерСтраницы   = 2;
    
    ИтогоРезультатИзлишекКолво   = 0;
    ИтогоРезультатИзлишекСумма   = 0;
    ИтогоРезультатНедостачаКолво = 0;
    ИтогоРезультатНедостачаСумма = 0;
    //Изменение
    ИтогоРезультатРазница = 0; 
    Разность = 0;
    //Конец
 
 
    // Выводим заголовок таблицы
    ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы1");
    ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы; 
    ТабДокумент.Вывести(ЗаголовокТаблицы);
 
    КоличествоСтрок = ВыборкаСтрокТовары.Количество();
 
    // Выводим многострочную часть докмента
    ОбластьМакета              = Макет.ПолучитьОбласть("СтрокаТаблицы1");
    ОбластьИтоговПоСтранице    = Макет.ПолучитьОбласть("ИтогоТаблицы1");
    ОбластьПодвала             = Макет.ПолучитьОбласть("Подвал");
    МассивВыводимыхОбластей    = Новый Массив;
    Ном = 0;
    
    Пока ВыборкаСтрокТовары.Следующий() Цикл
        
        Ном = Ном + 1;
        
        Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
            Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
            Продолжить;
        КонецЕсли;
        
        ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары);
        ОбластьМакета.Параметры.ТоварНаименование = ВыборкаСтрокТовары.ТоварНаименование + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары);
        
        Разница     = 0;
        РазницаСумм = 0;
        
        Разница     = ВыборкаСтрокТовары.ФактКоличество - ВыборкаСтрокТовары.БухКоличество;
        РазницаСумм = ВыборкаСтрокТовары.ФактСумма      - ВыборкаСтрокТовары.БухСумма;
    
        Если Разница < 0 И РазницаСумм < 0 Тогда
            ОбластьМакета.Параметры.РезультатНедостачаКолво = - Разница;
            ОбластьМакета.Параметры.РезультатНедостачаСумма = - РазницаСумм;
            ОбластьМакета.Параметры.РезультатИзлишекКолво   = 0;
            ОбластьМакета.Параметры.РезультатИзлишекСумма   = 0;
            //Изменения
            ОбластьМакета.Параметры.Разность =  РазницаСумм;
            //
 
            ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво + (- Разница);
            ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма + (- РазницаСумм);
        ИначеЕсли Разница < 0 И РазницаСумм >= 0 Тогда
            ОбластьМакета.Параметры.РезультатНедостачаКолво = - Разница;
            ОбластьМакета.Параметры.РезультатНедостачаСумма = РазницаСумм;
            ОбластьМакета.Параметры.РезультатИзлишекКолво   = 0;
            ОбластьМакета.Параметры.РезультатИзлишекСумма   = 0;
            //Изменения
            ОбластьМакета.Параметры.Разность =  РазницаСумм;
            //
        
            ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво + (- Разница);
            ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма + РазницаСумм;
        Иначе
            ОбластьМакета.Параметры.РезультатНедостачаКолво = 0;
            ОбластьМакета.Параметры.РезультатНедостачаСумма = 0;
            ОбластьМакета.Параметры.РезультатИзлишекКолво   = Разница;
            ОбластьМакета.Параметры.РезультатИзлишекСумма   = РазницаСумм;
            //Изменения
            ОбластьМакета.Параметры.Разность =  РазницаСумм;
            //
            ИтогоРезультатИзлишекКолво   = ИтогоРезультатИзлишекКолво   + Разница;
            ИтогоРезультатИзлишекСумма   = ИтогоРезультатИзлишекСумма   + РазницаСумм;
        КонецЕсли;
        //Изменение
        ИтогоРезультатРазница = ИтогоРезультатИзлишекСумма - ИтогоРезультатНедостачаСумма; 
        //Конец
        МассивВыводимыхОбластей.Очистить();
        МассивВыводимыхОбластей.Добавить(ОбластьМакета);
        МассивВыводимыхОбластей.Добавить(ОбластьИтоговПоСтранице);
        Если Ном = КоличествоСтрок Тогда
            МассивВыводимыхОбластей.Добавить(ОбластьПодвала);
        КонецЕсли;
        
        Если НЕ ФормированиеПечатныхФорм.ПроверитьВыводТабличногоДокумента(ТабДокумент, МассивВыводимыхОбластей) Тогда
            
            НомерСтраницы = НомерСтраницы + 1;
            ТабДокумент.Вывести(ОбластьИтоговПоСтранице);
            ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
            ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
            ТабДокумент.Вывести(ЗаголовокТаблицы);
            
        КонецЕсли; 
        
        ТабДокумент.Вывести(ОбластьМакета);
 
    КонецЦикла;
 
    ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатИзлишекКолво   = ИтогоРезультатИзлишекКолво;
    ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатИзлишекСумма   = ИтогоРезультатИзлишекСумма;
    ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво;
    ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма;
    //Изменение
    ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатРазница = ИтогоРезультатРазница;    
    //КонецИзменения
    ТабДокумент.Вывести(ОбластьИтоговПоСтранице);
 
    ОбластьПодвала.Параметры.ФИОБухгалтера =  Бухгалтер;
    ОбластьПодвала.Параметры.Заполнить(Шапка);
    ТабДокумент.Вывести(ОбластьПодвала);
 
    // Зададим параметры макета
    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
 
    Возврат ТабДокумент;
 
КонецФункции
Ответ: Сдвинулся еще на шаг. Теперь он показывает группировку, но само имя группы не пишет. Как это можно исправить?

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
Функция Печать() Экспорт
    мВалютаРегламентированногоУчета = глЗначениеПеременной("ВалютаРегламентированногоУчета");
    мВалютаУпрУчета                 = глЗначениеПеременной("ВалютаУправленческогоУчета");
 
    ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
    Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
        ТоварКод = "Артикул";
    Иначе
        ТоварКод = "Код";
    КонецЕсли;
 
    Если СсылкаНаОбъект.Склад.ВидСклада = Перечисления.ВидыСкладов.НТТ Тогда
        ВалютаПересчета = мВалютаРегламентированногоУчета;
    Иначе
        ВалютаПересчета = мВалютаУпрУчета;
    КонецЕсли;
 
    ВалютаПечати = мВалютаРегламентированногоУчета;
    Параметры    = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаПересчета, СсылкаНаОбъект.Дата);
    Запрос       = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
    
    Запрос.Текст =
    "ВЫБРАТЬ
    |   Номер  КАК НомерДокумента,
    |   Дата   КАК ДатаДокумента,
    |   Дата   КАК ДатаНачалаИнвентаризации,
    |   Организация КАК Руководители,
    |   Организация,
    |   Склад.Представление КАК ПредставлениеСклада
    |ИЗ
    |   Документ.ИнвентаризацияТоваровНаСкладе КАК ИнвентаризацияТоваровНаСкладе
    |
    |ГДЕ
    |   ИнвентаризацияТоваровНаСкладе.Ссылка = &ТекущийДокумент";
 
    Шапка = Запрос.Выполнить().Выбрать();
    Шапка.Следующий();
    
    Запрос.УстановитьПараметр("Курс",            Параметры.Курс);
    Запрос.УстановитьПараметр("Кратность",       Параметры.Кратность);
    Запрос.УстановитьПараметр("ВидСкладаНТТ",    Перечисления.ВидыСкладов.НТТ);
 
    Запрос.Текст = 
    "ВЫБРАТЬ
    |   НомерСтроки КАК Номер,
    |   Номенклатура,
    |   Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
    |   Номенклатура.Родитель КАК Родитель,
    |   Номенклатура.НаименованиеПолное КАК ТоварНаименование,
    |   Номенклатура." + ТоварКод + "   КАК ТоварКод,
    |   ЕдиницаИзмерения.Представление  КАК ЕдиницаИзмеренияНаименование,
    |   ЕдиницаИзмерения.ЕдиницаПоКлассификатору.Код КАК ЕдиницаИзмеренияКодПоОКЕИ,
    |   Количество                     КАК ФактКоличество,
    |   КоличествоУчет                 КАК БухКоличество,
    |   ВЫБОР
    |       КОГДА Ссылка.Склад.ВидСклада = &ВидСкладаНТТ ТОГДА ЦенаВРознице
    |       ИНАЧЕ Цена * &Курс / &Кратность
    |   КОНЕЦ КАК Цена,
    |   ВЫБОР
    |       КОГДА Ссылка.Склад.ВидСклада = &ВидСкладаНТТ ТОГДА Количество * ЦенаВРознице
    |       ИНАЧЕ Сумма * &Курс / &Кратность
    |   КОНЕЦ КАК ФактСумма,
    |   ВЫБОР
    |       КОГДА Ссылка.Склад.ВидСклада = &ВидСкладаНТТ ТОГДА КоличествоУчет *ЦенаВРознице
    |       ИНАЧЕ СуммаУчет * &Курс / &Кратность
    |   КОНЕЦ КАК БухСумма,
    |   ХарактеристикаНоменклатуры     КАК Характеристика,
    |   СерияНоменклатуры КАК Серия
    |ИЗ
    |   Документ.ИнвентаризацияТоваровНаСкладе.Товары КАК Товары
    |   
    |ГДЕ
    |   Товары.Ссылка = &ТекущийДокумент
    |   И (Товары.Количество - Товары.КоличествоУчет) <> 0
    |   
    |УПОРЯДОЧИТЬ ПО
    |Товары.Номенклатура.Родитель
    |ИТОГИ ПО ОБЩИЕ,
    |    Номенклатура ИЕРАРХИЯ";
 
    Результат = Запрос.Выполнить();
    ВыборкаСтрокТовары = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); 
    
 
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ИнвентаризацияТоваровНаСкладе_ИНВ19";
    Макет       = ПолучитьМакет("ИНВ19КОПИЯ");
 
 
    ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
    ОбластьМакета.Параметры.Заполнить(Шапка);
    СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента);
    ОбластьМакета.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации);
    ОбластьМакета.Параметры.ОрганизацияПоОКПО        = СведенияОбОрганизации.КодПоОКПО;
    ОбластьМакета.Параметры.ДатаДокумента            = Шапка.ДатаДокумента;
    ОбластьМакета.Параметры.ДатаНачалаИнвентаризации = Шапка.ДатаНачалаИнвентаризации;
    ОбластьМакета.Параметры.НомерДокумента           = ОбщегоНазначения.ПолучитьНомерНаПечать(СсылкаНаОбъект);
 
    Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизаций(Шапка.Руководители, Шапка.ДатаДокумента,);
    Руководитель = Руководители.Руководитель;
    Бухгалтер    = Руководители.ГлавныйБухгалтер;
 
    ТабДокумент.Вывести(ОбластьМакета);
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    
    НомерСтраницы   = 2;
    
    ИтогоРезультатИзлишекКолво   = 0;
    ИтогоРезультатИзлишекСумма   = 0;
    ИтогоРезультатНедостачаКолво = 0;
    ИтогоРезультатНедостачаСумма = 0;
    ИтогоРезультатРазница = 0; 
    Разность = 0;
 
 
    // Выводим заголовок таблицы
    ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы1");
    ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы; 
    ТабДокумент.Вывести(ЗаголовокТаблицы);
 
    КоличествоСтрок = ВыборкаСтрокТовары.Количество();
 
    // Выводим многострочную часть докмента
    //ОбластьМакетаГр            = Макет.ПолучитьОбласть("СтрокаГруппы");    //Заккоментировал
    //ОбластьМакета              = Макет.ПолучитьОбласть("СтрокаТаблицы1");
    ОбластьИтоговПоСтранице    = Макет.ПолучитьОбласть("ИтогоТаблицы1");
    ОбластьПодвала             = Макет.ПолучитьОбласть("Подвал");
    МассивВыводимыхОбластей    = Новый Массив;
    Ном = 0;
    
    //Изменения Выведение по группам!!!!!
 
    ВыборкаСтрокТовары.Следующий();
    ТабДокумент.НачатьАвтогруппировкуСтрок();
    
    ВыборкаНоменклатуры = ВыборкаСтрокТовары.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    Пока ВыборкаНоменклатуры.Следующий() Цикл
        
        Ном = Ном + 1;
 
        Если ВыборкаНоменклатуры.Номенклатура.ЭтоГруппа Тогда
            ОбластьМакета = Макет.ПолучитьОбласть("СтрокаГруппы");
        Иначе
            ОбластьМакета = Макет.ПолучитьОбласть("СтрокаТаблицы1");
        КонецЕсли;
        
        ОбластьМакета.Параметры.Заполнить(ВыборкаНоменклатуры);
        
        РодительНоменклатуры = ВыборкаНоменклатуры.Родитель;
        
        УровеньИерархии = 0;
        Пока ЗначениеЗаполнено(РодительНоменклатуры) Цикл
            УровеньИерархии = УровеньИерархии +1;
            РодительНоменклатуры = РодительНоменклатуры.Родитель;
        КонецЦикла;       
        ТабДокумент.Вывести(ОбластьМакета,УровеньИерархии); 
    КонецЦикла;
        ТабДокумент.ЗакончитьАвтогруппировкуСтрок();
 
        Пока ВыборкаСтрокТовары.Следующий() Цикл
        
        Разница     = 0;
        РазницаСумм = 0;
        
        Разница     = ВыборкаСтрокТовары.ФактКоличество - ВыборкаСтрокТовары.БухКоличество;      //
        РазницаСумм = ВыборкаСтрокТовары.ФактСумма      - ВыборкаСтрокТовары.БухСумма;        //
    
        Если Разница < 0 И РазницаСумм < 0 Тогда
            ОбластьМакета.Параметры.РезультатНедостачаКолво = - Разница;
            ОбластьМакета.Параметры.РезультатНедостачаСумма = - РазницаСумм;
            ОбластьМакета.Параметры.РезультатИзлишекКолво   = 0;
            ОбластьМакета.Параметры.РезультатИзлишекСумма   = 0;
        
            ОбластьМакета.Параметры.Разность =  РазницаСумм;
        
 
            ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво + (- Разница);
            ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма + (- РазницаСумм);
        ИначеЕсли Разница < 0 И РазницаСумм >= 0 Тогда
            ОбластьМакета.Параметры.РезультатНедостачаКолво = - Разница;
            ОбластьМакета.Параметры.РезультатНедостачаСумма = РазницаСумм;
            ОбластьМакета.Параметры.РезультатИзлишекКолво   = 0;
            ОбластьМакета.Параметры.РезультатИзлишекСумма   = 0;
 
            ОбластьМакета.Параметры.Разность =  РазницаСумм;
    
        
            ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво + (- Разница);
            ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма + РазницаСумм;
        Иначе
            ОбластьМакета.Параметры.РезультатНедостачаКолво = 0;
            ОбластьМакета.Параметры.РезультатНедостачаСумма = 0;
            ОбластьМакета.Параметры.РезультатИзлишекКолво   = Разница;
            ОбластьМакета.Параметры.РезультатИзлишекСумма   = РазницаСумм;
    
            ОбластьМакета.Параметры.Разность =  РазницаСумм;
        
            ИтогоРезультатИзлишекКолво   = ИтогоРезультатИзлишекКолво   + Разница;
            ИтогоРезультатИзлишекСумма   = ИтогоРезультатИзлишекСумма   + РазницаСумм;
        КонецЕсли;
    
        ИтогоРезультатРазница = ИтогоРезультатИзлишекСумма - ИтогоРезультатНедостачаСумма; 
 
        МассивВыводимыхОбластей.Очистить();
        МассивВыводимыхОбластей.Добавить(ОбластьМакета);
        МассивВыводимыхОбластей.Добавить(ОбластьИтоговПоСтранице);
        Если Ном = КоличествоСтрок Тогда
            МассивВыводимыхОбластей.Добавить(ОбластьПодвала);
        КонецЕсли;
        
        Если НЕ ФормированиеПечатныхФорм.ПроверитьВыводТабличногоДокумента(ТабДокумент, МассивВыводимыхОбластей) Тогда
            
            НомерСтраницы = НомерСтраницы + 1;
            ТабДокумент.Вывести(ОбластьИтоговПоСтранице);
            ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
            ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
            ТабДокумент.Вывести(ЗаголовокТаблицы);
            
        КонецЕсли; 
        
        ТабДокумент.Вывести(ОбластьМакета);
 
    КонецЦикла;
 
    ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатИзлишекКолво   = ИтогоРезультатИзлишекКолво;
    ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатИзлишекСумма   = ИтогоРезультатИзлишекСумма;
    ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво;
    ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма;
 
    ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатРазница = ИтогоРезультатРазница;    
 
    ТабДокумент.Вывести(ОбластьИтоговПоСтранице);
 
    ОбластьПодвала.Параметры.ФИОБухгалтера =  Бухгалтер;
    ОбластьПодвала.Параметры.Заполнить(Шапка);
    ТабДокумент.Вывести(ОбластьПодвала);
 
    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
 
    Возврат ТабДокумент;
 
КонецФункции
Вопрос: Внешняя обработка для создания номенклатуры

Во внешней обработке (управляемая форма) необходимо вписать в поля "наименование номенклатуры" и "количество", затем с помощью кнопки создать новый элемент номенклатуры в типовой конфигурации УТ 11.2. И новый элемент должен содержать как раз то имя которое ему прописано в поле.
Программировать в 1С я пока только учусь, поэтому прошу отвечать как для чайника )
Форму и кнопку создал. Пока вот что получилось, незнаю как сделать во внешней обработке:

&НаКлиенте
Процедура Создать(Команда)

ЭлементНовый = Справочники.Номенклатура.СоздатьЭлемент();
ЭлементНовый.Владелец = Справочники.Номенклатура.НайтиПоНаименованию("мебель");
ЭлементНовый.Артикул = 12345;
ЭлементНовый.Наименование = Объект.НаименованиеНоменклатуры;
ЭлементНовый.НаименованиеПолное = Объект.НаименованиеНоменклатуры;
ЭлементНовый.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Мебель (предварительная сборка)");
ЭлементНовый.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
ЭлементНовый.ЕдиницаДляОтчетов = Справочники.
ЭлементНовый.ЕдиницаИзмерения = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоНаименованию("шт");
ЭлементНовый.ГруппаДоступа = Справочники.ГруппыДоступаНоменклатуры.НайтиПоНаименованию("мебель");
ЭлементНовый.Качество = Перечисления.ГрадацииКачества.Новый;
ЭлементНовый.ГруппаФинансовогоУчета = Справочники.ГруппыФинансовогоУчетаНоменклатуры.НайтиПоНаименованию("товары");
ЭлементНовый.Производитель = Справочники.Производители.НайтиПоНаименованию("мебель");
ЭлементНовый.РейтингПродаж = Справочники.РейтингиПродажНоменклатуры.ПустаяСсылка();
ЭлементНовый.ТоварнаяКатегория = Справочники.ТоварныеКатегории.НайтиПоНаименованию("мебель");
ЭлементНовый.СезоннаяГруппа = Справочники.СезонныеГруппы.ПустаяСсылка();
ЭлементНовый.СкладскаяГруппа = Справочники.СкладскиеГруппыНоменклатуры.ПустаяСсылка();
ЭлементНовый.Описание = "Красный деревянный стул";
ЭлементНовый.ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;
ЭлементНовый.ГруппаАналитическогоУчета = Справочники.ГруппыАналитическогоУчетаНоменклатуры.ПустаяСсылка();
ЭлементНовый.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать;
ЭлементНовый.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
ЭлементНовый.Родитель = Справочники.Номенклатура.НайтиПоНаименованию("мебель");

ЭлементНовый.Записать();

КонецПроцедуры
Ответ:
Код:
&НаСервере
Процедура СоздатьНаСервере()
   
//Создание нового вида элементов номенклатуры

Группа = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Торговая деятельность");
ПроверкаВида = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Новый вид");

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

//Создание нового элемента номенклатуры

Количество = Объект.КоличествоСоздаваемойНоменклатуры;
Наименование = Объект.НаименованиеНоменклатуры;

                Если НовыйВид.ЭтоГруппа = истина Тогда
                Родитель = НовыйВид.Ссылка;
                КонецЕсли;
                ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Новый вид");
                ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
                Качество = Перечисления.ГрадацииКачества.Новый;
                ЕдиницаИзмерения = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоНаименованию("шт");
                ЕдиницаДляОтчетов = Справочники.НаборыУпаковок.НайтиПоНаименованию("шт");
                Сообщить(ЕдиницаИзмерения);
                Сообщить(ЕдиницаДляОтчетов);

                ГруппаФинансовогоУчета = Справочники.ГруппыФинансовогоУчетаНоменклатуры.НайтиПоНаименованию("товары");
                РейтингПродаж = Справочники.РейтингиПродажНоменклатуры.ПустаяСсылка();
                СезоннаяГруппа = Справочники.СезонныеГруппы.ПустаяСсылка();
                СкладскаяГруппа = Справочники.СкладскиеГруппыНоменклатуры.ПустаяСсылка();
                ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;
                ГруппаАналитическогоУчета = Справочники.ГруппыАналитическогоУчетаНоменклатуры.ПустаяСсылка();
                ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать;
                СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
   
ПроверкаНаименования = Справочники.Номенклатура.НайтиПоНаименованию(Наименование);

Если ПроверкаНаименования.Пустая() Тогда
   
    Для Количество2=1 По Количество Цикл
       
        Наименование = Объект.НаименованиеНоменклатуры+Количество2;
        Артикул = "0"+Формат(Количество2,"ЧГ=0");

        ЭлементНовый = Справочники.Номенклатура.СоздатьЭлемент();
            ЭлементНовый.Родитель = Родитель;
            ЭлементНовый.Артикул = Артикул;
            ЭлементНовый.Наименование = Наименование;
            ЭлементНовый.НаименованиеПолное = Наименование;
            ЭлементНовый.ВидНоменклатуры = ВидНоменклатуры;
            ЭлементНовый.ТипНоменклатуры = ТипНоменклатуры;
            ЭлементНовый.ЕдиницаИзмерения = ЕдиницаИзмерения;
            ЭлементНовый.ЕдиницаДляОтчетов = ЕдиницаДляОтчетов;
            ЭлементНовый.Качество = Качество;
            ЭлементНовый.ГруппаФинансовогоУчета = ГруппаФинансовогоУчета;
            ЭлементНовый.РейтингПродаж = РейтингПродаж;
            ЭлементНовый.СезоннаяГруппа = СезоннаяГруппа;
            ЭлементНовый.СкладскаяГруппа = СкладскаяГруппа;
            ЭлементНовый.Описание = "Новая номенклатура";  
            ЭлементНовый.ВариантОформленияПродажи = ВариантОформленияПродажи;
            ЭлементНовый.ГруппаАналитическогоУчета = ГруппаАналитическогоУчета;
            ЭлементНовый.ИспользованиеХарактеристик = ИспользованиеХарактеристик;
            ЭлементНовый.СтавкаНДС = СтавкаНДС;
        ЭлементНовый.Записать();
       
        Сообщить ("Создан элемент номенклатуры: "+Наименование);
       
    КонецЦикла;
  
Иначе
   
    Сообщить ("Элемент номенклатуры с таким именем уже существует");   
   
КонецЕсли;

КонецПроцедуры
Получился такой код. Не понимаю как правильно заполнить реквизит "ЕдиницаДляОтчетов". И еще при заполнении реквизита "Родитель" необходимо проверять чтобы в этот реквизит попадала только группа.
Вопрос: Обработка номенклатуры работает очень долго

Здравствуйте, есть обработочка, призванная поменять 1 реквизит у элементов справочника НОменклатуры в 1с:ERP

Собственно есть таблица значений из 4 столбцов, в которых заполнены группы и подгруппы, в которых сидят элементы номенклатуры. Я эту ТЗ помещаю в запрос, присоединяю таблицу номенлатуры и в каждом элементе, который совпал по родителю и родителю родителя меняю реквизит Товарная Категория. Эта обработка обрабатывает 1800 элементов за 15 минут. Это норма или я какую-то фигню сделал, поэтому и так медленно?
Буду благодарен за любую помощь, спасибо.

Вот текст:


Код:
Запрос = Новый Запрос;
    Запрос.Текст =
            "ВЫБРАТЬ
            |    ТаблицаЗначений.Тип КАК Тип,
            |    ТаблицаЗначений.Группа КАК Группа,
            |    ТаблицаЗначений.Гравировка КАК Гравировка,
            |    ТаблицаЗначений.Кладовая КАК Кладовая
            |ПОМЕСТИТЬ ТаблицаЗначений
            |ИЗ
            |    &ВнешняяТЗ КАК ТаблицаЗначений
            |;
            |
            |////////////////////////////////////////////////////////////////////////////////
            |ВЫБРАТЬ
            |    Номенклатура.Ссылка,
            |    Номенклатура.Родитель,
            |    Номенклатура.Родитель.Родитель КАК ПраРодитель,
            |    Номенклатура.ТоварнаяКатегория,
            |    ТаблицаЗначений.Кладовая,
            |    ТаблицаЗначений.Гравировка
            |ИЗ
            |    Справочник.Номенклатура КАК Номенклатура
            |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаЗначений КАК ТаблицаЗначений
            |        ПО Номенклатура.Родитель.Наименование = ТаблицаЗначений.Группа
            |            И Номенклатура.Родитель.Родитель.Наименование = ТаблицаЗначений.Тип";

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

    КонецЦикла;
Ответ:
Но как уйти от соединения по полям с строковым типом значений, если у меня есть только имя категории/подкатегории, но нет ссылки на нее?
Плюс к этому они меняются, то есть перед запросом не определить 1 раз для всех записей...
Вопрос: Не получается объединить две номенклатуры и удалить дубликат

Добрый день, помогите разобраться.
Имеется УТ 11.2, есть две номенклатуры, по обеим были продажи. Пробую с помощью встроенной обработки "ПОИСК И УДАЛЕНИЕ ДУБЛЕЙ" объединить их и удалить ненужную, но обработка находит только 1 номенклатуру из двух. Прикрепляю скриншоты для наглядности.

Номенклатура в разделе Алкогольная Продукция



Номенклатура в разделе ТОВАРЫ(то, что она помечена на удаление не играет роли, снимать пометку на удаление не помогает)



Карточка номенклатуры из раздела ТОВАРЫ



Карточка номенклатуры из раздела АЛКОГОЛЬНАЯ ПРОДУКЦИЯ



Результат работы обработки "ПОИСК И УДАЛЕНИЕ ДУБЛЕЙ". Обработка не видит номенклатуру из раздела АЛКОГОЛЬНАЯ ПРОДУКЦИЯ с названием в конце "_ВИННЫЙ БУТИК"
Ответ:
У вас в настройках включена галочка "Контролировать уникальности рабочего наименования номенклатуры и характеристик". Отключите временно.
Вопрос: ФИФО для реализации номенклатуры

Здравствуйте, сделал обработку по ФИФО, адекватно ли она сделана, стоит ли ее дорабатывать, посоветуйте что-нибудь. Спасибо.
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Процедура ОбработкаПроведения(Отказ, Режим)
        Движения.Остатки.Записывать = Истина; 
        Для Каждого ТекСтрокаТовар Из Номенклатура Цикл 
        к=0; 
        всего=ТекСтрокаТовар.Количество; 
        регистр= РегистрыНакопления.Остатки; 
        отбор = Новый Структура (); 
        отбор.Вставить ("Номенклатура", ТекСтрокаТовар.Товар); 
        Данные = регистр.Остатки(, отбор);
        Попытка
        пока всего<>0 цикл 
        если Данные[к].количество>0 тогда 
        Движение = Движения.Остатки.Добавить(); 
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход; 
        Движение.Период = Дата; 
        Движение.Номенклатура = ТекСтрокаТовар.Товар; 
        Движение.Партия = Данные[к].Партия; 
        если Данные[к].Партия < 0 тогда
        Движение.Партия = -1 * Данные[к].Партия;
        КонецЕсли;
        если всего>Данные[к].количество тогда 
        Движение.Количество = Данные[к].количество; 
        всего=всего-Данные[к].количество; 
        иначе 
        Движение.Количество = всего; 
        всего=0; 
        конецесли; 
        Движение.Склад = Склад;             
        конецесли; 
        к=к+1;          
        конеццикла; 
    Исключение
    Отказ = Истина;
    КонецПопытки;
    КонецЦикла;
 
    Движения.КолвоСумма.Записывать = Истина;
    Для Каждого ТекСтрокаНоменклатура Из Номенклатура Цикл
        Движение = Движения.КолвоСумма.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Период = Дата;
        Движение.Номенклатура = ТекСтрокаНоменклатура.Товар;
        Движение.Контрагент = Покупатель;
        Движение.Склад = Склад;
        Движение.Ответственный = Ответственный;
        Движение.Количество = ТекСтрокаНоменклатура.Количество;
        Движение.Сумма = Сумма;
    КонецЦикла;
 
    
    КонецПроцедуры
Ответ:
Сообщение от Tklwegsd
а лучше сразу получить остатки по всей нужной номенклатуре одним запросом.

Не по теме:

а еще лучше вообще этого не делать...