helpf.pro
Регистрация

v8: Напоминание

Ermak
22.11.2011 08:56Прочитано: 3901
Доброе утро! Есть примеры как программно сделать напоминание? Например: гл. бухгалтер пишет для бухгалтеров напоминание на какой нибудь документ, когда бухгалтер создает этот документ или редактирует то появляется напоминание. А может напоминание выскакивает в виде окошка, когда бухгалтер заходит в 1С.
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
22.11.2011 10:35Ответ № 1
(0) Ermak, уже спрашивали такое - смотри тут, будут вопросы пиши здесь *13
Изменено 22.11.11 10:36:24
Ermak
22.11.2011 14:49Ответ № 2
Спасибо, интересно написано но если бы пример увидеть )
E_Migachev
22.11.2011 15:40Ответ № 3
(2) Ermak, Смотри задачи - влюбой типовой конфигурации!
Ermak
22.11.2011 16:54Ответ № 4
Напоминание нужно в таком стиле!
Например:
Создает бух документ Заказы, когда администратор заходит в 1С ему сообщение что такой та бух создал документ Заказы. Захотел бух отредактировать документ Заказы, изменил дату, администратор заходит и пишет ему что пользователь такой та изменил документ такой та, реквизит дата.
Как это можно сделать? Я думаю в процедуре ПриОткрытии()
E_Migachev
23.11.2011 11:32Ответ № 5
(4) Ermak, у меня сделано через отправку сообщений в Outlook, только сообщения отправляются пользователю чей документ!
т.е допустим документ создал Вася, а потом Петя зашел его и изменил, тут же Васе приходит сообщение что Петя изменил его Документ!

В модуль документа, который нужно отслеживать добавляем:
Код 1C v 8.х
 Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
ДополнительныйМодуль.СообщитьОбИзменении(ЭтотОбъект);
КонецПроцедуры


В общий модуль ДополнительныйМодуль добавляем код отправки сообщения:
Код 1C v 8.х
 Процедура СообщитьОбИзменении(Источник) Экспорт
Попытка
Если НЕ Источник.ЭтоНовый() И Источник.Модифицированность() Тогда
Если Источник.Ссылка.Ответственный <> ПараметрыСеанса.ТекущийПользователь Тогда

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

Запрос.УстановитьПараметр("Физик", Источник.Ссылка.Ответственный.ФизЛицо);
Запрос.УстановитьПараметр("Email", Справочники.ВидыКонтактнойИнформации.EmailФизЛица);

Выборка = Запрос.Выполнить().Выбрать();

Если Выборка.Следующий() Тогда

Email = СокрЛП(Выборка.Email);

Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "serversmtp";
Профиль.ПользовательSMTP = "1C@domen";
Профиль.ПарольSMTP = "A112345";

// Формируем сообщение обмена
Сообщ = Новый ИнтернетПочтовоеСообщение;
Сообщ.ИмяОтправителя = "1С:Бухгалтерия";
Сообщ.Тема = "1С:Ваш документ изменен!";
Сообщ.Получатели.Добавить(Email);
Текст = "Ваш документ: "+Строка(Источник)+" был изменен пользователем: "+Строка(ПараметрыСеанса.ТекущийПользователь)+" !";
Сообщ.Тексты.Добавить(Текст,ТипТекстаПочтовогоСообщения.ПростойТекст);
Сообщ.Важность = ВажностьИнтернетПочтовогоСообщения.Высокая;

Почта = Новый ИнтернетПочта;

Попытка
Почта.Подключиться(Профиль);
// Отправляем сообщение
Почта.Послать(Сообщ);
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;

КонецЕсли;

КонецЕсли;

КонецЕсли;

Исключение
КонецПопытки;


Если ты хочешь чтобы все эти письма приходили только Админу то тогда:
Код 1C v 8.х
 Процедура СообщитьОбИзменении(Источник) Экспорт

Попытка
Если НЕ Источник.ЭтоНовый() И Источник.Модифицированность() Тогда
Если Источник.Ссылка.Ответственный <> ПараметрыСеанса.ТекущийПользователь Тогда

Email = admin@domen;

Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "serversmtp";
Профиль.ПользовательSMTP = "1C@domen";
Профиль.ПарольSMTP = "A112345";

// Формируем сообщение обмена
Сообщ = Новый ИнтернетПочтовоеСообщение;
Сообщ.ИмяОтправителя = "1С:Бухгалтерия";
Сообщ.Тема = "1С: Документ изменен!";
Сообщ.Получатели.Добавить(Email);
Текст = "Документ: "+Строка(Источник)+" был изменен пользователем: "+Строка(ПараметрыСеанса.ТекущийПользователь)+" !";
Сообщ.Тексты.Добавить(Текст,ТипТекстаПочтовогоСообщения.ПростойТекст);
Сообщ.Важность = ВажностьИнтернетПочтовогоСообщения.Высокая;

Почта = Новый ИнтернетПочта;

Попытка
Почта.Подключиться(Профиль);
// Отправляем сообщение
Почта.Послать(Сообщ);
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;

КонецЕсли;

КонецЕсли;

Исключение
КонецПопытки;

Изменено 23.11.11 11:36:38
Ermak
23.11.2011 14:18Ответ № 6
мне нужно не письма, а когда заходит пользователь (Админ) открывает Форму списка документы и ему или открывается файл txt или выводится информация в окне Служебные сообщения что и кто делал с документом.
Как будет выглядеть с документом Внутренние заказы:

19.11.2011
Пользователь: Петькин
Изменил: №000001
Колонка: счет фактура
-------------------
Пользователь: Пупкин
Создал: №00000019
-------------------
20.11.2011
Пользователь:Иванович
Изменил: №0000011
Колонка: счет фактура
Колонка: требование накладная


Вот так хотелось бы
E_Migachev
23.11.2011 16:03Ответ № 7
тогда в документе ПриЗаписи пиши информацию о нем в регистр сведений или в общий реквизит какой нибудь и выводи от туда информацию админу
Ermak
23.11.2011 21:30Ответ № 8
а пример можно?
E_Migachev
24.11.2011 13:06Ответ № 9
(8) Ermak, а какой пример ты хочешь!? ты сначала реши как хочешь сделать и надо ли оно, т.к. все это админ может посмотреть в журнале регистрации?
Ermak
24.11.2011 14:22Ответ № 10
Журнал регистрация я знаю но это не то немного.
Вот как я придумал:

Сейчас сделал так процедура ПередОткрытием()

Код 1C v 8.х
 	Если ЭлементыФормы.Товары.Колонки.СчетПоставщика.ЭлементУправления <> Документы.СчетНаОплатуПоставщика Тогда
Сообщить("проба");

КонецЕсли;


но это не много не то, мне надо так:

Администратор, открывает ФормуСписка документа ВнутрениеЗаказы, если с этим документом происходили какие нибудь действия (создан новый, отредактирован, скопирован) то выдается открывается текстовый документ где написано:

19.11.2011
Пользователь: Петькин
Изменил: №000001
Колонка: счет фактура
-------------------
Пользователь: Пупкин
Создал: №00000019
-------------------
20.11.2011
Пользователь:Иванович
Изменил: №0000011
Колонка: счет фактура
Колонка: требование накладная

после того как Администратор закроет текстовый документ или 1С, то сообщение это удаляется (сохранять данные не надо), когда он открывает заново документа ВнутрениеЗаказы и если с этим документом происходили новые действия то опять открывается текстовый документ с информацией.
Ermak
24.11.2011 14:30Ответ № 11
Как сообщение построить чтобы информация выдавалась в столбик, так :

19.11.2011
Пользователь: Петькин
Изменил: №000001
Колонка: счет фактура
-------------------
Пользователь: Пупкин
Создал: №00000019
-------------------
E_Migachev
24.11.2011 19:02Ответ № 12
(11) Ermak, пример так:
Код 1C v 8.х
 Сообщить(Строка(ДатаИзмен)+Символы.ПС+"Пользователь: "+Строка(ИмяПользователя)+Символы.ПС+"Изменил: "+Строка(НомерДокум)+Символы.ПС+ "Колонка: "+Строка(счетф)+Символы.ПС+"-------------------");   
Ermak
24.11.2011 19:22Ответ № 13
А как проверить на заполнение в табличной части?
Вот для реквизитов такой метод

Код 1C v 8.х
 
Если ЗначениеЗаполнено (ЭлементыФормы.Реквизит.Значение) Тогда
Сообщить("Привет!");
КонецЕсли;
Ermak
25.11.2011 09:21Ответ № 14
Не понимает Переменная не определена (НомерДокум), ДатаИзмен и ИмяПользователя

