Имя: Пароль:
1C
1С v8
v8: Как передать таблицу значений с сервера на клиент
,
0 Shrek_yar
 
06.12.11
17:51
Здравствуйте, есть функция на сервере , она возвраша5ет переменую на клиент с типом "ТаблицаЗначений"
но выскакиет ошибка Ошибка отображения типов:
Отсутствует отображение для типа '{http://v8.1c.ru/8.1/data/core}ValueTable',
я как понял он не может передать данный тип переменной обраьно на клиент, как с этим бороться и как передать результат фунции на клиент обратно если у нее тип ТаблицаЗначений
1 Shrek_yar
 
06.12.11
17:53
заранее спсибо))
2 GROOVY
 
06.12.11
17:55
Нельзя передавать между сервером и клиентом мутабельные значения.
3 YF
 
06.12.11
17:55
(0) А как передаешь?
4 GROOVY
 
06.12.11
17:56
Используйте временное хранилище. Поиск по форуму поможет.
5 YF
 
06.12.11
17:57
(4) Т.е. если создать ТЗ на клиенте, а потом передать на сервер для заполнения - не получится?
6 Shrek_yar
 
06.12.11
17:58
(3) в плане как ??
7 Shrek_yar
 
06.12.11
17:58
Возврат Сп;  // сп - таблица значений
8 YF
 
06.12.11
17:59
(6) Да не, я ступил ... зато веточку поднял :-)
9 GLazNik
 
06.12.11
17:59
ТаблицаЗначений. Доступность: Сервер, толстый клиент, внешнее соединение.
Если клиент тонкий или веб, то использовать ТЗ нельзя.
Как вариант использовать массив структур
10 Shrek_yar
 
06.12.11
18:00
самое страное на другом компе работает, такая обработка и на той же конфе _)))))))))))))))))))))
11 Shrek_yar
 
06.12.11
18:00
и запускается в тонком клиенте))
12 БибиГон
 
06.12.11
18:01
(10) тогда почисти кеш )
13 Shrek_yar
 
06.12.11
18:01
(12) кеш то тут причем? мож я что не понимаю
14 Shrek_yar
 
06.12.11
18:02
аспирин на все лекарство ?? )))
15 БибиГон
 
06.12.11
18:03
а как у тебя работает то что не должно работать? ))
16 Живой Ископаемый
 
06.12.11
18:03
2(14) нет, это как раз от загадочных случаев когда одно и тоже на другом компе работает
17 GROOVY
 
06.12.11
18:04
(9) На клиенте использовать ТЗ можно.
18 GROOVY
 
06.12.11
18:05
19 Shrek_yar
 
06.12.11
18:05
(16)случай и в правду загадочный))
20 Shrek_yar
 
06.12.11
18:07
что мне тоже через табличную часть делать))?
21 GLazNik
 
06.12.11
18:07
(10) вполне возможно, ибо "Возможен обмен с сервером", но тогда
(11) таки клиент тонкий
(17) тогда СП меня обманывает:
"Доступность:

Сервер, толстый клиент, внешнее соединение.
Возможен обмен с сервером. Сериализуется. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/core}. Имя типа XDTO: ValueTable"
22 Shrek_yar
 
06.12.11
18:07
сначало в нее , потом на клиент?
23 Shrek_yar
 
06.12.11
18:08
(21) тонкий, правда запуск стоит автоматически выбирать, но по интерфейсу фидно что в тонком вариенте запускается
24 БибиГон
 
06.12.11
18:09
(10) кс тати , а может платформы разные? )
25 GROOVY
 
06.12.11
18:10
(21) ТЗ может быть реквизитом формы. В этом случае работать с ней на клиенте можно.
Программно создать объект на клиенте нельзя.
26 БибиГон
 
06.12.11
18:10
(23) в смысле видно по нтерфейсу? на глаз определяешь чтоли? )
27 GLazNik
 
06.12.11
18:10
(22) а начнем сначала, а зачем ТЗ на клиенте?
(23) лично я не могу раличать интерфейсы тонкого и толстого клиента
28 GROOVY
 
06.12.11
18:11
(23) Толстый клиент в режиме управляемого приложения выглядит так же как и тонкий.
29 GLazNik
 
06.12.11
18:11
(25) Это верно, но на клиенте тип уже не таблица значений, а иной. Точно не помню.
30 Shrek_yar
 
