Имя: Пароль:
1C
1С v8
Перенос кода справочника
0 jyurik
 
26.04.17
10:51
У меня есть справочник «Спецификации Номенклатуры». В нем есть стандартный код. Мне надо сделать еще такой же под другим именем, и стандартный закрыть на редактирование, и поставить проверку его на уникальность. А вот в новый код перенести номера из старого, чтобы они стали идентичными. Может, кто подскажет, как это сделать может, кто уже писал такую обработку. Не знаю даже с чего начать
1 DrShad
 
26.04.17
11:01
даже не представляем нафейхоа этот велосипед нужен
2 YFedor
 
26.04.17
11:03
(0) Ничего сложного не вижу, но присоединяюсь к (1)

Кроме того, если решился и не получается - скажи на каком моменте не получается
3 DrShad
 
26.04.17
11:07
если это все для обмена, то лучше синхронизируй по UID и не парься с кодами и наименованиями
4 Buster007
 
26.04.17
11:09
"Может, кто подскажет, как это сделать может, кто уже писал такую обработку" вроде типовая обработка ГрупповоеИзменениеРеквизитов позволяет такое сделать..
5 jyurik
 
26.04.17
11:26
(2) Думал сделать запрос и выгрузить в таблицу значений, а потом обратно в новый код загрузить
6 jyurik
 
26.04.17
11:47
(4) А где можно взять «ГрупповоеИзменениеРеквизитов». Я какие-то нашел разные не одна не открывается у меня управляемое приложение
7 YFedor
 
26.04.17
11:59
(5) А чего бы простым перебором результатов запроса не пойти?
8 jyurik
 
26.04.17
12:42
(7) не понятно, не делал так
9 YFedor
 
26.04.17
12:44
(8) что непонятно?
10 YFedor
 
26.04.17
12:45
Там две задачи:

1) скопировать один реквизит в другой
2) Автозаполнение и проверка уникальности второго реквизита
11 jyurik
 
26.04.17
13:10
(10) если не сложно
можно пример
12 jyurik
 
26.04.17
14:46
(10) а как скопировать? У меня весь вопрос в этом и состоит. Через обработку Группового Изменения Реквизитов не подойдет, поскольку там можно менять только на конкретное имя (на сколько я понял), а мне нужно код всего справочника перекопировать в новый код
13 Михаил Козлов
 
26.04.17
14:59
(12) Можно попробовать УниверсальныйПодборИОбработкаОбъектов (с ИТС).
Отбор объектов сделаете, а для обработки можно оформить произвольный алгоритм, примерно такого содержания:
Объект.НовыйКод = Объект.Код;
Объект.Записать();
14 jyurik
 
26.04.17
15:09
(13) у меня при открытии Универсальные подбор и обработка объектов выходит пустое маленькое окошко, в котором виден пункт "Все действия" и больше ничего нет
15 George Wheels
 
26.04.17
15:13
(14) Запусти её под толстым клиентом.
16 George Wheels
 
26.04.17
15:15
(15) + Толстый клиент (обычное приложение)
17 jyurik
 
26.04.17
15:29
(16) У меня прога на управляемом приложении
18 Serg_1960
 
26.04.17
15:30
(0) "Мне надо сделать еще такой же под другим именем" - в конфигураторе, в дереве конфигурации, стоя на строке справочника - F9

"А вот в новый код перенести номера из старого, чтобы они стали идентичными" - могу даже уникальные идентификаторы сделать идентичные. Выгружаешь все записи в XML; редактором заменяешь упоминание старого справочника на новый справочник; загружаешь XML; пьёшь кофе; фсё :)
19 jyurik
 
26.04.17
15:34
(18) Справочник не меняется (он тот же) в нем добавлен новый реквизит «НовыйКод» мне надо, что бы во всем справочнике все его коды совпадали с НовымКодом. Надо, чтобы стандартный код (0001) совпадал с новым (0001) и так далее по всем позициям справочника.
20 jyurik
 
26.04.17
15:35
(18) Номенклатура/код-0001 / новый код-0001
     Номенклатура1/код-0002 / новый код-0002
     Номенклатура2/код-0003 / новый код-0003
21 Serg_1960
 
26.04.17
15:39
Значение из реквизита "Код" скопировать в новый реквизит "НовыйКод" - так что ли?
22 jyurik
 
26.04.17
15:39
(18) чем выгрузить в XML  потом обратно загрузить
Все что предложили вверху не получилось Или я не те обработки находил или руки не оттуда (возможно второе)У меня УФ приложения
23 jyurik
 
26.04.17
15:39
(21) ДА
24 Timon1405
 
26.04.17
15:48
https://helpf.pro/faq/view/1735.html
будь мужиком запусти уже толстого клиента
25 Serg_1960
 
26.04.17
15:49
Тьфу ты, это не серьёзно :)
В конфигураторе, на справочнике, встал на строку "Реквизиты" - Ins
Если добавление недоступно, то Конфигурация - Поддержка - Настройка поддержки - разрешить изменения.

Что в свойствах реквизита указывать - смотри в свойствах самого справочника. Скорее всего тип:"Строка", длина:9, Допустимая длина:"Фиксированная"...
26 Serg_1960
 