Как изменить;
E_Migachev
25.11.2011 10:58Ответ № 15
(14) Ermak, так ты замени реквезиты на свои, а табличную часть можно проверить через количество()
Ermak
25.11.2011 11:42Ответ № 16
Покажите как проверить через количество?
E_Migachev
25.11.2011 12:14Ответ № 17
(16) Ermak,
Код 1C v 8.х
 Если ИмяТЧ.Количество()>0 Тогда
Сообщить("В ТЧ несколько строк!");
КонецЕсли;
Ermak
25.11.2011 12:31Ответ № 18
Мне надо проверить колонку, например СчетПоставщика, а не все колонки
Изменено 25.11.11 12:31:34
E_Migachev
25.11.2011 13:28Ответ № 19
(18) Ermak, в каждой строке или поределенной?
Ermak
25.11.2011 13:37Ответ № 20
в каждой строке
E_Migachev
25.11.2011 14:16Ответ № 21
тогда перебирай строки табличной части и проверяй ЗначениеЗаполнено в этой колонке
Ermak
25.11.2011 14:26Ответ № 22
я не знаю как, вот и прошу пример
E_Migachev
25.11.2011 15:34Ответ № 23
как-то так:
Код 1C v 8.х
 Для Каждого Стр Из ИмяТЧ Цикл
Если ЗначениеЗаполнено (Стр.СчетПоставщика) Тогда
Сообщить("СчетПоставщика - заполнено");
КонецЕсли;
КонецЦикла;
Ermak
25.11.2011 16:02Ответ № 24
(23) E_Migachev, Этот код вообще не подходит, выдает ошибку, надо Значение написать а его нет.
E_Migachev
25.11.2011 16:37Ответ № 25
(24) Ermak, предыдущий код правильный, вот еще 100% рабочий код:
Проверка заполнения элементов табличной части документа:
Код 1C v 8.х
 // В данном примере - мы перебираем все документы РеализацияТоваровУслуг
// и в каждом документе в табличной части Товары проверяем заполнение реквизита Номенклатура

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

Изменено 25.11.11 16:37:48
Ermak
25.11.2011 17:05Ответ № 26
Спасибо большое!!!
Вот что получилось:

Код 1C v 8.х
 Док = Документы.ВнутреннийЗаказ.Выбрать();

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

КонецЕсли;
КонецЦикла;
КонецЦикла;


Открыл документ и выдала такое сообщение:

Получилось!!!!!Внутренний заказ К0000000003 от 13.11.2011 14:20:29
----------
Получилось!!!!!Внутренний заказ К0000000004 от 13.11.2011 14:20:41
----------
Получилось!!!!!Внутренний заказ К0000000004 от 13.11.2011 14:20:41
----------
Получилось!!!!!Внутренний заказ К0000000005 от 13.11.2011 14:20:57
----------
Получилось!!!!!Внутренний заказ К0000000005 от 13.11.2011 14:20:57
----------
Получилось!!!!!Внутренний заказ К0000000006 от 13.11.2011 14:21:07
----------

А как сделать чтобы выдавала сообщение только по данному документу а не по всем?
E_Migachev
25.11.2011 17:20Ответ № 27
код:
Код 1C v 8.х
 Док = Документы.ВнутреннийЗаказ.Выбрать();		   
Пока Док.Следующий()Цикл
//..............
это перебор все документов ВнутреннийЗаказ
убери это код а переменной Док присвой нужный тебе документ
Ermak
25.11.2011 22:19Ответ № 28
Я имел ввиду, вот щас открываю документ и появляется сообщение по всем документам а мне надо чтобы сообщение появлялось именно по данному документу который открываю.
Как тогда написать, не могу понять
Изменено 25.11.11 22:19:56
Ermak
27.11.2011 16:54Ответ № 29
Написал тут код и выдает ошибку

{Документ.ВнутреннийЗаказ.Форма.ФормаДокумента.Форма(519)}: Итератор для значения не определен
Для Каждого ТекущаяСтрока Из МояТЗ Цикл


Код 1C v 8.х
 	МояТЗ = ЭлементыФормы.Товары ;
Для Каждого ТекущаяСтрока Из МояТЗ Цикл
Сообщить(" ======= Строка № " + МояТЗ.Индекс(ТекущаяСтрока) + " =======" + Символы.ПС);

Для Каждого ТекущаяКолонка Из МояТЗ.Колонки Цикл
Сообщить(ТекущаяКолонка.Имя + ": " + ТекущаяСтрока[ТекущаяКолонка.Имя]);
КонецЦикла;