06.12.11
18:12
(26) на глаз, там же сразу видны отличие, обычного от управляемого
31 Shrek_yar
 
06.12.11
18:12
или я не прав?
32 Shrek_yar
 
06.12.11
18:12
не прав)) все извиняюсь за безграмотность
33 GLazNik
 
06.12.11
18:13
(30) обычного от управляемого видно, а тонкий от толстого нет
34 GROOVY
 
06.12.11
18:13
(30) Ты определись про что ты про разных клиентов или разные режимы функционирования платформы.
35 Shrek_yar
 
06.12.11
18:14
(33) я с этим и с путал
36 Shrek_yar
 
06.12.11
18:14
платфформы у нас разные у них 13, у нас 14
37 Shrek_yar
 
06.12.11
18:15
но неужели из за платформы могут быть такие отличия и ошибки??
38 GLazNik
 
06.12.11
18:16
Но все таки. Зачем ТЗ на клиенте? Если конечно это не элемент интерфейса.
39 Shrek_yar
 
06.12.11
18:17
(38) на клиенте есть поле ТЗ, где выводиться результат
40 GLazNik
 
06.12.11
18:18
(39) так заполнять его на сервере
41 Shrek_yar
 
06.12.11
18:18
(40)щас в 13 платформе запущу, проверю
42 GROOVY
 
06.12.11
18:19
Ветка про общение слепого с глухим...
43 Shrek_yar
 
06.12.11
18:19
(41) дело не платформе
44 Shrek_yar
 
06.12.11
18:19
ну извините
45 Shrek_yar
 
06.12.11
18:20
придеться на сервере заполнять), про это я понял
46 БибиГон
 
06.12.11
18:20
(42) ну, он говорит что конфигурация одна и таже...
47 Shrek_yar
 
06.12.11
18:20
просто в прежней обработке возвращается на клиент все
48 Shrek_yar
 
06.12.11
18:21
конфа УНФ, но по моему это не имеет отношение, так как там и там она одна и одной версии
49 GROOVY
 
06.12.11
18:21
О, уже и обработки оказались разные...
50 Shrek_yar
 
06.12.11
18:22
&НаСервере
Функция ПолучитьМакет()
   ЭтотОбъект = РеквизитФормыВЗначение("Объект");
     Возврат ЭтотОбъект.ПолучитьМакет("Макет");
КонецФункции

&НаСервере
Функция ДайВидИТС(Вид)

Если Вид = Перечисления.ВидыИТС.ИТСПрофПлат Тогда
     Возврат 10;
ИначеЕсли    Вид = Перечисления.ВидыИТС.ИТСТехно Тогда    
   Возврат 4;      
ИначеЕсли    Вид = Перечисления.ВидыИТС.ИТСПрофБесплатный Тогда
   Возврат 16;      
ИначеЕсли    Вид = Перечисления.ВидыИТС.ИТСБюджет Тогда
   Возврат 7;      
ИначеЕсли    Вид = Перечисления.ВидыИТС.ИТСБюджетПроф Тогда
   Возврат 8;      
ИначеЕсли    Вид = Перечисления.ВидыИТС.ИТСБюджетПрофБесплатный Тогда
   Возврат 9;      
ИначеЕсли    Вид = Перечисления.ВидыИТС.ИТССтроительство Тогда
   Возврат 18;      
ИначеЕсли    Вид = Перечисления.ВидыИТС.ИТССтроительствоБесплатный Тогда
   Возврат 17;      
ИначеЕсли    Вид = Перечисления.ВидыИТС.ИТСМедицина Тогда
   Возврат 65;      
ИначеЕсли    Вид = Перечисления.ВидыИТС.ИТСПрофГоловной Тогда
   Возврат 19;      
ИначеЕсли    Вид = Перечисления.ВидыИТС.ИТСДляУдаленного Тогда
   Возврат 20;      
КонецЕсли;
   

КонецФункции // ДайВидИТС()

&НаСервере
Функция ДайМыло()
   
   Возврат Справочники.ВидыКонтактнойИнформации.EmailКонтрагента;
КонецФункции // ДайМыло()

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

   Запрос.УстановитьПараметр("Вид", Вид);
   Запрос.УстановитьПараметр("Ссылка", Ссылка);

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

   Выборка = Результат.Выбрать();

   Пока Выборка.Следующий() Цикл
       Возврат Выборка.Представление;
   КонецЦикла;

   

КонецФункции // ДайМыло2()


