|
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
|
(55) Начните хотя бы с этого: https://docs.google.com/document/d/1BDDj2DXSMqzTqK4488KYDooFEsf3SRDZ5pGba3phv3s/edit
|
|||
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) самое популярное и мы сейчас добавляем этому сообщению популярности своими постами =))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |