Имя: Пароль:
1C
1С v8
Хранилище , как циклично запрашивать новые данные ?
,
0 Анастасия Изотова
 
13.04.15
09:34
Помогите советом. У меня 1С 8.1. Справочник сотрудников. Там есть поле - Подпись. Могу вставить картинку.
Есть документ, с табличной частью, где в каждой строке тот или иной сотрудник.
И есть внешняя обработка, которая на основании Этого документа делает печатную форму. Необходимо что бы все сотрудники перечисленные в табличной части Документа, выдавали картинки своих подписей в печатную форму.
Вот код:
Во внешней обработке есть процедура:
Процедура ВыводКартинки(Сотрудник,Рисунок)
    Если Сотрудник.ОсновноеИзображение.Хранилище.Получить() = Неопределено Тогда
        Картинка = Новый Картинка();
    Иначе
        //НовоеПоле = Область.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
        Рисунок.Картинка =  Сотрудник.ОсновноеИзображение.Хранилище.Получить();
    КонецЕсли;    
КонецПроцедуры
Я так поняла она запрашивает из хранилища собственно рисунок, передавая данные в перем.Рисунок *?

А далее в тексте обработки:
Область=Макет.ПолучитьОбласть("Строка");
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |        ТабличнаяЧасть.Услуга,
    |        ТабличнаяЧасть.СпециализацияВрача,
    |        ТабличнаяЧасть.Сотрудник,
    |        ТабличнаяЧасть.Кабинет
    |    ИЗ
    |        Документ.НазначениеНаОсмотр.Услуги КАК ТабличнаяЧасть
    |    ГДЕ
    |        ТабличнаяЧасть.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка",СсылкаНаОбъект);
    Результат = Запрос.Выполнить().Выбрать();
    Пока Результат.Следующий() Цикл
Сотрудник.ОсновноеИзображение.Хранилище.Получить() = Неопределено ;
        РеквизитХранилище = Неопределено;
        Область.Параметры.Услуга=Результат.Услуга;
        Область.Параметры.Сотр=Результат.Сотрудник;
        ВыводКартинки(Результат.Сотрудник,Область.Рисунки.D1);
        Область.Параметры.Кабинет=Результат.Кабинет;
        
        ТабДок.Вывести(Область);
    КонецЦикла;
Тут запрашиваются данные из табличной части Документа, и идут в печатную форму. Тут и к процедуре ВыводКартинки идет обращение.

НО! в Печатной форме циклично, строка за строкой идет одна и та же картинка. Как будто как запомнилась она где-то, так и печатается, несмотря на то что цикл (выше) перебирает РАЗНЫХ сотрудников.
Можно как то зануление переменной с картинкой сделать ?  Или засунуть текст Процедуры в код цикла, что бы запрашивать хранилище после каждого прохода по циклу ?
1 Oleg_ka
 
13.04.15
09:51
Результат.Сотрудник.ОсновноеИзображение.Хранилище.Получить()
а так?
2 ifso
 
13.04.15
09:51
собственноручно росписываться в документе сотрудники отказываются?
3 Oleg_ka
 
13.04.15
10:09
(1)Чушь ляпнул.
Надо смотреть ВыводКартинки(Результат.Сотрудник,Область.Рисунки.D1)
Точнее результат
Сотрудник.ОсновноеИзображение.Хранилище.Получить()
и чему равен Рисунок.
Но вот это
Сотрудник.ОсновноеИзображение.Хранилище.Получить() = Неопределено ;
        РеквизитХранилище = Неопределено;
точно лишнее.
4 Анастасия Изотова
 
14.04.15
02:51
Эта печатная бумаженция печатается срочно, и нужно что бы без участия людей, сканы-картинки их подписей валились в готовый документ .

А строка про "неопределено" - это я пыталась как то уже в цикле очищать значение переменной(это же переменная, да?), что бы с новым витком цикла новая-следущая картинка запрашивалась ...

Как значение посмотреть ? Пыталась сделать точки останова, но отладчик тупит, просит включить tcp/ip (почитала как лечить такое, руки затряслись(
5 Web00001
 
14.04.15
03:35
(4)Это встроенный брандмауер спрашивает разрешить или нет приложению активность по сети. Отладчик так связан с приложением просто разрешите ему когда спрашивает, отчего руки то трясутся?
6 Web00001
 
14.04.15
03:46
Выбирать надо данные из табличной части документа, а не из документа и потом из его табличной части.

Сотрудник.ОсновноеИзображение.Хранилище.Получить() = Неопределено
Действительно лишнее, нельзя присвоить значение результату метода. Так не видно, где проблема, используйте таки отладчик, несмотря на страшные слова.
7 Анастасия Изотова
 
14.04.15
04:08
Я нашла второй сервер с рабочим отладчиком.
Расставила точки остановки. В самом начале, где процедура картинки:
Рисунок.Картинка =  Сотрудник.ОсновноеИзображение.Хранилище.Получить(); - Результат Свойство:  Ошибка в выражении

А тут:
ВыводКартинки(Результат.Сотрудник,Область.Рисунки.D1);  - Результат Свойство:  Обращение к процедуре как к функции (Вывод картинки)

Я думала он пошагово выдаст куда и что пишется, но почти на все строки в этом цикле ниже пишет - Ошибка в выражении ...
8 Анастасия Изотова
 
14.04.15
04:12
re(( ыбирать надо данные из табличной части документа, ))  -   я взяла за основу табличную часть документа, по ней же цикл крутится. от нее идет прямая связь со справочником сотрудиников, а там и подписи эти собственно лежат.

А иначе я не умею.

Вот отладчик выдает какую то хрень, а картинка то в итоге в переменную пишется. Правда первая в списке. И далее циклом множится во все строки печатной формы. А дальше я не знаю как правильно! запросить картинку, откуда тогда ?   или может эту процедуру запроса из ХранилищаКартинок прямо в цикл встроить, можно такое ?   что бы каждый проход цикла, очередной запрос к хранилищу картинок, исходя из смены текущего сотрудника
9 forforumandspam
 
14.04.15
07:24
(0) Во-первых:


Процедура ВыводКартинки(Сотрудник, Рисунок)
    Картинка = Сотрудник.ОсновноеИзображение.Хранилище.Получить();
    Если Картинка = Неопределено Тогда
        Картинка = Новый Картинка();
    Иначе
        Рисунок.Картинка = Картинка;
    КонецЕсли;
КонецПроцедуры

во-вторых:

.....
    Пока Результат.Следующий() Цикл
        Область.Параметры.Услуга=Результат.Услуга;
        Область.Параметры.Сотр=Результат.Сотрудник;
        ВыводКартинки(Результат.Сотрудник,Область.Рисунки.D1);
        Область.Параметры.Кабинет=Результат.Кабинет;
        
        ТабДок.Вывести(Область);
    КонецЦикла;
10 forforumandspam
 
14.04.15
07:24
+(9) Ой.... :)

Процедура ВыводКартинки(Сотрудник, Рисунок)
    Картинка = Сотрудник.ОсновноеИзображение.Хранилище.Получить();
    Если Картинка = Неопределено Тогда
        Картинка = Новый Картинка();
    КонецЕсли;
    Рисунок.Картинка = Картинка;
КонецПроцедуры
11 ifso
 
14.04.15
08:25
(4) угу, а далее будет Т-53, не ?)
12 forforumandspam
 
16.04.15
07:52
Вот так вот: спросила и пропала.
13 ifso
 
16.04.15
07:56
(12) думаешь их уже повязали?
2 + 2 = 3.9999999999999999999999999999999...