&НаСервере
Функция ДайПолнНаименование (Контрагент)

   Возврат  Контрагент.НаименованиеПолное;

КонецФункции // ДайПонНаименование (Контрагент)()

&НаСервере
Функция ДайИНН (Контрагент)

   Возврат  Контрагент.ИНН;

КонецФункции // ДайПонНаименование (Контрагент)()

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

   Запрос.УстановитьПараметр("Ссылка", Контрагент);

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

   Выборка = Результат.Выбрать();

   Пока Выборка.Следующий() Цикл
       Возврат Выборка.Город;
   КонецЦикла;

   КонецФункции // ДайГород()

&НаКлиенте
Процедура Заполнить()

попытка
   Макет = ПолучитьМакет();
   Эксель = Новый COMОбъект("Excel.Application");
   ИмяВременногоФайла = ПолучитьИмяВременногоФайла("XLS");
   Макет.Записать(ИмяВременногоФайла);
   Книга = Эксель.WorkBooks.Open(ИмяВременногоФайла);
   //Эксель.Documents.Open(ИмяВременногоФайла);
Исключение
   Сообщить("Возможно у вас не установлена программа Microsoft Office: Word ("+ОписаниеОшибки()+")");
   Возврат ;
конецпопытки;

Лист = Книга.WorkSheets(1);

i = 11;
j = 1;
Для каждого Стр из Таблица Цикл
   
 Контрагент = Стр.Контрагент;    
//  Договор = Стр.Договор;
 
 
 
 
 //-- Заполнение строки Excel
 Книга.Sheets(1).Cells(i,1).Value  = j;
 Книга.Sheets(1).Cells(i,2).Value  = "13942-78";
 Книга.Sheets(1).Cells(i,3).Value  = 1;
 Книга.Sheets(1).Cells(i,4).Value  = "32855-40";
 Книга.Sheets(1).Cells(i,5).Value = ДайВидИТС(Стр.ВидИТС);
 Книга.Sheets(1).Cells(i,6).Value  = Стр.РегНомер;
 
 
 Книга.Sheets(1).Cells(i,7).Value  = ДайПолнНаименование(Стр.Контрагент);
 Книга.Sheets(1).Cells(i,8).Value  = ДайИНН (Стр.Контрагент);
 Книга.Sheets(1).Cells(i,9).Value  = Стр.КолВоРабМест;
 Книга.Sheets(1).Cells(i,10).Value  = "";
 Книга.Sheets(1).Cells(i,11).Value  = "";
 Книга.Sheets(1).Cells(i,12).Value  = Стр.Контакт;
 
 Книга.Sheets(1).Cells(i,13).Value  = "";
 Книга.Sheets(1).Cells(i,14).Value  = ДайГород (Стр.Контрагент);   // фактический

 Книга.Sheets(1).Cells(i,15).Value  = "";
 Книга.Sheets(1).Cells(i,16).Value  = "";
 Книга.Sheets(1).Cells(i,17).Value  = "";
 Книга.Sheets(1).Cells(i,18).Value  = "";
 Книга.Sheets(1).Cells(i,19).Value  = Стр.КодГорода; //ручками
 Книга.Sheets(1).Cells(i,20).Value  = Стр.Телефон; //ручками
 Книга.Sheets(1).Cells(i,21).Value  = "";
 Книга.Sheets(1).Cells(i,22).Value  = ДайМыло2(Стр.Контрагент, ДайМыло());
 Книга.Sheets(1).Cells(i,23).Value  = "";
 Книга.Sheets(1).Cells(i,24).Value  = "";
 Книга.Sheets(1).Cells(i,25).Value  = "";
 Книга.Sheets(1).Cells(i,26).Value  = Формат(Стр.ДатаНачала,"ДФ=MM.yy");
 Книга.Sheets(1).Cells(i,27).Value  = Стр.Выпусков;
 Книга.Sheets(1).Cells(i,28).Value  = Стр.Способ;
 Книга.Sheets(1).Cells(i,29).Value  = Стр.РегНомер1;
 Книга.Sheets(1).Cells(i,30).Value  = Стр.РегНомер2;
 Книга.Sheets(1).Cells(i,31).Value  = Стр.РегНомер3;
 Книга.Sheets(1).Cells(i,32).Value  = Стр.РегНомер4;
 Книга.Sheets(1).Cells(i,32).Value  = Стр.РегНомер5;
 //+ рег номера
 //-- -- -- -- -- -- -- -- --
 j = j + 1;
 i = i + 1;