Сообщить(" ");
КонецЦикла;


Как исправить ошибку?

Исправил ваш код и тоже ошибка

{Документ.ВнутреннийЗаказ.Форма.ФормаДокумента.Форма(509)}: Итератор для значения не определен
Для Каждого Колонка Из Док.Товары Цикл


Код 1C v 8.х
  Док = Документы.ВнутреннийЗаказ.Выбрать();

Для Каждого Колонка Из Док.Товары Цикл
Если Не ЗначениеЗаполнено(Колонка.СчетПоставщика) Тогда
Сообщить ("Получилось!!!!!" + Строка(Док.Ссылка)+Символы.ПС+"----------");

КонецЕсли;
КонецЦикла;


Что не так?
Изменено 27.11.11 17:02:04
E_Migachev
28.11.2011 15:21Ответ № 30
Убери Док = Документы.ВнутреннийЗаказ.Выбрать();,

Док - Это должна быть ссылка на конкретный документ, укажи его
Ermak
28.11.2011 15:43Ответ № 31
Не понимаю! *03

У меня документы ВнутреннийЗаказ, мне надо не на конкретный документ, а чтобы я открывал любую форму документа и мне выдавала по нему информация, информация будет по колонкам и строкам.

Строка0
Счет фактура : не заполнено
Строка1
Счет фактура: не заполнено
E_Migachev
29.11.2011 11:36Ответ № 32
(31) Ermak, ну и )
Цитата
а чтобы я открывал любую форму документа и мне выдавала по нему информация

значит в форме документа в ПриОткрытии пишешь:
Код 1C v 8.х
  Для Каждого Колонка Из Товары Цикл
Если Не ЗначениеЗаполнено(Колонка.СчетПоставщика) Тогда
Сообщить ("Получилось!!!!!" + Строка(ЭтотОбъект.Ссылка)+Символы.ПС+"----------");
КонецЕсли;
КонецЦикла;
Ermak
29.11.2011 17:35Ответ № 33
Почему то не работает?

Смысл такой, если Строка 0 не заполнена колонка Счет Поставщика и Товарная Накладная, пишет сообщение.
Вот такой код:

Код 1C v 8.х
 
Для Каждого Строка Из Товары Цикл
Сообщить("Строка № " + Товары.Индекс(Строка));
Для Каждого Колонка Из Товары Цикл
Если Не ЗначениеЗаполнено(Колонка.СчетПоставщика) Тогда
Сообщить ("Счет поставщик: не заполнен");
КонецЕсли;
Если Не ЗначениеЗаполнено(Колонка.ТоварнаяНакладная) Тогда
Сообщить ("Товарная накладная: не заполнена");
КонецЕсли;
КонецЦикла;
КонецЦикла;


Вот что он мне выдает

title

Строка 0 колонки заполнены а он пишет что не заполнено, что не так?
Ermak
29.11.2011 17:37Ответ № 34
и как можно сделать чтобы при каком нибудь условии строка стала синим цветом

Если .... Тогда
строка синия
E_Migachev
29.11.2011 18:43Ответ № 35
(35) Ermak, цвет меняется в процедуре ПриВыводеСтроки, а код должен быть такой:
Код 1C v 8.х
 Для Каждого Строка Из Товары Цикл
Сообщить("Строка № " + Товары.Индекс(Строка));
Если Не ЗначениеЗаполнено( Строка.СчетПоставщика) Тогда
Сообщить ("Счет поставщик: не заполнен");
КонецЕсли;
Если Не ЗначениеЗаполнено( Строка.ТоварнаяНакладная) Тогда
Сообщить ("Товарная накладная: не заполнена");
КонецЕсли;
КонецЦикла;
Ermak
29.11.2011 21:08Ответ № 36
Спасибо!
Ermak
29.11.2011 21:11Ответ № 37
Почему то код не работает!
В таблице две строки, в одной заполнена колонка СчетПоставщика, а в другой нет, желтым показывает в обе строчки, почему?

Код 1C v 8.х
 Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)


Для Каждого Строка Из Товары Цикл

Если Не ЗначениеЗаполнено( Строка.СчетПоставщика) Тогда
ОформлениеСтроки.Ячейки.НомерСтроки.ЦветФона = WEBЦвета.Желтый;
КонецЕсли;

КонецЦикла;
КонецПроцедуры
E_Migachev
30.11.2011 10:47Ответ № 38
(37) Ermak, вот как использовать ПриВыводеСтроки - Раскрасим разными цветами, взависимости от значения, ячейки списка документов, справочника соответсвенно твой код будет таким:
Код 1C v 8.х
 Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Если Не ЗначениеЗаполнено( ДанныеСтроки.СчетПоставщика) Тогда
ОформлениеСтроки.Ячейки.НомерСтроки.ЦветФона = WEBЦвета.Желтый;
КонецЕсли;
КонецПроцедуры
Ermak
30.11.2011 10:50Ответ № 39
Спасибо большое!
Ermak
30.11.2011 11:09Ответ № 40
Там можно проверить колонку с булевским значением ?

Код 1C v 8.х
 ЗначениеЗаполнено( ДанныеСтроки.Самостоятельно)   


пытаю так проверить не реагирует
Изменено 30.11.11 11:10:16
Ermak
30.11.2011 11:20Ответ № 41
Можно так писать условие?
Смысл такой: Колонка Самостоятельно булевское значение, если стоит галочка и колонки ТоварнаяНакладная и ТребованиеНакладная не заполнены тогда выделяем ячейку желтым цветом.

Не работает

Код 1C v 8.х
 Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

Если ЗначениеЗаполнено( ДанныеСтроки.Самостоятельно) Тогда
ОформлениеСтроки.Ячейки.НомерСтроки.ЦветФона = WEBЦвета.Желтый;
ИначеЕсли Не ЗначениеЗаполнено( ДанныеСтроки.ТоварнаяНакладная) Тогда
ОформлениеСтроки.Ячейки.НомерСтроки.ЦветФона = WEBЦвета.Желтый;
ИначеЕсли Не ЗначениеЗаполнено( ДанныеСтроки.ТребованиеНакладная) Тогда
ОформлениеСтроки.Ячейки.НомерСтроки.ЦветФона = WEBЦвета.Желтый;

КонецЕсли;

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

Изменено 30.11.11 12:39:45
E_Migachev
30.11.2011 14:54Ответ № 42
Булево проверяется просто
Код 1C v 8.х
  Если ДанныеСтроки.Самостоятельно Тогда   
Ermak
30.11.2011 16:26Ответ № 43
А как можно проверить в ФормеСписка?
Если все колонки заполнены в ФормеДокумента тогда в ФормеСписка строчка желтого цвета а если не заполнены тогда красного.


И еще вопросик как ограничить доступ для пользователя Петров, Сидоров и Иванов, чтобы они могли только видеть это

Код 1C v 8.х
 Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

//Меняется цвет колонки НомерСтроки, если не заполнены колонки
Если ДанныеСтроки.Самостоятельно = Ложь и Не ЗначениеЗаполнено( ДанныеСтроки.СчетПоставщика)Тогда
ОформлениеСтроки.Ячейки.НомерСтроки.ЦветФона = WEBЦвета.Желтый;
ИначеЕсли ДанныеСтроки.Самостоятельно = Ложь и Не ЗначениеЗаполнено( ДанныеСтроки.ТоварнаяНакладная) Тогда
ОформлениеСтроки.Ячейки.НомерСтроки.ЦветФона = WEBЦвета.Желтый;
ИначеЕсли ДанныеСтроки.Самостоятельно = Ложь и Не ЗначениеЗаполнено( ДанныеСтроки.ТребованиеНакладная) Тогда
ОформлениеСтроки.Ячейки.НомерСтроки.ЦветФона = WEBЦвета.Желтый;
ИначеЕсли ДанныеСтроки.Самостоятельно и Не ЗначениеЗаполнено( ДанныеСтроки.СчетПоставщика) Тогда
ОформлениеСтроки.Ячейки.НомерСтроки.ЦветФона = WEBЦвета.Голубой;
ИначеЕсли ДанныеСтроки.Самостоятельно и Не ЗначениеЗаполнено( ДанныеСтроки.ТоварнаяНакладная) Тогда
ОформлениеСтроки.Ячейки.НомерСтроки.ЦветФона = WEBЦвета.Голубой;
КонецЕсли;

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

Изменено 30.11.11 16:49:18
E_Migachev
02.12.2011 14:57Ответ № 44
(43) Ermak, если хочешь в ФормеСписка, то нужно использовать ПриПолученииДанных в которой запросом выбираешь список документов с пустыми
для ограницения доступа используй Если ИмяПользователя()="Петров" Тогда
Ermak
03.12.2011 13:27Ответ № 45
А покажите пример запроса, с ними очень мало работал.

