Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
26 сен 2021, 08:55

Помощь с кодом (документ ТЧ - справочник)

Автор Алексей_1985_06, 16 янв 2020, 20:48

0 Пользователей и 1 гость просматривают эту тему.

Алексей_1985_06

Ребят подскажите как решить данный вопрос? Конфа самописная 8.3 УФ. Вот собственно он:
Имеется документ "ПрисвоениеВоинскихЗваний" который при проведении делает запись в ТЧ "ВоинскиеЗвания" справочника "ЛичныйСостав", бывает необходимость присвоения воинских званий сразу нескольким лицам - одним приказом, для чего на форме документа создан реквизит "НесколькоВоеннослужащих" имеющий тип - булево, при его значении = Истина, становиться видимой ТЧ "ПереченьПрисвоенныхЗваний". Так вот, необходимо сделать, так что бы при выборе в этой ТЧ нескольких лиц, этот документ провелся и сделал записи в ТЧ справочника "ЛичныйСостав" для соответствующих лиц.
Реализовал так:
Первая часть работает, а вот со второй проблемы... Прошу знатоков подсказать как исправить для работоспособного состояния!!!

&НаСервере
Процедура ИзменитьДанныеСправочникаНаСервере()
// ПРОВЕДЕНИЕ ДОКУМЕНТА ДЛЯ ОДНОГО ЧЕЛОВЕКА
ИзмСправочник = Объект.ФамилияИмяОтчество.ПолучитьОбъект();
НоваяСтрока = ИзмСправочник.ВоинскиеЗвания.Добавить();  // Добавляем новую строку в ТЧ "ВоинскиеЗвания"
НоваяСтрока.ВоинскоеЗвание = Объект.ВоинскоеЗвание;
НоваяСтрока.ДатаПриказа = Объект.ДатаПриказа;
НоваяСтрока.НомерПриказа = Объект.НомерПриказа;
НоваяСтрока.ЧейПриказ = Объект.ЧейПриказ;
НоваяСтрока.Коррекция = ИмяПользователя();
ИзмСправочник.Записать();
КонецЕсли;


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


Ошибка: {Документ.ПрисвоениеВоинскихЗваний.Форма.ФормаДокумента.Форма(67)}: Ошибка при получении значения атрибута контекста (ТекущиеДанные)
ТЧ = Элементы.ПереченьПрисвоенныхЗваний.ТекущиеДанные;
по причине: Текущие данные таблицы недоступны на сервере

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ИзменитьДанныеСправочникаНаСервере();
КонецПроцедуры


DmitriyF

Цитата: Алексей_1985_06 от 16 янв 2020, 20:48
Ребят подскажите как решить данный вопрос? Конфа самописная 8.3 УФ. Вот собственно он:
Имеется документ "ПрисвоениеВоинскихЗваний" который при проведении делает запись в ТЧ "ВоинскиеЗвания" справочника "ЛичныйСостав", бывает необходимость присвоения воинских званий сразу нескольким лицам - одним приказом, для чего на форме документа создан реквизит "НесколькоВоеннослужащих" имеющий тип - булево, при его значении = Истина, становиться видимой ТЧ "ПереченьПрисвоенныхЗваний". Так вот, необходимо сделать, так что бы при выборе в этой ТЧ нескольких лиц, этот документ провелся и сделал записи в ТЧ справочника "ЛичныйСостав" для соответствующих лиц.
Реализовал так:
Первая часть работает, а вот со второй проблемы... Прошу знатоков подсказать как исправить для работоспособного состояния!!!

&НаСервере
Процедура ИзменитьДанныеСправочникаНаСервере()
// ПРОВЕДЕНИЕ ДОКУМЕНТА ДЛЯ ОДНОГО ЧЕЛОВЕКА
ИзмСправочник = Объект.ФамилияИмяОтчество.ПолучитьОбъект();
НоваяСтрока = ИзмСправочник.ВоинскиеЗвания.Добавить();  // Добавляем новую строку в ТЧ "ВоинскиеЗвания"
НоваяСтрока.ВоинскоеЗвание = Объект.ВоинскоеЗвание;
НоваяСтрока.ДатаПриказа = Объект.ДатаПриказа;
НоваяСтрока.НомерПриказа = Объект.НомерПриказа;
НоваяСтрока.ЧейПриказ = Объект.ЧейПриказ;
НоваяСтрока.Коррекция = ИмяПользователя();
ИзмСправочник.Записать();
КонецЕсли;


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


Ошибка: {Документ.ПрисвоениеВоинскихЗваний.Форма.ФормаДокумента.Форма(67)}: Ошибка при получении значения атрибута контекста (ТекущиеДанные)
ТЧ = Элементы.ПереченьПрисвоенныхЗваний.ТекущиеДанные;
по причине: Текущие данные таблицы недоступны на сервере

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ИзменитьДанныеСправочникаНаСервере();
КонецПроцедуры