26.04.17
15:52
ТС, ты что? Первый раз в конфигуратор зашёл? :))
Внешнюю обработку в состоянии написать?
27 jyurik
 
26.04.17
15:52
(25) Как реквизит добавлять и копировать умею мне не это нужно мне нужно копию его в предприятии сделать
Я же пример привел, как это должно быть видно (ссылка (20))
28 jyurik
 
26.04.17
15:54
(26) конечно в состоянии написать
только никогда такого не делал копировать данные одного кода в данные в другой код одного и того же справочника
29 Timon1405
 
26.04.17
15:55
ТС или тролль или не хочет думать
30 jyurik
 
26.04.17
15:57
(29) прошу помощи а народ только стебается
31 Serg_1960
 
26.04.17
15:57
Внешняя обработка (толстый клиент), в модуле обработки простой до гениальности алгоритм :)

Выборка = Справочники.СпецификацииНоменклатуры.Выбрать();
Пока Выборка.Следующий() Цикл
   ТекОбъект = Выборка.ПолучитьОбъект();
   ТекОбъект.НовыйКод = ТекОбъект.Код;
   ТекОбъект.Записать);
КонецЦикла;
32 FIXXXL
 
26.04.17
15:59
(28)

Пока Выборка.Следущий() Цикл
об = Выборка.ссылка.получитьобъект();
об.НовыйКод = об.Код;
об.Записать();
Конеццикла
33 Serg_1960
 
26.04.17
16:02
1:0 я быстрее :)
34 FIXXXL
 
26.04.17
16:03
(33) я руками на форумном окошке писал :)
35 Serg_1960
 
26.04.17
16:04
ТС, а в управляемом приложении - всё тоже самое, но с вызовом отдельной функции или процедуре с препроцессором &НаСервере

(34) А я что, задней клешнёй что ли? Тоже так, по инерции, - тьфу, по памяти :)
36 Serg_1960
 
26.04.17
16:06
Я такие алгоритмы, разбуди ночью, писать могу не глядя. Можно даже не будить :))
37 jyurik
 
27.04.17
08:13
(31) (32) Спасибо за помощь
Написал вот так:

&НаСервере
Процедура КНОПКАНаСервере()
    // Вставить содержимое обработчика.
КонецПроцедуры

&НаКлиенте
Процедура КНОПКА(Команда)
    Выборка = Справочники.СпецификацииНоменклатуры.Выбрать();
    Пока Выборка.Следующий() Цикл
        ТекОбъект = Выборка.ПолучитьОбъект();
        ТекОбъект.КодКэмз = ТекОбъект.Код;
        ТекОбъект.Записать();
    КонецЦикла;
КонецПроцедуры

Пишет ошибку "Переменная не определена (Справочники)"
38 mehfk
 
27.04.17
08:15
СП украли?
39 jyurik
 
27.04.17
08:17
(38) что такое СП?
40 jyurik
 
27.04.17
08:19
(38) если не сложно, то можно по делу
41 FIXXXL
 
27.04.17
08:22
&НаСервере
Процедура КНОПКАНаСервере()
    // Вставить содержимое обработчика.
   Выборка = Справочники.СпецификацииНоменклатуры.Выбрать();
    Пока Выборка.Следующий() Цикл
        ТекОбъект = Выборка.ПолучитьОбъект();
        ТекОбъект.КодКэмз = ТекОбъект.Код;
        ТекОбъект.Записать();
    КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура КНОПКА(Команда)
     КНОПКАНаСервере();
КонецПроцедуры
42 jyurik
 
27.04.17
08:26
(41) {ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(1,1)}: Обнаружено логическое завершение исходного текста модуля (Проверка: Сервер)
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(1,1)}: Обнаружено логическое завершение исходного текста модуля (Проверка: Сервер)
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(1,1)}: Обнаружено логическое завершение исходного текста модуля (Проверка: Тонкий клиент)
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(1,1)}: Обнаружено логическое завершение исходного текста модуля (Проверка: Тонкий клиент)
43 FIXXXL
 
27.04.17
08:27
(42) сам то сделаешь чего? хоть ошибку почитай
44 jyurik
 
27.04.17
08:29
(43) мне не понятно что это значит
45 FIXXXL
 
27.04.17
08:33
(44) мне тоже
отсюда твою обработку не видать

ПС мне ее присылать не надо
46 jyurik
 
27.04.17
08:35
(45) обработка выводить временную таблицу с кодами и все нажимаешь Ок и все ничего не перезаписывается
47 jyurik
 
27.04.17
08:37
в базу захожу под толстым клиентом, а на автомате вообще ничего не происходит
48 FIXXXL
 
27.04.17
08:46
(47) ошибка в синтаксисе где-то
КонецЧеготоТам лишний, к примеру
49 jyurik
 
27.04.17
08:59
(48) Спасибо за помощь
запустил, база повисла - думаю, что-то перезаписывает
50 George Wheels
 
27.04.17
10:11
(17) В конфигураторе Сервис->Параметры->Запуск 1С:Предприятия
51 jyurik
 