КонецЦикла;    

   Попытка
       Книга.SaveAs("C:\1.xls");
   Исключение
       Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
   КонецПопытки;
   Эксель.Application.Quit();
   
   НоваяКартинка = БиблиотекаКартинок.СостояниеОбменаДаннымиУспех;
   Элементы.Заполнить.Картинка = НоваяКартинка;
   Элементы.Заполнить.Заголовок = "Заполнено!";
КонецПроцедуры // Заполнить()

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

   Запрос.УстановитьПараметр("Контрагент",Контрагент);

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

&НаСервере
Функция ДайКонтакты(Контрагент)

   Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    КонтактныеЛица.Представление
       |ИЗ
       |    Справочник.КонтактныеЛица КАК КонтактныеЛица
       |ГДЕ
       |    КонтактныеЛица.Владелец = &Контрагент";

   Запрос.УстановитьПараметр("Контрагент", Контрагент);

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

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

КонецФункции // ДайКонтакты()


&НаКлиенте
Процедура ТаблицаКонтрагентПриИзменении(Элемент)
 Строка = Элементы.Таблица.ТекущиеДанные;    
 Список =  ДайРегНомера(Строка.Контрагент);
 Контакты = ДайКонтакты(Строка.Контрагент);
КонецПроцедуры

&НаКлиенте
Процедура Запустить(Команда)
   ЗапуститьПриложение("C:\1.xls");
КонецПроцедуры

&НаКлиенте
Процедура Отправить(Команда)
    Профиль = Новый ИнтернетПочтовыйПрофиль;
    Профиль.АдресСервераSMTP = "smtp.yandex.ru";
    Профиль.ПортSMTP = 587;
    Профиль.Пользователь = "[email protected]";
    Профиль.Пароль = "38gjgeuftd";
    Профиль.АутентификацияSMTP     = СпособSMTPАутентификации.Login;
    Профиль.ПарольSMTP           = "38gjgeuftd";
    Профиль.ПользовательSMTP     = "[email protected]";
   
    Почта = Новый ИнтернетПочта;
    Попытка
       Почта.Подключиться(Профиль);
       
    Исключение
       Сообщить("Ошибка при подключении к серверу" + ОписаниеОшибки());
       Возврат;
    КонецПопытки;
   
    Сообщение = Новый ИнтернетПочтовоеСообщение;
    Сообщение.Отправитель = "[email protected]";
    Сообщение.Получатели.Добавить("[email protected]");
    Сообщение.Тема = "Выгрузка ИТС";
    Сообщение.Тексты.Добавить("Сабж",ТипТекстаПочтовогоСообщения.HTML);
    Сообщение.Вложения.Добавить("C:\1.xls");
    Почта.Послать(Сообщение);
    Почта.Отключиться();
   
    //Попытка
    //    УдалитьФайлы ("C:\1.xls");
    //Исключение
    //    Сообщить(ОписаниеОшибки());
    //КонецПопытки;
КонецПроцедуры

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

   Запрос.УстановитьПараметр("Контрагент", Контрагент);

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

   Выборка = Результат.Выбрать();

   Пока Выборка.Следующий() Цикл
       Возврат Выборка.Ссылка;
   КонецЦикла;
   
   Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    Номера.Контрагент
       |ИЗ
       |    РегистрСведений.Номера КАК Номера
       |ГДЕ
       |    Номера.РегНомер = &РегНомер";

   Запрос.УстановитьПараметр("РегНомер", РегНомер);

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

   Выборка = Результат.Выбрать();

   Пока Выборка.Следующий() Цикл
       Возврат Выборка.Контрагент;
   КонецЦикла;

       
   
   СпрК =  Справочники.Контрагенты.НайтиПоНаименованию(Контрагент);
   Если НЕ СпрК.ПометкаУдаления Тогда
       Возврат СпрК;
   КонецЕсли;

   
КонецФункции // НайдиКонтрагента (Контрагент)()

&НаСервере
Функция ПустойКонтрагент()
   Возврат Справочники.Контрагенты.ПустаяСсылка();
КонецФункции // ПустойКонтрагент()

&НаСервере
Функция ВидИТС (Строка)
Если строка = "ИТС Проф DVD Бесплатный" Тогда
   Возврат  Перечисления.ВидыИТС.ИТСПрофБесплатный;