Может попробовать ЭтотОбъект.ПереченьПрисвоенныхЗваний.ТекущиеДанные?

LexaK

Немного умора.
Везет же человеку! :D Такую плевую задачку с присвоением воинских званий, уже полгода делает!
прямо завидую, где такие фирмы берутся, где не давят на программиста: Скорей-скорей, вчера-вчера еще надо было
ответ Понравился? (в смысле пригодился?)

Алексей_1985_06

Цитата: LexaK от 17 янв 2020, 09:00
Немного умора.
Везет же человеку! :D Такую плевую задачку с присвоением воинских званий, уже полгода делает!
прямо завидую, где такие фирмы берутся, где не давят на программиста: Скорей-скорей, вчера-вчера еще надо было
Я не программист а только учусь, и ни на какую фирму не работаю, все для только для себя и учебного процесса...
Добавлено: 17 янв 2020, 18:40


Цитата: DmitriyF от 16 янв 2020, 22:44
Цитата: Алексей_1985_06 от 16 янв 2020, 20:48
Ребят подскажите как решить данный вопрос? Конфа самописная 8.3 УФ. Вот собственно он:
Имеется документ "ПрисвоениеВоинскихЗваний" который при проведении делает запись в ТЧ "ВоинскиеЗвания" справочника "ЛичныйСостав", бывает необходимость присвоения воинских званий сразу нескольким лицам - одним приказом, для чего на форме документа создан реквизит "НесколькоВоеннослужащих" имеющий тип - булево, при его значении = Истина, становиться видимой ТЧ "ПереченьПрисвоенныхЗваний". Так вот, необходимо сделать, так что бы при выборе в этой ТЧ нескольких лиц, этот документ провелся и сделал записи в ТЧ справочника "ЛичныйСостав" для соответствующих лиц.
Реализовал так:
Первая часть работает, а вот со второй проблемы... Прошу знатоков подсказать как исправить для работоспособного состояния!!!

&НаСервере
Процедура ИзменитьДанныеСправочникаНаСервере()
// ПРОВЕДЕНИЕ ДОКУМЕНТА ДЛЯ ОДНОГО ЧЕЛОВЕКА
ИзмСправочник = Объект.ФамилияИмяОтчество.ПолучитьОбъект();
НоваяСтрока = ИзмСправочник.ВоинскиеЗвания.Добавить();  // Добавляем новую строку в ТЧ "ВоинскиеЗвания"
НоваяСтрока.ВоинскоеЗвание = Объект.ВоинскоеЗвание;
НоваяСтрока.ДатаПриказа = Объект.ДатаПриказа;
НоваяСтрока.НомерПриказа = Объект.НомерПриказа;
НоваяСтрока.ЧейПриказ = Объект.ЧейПриказ;
НоваяСтрока.Коррекция = ИмяПользователя();
ИзмСправочник.Записать();
КонецЕсли;


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


Ошибка: {Документ.ПрисвоениеВоинскихЗваний.Форма.ФормаДокумента.Форма(67)}: Ошибка при получении значения атрибута контекста (ТекущиеДанные)
ТЧ = Элементы.ПереченьПрисвоенныхЗваний.ТекущиеДанные;
по причине: Текущие данные таблицы недоступны на сервере

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ИзменитьДанныеСправочникаНаСервере();
КонецПроцедуры

Может попробовать ЭтотОбъект.ПереченьПрисвоенныхЗваний.ТекущиеДанные?

Можно по подробнее, не совсем понял....
Добавлено: 17 янв 2020, 18:55


Цитата: LexaK от 17 янв 2020, 09:00
Немного умора.
Везет же человеку! :D Такую плевую задачку с присвоением воинских званий, уже полгода делает!
прямо завидую, где такие фирмы берутся, где не давят на программиста: Скорей-скорей, вчера-вчера еще надо было

Если для Вас это плевая задачка, будьте добры подсказать как решить вот такой вопрос:
При нажатии на кнопку в документе "Записать" - происходит запись самого документа и запись в ТЧ "ВоинскиеЗвания" справочника, но если после записи документа нужно что то изменить (например не правильно забили номер приказ), то при изменении и нажатии на кнопку "Провести и закрыть" - как сделать чтоб новый номер приказа записался в ТЧ справочника вместо старого (неправильного). Если не затруднит, подскажите пожалуйста!
Код на данный момент такой:
&НаСервере
Процедура ИзменитьДанныеСправочникаНаСервере()

ИзмСправочник = Объект.ФамилияИмяОтчество.ПолучитьОбъект(); // Получаем объект