27.04.17
12:04
(48) Код записался только последние три цифра не попала везде
Пример:  код - ТТП.РЖ.30273.00062 / новый код -  ТТП.РЖ.30273.00
Количество знаков в реквизите больше (20)
если вручную скопировать в новый код, то он полностью сохраняется
В чем может быть проблема?
52 Serg_1960
 
27.04.17
13:56
Проблема может быть в том, что твой алгоритм до сих пор тобою не озвучен и не у всех телепатия развита до уровня феноменального.
53 jyurik
 
27.04.17
16:28
(52) Пример приводил в (20)
Есть "Код" (стандартный) справочника "Спецификации Номенклатуры". Я в этом же справочнике делаю новый реквизит и вывожу его на форму "КодКэмз". Мне надо было, чтобы эти два кода были идентичными. Пример: Код-30188.06021 и КодКэмз-30188.06021. Спасибо с вашей помощью я их записал в новый код. Только почему-то теперь в КодеКэмз не хватает в конце трех знаков (во всем справочнике)
54 Ц_У
 
27.04.17
16:39
(53) длина реквизита меньше на 3 символа?
55 jyurik
 
27.04.17
16:44
(54) длина такая же 20 как и у Код
56 Ц_У
 
27.04.17
16:45
(55) поставь больше на 3 и проверь
57 Serg_1960
 
27.04.17
18:11
(53) Это ТЗ (техническое задание) - то, что ты хочешь получить в результате. А я говорил не только об алгоритме, о (37)... впрочем неважно :(

Не исключаю, что длина поля экранного элемента формы меньше, чем нужно для показа значения реквизита "КодКэмз" документа - значение полностью не показывается. Но чтобы быть уверенным  в этом - нужно озвучить скринами свойства реквизита и экранного элемента формы.
58 jyurik
 
28.04.17
08:00
(57) как сюда добавить скрин экрана?
59 FIXXXL
 
28.04.17
08:54
(57) проще и вернее посмотреть запросом :)
60 jyurik
 
28.04.17
08:59
(59) да уже проверил. Не хватает трех знаков
Уже и реквизиту дал количество знаков 30 и длину элемента на форме то же 30
61 jyurik
 
28.04.17
09:02
(59) а как в УФ мне проверить уникальность моего КодаКэмз
я вот так сделал и по ходу тишина:

&НаСервере
Функция ПроверитьУникальностьНаСервере()
  НайденныйЭлемент = Справочники.Номенклатура.НайтиПоРеквизиту("КодКэмз", СокрЛП(Объект.КодКэмз));
  Если Объект.Ссылка <> НайденныйЭлемент.Ссылка Тогда
       Возврат "Элемент с таким кодом уже есть в справочнике.";
  КонецЕсли;
  Возврат "";
КонецФункции

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
  Если ЗначениеЗаполнено(Объект.КодКэмз) Тогда
       ПричинаОтказа = ПроверитьУникальностьНаСервере();
       Если ПричинаОтказа <> "" Тогда
           Сообщение = Новый СообщениеПользователю;
           Сообщение.Текст = ПричинаОтказа;
           Сообщение.Поле = "Объект.КодКэмз";
           Сообщение.Сообщить();
           Отказ = Истина;
           Возврат;
       КонецЕсли;
  КонецЕсли;
КонецПроцедуры
62 Ц_У
 
28.04.17
09:24
Возврат "";
Если ПричинаОтказа <> "" Тогда
//вернуть Истина или Ложь не предлагать?
63 jyurik
 
28.04.17
10:27
(62) "Возврат "";" - не понятно
64 jyurik
 
28.04.17
11:05
(62) Сделал та:

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    СпецификацииНоменклатуры.Ссылка КАК Ссылка
        |ИЗ
        |    Справочник.СпецификацииНоменклатуры КАК СпецификацииНоменклатуры
        |ГДЕ
        |    СпецификацииНоменклатуры.КодКэмз = &КодКэмз";
    Запрос.УстановитьПараметр("Ссылка", ТекущийОбъект.Ссылка);
    Запрос.УстановитьПараметр("КодКэмз", ТекущийОбъект.КодКэмз);
    Если НЕ Запрос.Выполнить().Пустой() Тогда
        Сообщить("Код КЭМЗ " + ТекущийОбъект.КодКэмз + " же существует");
        Отказ = Истина;
    КонецЕсли;
    
КонецПроцедуры
65 jyurik
 
28.04.17
11:06
уникальность проверяется.
66 Serg_1960
 
28.04.17
11:21
Так проще и быстрее:

    Запрос = Новый Запрос();
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ВсеКоды.КодКэмз КАК НеУникальныйКод,
    |    КОЛИЧЕСТВО(ВсеКоды.КодКэмз) КАК КоличествоПовторов
    |ИЗ
    |    Справочник.СпецификацииНоменклатуры КАК ВсеКоды
    |
    |СГРУППИРОВАТЬ ПО
    |    ВсеКоды.КодКэмз
    |
    |ИМЕЮЩИЕ
    |    КОЛИЧЕСТВО(ВсеКоды.КодКэмз) > 1";