ИначеЕсли строка = "ИТС Бюджет Проф" Тогда    
   Возврат  Перечисления.ВидыИТС.ИТСБюджетПроф;
ИначеЕсли строка = "ИТС Бюджет Проф Бесплатный" Тогда    
   Возврат  Перечисления.ВидыИТС.ИТСБюджетПрофБесплатный;
ИначеЕсли строка = "ИТС Технологическая поставка" Тогда    
   Возврат  Перечисления.ВидыИТС.ИТСТехно;    
ИначеЕсли строка = "ИТС для удаленного офиса" Тогда    
   Возврат  Перечисления.ВидыИТС.ИТСДляУдаленного;    
ИначеЕсли строка = "ИТС Франчайзинговый" Тогда    
   Возврат  Перечисления.ВидыИТС.Отсутствует;    
ИначеЕсли строка = "ИТС Проф DVD" Тогда    
   Возврат  Перечисления.ВидыИТС.ИТСПрофПлат;        
ИначеЕсли строка = "ИТС Строительство Бесплатный" Тогда    
   Возврат  Перечисления.ВидыИТС.ИТССтроительствоБесплатный;            
ИначеЕсли строка = "ИТС Медицина" Тогда    
   Возврат  Перечисления.ВидыИТС.ИТСМедицина;                
   
       
КонецЕсли;    
   

КонецФункции // ВидИТС()

&НаКлиенте
Функция Дата_(стрДата)
   стрДата_ = СокрЛП(СтрЗаменить(стрДата,".",""));
   датДата = Сред(стрДата_,5)+Сред(стрДата_,3,2)+Лев(стрДата_,2);
   Если СтрДлина(стрДата_)=6 Тогда
       датДата = "20"+датДата;
   КонецЕсли;            
   //Сообщить(датДата+"="+стрДата);
   Попытка
       Возврат Дата(датДата);
   Исключение
       Возврат Дата(0);
   КонецПопытки;
КонецФункции    // Дата_


&НаКлиенте
Процедура Загрузить(Команда)
   перем ИмяФайла;
   Попытка
   Ex = Новый COMОбъект("Excel.Application");
   Ex.WorkBooks.Open(ИмяФайла);
   Состояние("Обработка файла Microsoft Excel...");
   Исключение
    ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогВыбораФайла.Заголовок = "Прочитать табличный документ из файла";
    ДиалогВыбораФайла.Фильтр    = "Лист Excel (*.xls)|*.xls|";
   Если ДиалогВыбораФайла.Выбрать() Тогда
        ИмяФайла = ДиалогВыбораФайла.ПолноеИмяФайла;
   КонецЕсли;
   Ex = Новый COMОбъект("Excel.Application");
   Ex.WorkBooks.Open(ИмяФайла);
   
     КонецПопытки;

   Элементы.Состояние.Заголовок = "Открыт файл: " + ИмяФайла;
   
   i=7;
   j = 0;
   ActiveCell = Ex.ActiveCell.SpecialCells(11);
   RowCount = ActiveCell.Row;
       
   Пока (НЕ ПустаяСтрока(ex.Sheets(1).Cells(i,1).Value))  Цикл
       
       Строка = НайдиКонтрагента (строка(ex.Sheets(1).Cells(i,3).Value),строка(ex.Sheets(1).Cells(i,2).Value));
       Если Строка <> ПустойКонтрагент () Тогда
           Стр = Загрузка.Добавить();
           Стр.Контрагент = Строка;
           Стр.ВидИТС =  ВидИТС (ex.Sheets(1).Cells(i,7).Value);
           
           Стр.Дата  = Дата_(ex.Sheets(1).Cells(i,5).Value);
           
           
           j = j + 1;
       Иначе
           Сообщение = Новый СообщениеПользователю;
           Сообщение.Текст = "Не найден контрагент: " + строка(ex.Sheets(1).Cells(i,3).Value) + " с номером " + строка(ex.Sheets(1).Cells(i,2).Value);
           Сообщение.Сообщить();
       КонецЕсли;
       i = i + 1;
   КонецЦикла;    
Элементы.Состояние.Заголовок = Элементы.Состояние.Заголовок + " ---  Загружено " + j + " позиций из " + (i-7) ;    
Ex.Application.Quit();    
КонецПроцедуры

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

КонецПроцедуры // ИзменитьКонтрагента()


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