// Определяем какое звание записано сейчас в ТЧ "воинские звания" справочника "Личный Состав"
ЗаписаноеЗвание = ПолучитьСтрокуТЧнаСервере(Объект.ФамилияИмяОтчество, "ВоинскиеЗвания", "ВоинскоеЗвание", 100);
Если ЗаписаноеЗвание = Объект.ВоинскоеЗвание Тогда    
Сообщить("Внимание!!! Воинское звание" + " " + Объект.ВоинскоеЗвание + " " + "уже записано в карточку")
Иначе
НоваяСтрока = ИзмСправочник.ВоинскиеЗвания.Добавить();  // Добавляем новую строку в ТЧ "ВоинскиеЗвания"
НоваяСтрока.ВоинскоеЗвание = Объект.ВоинскоеЗвание;
НоваяСтрока.ДатаПриказа = Объект.ДатаПриказа;
НоваяСтрока.НомерПриказа = Объект.НомерПриказа;
НоваяСтрока.ЧейПриказ = Объект.ЧейПриказ;
НоваяСтрока.Коррекция = ИмяПользователя() + " | " + Строка(Формат(ТекущаяДата(),"ДЛФ=ДДВ"));
//Записывает звание в реквизит шапки, он скрытый поэтому его не видно на форме
// сделал это для того чтобы, на форме списка этображалось звание (т.к. оно не записывается из таблицы)
ИзмСправочник.ВоинскоеЗвание = Объект.ВоинскоеЗвание;
ИзмСправочник.Записать(); // записываем изменения в информационную базу
КонецЕсли;
КонецПроцедуры


&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
ИзменитьДанныеСправочникаНаСервере();
КонецПроцедуры

LexaK

вы учитесь чему-то неправильному, есть сложившиеся методы хранения и обработки данных в 1С
есть такие понятия
Документ, Ссылка документа, Запись документа, Проведение документа, Движенмя документа (записи в регистр) Регистратор и т.д.
если бы вы писали данные о присвоенных званиях как движения в Регистр сведений, у вас бы и вопросов таких не возникало как изменить неправильную запись,
в вашем случае, вам уже давали подсказку, вы ее либо не поняли, либо проигнорировали.
вот еще раз
в ТЧ справочника добавьте колонку Документ (регистратор) тип, Ссылка Ваш документ Приказа, при проведении документа
1.Удаляете все записи из ТЧ справочника с Ссылкой этого приказа (при записи в регистры, 1С это может делать автоматически)
2.Создаете новые(правильные) записи в ТЧ справочника
даже не знаю поймете ли
ответ Понравился? (в смысле пригодился?)

Алексей_1985_06

Цитата: LexaK от 18 янв 2020, 11:20
вы учитесь чему-то неправильному, есть сложившиеся методы хранения и обработки данных в 1С
есть такие понятия
Документ, Ссылка документа, Запись документа, Проведение документа, Движенмя документа (записи в регистр) Регистратор и т.д.
если бы вы писали данные о присвоенных званиях как движения в Регистр сведений, у вас бы и вопросов таких не возникало как изменить неправильную запись,
в вашем случае, вам уже давали подсказку, вы ее либо не поняли, либо проигнорировали.
вот еще раз
в ТЧ справочника добавьте колонку Документ (регистратор) тип, Ссылка Ваш документ Приказа, при проведении документа
1.Удаляете все записи из ТЧ справочника с Ссылкой этого приказа (при записи в регистры, 1С это может делать автоматически)
2.Создаете новые(правильные) записи в ТЧ справочника
даже не знаю поймете ли
Извините за навязчивость, Ваше раздражение понятно, но все же :nhsrm::nhsrm::nhsrm:
Прошу "добить" данную тему!
Опишу: Есть справочник "ЛичныйСостав" в нем ТЧ "ВоинскиеЗвания", в эту ТЧ при переводе человека, (в ручную) записываются все воинские звания которые он получил с момента начала службы - до настоящего времени, далее во время службы ему присваивается очередное звание, т.е оформляется документ "ПрисвоениеВоинскихЗваний" - запись в регистр производится (Регистр сведений есть: ПрисвоенныеЗвания, измерения ФИО и ЛичныйНомер), теперь это очередное звание записывается новой строкой в ТЧ "ВоинскиеЗвания" справочника "ЛичныйСостав". Но записывать по одному человеку - затратно по времени, я сделал ТЧ в документе (см.Вложение), где измеными будут только поля ФИО и Звание, а остальные поля будут с одинаковыми значениями (потому что одним приказом - присваиваются разные звания разным людям), так вот как сделать чтоб новые записи в ТЧ "ВоинскиеЗвания" справочника "ЛичныйСостав" производились для выбранных лиц (ФИО). 

LexaK

Цитироватьдаже не знаю поймете ли
не поняли! жаль :dfbsdfbsdf:
ответ Понравился? (в смысле пригодился?)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск