С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
SayM9y
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 28
1

Сгенерировать Х позиций номенклатуры со следующими параметрами

07.02.2018, 13:58. Просмотров 833. Ответов 17
Метки нет (Все метки)

Есть учебная конфигурация, в ней создан справочник Номенклатуры, у него имеется реквизит Артикул. Создаю внешнюю обработку , в ней создаю реквизиты Кнопка,Количество,Наименование и вывожу их на форму.
Сгенерировать Х позиций номенклатуры со следующими параметрами

В наименовании буду писать наименование создаваемой номенклатуры, в количество вводить число создаваемых элементов, По нажатию на кнопку должно произойти следущюе: задача-

Сгенерировать Х позиций номенклатуры со следующими параметрами:
Наименование- Строка Y + Z + Текущее время,
Артикул - 1й символ строки Y + Z,
Где количество элементов Х и строка Y создаются обработчиком, Z порядковый номер.


Вопросов 2.
1й - Правильно ли я понимаю, что само наименование номенклатуры будет записываться в справочник и в дальнейшем храниться там, а непосредственно сам вывод всего этого дела должен происходить на той форме где у меня вводимые параметры и кнопка?

2й- Как его реализовать?))
Пока моего осознания хватило на создание формы и команды для кнопки в модуле формы
1C
1
2
3
4
5
6
&НаСервере
    Процедура Создать(Команда)
    НовыйЭллемент = Справочники.Номенклатура.СоздатьЭлемент();
    НовыйЭллемент.Наименование = Наименование;              
    НовыйЭллемент.Записать();
    КонецПроцедуры
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2018, 13:58
Ответы с готовыми решениями:

Какими способами в 1с 8.2 можно, а главное удобно создавать из двух позиций номенклатуры комплект.
Умные, добрые люди подскажите пожалуйста что вообще можно придумать по этому...

Записать в файл, заданный первым параметром, содержимое директорий, заданных вторым и следующими параметрами
Создать пакетный файл, который будет записывать в файл, заданный первым...

Какой тип номенклатуры можно указать для вида номенклатуры?
сдавал экзамен проф УТ 8, попался вопрос: какой тип номенклатуры можно указать...

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

не могу избавится от вируса TR/Crypt.XPACK.Gen ( по номенклатуры Авира) или Win32:Trojan-gen (по номенклатуры Аваста)...
не могу избавится от вируса TR/Crypt.XPACK.Gen ( по номенклатуры Авира) или...

17
polax
804 / 513 / 172
Регистрация: 16.01.2015
Сообщений: 1,821
07.02.2018, 15:38 2
SayM9y, 1-й - правильно понимаете. Только на форму надо вывести еще реквизит Артикул
2-й В принципе верно, но недостаточно. И не раскрыто:
1.Как формируется строка Y? Каким обработчиком и где? Ее же надо откуда-то получать, чтобы оформить и наименование и Артикул. Или Y - это сама строка, введенная в Наименование? Не понятно.
2. Порядковый номер Z, это номер в пределах одного наименования (Айфон1, Айфон2, Айфон3...) или это номер в пределах справочника (Айфон1, Айфон2, Айфон3, Самсунг4, Самсунг5 ...) ?

Добавлено через 34 минуты
Понял. У вас на скрине не справочник, а обработка, которая и должна создать элементы справочника. Тогда, если Z в пределах одного наименования номенклатуры:
1C
1
2
3
4
5
6
7
8
Z = 1;
Для Z=1 По Количество Цикл
НовыйЭллемент = Справочники.Номенклатура.СоздатьЭлемент();
    НовыйЭллемент.Наименование = Наименование+Z +"_"+ТекущаяДата();
     НовыйЭллемент.Артикул = Лев(СокрЛП(Наименование),1) + Z;            
    НовыйЭллемент.Записать();
Z = Z + 1;
КонецЦикла;
Но при такой постановке задачи с Артикулом будет засада. Айфон1, Апельсин1, Асфальтоукладчик1 будут иметь одинаковые артикулы А1. Для артикула надо придумывать другой алгоритм создания
Ну и поля Наименование и Количество вызываются так как в коде, если созданы на форме а не как реквизиты обработки. Иначе Объект.Наименование, Объект.Количество
1
SayM9y
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 28
07.02.2018, 15:50  [ТС] 3
polax, 1)да Y это наименование.
2) Z в пределах нашего введеного наименования

Добавлено через 8 минут
polax, То есть для вывода результата на форну нужно добавить таблицу? Да поля наименование и Количество созданы на форме.
0
polax
804 / 513 / 172
Регистрация: 16.01.2015
Сообщений: 1,821
07.02.2018, 16:01 4
SayM9y, В справочнике Номенклатура создайте форму элемента, куда выведите Реквизиты справочника Наименование и Артикул. Для просмотра всего результата работы обработки лучше сделайте в том же справочнике форму списка, куда динамическим списком выводите все элементы справочника Номенклатура. Ну или ДА, в обработке сделайте ТЧ с колонками Наименование и Артикул и выводите результат в эту ТЧ
1C
1
2
3
4
5
6
7
8
9
10
11
Z = 1;
Для Z=1 По Количество Цикл
НовыйЭллемент = Справочники.Номенклатура.СоздатьЭлемент();
    НовыйЭллемент.Наименование = Наименование+Z +"_"+ТекущаяДата();
     НовыйЭллемент.Артикул = Лев(СокрЛП(Наименование),1) + Z;            
    НовыйЭллемент.Записать();
НовСтр = ТЧ.Добавить();
НовСтр.Наименование = НовыйЭллемент.Наименование;
НовСтр.Артикул = НовыйЭллемент.Артикул;
Z = Z + 1;
КонецЦикла;
Добавлено через 4 минуты
Но,все-равно, без формы элемента и формы списка справочника Номенклатура, работа обработки будет бессмысленна. Вы не сможете выбрать нужную номенклатуру там где это потребуется. Так что ТЧ в обработке - это просто контроль отработки самой обработки - не более
1
SayM9y
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 28
07.02.2018, 18:59  [ТС] 5
polax,
Вот такой код получился. Ошибок не выдает, но и не работает. Новые элементы в справочник не записываются, и в ТЧ обработки не выводяться.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
&НаСервере
Процедура Создать(Команда)
    Z = 1;
    Для Z=1 По Количество Цикл
        НовыйЭллемент = Справочники.Номенклатура.СоздатьЭлемент();
        НовыйЭллемент.Наименование = Наименование;
        НовыйЭллемент.Артикул = Лев(СокрЛП(Наименование),1) + Z;            
        НовыйЭллемент.Записать();
        НовСтр = Элементы.ТЧ.ДобавитьСтроку();
        НовСтр.Наименование = НовыйЭллемент.Наименование+Z +"_"+ТекущаяДата();;
        НовСтр.Артикул = НовыйЭллемент.Артикул;
        Z = Z + 1;
    КонецЦикла;
КонецПроцедуры
Сгенерировать Х позиций номенклатуры со следующими параметрами
Сгенерировать Х позиций номенклатуры со следующими параметрами
0
polax
804 / 513 / 172
Регистрация: 16.01.2015
Сообщений: 1,821
07.02.2018, 19:18 6
SayM9y, С какого у вас Команда &НаСервере? Есть подозрение, что вообще процедура не назначена для кнопки Создать. Иначе не было бы кода выполнить команду нажатия кнопки на сервере
1
Миниатюры
Сгенерировать Х позиций номенклатуры со следующими параметрами   Сгенерировать Х позиций номенклатуры со следующими параметрами   Сгенерировать Х позиций номенклатуры со следующими параметрами  

SayM9y
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 28
07.02.2018, 19:34  [ТС] 7
polax, Привязана, но походу удалил ту часть где прописывается клиент
0
polax
804 / 513 / 172
Регистрация: 16.01.2015
Сообщений: 1,821
07.02.2018, 19:48 8
Лучший ответ Сообщение было отмечено SayM9y как решение

Решение

SayM9y, НаКлиенте прописывается и выполняется все что связанно с интерфейсом. Кнопку жмете в интерфейсе (на форме документа)? Значит и процедура исполнения &НаКлиенте. Справочника Номенклатура, в котором создаем элементы, нет в интерфейсе - создаем и запоняем &НаСервере, делаем то же самое, но НЕ используем данные формы откуда выполняем команду (в вашем случае поля Количество и Номенклатура) - &НаСервереБезКонтекста

Добавлено через 19 секунд
В итоге-то заработало?
1
SayM9y
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 28
07.02.2018, 20:25  [ТС] 9
polax, В процессе)