&НаКлиенте
Процедура ТаблицаПриАктивизацииСтроки(Элемент)
   
   
КонецПроцедуры

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

   Запрос.УстановитьПараметр("Ссылка", Контрагент);

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

   Выборка = Результат.Выбрать();

   Пока Выборка.Следующий() Цикл
       Возврат Выборка.НомерТелефона;
   КонецЦикла;

   

КонецФункции // ОтобразитьТелефоны()


&НаКлиенте
Процедура ДайТелефон(Команда)
   Элементы.Телефоны.Заголовок = ОтобразитьТелефоны (Элементы.Таблица.ТекущиеДанные.Контрагент);
КонецПроцедуры

&НаСервере
Функция ПроверьДату(Дата)
   Если Дата > ТекущаяДата () Тогда
       Возврат ИСТИНА;
   ИначеЕсли (Месяц(Дата) = Месяц(ТекущаяДата ()))  И (Год(Дата) = Год(ТекущаяДата ())) Тогда
       Возврат ИСТИНА;
   КонецЕсли;
   Возврат Ложь;
КонецФункции // ПроверьДату()

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

   Организация = Справочники.Организации.НайтиПоНаименованию("Наша фирма.");    
   Запрос.УстановитьПараметр("Контрагент", Контрагент);
   Запрос.УстановитьПараметр("Организация", Организация);

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

   Выборка = Результат.Выбрать();

   Пока Выборка.Следующий() Цикл
       Если Выборка.Номенклатура = ДайИТСПоВиду (ВидИТС) Тогда
           Если Выборка.Дата <> "00010101" Тогда
               Если ПроверьДату (Дата(Выборка.Дата)) Тогда
                    Возврат Истина;
               КонецЕсли;
           КонецЕсли;    
       КонецЕсли;    
   КонецЦикла;

   Возврат Ложь;
КонецФункции // ЕстьРасходная()


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

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

   Выборка = Результат.Выбрать();

   Сп = Новый ТаблицаЗначений;
   Сп.Колонки.Добавить("Контрагент");
   Сп.Колонки.Добавить("Дата");
   Сп.Колонки.Добавить("ВидИТС");
   Сп.Колонки.Добавить("Метка");
   Сп.Колонки.Добавить("Город");
   
   Пока Выборка.Следующий() Цикл
      Если Выборка.Дата <> "00010101" Тогда
       Если ПроверьДату (Дата(Выборка.Дата)) Тогда
        Если НЕ ЕстьРасходная (Выборка.Ссылка, Выборка.ВидИТС, Выборка.Дата) Тогда    
           Строка = Сп.Добавить();
           Строка.Контрагент = Выборка.Ссылка;
           Строка.Дата = Выборка.Дата;
           Строка.ВидИТС = Выборка.ВидИТС;
           Строка.Город = ДайГород(Выборка.Ссылка);
        Иначе
           Строка = Сп.Добавить();
           Строка.Контрагент = Выборка.Ссылка;
           Строка.Дата = Выборка.Дата;
           Строка.ВидИТС = Выборка.ВидИТС;
           Строка.Город = ДайГород(Выборка.Ссылка);
           Строка.Метка = 1;
        КонецЕсли;    
           
       КонецЕсли;    
      КонецЕсли;
   КонецЦикла;

       
   Возврат Сп;

КонецФункции // АктуальныеКонтрагенты()


&НаКлиенте
Процедура ЗаполнитьДокументы(Команда)
   
   
   Список = АктуальныеКонтрагенты ();
   Документы.Очистить();
   
   Для каждого элем из Список Цикл
    Стр = Документы.Добавить();    
    Стр.Контрагент = элем.Контрагент;
    Стр.Дата = элем.Дата;
    Стр.ВидИТС = элем.ВидИТС;
     Стр.Город = элем.Город;
    Если Элем.Метка = 1 Тогда
     Стр.Метка = Истина;    
     //Элементы.Документы.ТекущийЭлемент.Шрифт = Новый Шрифт(,,Истина);
    КонецЕсли;
   КонецЦикла;    

Документы.Индекс("Контрагент");
КонецПроцедуры


&НаСервере
Функция ДайИТСПоВиду(ВидИТС)
   Если ВидИТС = Перечисления.ВидыИТС.ИТСПрофБесплатный Тогда
     Возврат Справочники.Номенклатура.НайтиПоКоду("00000000266");
   ИначеЕсли ВидИТС = Перечисления.ВидыИТС.ИТСБюджетПроф Тогда    
     Возврат Справочники.Номенклатура.НайтиПоКоду("00000000268");
   ИначеЕсли ВидИТС = Перечисления.ВидыИТС.ИТСБюджетПрофБесплатный Тогда    
     Возврат Справочники.Номенклатура.НайтиПоКоду("00000000268");
   ИначеЕсли ВидИТС = Перечисления.ВидыИТС.ИТСТехно Тогда    
     Возврат Справочники.Номенклатура.НайтиПоКоду("00000000271");
   ИначеЕсли ВидИТС = Перечисления.ВидыИТС.ИТСДляУдаленного Тогда    
     Возврат Справочники.Номенклатура.НайтиПоКоду("00000000272");
   ИначеЕсли ВидИТС = Перечисления.ВидыИТС.Отсутствует Тогда    
     Возврат Справочники.Номенклатура.ПустаяСсылка();
   ИначеЕсли ВидИТС = Перечисления.ВидыИТС.ИТСПрофПлат Тогда    
     Возврат Справочники.Номенклатура.НайтиПоКоду("00000000266");
   ИначеЕсли ВидИТС = Перечисления.ВидыИТС.ИТССтроительствоБесплатный Тогда    
     Возврат Справочники.Номенклатура.НайтиПоКоду("00000000269");
   ИначеЕсли ВидИТС = Перечисления.ВидыИТС.ИТСМедицина Тогда
     Возврат Справочники.Номенклатура.НайтиПоКоду("00000000270");
   КонецЕсли;
КонецФункции // ДайИТСПоВиду()

&НаСервере
Процедура ЗаполнитьДокументНаСервере(ДанныеФормы, Контрагент, ВидИТС)

Док = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.РасходнаяНакладная"));

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


Строка = Док.Запасы.Добавить();
Строка.Количество = 1;
Строка.Номенклатура =ДайИТСПоВиду (ВидИТС);
Строка.ЕдиницаИзмерения = Строка.Номенклатура.ЕдиницаИзмерения;
Строка.СтавкаНДС = Строка.Номенклатура.СтавкаНДС;


ЗначениеВДанныеФормы(Док,ДанныеФормы);    

КонецПроцедуры // ЗаполнитьДокументНаСервере()


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

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

&НаКлиенте
Процедура ТаблицаРегНомерПриИзменении(Элемент)
 Строка = Элементы.Таблица.ТекущиеДанные;    
 Список =  ДайРегНомера(Строка.Контрагент);
   
КонецПроцедуры

&НаКлиенте
Процедура УдалитьПомеченныхКонтрагентов(Команда)
   
   //Документы.Очистить();
   //
   //Список = АктуальныеКонтрагенты ();
   //Документы.Очистить();
   //
   //Для каждого элем из Список Цикл
   // Если Элем.Метка <> 1 Тогда    
   //    Стр = Документы.Добавить();    
   //    Стр.Контрагент = элем.Контрагент;
   //    Стр.Дата = элем.Дата;
   //    Стр.ВидИТС = элем.ВидИТС;
   // КонецЕсли;
   //КонецЦикла;
   
   СписокСтрок = Новый Массив();
  Для Каждого Эл Из Документы Цикл
      Если Эл.Метка Тогда
          СписокСтрок.Добавить(Эл);
      КонецЕсли;
  КонецЦикла;
   // КоличествоСтрок = СписокСтрок.Количество();
  Для каждого Стр Из СписокСтрок  Цикл        
      Документы.Удалить(Стр);    
  КонецЦикла;

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
   //Элементы.Документы.Контрагент.НомерСоглашения.Доступность=Истина;
КонецПроцедуры
51 Shrek_yar
 
06.12.11
18:22
обработка одна и таже
52 Shrek_yar
 
06.12.11
18:24
&НаСервере
Функция АктуальныеКонтрагенты ()
...

  Возврат Сп;

КонецФункции //
53 Shrek_yar
 
06.12.11
18:25
(47)это если передалать придеться, чтоб на сервере запонялась
54 GROOVY
 
06.12.11
18:25
Жесть. Почитайте Радченко. Откройте для себя директиву &НаСервереБезКонтекста. Разберитесь как работают УФ.
55 Shrek_yar
 
06.12.11
18:25
(54) ок. пойду в библиотеку
56 Shrek_yar
 
06.12.11
18:26
спасибо за внимание всем, и за советы)
57 GROOVY
 
06.12.11
18:28
58 Shrek_yar
 
08.12.11
15:27
&НаКлиенте
Процедура Сформировать(Команда)
Доки.Очистить();  
НайтиДоговора();
     

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


&НаСервереБезКонтекста
Процедура НайтиДоговора()
   
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
       |    ДоговорыКонтрагентовТаблица.Ссылка.Владелец.Ссылка как Ссылка,
       |    ДоговорыКонтрагентовТаблица.Дата,
       |    ДоговорыКонтрагентовТаблица.Сумма,
       |    ДоговорыКонтрагентовТаблица.Ссылка.Наименование как ВидДоговора
       
       
       |ИЗ
       |    Справочник.ДоговорыКонтрагентов.Таблица КАК ДоговорыКонтрагентовТаблица
       |    ГДЕ
       |ДоговорыКонтрагентовТаблица.Дата > &ДатаСег
       |И ДоговорыКонтрагентовТаблица.Дата < &ДатаДок  ";

Запрос.УстановитьПараметр("ДатаСег",ТекущаяДата());
Запрос.УстановитьПараметр("ДатаДок",НачалоДня(ТекущаяДата())+864000);

   Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать();
   
   Сп = Новый ТаблицаЗначений;
   Сп.Колонки.Добавить("Дата");  
   Сп.Колонки.Добавить("Контрагент");

   Сп.Колонки.Добавить("ВидДоговора");
   Сп.Колонки.Добавить("Сумма");
   
   Пока Выборка.Следующий() Цикл
       строка = сп.Добавить();
       Строка.Контрагент = Выборка.ссылка;
       строка.Дата = Выборка.Дата;
       строка.ВидДоговора =Выборка.ВидДоговора;
       строка.сумма = выборка.сумма;
   КонецЦикла;
   
   //
       
   Для каждого строчка из сп Цикл
    Стр = Доки.Добавить();    
    Стр.Контрагент = строчка.Контрагент;
    Стр.Дата = строчка.Дата;
    Стр.ВидДоговора = строчка.ВидДоговора;
    Стр.сумма = строчка.сумма;
   КонецЦикла;    
 /// Доки - таблица значений на форме, но пишет ошику что якобы ее нельзя заполнять на сервере
КонецПроцедуры
59 Shrek_yar
 
08.12.11
15:27
вот код который сделал, как заполнить таблицу на форме
60 Shrek_yar
 
08.12.11
15:32
(40) как заполнить , выдает ошибку
{Обработка.НайтиДоговораНаОплату.Форма.Форма.Форма(4)}: Ошибка при установке значения атрибута контекста (Доки)
 НайтиДоговора(Доки);
Нельзя изменять поле, содержащее объект данных формы
61 Shrek_yar
 
08.12.11
15:36
(57)это прочитал)
62 Shrek_yar
 
08.12.11
15:36
кто нибудь может подсказать, так сказать на путь истиный наставить))??
63 Shrek_yar
 
08.12.11
15:37
чтоб все в тонком клиенте работало
64 Shrek_yar
 
08.12.11
15:51
ап ап ап )
65 Shrek_yar
 
08.12.11
15:51
мож кто хоть идейку?
66 Shrek_yar
 
08.12.11
15:51
&НаСервереБезКонтекста - может ли с такой директивой, или надо с &НаСервере
67 Shrek_yar
 
08.12.11
15:58
никто не знает7
68 Shrek_yar
 
08.12.11
16:43
а,    GROOVY, тут нет?)
69 ЧеловекДуши
 
09.12.11
07:40
Автор идъётЪ :)
...жги еще :)
70 ЧеловекДуши
 
09.12.11
07:41
+ ДНК - не излечим :)
71 jk3
 
09.12.11
14:32
Какой шикарный баг: если между тэгами [ 1C ] [ /1C ] есть код (1), то это тоже считается за ссылку на сообщение темы.
Только не говорите, что это фича =)))
72 Shrek_yar
 
09.12.11
15:40
(69)не человек ты
73 Shrek_yar
 
09.12.11
15:41
(71) )))
74 Jaffar
 
09.12.11
17:36
(71) а почему только (1)? там на самом деле и (0), и (2), и (3), и т.д. :-)
75 jk3
 
09.12.11
17:50
(74) сообщение (1) самое популярное и мы сейчас добавляем этому сообщению популярности своими постами =))