Смысл такой: Если в документе все колонки (Дата, Наименование, Цена, Сумма) заполнены тогда в форме списка строчка выделяется зеленым цветом, если нет тогда красным цветом.
E_Migachev
05.12.2011 12:44Ответ № 46
через поиск посмотри ПриПолученииДанных, вот один пример
Ermak
06.12.2011 10:12Ответ № 47
Не могу понять как обратиться к табличной части документа, вот к форме списка обратился

Код 1C v 8.х
 Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
ЦветКрасный = Новый Цвет(255,130,124);

Для Каждого ОформлениеСтроки ИЗ ОформленияСтрок Цикл
Если ЗначениеЗаполнено(ОформлениеСтроки.ДанныеСтроки.ДатаЗаказа) Тогда
ОформлениеСтроки.ЦветФона = ЦветКрасный;

КонецЕсли;

КонецЦикла;

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

А как проверить если в форме документа в табличной части Товары колонка Счет не заполнена.
E_Migachev
06.12.2011 12:15Ответ № 48
(47) Ermak, делай все как в этом примере, т.е.:
1. получаешь список документов
2. делаешь запрос с условием отбора по пустому счету и по списку документов
3. обрабатывая результат запроса помечаешь строки списка документов
Ermak
06.12.2011 12:58Ответ № 49
Я в этом примере не могу понять как обращаемся к таблице значений!!!!
E_Migachev
06.12.2011 14:15Ответ № 50
(49) Ermak, какой еще тз?
Ermak
06.12.2011 15:12Ответ № 51
ой к Табличной части
E_Migachev
06.12.2011 18:23Ответ № 52
смотри комментарии к коду:
Код 1C v 8.х
  Перем Запрос;
Процедура ПриОткрытии()
//ЗАПРОС ДЛЯ ОБРАБОТКИ ДАННЫХ ТАБ ЧАСТИ
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Рег.Номенклатура,
| Рег.КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(
| ,
| Склад = &Склад
| И Номенклатура В (&Номенклатура)) КАК Рег";

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

Процедура СправочникСписокПриПолученииДанных(Элемент, ОформленияСтрок)
Если Элемент.Колонки.Остаток.Видимость Тогда
// ПЕРЕБИРАЕМ СТРОКИ ТАБЛИЧНОЙ ЧАСТИ И ПОМЕЩАЕМ ИХ В МАССИВ
МассивНоменклатуры = Новый Массив;
Для Каждого ОформлениеСтроки ИЗ ОформленияСтрок Цикл
Если НЕ ОформлениеСтроки.ДанныеСтроки.ЭтоГруппа Тогда
МассивНоменклатуры.Добавить(ОформлениеСтроки.ДанныеСтроки.Ссылка);
КонецЕсли;
КонецЦикла;
//УКАЗЫВАЕМ ПАРАМЕТР ДЛЯ ЗАПРОСА
Запрос.УстановитьПараметр("Номенклатура", МассивНоменклатуры);
тзОстатки = Запрос.Выполнить().Выгрузить();

// ВНОВЬ ПЕРЕБИРАЕМ СТРОКИ ТАБ ЧАСТИ И ДЛЯ КАЖДОЙ СТРОКИ В РЕЗУЛЬТАТЕ ЗАПРОСА ИЩЕМ ДАННЫЕ
Для Каждого ОформлениеСтроки ИЗ ОформленияСтрок Цикл
Если НЕ ОформлениеСтроки.ДанныеСтроки.ЭтоГруппа Тогда
СтрТЗ = тзОстатки.Найти(ОформлениеСтроки.ДанныеСтроки.Ссылка, "Номенклатура");
Если СтрТЗ <> Неопределено Тогда
ОформлениеСтроки.Ячейки.Остаток.УстановитьТекст(СтрТЗ.КоличествоОстаток);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Ermak
07.12.2011 09:37Ответ № 53
Вот что получилось

Код 1C v 8.х
 
Процедура ПриОткрытии()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВнутреннийЗаказ.Товары.(
| Ссылка,
| НомерСтроки,
| ЕдиницаИзмерения,
| ЕдиницаИзмеренияМест,
| Количество,
| КоличествоМест,
| Коэффициент,
| Номенклатура,
| Размещение,
| ХарактеристикаНоменклатуры,
| Цена,
| Стоимость,
| НомерПлатежа,
| СчетПоставщика,
| ТоварнаяНакладная,
| ТребованиеНакладная,
| Самостоятельно
| )
|ИЗ
| Документ.ВнутреннийЗаказ КАК ВнутреннийЗаказ";

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

Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)