Добавлено через 24 минуты
polax, Чтото я опять дурака включаю

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
&НаСервере
Процедура Создать(Команда)
    Перем Имя,Кол;
    Z = 1;
    Для Z=1 По Кол Цикл
        НовыйЭллемент = Справочники.Номенклатура.СоздатьЭлемент();
        НовыйЭллемент.Наименование = Имя;
        НовыйЭллемент.Артикул = Лев(СокрЛП(Имя),1) + Z;            
        НовыйЭллемент.Записать();
        НовСтр = Элементы.ТЧ.ДобавитьСтроку();
        НовСтр.Наименование = НовыйЭллемент.Наименование+Z +"_"+ТекущаяДата();;
        НовСтр.Артикул = НовыйЭллемент.Артикул;
        Z = Z + 1;
    КонецЦикла;
КонецПроцедуры
 
 
&НаКлиенте
Процедура ПоКнопкеСоздать(Создать)
Перем Имя, Кол;
Имя = Наименование;
Кол = Количество;
 
 
КонецПроцедуры
Добавлено через 9 минут
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
&НаСервереБезКонтекста
Процедура Создать(Команда)
    Перем Имя,Кол,НовыйЭллемент;
    Z = 1;
    Для Z=1 По Кол Цикл
        НовыйЭллемент = Справочники.Номенклатура.СоздатьЭлемент();
        НовыйЭллемент.Наименование = Имя+Z +"_"+ТекущаяДата();;
        НовыйЭллемент.Артикул = Лев(СокрЛП(Имя),1) + Z;            
        НовыйЭллемент.Записать();
                Z = Z + 1;
            КонецЦикла;
            
КонецПроцедуры
 
 
&НаКлиенте
Процедура ПоКнопкеСоздать(Создать)
Перем Имя, Кол,НовыйЭллемент ;
Имя = Наименование;
Кол = Количество;
 
        НовСтр = ТЧ  \\не могу обратиться к самой табличной части обработки.    
        НовСтр.Наименование = НовыйЭллемент.Наименование;
        НовСтр.Артикул = НовыйЭллемент.Артикул;
 
 
КонецПроцедуры
0
polax
804 / 513 / 172
Регистрация: 16.01.2015
Сообщений: 1,821
07.02.2018, 20:28 10
Лучший ответ Сообщение было отмечено SayM9y как решение

Решение

Цитата Сообщение от SayM9y Посмотреть сообщение
Чтото я опять дурака включаю
Точно ))). Без обид.
Смотрите мой второй скрин, там где процедуры. Команде (нажатию кнопки Создать) назначена процедура:
1C
1
2
3
4
&НаКлиенте
Процедура Создать(Команда)
    СоздатьНаСервере();
КонецПроцедуры
Управление передается на сервер для непосредственного создания элементов справочников:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
&НаСервере
Процедура СоздатьНаСервере()
Z = 1;
    Для Z=1 По Количество Цикл 
        НовыйЭллемент = Справочники.Номенклатура.СоздатьЭлемент();
        НовыйЭллемент.Наименование = Имя;
        НовыйЭллемент.Артикул = Лев(СокрЛП(Имя),1) + Z;            
        НовыйЭллемент.Записать();
        НовСтр = ТЧ.ДобавитьСтроку();
        НовСтр.Наименование = НовыйЭллемент.Наименование+Z +"_"+ТекущаяДата();;
        НовСтр.Артикул = НовыйЭллемент.Артикул;
        Z = Z + 1;
    КонецЦикла;
КонецПроцедуры
И... все )))

Добавлено через 3 минуты
Если не можете обратиться к ТЧ,: Как назвали табличную часть документа? Создали ее в форме обработки или в реквизитах обработки - табличные части? Покажите в конфигураторе ТЧ и ее свойства
1
SayM9y
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 28
07.02.2018, 20:34  [ТС] 11
polax,
Сгенерировать Х позиций номенклатуры со следующими параметрами
Создавал тут
0
SayM9y
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 28
07.02.2018, 20:35  [ТС] 12
Ну а потом связывал с этой
Сгенерировать Х позиций номенклатуры со следующими параметрами
0
polax
804 / 513 / 172
Регистрация: 16.01.2015
Сообщений: 1,821
07.02.2018, 20:45 13
Лучший ответ Сообщение было отмечено SayM9y как решение

Решение

SayM9y, Вы создали ТЧ в реквизитах обработки. Посмотрите, эта ТЧ у вас под плюсиком в Объекты. И на втором скрине подсказка - Путь к Данным - Объект.ТЧ. Вот так к ней и обращайтесь:
1C
1
НовСтр = Объект.ТЧ.Добавить();
или правильней
1C
1
2
Таб = Объект.ТЧ;
       НовСтр = Таб.Добавить();
