Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Перенос данных с ТЧ обработки в ТЧ документа          
Mro. Подменю пользователя
сообщение 24.10.16, 11:57
Сообщение #1

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0

Всем привет, история следующая:

есть форма документа "Тест" с табличной частью "ТЧ", реквизиты "ТЧ" - "Номер", "Количество", Номенклатура".

еще есть обработка с формой "Форма" и табличной частью "ЧТО" с реквизитом "Номер".

Обработка открывается из формы документа по кнопке.

Что я хочу сделать - в форме документа есть, к примеру, три заполненных строки, кроме реквизита "Номер". Я открываю форму обработки, создаю там три строки, заполняю реквизит "Номер" и по нажатию кнопки "Перенести" хочу перенести значения в строки документа. Т.е. из каждой строки № "n" обработки значения реквизита "Номер" должно переноситься в каждую строку № "n" документа.

Так вот, сейчас у меня получается делать это только для одной выбранной строки. А хочу, чтобы для всех smile.gif.

На кнопку на форме док-та код:

&НаКлиенте
Процедура Обработка(Команда)

Параметр = Новый Структура;
ОткрытьФорму("Обработка.ДляПередачи.Форма.Форма",,ЭтаФорма,,,,Новый ОписаниеОповещения("ПолучитьДанныеИзФормы",ЭтаФорма,Параметр),РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);    
    
КонецПроцедуры

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


ЗаполнитьЗначенияСвойств(СтрокаВыбранная,ДанныеЗакрытия,"Номер");

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


в модуле формы обработки на кнопке "Перенести":

&НаКлиенте
Процедура Перенос(Команда)
    
Для каждого     Стр из Объект.ЧТО
Цикл
Номер=Стр.Номер;
КонецЦикла;    

СтруктураВозврата = Новый Структура("Номер",Номер);

Закрыть(СтруктураВозврата);

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


как мне это грамотно поправить? есть ощущение, что где-то нужно задействовать цикл при передаче структуры возврата и номера строк, но не понимаю, как это организовать.(

Заранее спасибо!

1С:Предприятие 8.3 (8.3.7.1860)
1С:ERP Управление предприятием 2 (2.1.3.82)

Vofka Подменю пользователя
сообщение 24.10.16, 13:10
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4613 раз
Рейтинг: 3750.1

В процедуре ПолучитьДанныеИзФормы:
СтруктураВозврата = Новый Структура("Номер", Номер);

Вы записываете номер последней строки из формы обработки. То есть, там всегда будет одно значение. Передавайте всё:
Закрыть(Объект.ЧТО.ВыгрузитьКолонку("Номер"));


В процедуре ПолучитьДанныеИзФормы;
СтрокаВыбранная = ЭтаФорма.Элементы.ТЧ.ТекущиеДанные;

Опять таки, вы получаете и изменяете одну строку. Текущую.

Бредовенькая какая-то задача, если честно.


Сообщение отредактировал Vofka - 24.10.16, 13:10

Mro. Подменю пользователя
сообщение 26.10.16, 9:54
Сообщение #3

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0

Vofka @ 24.10.16, 14:10 * ,
Та, сделал пока так:

на форме документа открываю обработку :

&НаКлиенте
Процедура Обработка(Команда)
    
ОткрытьФорму("Обработка.ДляПередачи.Форма.Форма",,ЭтаФорма,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
    
КонецПроцедуры


в обработке добавляю две строки, переношу по команде:

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

Оповестить("ПередачаНомеров",СтруктураОповещения,"ОбработкаЗаполнения");
КонецЦикла;

Закрыть();

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


в модуле формы документа отлавливаю оповещение:

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
        
Если Источник = "ОбработкаЗаполнения" Тогда
Если ИмяСобытия = "ПередачаНомеров" Тогда
    
Для каждого Стр из Объект.ТЧ Цикл
        
Стр.Номер = Параметр.Номер;

КонецЦикла;

КонецЕсли;
КонецЕсли;

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


Проблема - строки ТЧ документа заполняются значением последней строки из обработки, а мне нужно, чтобы каждым.(

Кол-во строк обработки и документа всегда равно.

Как мне поправить процедуру обработки оповещения?(

Vofka Подменю пользователя
сообщение 26.10.16, 10:00
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4613 раз
Рейтинг: 3750.1

Mro., советую ещё раз прочитать, что я выше писал. Только на этот раз уже внимательно.

Mro. Подменю пользователя
сообщение 26.10.16, 10:11
Сообщение #5

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0

Vofka @ Сегодня, 11:00 * ,
Блин, тут вопрос не внимательности чтения, а навыков.

ведь тут теперь я записываю не последний номер, а все:

Для каждого     Стр из Объект.ЧТО
Цикл
СтруктураОповещения = Новый Структура;
СтруктураОповещения.Вставить("Номер",Стр.Номер);


и тут пытаюсь получить все не для текущей строки, а для всех:

Для каждого Стр из Объект.ТЧ Цикл
        
Стр.Номер = Параметр.Номер;


или нет?)) Или в данном случае Параметр.Номер передает последнюю запись из обработки?))

Vofka Подменю пользователя
сообщение 26.10.16, 10:48
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4613 раз
Рейтинг: 3750.1

Цитата(Mro. @ 26.10.16, 11:11) *
тут вопрос не внимательности чтения, а навыков.

Я всё таки считаю, что вопрос именно во внимательности.

Цитата(Mro. @ 26.10.16, 11:11) *
Или в данном случае Параметр.Номер передает последнюю запись из обработки?))

Совершенно верно. Если быть точнее, то туда поочередно передаются все строки, но каждая последующая строка затирает все предыдущие значения.

И форматируйте как-то по людски код, а то глаз вынуть можно, когда читаешь код, который вы выкладываете.

Сообщение отредактировал Vofka - 26.10.16, 10:48

Mro. Подменю пользователя
сообщение 26.10.16, 11:08
Сообщение #7

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Vofka @ 26.10.16, 11:48) *
И форматируйте как-то по людски код, а то глаз вынуть можно, когда читаешь код, который вы выкладываете.


Как конкретно мне форматировать, чтобы Вы не вынимали свои глаза?(

Цитата(Vofka @ 26.10.16, 11:48) *
Совершенно верно. Если быть точнее, то туда поочередно передаются все строки, но каждая последующая строка затирает все предыдущие значения.


а если выгружать массивом, правильно будет?

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



с вышеуказанным кодом в модуле формы обработки и этим в модуле формы документа:

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)        
Если Источник = "ОбработкаЗаполнения" Тогда
Если ИмяСобытия = "ПередачаНомеров" Тогда
Для каждого Стр из Объект.ТЧ Цикл        
Стр.Номер = Параметр.Номер;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры


заполняет мне значение для всех строк словом "Массив".)))

Vofka Подменю пользователя
сообщение 26.10.16, 13:17
Сообщение #8

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4613 раз
Рейтинг: 3750.1

Акция, 2 в 1: и как работать должно (по идее, я не проверял) и как код форматировать надо.

&НаКлиенте
Процедура Перенос(Команда)    
    
    Оповестить("ПередачаНомеров", Объект.ЧТО.ВыгрузитьКолонку("Номер"), "ОбработкаЗаполнения");
    Закрыть();

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

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)        
    Если Источник = "ОбработкаЗаполнения" И
        ИмяСобытия = "ПередачаНомеров" Тогда
        
        Для Каждого Номер из Параметр Цикл        
            Стр[Номер-1] = Номер;
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры

Mro. Подменю пользователя
сообщение 26.10.16, 14:07
Сообщение #9

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0

Vofka @ Сегодня, 14:17 * ,
Ругается

{Документ.Тест.Форма.ФормаДокумента.Форма(24,1)}: Переменная не определена (Стр)
<<?>>Стр[Номер-1] = Номер; (Проверка: Тонкий клиент)

Vofka Подменю пользователя
сообщение 26.10.16, 14:08
Сообщение #10

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4613 раз
Рейтинг: 3750.1

Вот так надо:

Объект.ТЧ[Номер-1] = Номер;

Mro. Подменю пользователя
сообщение 26.10.16, 14:12
Сообщение #11

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0

Vofka @ Сегодня, 15:08 * ,


еще ошибка:

{Обработка.ДляПередачи.Форма.Форма.Форма(6)}: Метод объекта не обнаружен (ВыгрузитьКолонку)
Оповестить("ПередачаНомеров",Объект.ЧТО.ВыгрузитьКолонку("Номер"),"ОбработкаЗаполнения");

Vofka Подменю пользователя
сообщение 26.10.16, 14:14
Сообщение #12

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4613 раз
Рейтинг: 3750.1

Оповестить("ПередачаНомеров", Объект.ЧТО.Выгрузить().ВыгрузитьКолонку("Номер"), "ОбработкаЗаполнения");

Mro. Подменю пользователя
сообщение 26.10.16, 14:27
Сообщение #13

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0

Vofka @ Сегодня, 15:14 * ,

теперь

{Обработка.ДляПередачи.Форма.Форма.Форма(6)}: Ошибка при вызове метода контекста (Выгрузить)
Оповестить("ПередачаНомеров",Объект.ЧТО.Выгрузить().ВыгрузитьКолонку("Номер"),"ОбработкаЗаполнения");
по причине:
Метод недоступен на клиенте

если поменять директиву НаСервере,

&НаКлиенте
Процедура Перенос(Команда)
    
    ПереносНаСервере();
    
КонецПроцедуры


&НаСервере
Процедура ПереносНаСервере()
    
    Оповестить("ПередачаНомеров",Объект.ЧТО.Выгрузить().ВыгрузитьКолонку("Номер"),"ОбработкаЗаполнения");
    Закрыть();
    
КонецПроцедуры



то уже на этапе обновления конфигурации базы данных дает:

{Обработка.ДляПередачи.Форма.Форма.Форма(14,2)}: Процедура или функция с указанным именем не определена (Оповестить)
<<?>>Оповестить("ПередачаНомеров",Объект.ЧТО.Выгрузить().ВыгрузитьКолонку("Номер"),"ОбработкаЗаполнения"); (Проверка: Сервер)

Vofka Подменю пользователя
сообщение 26.10.16, 15:07
Сообщение #14

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4613 раз
Рейтинг: 3750.1

Если честно, то мне уже не интересно делать всё за вас. Дам подсказку: в Оповестить вторым параметром передайте массив. Как передать - подумайте сами.

Mro. Подменю пользователя
сообщение 26.10.16, 15:22
Сообщение #15

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0

Vofka @ Сегодня, 16:07 * ,
ясно, спасибо.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 21.06.25, 22:56
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!