// ПЕРЕБИРАЕМ СТРОКИ ТАБЛИЧНОЙ ЧАСТИ И ПОМЕЩАЕМ ИХ В МАССИВ
МассивСчет = Новый Массив;
Для Каждого ОформлениеСтроки ИЗ ОформленияСтрок Цикл
Если НЕ ОформлениеСтроки.ДанныеСтроки.СчетПоставщика Тогда
МассивСчет.Добавить(ОформлениеСтроки.ДанныеСтроки.Ссылка);
КонецЕсли;
КонецЦикла;
//УКАЗЫВАЕМ ПАРАМЕТР ДЛЯ ЗАПРОСА
Запрос.УстановитьПараметр("СчетПоставщика", МассивСчет);
тзОстатки = Запрос.Выполнить().Выгрузить();

// ВНОВЬ ПЕРЕБИРАЕМ СТРОКИ ТАБ ЧАСТИ И ДЛЯ КАЖДОЙ СТРОКИ В РЕЗУЛЬТАТЕ ЗАПРОСА ИЩЕМ ДАННЫЕ
Для Каждого ОформлениеСтроки ИЗ ОформленияСтрок Цикл
Если НЕ ОформлениеСтроки.ДанныеСтроки.СчетПоставщика Тогда
СтрТЗ = тзОстатки.Найти(ОформлениеСтроки.ДанныеСтроки.Ссылка, "СчетПоставщика");
Если СтрТЗ <> Неопределено Тогда
Сообщить ("Привет!");
Иначе
Сообщить ("Пока!");
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры


Ругается на эту строчку

Поле объекта не обнаружено (СчетПоставщика)

Код 1C v 8.х
  Если НЕ ОформлениеСтроки.ДанныеСтроки.СчетПоставщика Тогда   



Что не так?
E_Migachev
07.12.2011 11:14Ответ № 54
потому что нет таких данных!
1ю в запросе укажи одбор по регистраторам и отбор по незаполненному полю! а потом код будет таким:
Код 1C v 8.х
  Для Каждого ОформлениеСтроки ИЗ ОформленияСтрок Цикл
СтрТЗ = тзОстатки.Найти(ОформлениеСтроки.ДанныеСтроки.Ссылка, "Ссылка");
Если СтрТЗ <> Неопределено Тогда
Сообщить ("Привет!");
Иначе
Сообщить ("Пока!");
КонецЕсли;
КонецЕсли;
КонецЦикла;
Ermak
08.12.2011 08:44Ответ № 55
(54) E_Migachev, не получается у меня, есть может какая нибудь информация. В инете покопал попробовал бред какой то получается.

Вот что получается с ошибкой Поле объекта не обнаружено (Товары)


Код 1C v 8.х
 
Процедура ПриОткрытии()
Запрос = Новый Запрос;
Запрос.Текст =

"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВнутреннийЗаказТовары.СчетПоставщика
|ИЗ
| Документ.ВнутреннийЗаказ.Товары КАК ВнутреннийЗаказТовары
|ГДЕ
| ВнутреннийЗаказТовары.СчетПоставщика = &СчетПоставщика";

Запрос.УстановитьПараметр("СчетПоставщика", Документы.ВнутреннийЗаказ.ПустаяСсылка());
КонецПроцедуры

Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
Для Каждого ОформлениеСтроки ИЗ ОформленияСтрок Цикл
СтрТЗ = ОформлениеСтроки.Товары.Найти(ОформлениеСтроки.ДанныеСтроки.СчетПоставщика, "СчетПоставщика");
Если СтрТЗ <> Неопределено Тогда
Сообщить ("Привет!");
Иначе
Сообщить ("Пока!");

КонецЕсли;
КонецЦикла;
КонецПроцедуры



Как правильно обратиться к табличной части Товары
Изменено 08.12.11 09:55:22
E_Migachev
15.12.2011 18:20Ответ № 56
(55) Ermak, что-то тут совсем неправильно!
Давай так: ты хочешь чтобы в списке документов были как-то помечены документы у которых в табличной части не заполнено поле счет! Так?
Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.