И ДА, в коде выше не обратил внимание, что вы неверно поправили мой код не
1C
1
 НовСтр = ТЧ.ДобавитьСтроку();// это неправильно
, а
1C
1
 НовСтр = ТЧ.Добавить(); // было бы верно, если бы ТЧ создавалась в форме
Хотя последнее уже неактуально у вас Объект.ТЧ
1
SayM9y
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 28
07.02.2018, 20:54  [ТС] 14
polax,
Цитата Сообщение от polax Посмотреть сообщение
в коде выше не обратил внимание, что вы неверно поправили мой код не
Это вылезло подсказкой когда обращался к ТЧ в Форме. Все шикарно!!! Единственное что пришлось подправить это что Z= не 1 а 0, Чтобы В ТЧ выводились все количество строк.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
&НаСервере
Процедура СоздатьНаСервере()
Z = 0;
    Для Z=0 По Количество Цикл 
        НовыйЭллемент = Справочники.Номенклатура.СоздатьЭлемент();
        НовыйЭллемент.Наименование = Наименование;
        НовыйЭллемент.Артикул = Лев(СокрЛП(Наименование),1) + Z;            
        НовыйЭллемент.Записать();
        Таб = Объект.ТЧ;
        НовСтр = Таб.Добавить();
        НовСтр.Наименование = НовыйЭллемент.Наименование+Z +"_"+ТекущаяДата();;
        НовСтр.Артикул = НовыйЭллемент.Артикул;
        Z = Z + 1;
    КонецЦикла;
КонецПроцедуры
 
 
&НаКлиенте
Процедура Создать(Команда)
    СоздатьНаСервере();
КонецПроцедуры
И да, polax, БОЛЬШОЕ спасибо! Это моя 2я тема по 1с на форуме и вы единственный кто приходит на помощь, да еще и реально помогает!) Спасибо!
0
polax
804 / 513 / 172
Регистрация: 16.01.2015
Сообщений: 1,821
07.02.2018, 21:04 15
SayM9y, Неверно. Помощников здесь много и гораздо квалифицированней, просто так совпало. Хорошо что получилось. Правда не понял почему z = 1 не срабатывает, ну да и ладно, главное работает )))

Добавлено через 2 минуты
Да. И в тч в обработке, все-таки выводится просто назначенные значения для элементов справочника, не сам справочник. Наличие элементов в самом справочнике можно проверить только создав форму списка справочника Номенклатура и смотреть в нем или выводить запросом в поля этой же ТЧ элементы справочника. Но это уже детали
1
SayM9y
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 28
07.02.2018, 21:21  [ТС] 16
polax, Да это все имеется. Мне требовалось решить по ставленую
Цитата Сообщение от SayM9y Посмотреть сообщение
Сгенерировать Х позиций номенклатуры со следующими параметрами:
Наименование- Строка Y + Z + Текущее время,
Артикул - 1й символ строки Y + Z,
Где количество элементов Х и строка Y создаются обработчиком, Z порядковый номер
задачу .И с этим мы справились, ну я то участия не принимал почти) Поправка если z =1 выводятся номенклатуры с нечетным числом z(прослеживается в артикуле) а если 0 то четные.
Сгенерировать Х позиций номенклатуры со следующими параметрами
0
polax
804 / 513 / 172
Регистрация: 16.01.2015
Сообщений: 1,821
07.02.2018, 21:27 17
SayM9y, аааааааааа, черт, мой косяк. Уберите из кода две строчки:
1C
1
z = z +1
и
1C
1
z = 1
- это актуально для цикла Для Каждого - в цикле Для не надо. Выведутся все значения
1
SayM9y
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 28
07.02.2018, 21:33  [ТС] 18
polax, Буду знать!
0
07.02.2018, 21:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2018, 21:33

БП 3: как получить счета номенклатуры из регистра "счет учета номенклатуры"?
Добрый день Подскажите как получить счета номенклатуры из регистра "счет...

Составить 2 функции. Одна из функций циклически сдвигает массив длины N вправо на k позиций, а другая - на k позиций вле
Составить 2 функции. Одна из функций циклически сдвигает массив длины N вправо...

Зашифровать строку, поместив вначале все символы, с четных позиций строки, а затем все символы с нечетных позиций
Дана строка-предложение. Зашифровать ее, поместив вначале все символы,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru